diff --git a/README.md b/README.md
index 58bb86f..409c144 100644
--- a/README.md
+++ b/README.md
@@ -127,21 +127,15 @@ Alle Geräte die du in FHEM eingebunden hast, können innerhalb von **FHEMApp**
*Beispiel für ein Panel*
## neues Panel erstellen
-Über die Einstellungen in **FHEMApp** kannst du neue Panels erstellen. Nachdem du ein **neues Panel** mit einem **eindeutigem Name** erstellt hast, solltest du dieses zuerst mit mindestens einem FHEM-Device verbinden.
-
-Du kannst ein Panel auch mit mehreren FHEM-Devices verbinden. Jedes FHEM-Device, welches Du mit dem Panel verbindest benötigt dabei einen **Schlüssel**, der innerhalb des Panels eindeutig sein muss. Insbesondere bei der Verwendung von [Vorlagen](#vorlagen) wird somit gewährleistet, dass das gewünschte FHEM-Device angesprochen wird.
-
-**Beispiel:**
-|Panel 1|Panel 2|Beschreibung|
-|---|---|---|
-|`thermo:temp.eg.wohnen`|`thermo:temp.og.buero`|verbindet das erste Panel mit dem FHEM-Device `temp.eg.wohnen` und ein zweites Panel mit dem FHEM-Device `temp.og.buero`. Für die Konfiguration der Elemente im Panel wurde der Schlüssel `thermo` vergeben.|
-|`valve:heiz.eg.wohnen`|`valve:heiz.og.buero`|verbindet das erste Panel mit dem FHEM-Device `heiz.eg.wohnen` und ein zweites Panel mit dem FHEM-Device `heiz.og.buero`. Für die Konfiguration der Elemente im Panel wurde der Schlüssel `valve` vergeben.|
-
-Nun kann man in der passenden [Vorlage](#vorlagen) oder in den beiden [Panels](#panels) die vergebenen Schlüssel `thermo` bzw. `valve` zum Abrufen von FHEM Readings oder dem Senden von FHEM set-Befehlen verwenden. Ein FHEM set-Befehl kann nun wie folgt geschrieben werden `set valve pct 50`.
+Über die Einstellungen in **FHEMApp** kannst du neue Panels erstellen. Nachdem du ein **neues Panel** mit einem **eindeutigem Name** erstellt hast, wählst du eine passende [Vorlage](#vorlagen) aus und verbindest das Panel mit mindestens einem FHEM Device. Je nach Vorlage kann es auch sein, dass du mehrere FHEM Devices verbinden musst.
![](./docs/media/example_element_definition_devices.png)
*Beispiel für die Definition von Devices in einem Panel*
+Alternativ kannst du ein Panel auch ohne Verwendung einer Vorlage (Template) konfigurieren. Hier musst du die **erweiterte Ansicht** aktivieren und kannst nur alle Elemente des Panels manuell konfigurieren.
+
+Wenn du bei Verwendung einer Vorlage einzelne Elemente nur für das aktuelle Panel anpassen möchtest, kannst du ebenfalls die **erweiterte Ansicht** aktivieren.
+
## Konfiguration der Elemente
Die Konfiguration der Elemente in den verschiedenen Bereichen des Panels erfolgt nach einem einheitlichen Definitions-Schema.
`reading:value:prop1:prop2:...`
@@ -219,14 +213,14 @@ Ersetzungen bieten die Möglichkeit, Werte innerhalb von Element-Definitionen zu
|`state::%t(on)`|on|an|wenn unter [Sprachen](#sprachen) für die Variable `on` im deutschen Sprachschema `an` hinterlegt wurde|
|`temp::Temperatur\: %n(1)°C`|18.7|Temperatur: 18,7°C|
## Panel allgemein
-In den allgemeinen Einstellungen für Panels wird festgelegt, mit welchen FHEM **Devices** das Panel verknüpft ist und ob eine **Vorlage** zur Darstellung des Panels verwendet werden soll. Weiterhin wird festgelegt, unter welchen Navigationspunkten das Panel zur Anzeige gebracht werden soll. Zusätzlich können verschiedene Einstellung zur Darstellung des Panels erfolgen.
+In den allgemeinen Einstellungen für Panels wird festgelegt, ob eine **Vorlage** zur Darstellung des Panels verwendet werden soll und mit welchen FHEM **Devices** das Panel verknüpft ist. Weiterhin wird festgelegt, unter welchen Navigationspunkten das Panel zur Anzeige gebracht werden soll. Zusätzlich können verschiedene Einstellung zur Darstellung des Panels erfolgen.
-Wenn für ein Panel keine [Vorlage](#vorlagen) verwendet werden soll, oder bestimmte Einstellungen der Vorlage für das Panel angepasst werden sollen, kann die **erweitere Konfiguration** aktiviert werden.
+Wenn für ein Panel keine [Vorlage](#vorlagen) verwendet werden soll, oder bestimmte Einstellungen der Vorlage für das Panel angepasst werden sollen, kann die **erweiterte Ansicht** aktiviert werden.
### Element deviceskeys
Die *devicekeys* werden in [Vorlagen](#vorlagen) definiert. Ein *devicekey* ist eine Variable, welche in einer Vorlage (Template) an Stelle eines konkreten FHEM-Devicenamen verwendet wird. Bei der späteren Verwendung der Vorlage, wird in der Panelkonfiguration jeder *devicekey* einem konkreten FHEM-Device zugeordnet.
-Somit können [Vorlagen](#vorlagen) für beliebig viele Panels verwendet werden. Die Defintion für einen Button, der einen bestimmten Befehl an FHEM sendet wird dann beispielsweise in Form von `set switch on` statt `set on` in der betreffenden Definition hinterlegt. Die Variable `switch` wird deshalb als *devicekey* definiert und später in der Panelkonfigurtation mit dem tatsächlichen FHEM-Device `` verknüpft.
+Somit können [Vorlagen](#vorlagen) für beliebig viele Panels verwendet werden. Die Defintion für einen Button, der einen bestimmten Befehl an FHEM sendet wird dann beispielsweise in Form von `set switch on` statt `set on` in der betreffenden Definition hinterlegt. Die Variable `switch` wird dabei als *devicekey* definiert und später in der Panelkonfigurtation mit dem tatsächlichen FHEM-Device `` verknüpft.
Für jede Vorlage muss mindestens ein *devicekey* festgelegt werden.
@@ -245,7 +239,7 @@ Liste der FHEM-Devices, die mit dem Panel verknüpft sind. Es muss mindestens ei
|key|eindeutiger Schlüssel, der für Element-Definitionen benötigt wird|
|device|Name des FHEM Device, mit dem das Panel verknüpft ist|
### Element template
-Optional kann eine [Vorlage](#vorlagen) ausgewählt werden, die für die Darstellung des Panels verwendet werden soll. Elemente die im Panel (unter **erweiterte Konfiguration**) definiert wurden, behalten ihre Gültigkeit auch wenn eine Vorlage verwendet wird. In diesem Fall werden die betreffenden Definitionen aus der Vorlage ignoriert.
+Optional kann eine [Vorlage](#vorlagen) ausgewählt werden, die für die Darstellung des Panels verwendet werden soll. Elemente die im Panel (unter **erweiterte Ansicht**) definiert wurden, behalten ihre Gültigkeit auch wenn eine Vorlage verwendet wird. In diesem Fall werden die betreffenden Definitionen aus der Vorlage ignoriert.
### Element navigation
Liste der Navigationspunkte, unter denen das Panel angezeigt wird. Im Gegensatz zu normalen Definitionen, werden hier **alle** Definitionen verwendet, deren Bedingungen zutreffen.
@@ -614,13 +608,13 @@ Es wird ein Text und/oder ein Icon in einem der 6 Spalten (left1, left2, mid1, m
|icon||Icon das agezeigt wird. (siehe auch [mdi Icons](https://pictogrammers.com/library/mdi/) und [Icon Mapping](#element-iconmap)) [string]|
|color||legt die Farbe für das Icon fest. (siehe auch [Farben](#farben)) [string]|
# Vorlagen
-Damit Konfigurationen nicht für jedes Panel erstellt werden müssen, können diese auch als Vorlage (template) erstellt und abgespeichert werden. Somit kann man Vorlagen für alle FHEM-Devices eines Typs (z.B. Schalter, Rolladenaktoren, Fensterkontakte, Thermostate...) erstellen.
+Mit **FHEMApp** werden verschiedene [Standardvorlagen](#standardvorlagen) bereitgestellt, welche direkt verwendet werden können.
+
+Zudem gibt es in **FHEMApp** die Möglichkeit eigene Vorlagen (templates) zu erstellen. Somit kann man Vorlagen für alle FHEM-Devices eines Typs (z.B. Schalter, Rolladenaktoren, Fensterkontakte, Thermostate...) erstellen.
Nachdem eine Vorlage erstellt wurde, kann diese den gewünschten Panels in der [Panelkonfiguration](#panelkonfiguration) unter den [allgemeinen Einstellungen](#panel-allgemein) im Element [template](#element-template) zugewiesen werden.
Grundsätzlich können alle Elemente, die in einem Panel konfigurierbar sind auch in Vorlagen konfiguriert werden.
-
-Mit **FHEMApp** werden verschiedene [Standardvorlagen](#standardvorlagen) bereitgestellt, welche direkt verwendet werden können.
# Navigation
Das Navigationsmenü von **FHEMApp** kann individuell angepasst werden. So ist es möglich die Reihenfolge der einzelnen Navigationspunkte festzulegen, Navigationspunkte mit einem Icon zu versehen oder alternative Beschriftungen für die Navigationspunkte festzulegen.
@@ -661,8 +655,14 @@ Neben festen Sprachvariablen kann die Ersetzung `%t()` auch mit den Werten von F
Mit **FHEMApp** werden verschiedene Standardvorlagen bereitgestellt, die den Einstieg besonders einfach machen.
|Beschreibung|Beispiel|
|---|---|
-|Name: *switch* Devicekeys: *switch* Readings: *alias, **room**, group, **state*** Einsatz: Steckdosen JSON: [switch](./public/templates/switch.json)|![](./docs/media/template_switch.png)|
-|Name: *light* Devicekeys: *light* Readings: *alias, **room**, group, **state*** Einsatz: Lichtschalter JSON: [light](./public/templates/light.json)|![](./docs/media/template_light.png)|
-|Name: *dimmer* Devicekeys: *dimmer* Readings: *alias, **room**, group, **state**, **pct*** Einsatz: Dimmer JSON: [dimmer](./public/templates/dimmer.json)|![](./docs/media/template_dimmer.png)|
-|Name: *contact* Devicekeys: *contact* Readings: *alias, **room**, group, **state*** Einsatz: Tür-/Fensterkontakte JSON: [contact](./public/templates/contact.json)|![](./docs/media/template_contact.png)|
-|Name: *blind* Devicekeys: *blind* Readings: *alias, **room**, group, **state**, **pct**, motor* Einsatz: Jalousien JSON: [blind](./public/templates/blind.json)|![](./docs/media/template_blind.png)|
\ No newline at end of file
+|Name: *switch* Devicekeys: *switch* Readings: *alias, **room**, group, sortby, **state*** Einsatz: Steckdosen JSON: [switch](./public/templates/switch.json)|![](./docs/media/template_switch.png)|
+|Name: *light* Devicekeys: *light* Readings: *alias, **room**, group, sortby, **state*** Einsatz: Lichtschalter JSON: [light](./public/templates/light.json)|![](./docs/media/template_light.png)|
+|Name: *dimmer* Devicekeys: *dimmer* Readings: *alias, **room**, group, sortby, **state**, **pct*** Einsatz: Dimmer JSON: [dimmer](./public/templates/dimmer.json)|![](./docs/media/template_dimmer.png)|
+|Name: *contact* Devicekeys: *contact* Readings: *alias, **room**, group, sortby, **state*** Einsatz: Tür-/Fensterkontakte JSON: [contact](./public/templates/contact.json)|![](./docs/media/template_contact.png)|
+|Name: *blind* Devicekeys: *blind* Readings: *alias, **room**, group, sortby, **state**, **pct**, motor* Einsatz: Jalousien JSON: [blind](./public/templates/blind.json)|![](./docs/media/template_blind.png)|
+|Name: *thermostat* Devicekeys: *thermo, valve* Readings: *alias, **room**, group, sortby, measured-temp, **desired-temp**, humidity, R-dayTemp, R-nightTemp, tempState, controlMode, state (valve), pct (valve)* Einsatz: Heizungsthermostate JSON: [thermostat](./public/templates/thermostat.json)|![](./docs/media/template_thermostat.png)|
+|Name: *temperatur* Devicekeys: *temp* Readings: *alias, **room**, group, sortby, **temperature**, humidity* Einsatz: Temperatursensoren JSON: [temperatur](./public/templates/temperatur.json)|![](./docs/media/template_temperatur.png)|
+|Name: *smokedetector* Devicekeys: *smoke* Readings: *alias, **room**, group, sortby, **level*** Einsatz: Rauchmelder JSON: [smokedetector](./public/templates/smokedetector.json)|![](./docs/media/template_smokedetector.png)|
+|Name: *motiondetector* Devicekeys: *sensor* Readings: *alias, **room**, group, sortby, **motion*** Einsatz: Bewegungsmeldung JSON: [motiondetector](./public/templates/motiondetector.json)|![](./docs/media/template_motiondetector.png)|
+|Name: *sonosplayer* Devicekeys: *player* Readings: *alias, **room**, group, sortby, and other readings...* Einsatz: SONOS Player JSON: [sonosplayer](./public/templates/sonosplayer.json)|![](./docs/media/template_sonosplayer.png)|
+|Name: *proplanta* Devicekeys: *weather* Readings: *alias, **room**, group, sortby, and other readings...* Einsatz: Wettervorhersage (Proplanta) JSON: [proplanta](./public/templates/proplanta.json)|![](./docs/media/template_proplanta.png)|
\ No newline at end of file
diff --git a/docs/media/example_element_definition_devices.png b/docs/media/example_element_definition_devices.png
index 22b7387..cf77b7f 100644
Binary files a/docs/media/example_element_definition_devices.png and b/docs/media/example_element_definition_devices.png differ
diff --git a/docs/media/template_motiondetector.png b/docs/media/template_motiondetector.png
new file mode 100644
index 0000000..727e88e
Binary files /dev/null and b/docs/media/template_motiondetector.png differ
diff --git a/docs/media/template_proplanta.png b/docs/media/template_proplanta.png
new file mode 100644
index 0000000..c707099
Binary files /dev/null and b/docs/media/template_proplanta.png differ
diff --git a/docs/media/template_smokedetector.png b/docs/media/template_smokedetector.png
new file mode 100644
index 0000000..a3ce85f
Binary files /dev/null and b/docs/media/template_smokedetector.png differ
diff --git a/docs/media/template_sonosplayer.png b/docs/media/template_sonosplayer.png
new file mode 100644
index 0000000..983976b
Binary files /dev/null and b/docs/media/template_sonosplayer.png differ
diff --git a/docs/media/template_temperatur.png b/docs/media/template_temperatur.png
new file mode 100644
index 0000000..a9fd473
Binary files /dev/null and b/docs/media/template_temperatur.png differ
diff --git a/docs/media/template_thermostat.png b/docs/media/template_thermostat.png
new file mode 100644
index 0000000..e977bdb
Binary files /dev/null and b/docs/media/template_thermostat.png differ
diff --git a/public/CHANGELOG.md b/public/CHANGELOG.md
index e6d949e..83fb9e8 100644
--- a/public/CHANGELOG.md
+++ b/public/CHANGELOG.md
@@ -1,3 +1,10 @@
+# v4.0.37-beta (20.04.2024)
+## Settings
+- Selection of FHEM devices optimised
+## App
+- adding default templates
+## Core
+- load all default templates on inizialising FHEMApp
# v4.0.36-beta (17.04.2024)
## App
- providing default templates
diff --git a/public/templates/motiondetector.json b/public/templates/motiondetector.json
new file mode 100644
index 0000000..9bd051a
--- /dev/null
+++ b/public/templates/motiondetector.json
@@ -0,0 +1,49 @@
+{
+ "name": "motiondetector",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "sensor:FHEM motiondetector device"
+ ],
+ "navigation": [
+ "sensor-a-room::Räume->%s",
+ "sensor-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "sensor-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "sensor-a-alias:^.+$:%s",
+ "sensor-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "sensor-motion:off:0",
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "sensor-motion:off:bereit",
+ "::Bewegung erkannt"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "sensor-motion:off::mdi-motion-sensor-off",
+ ":::mdi-motion-sensor"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/templates/proplanta.json b/public/templates/proplanta.json
new file mode 100644
index 0000000..91eb97b
--- /dev/null
+++ b/public/templates/proplanta.json
@@ -0,0 +1,313 @@
+{
+ "name": "proplanta",
+ "author": "jemu75",
+ "date": "2023-12-08",
+ "panel": {
+ "devicekeys": [
+ "weather:FHEM Proplanta Device"
+ ],
+ "iconmap": [
+ "t1.gif:mdi-weather-sunny",
+ "t2.gif:mdi-weather-sunny",
+ "t3.gif:mdi-weather-partly-cloudy",
+ "t4.gif:mdi-weather-partly-cloudy",
+ "t5.gif:mdi-weather-cloudy",
+ "t6.gif:mdi-weather-partly-rainy",
+ "t7.gif:mdi-weather-rainy",
+ "t8.gif:mdi-weather-lightning",
+ "t9.gif:mdi-weather-partly-snowy",
+ "t10.gif:mdi-weather-snowy",
+ "t11.gif:mdi-weather-snowy-rainy",
+ "t12.gif:mdi-weather-hazy",
+ "t13.gif:mdi-weather-fog",
+ "t14.gif:mdi-weather-rainy",
+ "n1.gif:mdi-weather-night",
+ "n2.gif:mdi-weather-night",
+ "n3.gif:mdi-weather-night-partly-cloudy",
+ "n4.gif:mdi-weather-night-partly-cloudy",
+ "n5.gif:mdi-weather-cloudy",
+ "n6.gif:mdi-weather-partly-rainy",
+ "n7.gif:mdi-weather-rainy",
+ "n8.gif:mdi-weather-lightning",
+ "n9.gif:mdi-weather-partly-snowy",
+ "n10.gif:mdi-weather-snowy",
+ "n11.gif:mdi-weather-snowy-rainy",
+ "n12.gif:mdi-weather-hazy",
+ "n13.gif:mdi-weather-fog",
+ "n14.gif:mdi-weather-rainy"
+ ],
+ "expandable": [
+ "::true:false"
+ ],
+ "navigation": [
+ "weather-a-group::Gruppen->%s",
+ "weather-a-room::Räume->%s"
+ ]
+ },
+ "status": {
+ "bar": [
+ "weather-state:Tmin:100",
+ "::100:error"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "title": [
+ "weather-a-alias:^.+$:%s",
+ "weather-i-NAME::%s"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "weather-weather::%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "right2": "info",
+ "divider": [
+ "::true"
+ ]
+ },
+ "left1": {
+ "text": [
+ "::Luftdruck"
+ ],
+ "text2": [
+ "weather-pressure::%n()hPa"
+ ]
+ },
+ "right2": {
+ "text": [
+ "::Wind"
+ ],
+ "text2": [
+ "weather-wind::%n()km/h"
+ ]
+ }
+ },
+ {
+ "level": {
+ "divider": [
+ "::true"
+ ],
+ "left1": "info",
+ "mid": "info",
+ "right2": "info"
+ },
+ "left1": {
+ "text": [
+ "::Morgens"
+ ],
+ "icon": [
+ "weather-fc0_weatherMorningIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "::Mittags"
+ ],
+ "icon": [
+ "weather-fc0_weatherDayIcon::%s"
+ ]
+ },
+ "right2": {
+ "text": [
+ "::Abends"
+ ],
+ "icon": [
+ "weather-fc0_weatherEveningIcon::%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc0_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc0_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc0_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc0_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc0_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc1_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc1_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc1_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc1_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc1_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc2_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc2_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc2_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc2_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc2_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc3_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc3_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc3_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc3_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc3_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc4_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc4_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc4_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc4_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc4_tempMin::%n()°C"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "weather-weatherIcon:::%s"
+ ],
+ "mid1": [
+ "weather-state-ts::%d(time)"
+ ],
+ "right2": [
+ "weather-state:Tmin::mdi-sync",
+ ":::mdi-sync-off"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/templates/smokedetector.json b/public/templates/smokedetector.json
new file mode 100644
index 0000000..5c40767
--- /dev/null
+++ b/public/templates/smokedetector.json
@@ -0,0 +1,49 @@
+{
+ "name": "smokedetector",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "smoke:FHEM smokedetector device"
+ ],
+ "navigation": [
+ "smoke-a-room::Räume->%s",
+ "smoke-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "smoke-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "smoke-a-alias:^.+$:%s",
+ "smoke-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "smoke-level:2:n(0):error",
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "smoke-level:2:Rauchentwicklung",
+ "::bereit"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "level:2::mdi-fire",
+ "level:::mdi-smoke-detector"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/templates/sonosplayer.json b/public/templates/sonosplayer.json
new file mode 100644
index 0000000..5ab81b1
--- /dev/null
+++ b/public/templates/sonosplayer.json
@@ -0,0 +1,168 @@
+{
+ "name": "sonosplayer",
+ "author": "jemu75",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "player:FHEM Sonosplayer device"
+ ],
+ "navigation": [
+ "player-a-room::Räume->%s",
+ "player-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "player-a-sortby::%s"
+ ],
+ "expandable": [
+ "::true"
+ ]
+ },
+ "status": {
+ "title": [
+ "player-a-alias:^.+$:%s",
+ "player-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "player-presence:^(?!appeared):0:error",
+ "player-transportState:^(?!PLAYING):0",
+ "player-currentTrackPositionSimulatedPercent:0.1:%n()",
+ "player-transportState:PLAYING:100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "btn",
+ "right2": "btn"
+ },
+ "left1": {
+ "btn": [
+ "player-presence:disappeared:mdi-skip-previous:true",
+ "player-nextTrackHandle:.\\\\|:mdi-skip-previous",
+ "player-nextTrackHandle::mdi-skip-previous:true"
+ ],
+ "click": [
+ "::set player previous"
+ ]
+ },
+ "mid": {
+ "btn": [
+ "player-presence:disappeared:mdi-play:true::outlined",
+ "player-transportState:PLAYING:mdi-pause:false::outlined",
+ "player-transportState::mdi-play:false::outlined"
+ ],
+ "click": [
+ "player-transportState:PLAYING:set player Pause",
+ "::set player Play"
+ ],
+ "size": [
+ "::6"
+ ]
+ },
+ "right2": {
+ "btn": [
+ "player-presence:disappeared:mdi-skip-next:true",
+ "player-nextTrackHandle:\\\\|.:mdi-skip-next",
+ "player-nextTrackHandle::mdi-skip-next:true"
+ ],
+ "click": [
+ "::set player next"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "info",
+ "left1": null,
+ "show": [
+ "player-currentTitle:^.+$:true",
+ "player-currentSource:^.+$:true",
+ "::false"
+ ]
+ },
+ "mid": {
+ "text": [
+ "player-currentTitle:^.+$:%s:text-h6",
+ "player-currentSource:^.+$:%s:text-h6"
+ ],
+ "text2": [
+ "player-currentArtist:^.+$:%s ~ "
+ ],
+ "text3": [
+ "player-currentAlbum:^.+$:%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "slider",
+ "right2": "info"
+ },
+ "left1": {
+ "btn": [
+ "player-GroupMute:1:mdi-volume-high",
+ "player-GroupMute:0:mdi-volume-mute"
+ ],
+ "click": [
+ "player-GroupMute:1:set player mute 0",
+ "player-GroupMute:0:set player Mute 1"
+ ],
+ "size": [
+ "::2"
+ ]
+ },
+ "mid": {
+ "slider": [
+ "player-GroupVolume::set player GroupVolume %v:%n(0):on:0:40:1"
+ ]
+ },
+ "right2": {
+ "size": [
+ "::1"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "image",
+ "left1": "info",
+ "right2": "info",
+ "show": [
+ "player-currentAlbumArtURL:empty:false",
+ "::true"
+ ],
+ "height": [
+ "::350px"
+ ]
+ },
+ "mid": {
+ "image": [
+ "player-currentAlbumArtURL::%s"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "left1": {},
+ "right2": {}
+ }
+ ],
+ "info": {
+ "left1": [
+ "player-Mute:1::mdi-volume-off",
+ "player-transportState:PLAYING::mdi-play",
+ ":::mdi-pause"
+ ],
+ "mid1": [
+ "player-currentTrackProvider:.:%s"
+ ],
+ "right2": [
+ "player-currentTrackPositionSimulated::%s"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/templates/temperatur.json b/public/templates/temperatur.json
new file mode 100644
index 0000000..ec35a6e
--- /dev/null
+++ b/public/templates/temperatur.json
@@ -0,0 +1,53 @@
+{
+ "name": "temperatur",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "temp:FHEM temperatur device"
+ ],
+ "navigation": [
+ "temp-a-room::Räume->%s",
+ "temp-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "temp-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "temp-a-alias:^.+$:%s",
+ "temp-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "info",
+ "right2": "info"
+ },
+ "left1": {
+ "text": [
+ "temp-temperature::%n(1)°C"
+ ]
+ },
+ "right2": {
+ "text": [
+ "temp-humidity::%n()%"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "temp-temperature:0::mdi-thermometer",
+ "temp-temperature:::mdi-snowflake"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/public/templates/templates.json b/public/templates/templates.json
index adbb501..2856ff1 100644
--- a/public/templates/templates.json
+++ b/public/templates/templates.json
@@ -1,3 +1,3 @@
[
- "switch", "light", "dimmer", "contact", "blind"
+ "switch", "light", "dimmer", "contact", "blind", "thermostat", "temperatur", "smokedetector", "motiondetector", "sonosplayer", "proplanta"
]
\ No newline at end of file
diff --git a/public/templates/thermostat.json b/public/templates/thermostat.json
new file mode 100644
index 0000000..b7b48c1
--- /dev/null
+++ b/public/templates/thermostat.json
@@ -0,0 +1,238 @@
+{
+ "name": "thermostat",
+ "author": "jemu75",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "thermo:FHEM thermostat device",
+ "valve:FHEM Valve device"
+ ],
+ "navigation": [
+ "thermo-a-room::Räume->%s",
+ "thermo-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "thermo-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "thermo-a-alias:^.+$:%s",
+ "thermo-i-NAME::%s"
+ ],
+ "bar": [
+ "valve-pct:^.+$:%n(0)",
+ "valve-state:on:100",
+ "valve-state::0"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "info",
+ "right2": "btn"
+ },
+ "left1": {
+ "btn": [
+ "::mdi-minus"
+ ],
+ "divider": [
+ "::true"
+ ],
+ "click": [
+ "thermo-desired-temp:17.5:set thermo desired-temp %n(1,-0.5)"
+ ],
+ "longClick": [
+ "thermo-R-nightTemp:^.+$:set thermo desired-temp %n(1,0)"
+ ]
+ },
+ "mid": {
+ "divider": [
+ "::true"
+ ],
+ "text": [
+ "thermo-desired-temp:off:aus",
+ "thermo-desired-temp::%n(1)°C"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "btn": [
+ "::mdi-plus"
+ ],
+ "click": [
+ "thermo-desired-temp:25:",
+ "thermo-desired-temp::set thermo desired-temp %n(1,0.5)"
+ ],
+ "longClick": [
+ "thermo-R-dayTemp:^.+$:set thermo desired-temp %n(1,0)"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "chart",
+ "height": [
+ "280px"
+ ]
+ },
+ "mid": {
+ "options": {
+ "legend": {
+ "show": false
+ },
+ "yAxis": {
+ "show": false
+ },
+ "grid": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "series": [
+ {
+ "type": "gauge",
+ "center": [
+ "50%",
+ "65%"
+ ],
+ "startAngle": 200,
+ "endAngle": -20,
+ "min": 10,
+ "max": 30,
+ "splitNumber": 10,
+ "itemStyle": {
+ "color": "#FFAB91"
+ },
+ "progress": {
+ "show": true,
+ "overlap": false,
+ "width": 20
+ },
+ "pointer": {
+ "show": false
+ },
+ "axisLine": {
+ "lineStyle": {
+ "width": 20
+ }
+ },
+ "axisTick": {
+ "distance": -30,
+ "splitNumber": 4,
+ "lineStyle": {
+ "width": 2,
+ "color": "#999"
+ }
+ },
+ "splitLine": {
+ "distance": -36,
+ "length": 12,
+ "lineStyle": {
+ "width": 3,
+ "color": "#999"
+ }
+ },
+ "axisLabel": {
+ "distance": -10,
+ "color": "#999",
+ "fontSize": 10
+ },
+ "anchor": {
+ "show": false
+ },
+ "title": {
+ "show": false
+ },
+ "detail": {
+ "valueAnimation": true,
+ "width": "60%",
+ "lineHeight": 40,
+ "borderRadius": 8,
+ "offsetCenter": [
+ 0,
+ "-15%"
+ ],
+ "fontSize": 35,
+ "fontWeight": "bolder",
+ "color": "inherit"
+ }
+ },
+ {
+ "type": "gauge",
+ "center": [
+ "50%",
+ "65%"
+ ],
+ "startAngle": 200,
+ "endAngle": -20,
+ "min": 10,
+ "max": 30,
+ "itemStyle": {
+ "color": "#FD7347"
+ },
+ "progress": {
+ "show": true,
+ "width": 8
+ },
+ "pointer": {
+ "show": false
+ },
+ "axisLine": {
+ "show": false
+ },
+ "axisTick": {
+ "show": false
+ },
+ "splitLine": {
+ "show": false
+ },
+ "axisLabel": {
+ "show": false
+ },
+ "detail": {
+ "valueAnimation": true,
+ "width": "60%",
+ "lineHeight": 40,
+ "borderRadius": 8,
+ "offsetCenter": [
+ 0,
+ "15%"
+ ],
+ "fontSize": 20,
+ "fontWeight": "normal",
+ "color": "inherit"
+ }
+ }
+ ]
+ },
+ "serie": [
+ "thermo-desired-temp::%s:Soll:1:°C:gauge",
+ "thermo-measured-temp::%s:Temperatur:1:°C:gauge"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "mid1": [
+ "thermo-measured-temp::%n(1)°C:mdi-thermometer"
+ ],
+ "mid2": [
+ "thermo-humidity::%n()%:mdi-water"
+ ],
+ "left1": [
+ "thermo-tempState:day::mdi-weather-sunny",
+ "thermo-tempState:night::mdi-weather-night"
+ ],
+ "left2": [
+ "thermo-controlMode:auto::mdi-clock-time-four-outline"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
index 5dcf73d..c3ef3aa 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -42,7 +42,7 @@
-
+
diff --git a/src/components/SettingsProps.vue b/src/components/SettingsProps.vue
index ca01062..5eb6be1 100644
--- a/src/components/SettingsProps.vue
+++ b/src/components/SettingsProps.vue
@@ -151,6 +151,7 @@
section: 'panel',
panel: null,
devices: {},
+ fhemDevices: [],
preview: 'panel',
jsonDef: null,
jsonError: null
@@ -166,6 +167,21 @@
return idx !== -1 ? fhem.app.panelList[idx] : null
}
+ async function getFhemDevices() {
+ let threadId = fhem.thread(),
+ res = await fhem.request('json', 'jsonlist2 .* Name alias'),
+ alias
+
+ if(res && res.Results.length > 0) {
+ for(const dev of res.Results) {
+ alias = dev.Attributes.alias ? ' (' + dev.Attributes.alias + ')' : ''
+ settings.value.fhemDevices.push({ value: dev.Name, title: dev.Name + alias })
+ }
+ }
+
+ fhem.thread(threadId)
+ }
+
async function getReadings() {
let devParts,
res,
@@ -268,6 +284,8 @@
function copyBtn() {
toClipboard(settings.value.jsonDef)
}
+
+ getFhemDevices()
@@ -395,7 +413,8 @@
:type="type"
:typeIdx="settings.itemIdx"
:section="settings.section"
- :devices="settings.devices"
+ :devices="settings.devices"
+ :fhemDevices = "settings.fhemDevices"
:extended="settings.extended">
+ import { ref} from 'vue'
+ import { useFhemStore } from '@/stores/fhem'
+
+ const props = defineProps({
+ type: String,
+ typeIdx: Number,
+ fhemDevices: Array,
+ extended: Boolean
+ })
+
+ //type = panels|templates
+ //typeIdx = element im panels bzw. templates array
+
+ const fhem = useFhemStore()
+
+ const devices = ref([])
+
+ const newKey = ref(null)
+
+ function getDevices() {
+ let templateIdx = fhem.app.config.templates.map((e) => e.name).indexOf(fhem.app.config[props.type][props.typeIdx]['template']),
+ deviceKeys = fhem.getEl(fhem.app.config.templates, [templateIdx, 'panel', 'devicekeys']) || [],
+ panelDevices = fhem.app.config[props.type][props.typeIdx]['panel']['devices'] || [],
+ keyParts,
+ devParts,
+ deviceIdx
+
+ devices.value = []
+
+ if(deviceKeys.length > 0) {
+ for(const deviceKey of deviceKeys) {
+ keyParts = deviceKey.split(':')
+ devices.value.push({ key: keyParts[0], title: keyParts[1] ? keyParts[1] + ' (' + keyParts[0] + ')' : keyParts[0], device: null })
+ }
+ }
+
+ if(panelDevices.length > 0) {
+ for(const device of panelDevices) {
+ devParts = device.split(':')
+ deviceIdx = devices.value.map((e) => e.key).indexOf(devParts[0])
+
+ if(deviceIdx !== -1) {
+ devices.value[deviceIdx]['device'] = devParts[1]
+ } else {
+ devices.value.push({ key: devParts[0], title: devParts[0], device: devParts[1] })
+ }
+ }
+ }
+ }
+
+ function updateDeviceKeys() {
+ let result = []
+
+ for(const def of devices.value) if(def.device) result.push(def.key + ':' + def.device)
+
+ fhem.app.config[props.type][props.typeIdx]['panel']['devices'] = result
+ }
+
+ function addKey() {
+ fhem.app.config[props.type][props.typeIdx]['panel']['devices'].push(newKey.value + ':')
+ newKey.value = null
+ getDevices()
+ }
+
+ function deleteKey(idx) {
+ fhem.app.config[props.type][props.typeIdx]['panel']['devices'].splice(idx, 1)
+ getDevices()
+ }
+
+ getDevices()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/SettingsPropsItem.vue b/src/components/SettingsPropsItem.vue
index 5300bff..3cef1d8 100644
--- a/src/components/SettingsPropsItem.vue
+++ b/src/components/SettingsPropsItem.vue
@@ -28,14 +28,6 @@
const newDef = ref()
const assist = ref({
- devices: {
- show: false,
- keys: [],
- fhemDevices: [],
- key: null,
- device: null,
- idx: -1
- },
props: {
devices: [],
device: null,
@@ -94,64 +86,11 @@
}
}
- function getDevicesKeys() {
- let template,
- templateIdx,
- res = []
-
- template = fhem.app.config[props.type][props.typeIdx].template
-
- if(template) {
- templateIdx = fhem.app.config.templates.map((e) => e.name).indexOf(template)
-
- if(templateIdx !== -1) {
- res
- for(const key of fhem.app.config.templates[templateIdx].panel.devicekeys || []) {
- res.push(key.split(':')[0])
- }
- }
- }
-
- return res
- }
-
- async function getFhemDevices() {
- let res = await fhem.request('json', 'jsonlist2 .* Name alias'),
- alias,
- list = []
-
- if(res && res.Results.length > 0) {
- for(const dev of res.Results) {
- alias = dev.Attributes.alias ? ' (' + dev.Attributes.alias + ')' : ''
- list.push({ title: dev.Name + alias, value: dev.Name})
- }
- }
-
- return list
- }
-
- async function openAssist(idx) {
+ function openAssist(idx) {
let def,
defParts,
deviceIdx
- if(props.propAssist === 'devices') {
- assist.value.devices.keys = getDevicesKeys()
- assist.value.devices.fhemDevices = await getFhemDevices()
-
- if(idx !== -1) {
- def = fhem.app.config[props.type][props.typeIdx][props.section][props.prop][idx]
- assist.value.devices.key = def.split(':')[0],
- assist.value.devices.device = def.split(':')[1]
- } else {
- assist.value.devices.key = null,
- assist.value.devices.device = null
- }
-
- assist.value.devices.idx = idx
- assist.value.devices.show = true
- }
-
if(props.propAssist === 'props') {
assist.value.props.devices = Object.keys(props.propAssistDevices)
assist.value.props.device = null
@@ -186,17 +125,6 @@
}
function confirmAssist() {
- if(props.propAssist === 'devices') {
- if(assist.value.devices.idx !== -1) {
- fhem.app.config[props.type][props.typeIdx][props.section][props.prop][assist.value.devices.idx] = assist.value.devices.key + ':' + assist.value.devices.device
- } else {
- newDef.value = assist.value.devices.key + ':' + assist.value.devices.device
- addDef()
- }
-
- assist.value.devices.show = false
- }
-
if(props.propAssist === 'props') {
if(assist.value.props.props.length === 0) assist.value.props.props.push('')
assist.value.props.props.unshift(assist.value.props.val)
@@ -271,46 +199,6 @@
-
-
-
- {{ $t('_app.settings.assist.title') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('_app.settings.assist.ok') }}
- {{ $t('_app.settings.assist.cancel') }}
-
-
-
-
diff --git a/src/components/SettingsPropsList.vue b/src/components/SettingsPropsList.vue
index a13c06d..39173a1 100644
--- a/src/components/SettingsPropsList.vue
+++ b/src/components/SettingsPropsList.vue
@@ -2,12 +2,14 @@
import { computed } from 'vue'
import { useFhemStore } from '@/stores/fhem'
import SettingsPropsItem from './SettingsPropsItem.vue'
+ import SettingsPropsDevices from './SettingsPropsDevices.vue'
const props = defineProps({
type: String,
typeIdx: Number,
section: String,
devices: Object,
+ fhemDevices: Array,
extended: Boolean
})
@@ -16,7 +18,7 @@
const listItemDefs = {
panel: [
{ type: 'template', show: ['panels', 'extended.panels'], required: false, prop: 'template', help: 'element-template' },
- { type: 'defs', show: ['panels', 'extended.panels'], required: true, prop: 'devices', def: 'key:fhem_device', help: 'element-devices', assist: 'devices' },
+ { type: 'devices', show: ['panels', 'extended.panels'], required: true, prop: 'devices', help: 'element-devices' },
{ type: 'text', show: ['templates'], required: false, prop: 'author', def: 'text' },
{ type: 'text', show: ['templates'], required: false, prop: 'date', def: 'text' },
{ type: 'defs', show: ['templates'], required: true, prop: 'devicekeys', def: 'key:description', help: 'element-devicekeys' },
@@ -63,10 +65,6 @@
return res
})
- function loadDevices() {
- console.log('hier versuchen, funktion von parent auszuführen')
- }
-
function panelIcon(def) {
let res = {
icon: def.required ? 'mdi-alert-circle' : 'mdi-chevron-down',
@@ -122,6 +120,13 @@
variant="outlined"
class="pt-3">
+
+
+
{
navigation: [],
threads: [],
distTemplates: [],
- noConfig: null,
+ noConfig: null,
+ configLoaded: false,
isReady: false,
message: false,
currentView: null,
@@ -380,29 +381,28 @@ export const useFhemStore = defineStore('fhem', () => {
Object.assign(app.header, JSON.parse(JSON.stringify(app.config.header)))
changeDarkMode(theme.global.name.value)
+ app.configLoaded = true
+
log(4, 'Config loaded.', cfg)
return true
}
- //coreFunction load default Templates if needed
+ //coreFunction load default all Templates
async function loadDefaultTemplates() {
let distTemplate
app.distTemplates = await getJsonFile('./templates/templates.json')
app.distTemplates.sort((a, b) => (a > b) ? 1 : (b > a) ? -1 : 0)
-
- for (const panel of app.config.panels) {
- if(panel.template && app.config.templates.map((e) => e.name).indexOf(panel.template) === -1) {
- if(app.distTemplates.indexOf(panel.template) !== -1) {
- distTemplate = await getJsonFile('./templates/' + panel.template + '.json')
- if(distTemplate) {
- distTemplate.dist = true
- app.config.templates.push(distTemplate)
- }
-
+
+ for(const template of app.distTemplates) {
+ if(app.config.templates.map((e) => e.name).indexOf(template) === -1) {
+ distTemplate = await getJsonFile('./templates/' + template + '.json')
+ if(distTemplate) {
+ distTemplate.dist = true
+ app.config.templates.push(distTemplate)
}
}
- }
+ }
return true
}
diff --git a/www/fhemapp4/CHANGELOG.md b/www/fhemapp4/CHANGELOG.md
index e6d949e..83fb9e8 100644
--- a/www/fhemapp4/CHANGELOG.md
+++ b/www/fhemapp4/CHANGELOG.md
@@ -1,3 +1,10 @@
+# v4.0.37-beta (20.04.2024)
+## Settings
+- Selection of FHEM devices optimised
+## App
+- adding default templates
+## Core
+- load all default templates on inizialising FHEMApp
# v4.0.36-beta (17.04.2024)
## App
- providing default templates
diff --git a/www/fhemapp4/assets/DevicesView-9e7307a8.js b/www/fhemapp4/assets/DevicesView-7195683d.js
similarity index 86%
rename from www/fhemapp4/assets/DevicesView-9e7307a8.js
rename to www/fhemapp4/assets/DevicesView-7195683d.js
index ed59ba3..07d54dc 100644
--- a/www/fhemapp4/assets/DevicesView-9e7307a8.js
+++ b/www/fhemapp4/assets/DevicesView-7195683d.js
@@ -1 +1 @@
-import{u as f,c,r as p,o as n,a as u,w as i,b as d,d as h,F as v,e as w}from"./index-c99434e3.js";import{_ as x}from"./PanelCard-23faa282.js";const V={__name:"DevicesView",setup(g){const s=f(),m=c(()=>{let e=[];if(s.app.panelMaximized)e.push(s.app.panelMaximized);else{for(const t of s.app.panelView)s.handleDefs(s.app.panelList[t].panel.show,["show"],[!0]).show&&e.push(s.app.panelList[t]);e.sort((t,o)=>a(t)>a(o)?1:a(o)>a(t)?-1:0)}return e}),l=c(()=>{let e={cols:12,sm:6,lg:4};return/=maximized$/.test(s.app.currentView)&&(e={cols:12}),e});function a(e){return s.handleDefs(e.panel.sortby,["sortby"],[null]).sortby||"999"}return(e,t)=>{const o=p("v-col"),_=p("v-row");return n(),u(_,{"no-gutters":""},{default:i(()=>[(n(!0),d(v,null,h(m.value,r=>(n(),u(o,{cols:l.value.cols,sm:l.value.sm,lg:l.value.lg,key:r.name,class:"pa-1"},{default:i(()=>[w(x,{panel:r},null,8,["panel"])]),_:2},1032,["cols","sm","lg"]))),128))]),_:1})}}};export{V as default};
+import{u as f,c,r as p,o as n,a as u,w as i,b as d,d as h,F as v,e as w}from"./index-d51afd91.js";import{_ as x}from"./PanelCard-5296e7c7.js";const V={__name:"DevicesView",setup(g){const s=f(),m=c(()=>{let e=[];if(s.app.panelMaximized)e.push(s.app.panelMaximized);else{for(const t of s.app.panelView)s.handleDefs(s.app.panelList[t].panel.show,["show"],[!0]).show&&e.push(s.app.panelList[t]);e.sort((t,o)=>a(t)>a(o)?1:a(o)>a(t)?-1:0)}return e}),l=c(()=>{let e={cols:12,sm:6,lg:4};return/=maximized$/.test(s.app.currentView)&&(e={cols:12}),e});function a(e){return s.handleDefs(e.panel.sortby,["sortby"],[null]).sortby||"999"}return(e,t)=>{const o=p("v-col"),_=p("v-row");return n(),u(_,{"no-gutters":""},{default:i(()=>[(n(!0),d(v,null,h(m.value,r=>(n(),u(o,{cols:l.value.cols,sm:l.value.sm,lg:l.value.lg,key:r.name,class:"pa-1"},{default:i(()=>[w(x,{panel:r},null,8,["panel"])]),_:2},1032,["cols","sm","lg"]))),128))]),_:1})}}};export{V as default};
diff --git a/www/fhemapp4/assets/InternalsView-79748735.js b/www/fhemapp4/assets/InternalsView-3dde18b0.js
similarity index 90%
rename from www/fhemapp4/assets/InternalsView-79748735.js
rename to www/fhemapp4/assets/InternalsView-3dde18b0.js
index f4dd091..e30dd10 100644
--- a/www/fhemapp4/assets/InternalsView-79748735.js
+++ b/www/fhemapp4/assets/InternalsView-3dde18b0.js
@@ -1 +1 @@
-import{u as x,V as C}from"./index-9739ee97.js";import{f as k,u as B,r as e,o as N,a as S,w as o,e as t,j as p,t as i,q as $,h as r}from"./index-c99434e3.js";const O={__name:"InternalsView",setup(I){const n=k(!0),a=B(),{toClipboard:u}=x();function d(){u(JSON.stringify(n.value?a.app.config:a.app,null," "))}return(l,c)=>{const m=e("v-toolbar-title"),v=e("v-toolbar"),f=e("v-switch"),_=e("v-col"),b=e("v-btn"),g=e("v-snackbar"),h=e("v-row"),w=e("v-divider"),V=e("v-card-text"),y=e("v-card");return N(),S(y,null,{default:o(()=>[t(v,null,{default:o(()=>[t(m,null,{default:o(()=>[p(i(l.$t("_app.internals.title")),1)]),_:1})]),_:1}),t(V,null,{default:o(()=>[t(h,{"no-gutters":"",class:"align-center pb-2"},{default:o(()=>[t(_,null,{default:o(()=>[t(f,{label:l.$t("_app.internals.onlyConfig"),modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=s=>n.value=s),color:"blue",density:"comfortable","hide-details":""},null,8,["label","modelValue"])]),_:1}),t(_,{cols:"1",class:"text-right"},{default:o(()=>[t(g,{timeout:2e3,rounded:"pill"},{activator:o(({props:s})=>[t(b,$(s,{variant:"text",icon:"mdi-clipboard-multiple-outline",size:"small",onClick:d}),null,16)]),default:o(()=>[p(" "+i(l.$t("_app.messages.clipboard.text")),1)]),_:1})]),_:1})]),_:1}),t(w,{class:"pb-3"}),t(r(C),{data:n.value?r(a).app.config:r(a).app,deep:1,showLine:!1,showIcon:!0,showLength:!0},null,8,["data"])]),_:1})]),_:1})}}};export{O as default};
+import{u as x,V as C}from"./index-f84634ce.js";import{f as k,u as B,r as e,o as N,a as S,w as o,e as t,j as p,t as i,q as $,h as r}from"./index-d51afd91.js";const O={__name:"InternalsView",setup(I){const n=k(!0),a=B(),{toClipboard:u}=x();function d(){u(JSON.stringify(n.value?a.app.config:a.app,null," "))}return(l,c)=>{const m=e("v-toolbar-title"),v=e("v-toolbar"),f=e("v-switch"),_=e("v-col"),b=e("v-btn"),g=e("v-snackbar"),h=e("v-row"),w=e("v-divider"),V=e("v-card-text"),y=e("v-card");return N(),S(y,null,{default:o(()=>[t(v,null,{default:o(()=>[t(m,null,{default:o(()=>[p(i(l.$t("_app.internals.title")),1)]),_:1})]),_:1}),t(V,null,{default:o(()=>[t(h,{"no-gutters":"",class:"align-center pb-2"},{default:o(()=>[t(_,null,{default:o(()=>[t(f,{label:l.$t("_app.internals.onlyConfig"),modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=s=>n.value=s),color:"blue",density:"comfortable","hide-details":""},null,8,["label","modelValue"])]),_:1}),t(_,{cols:"1",class:"text-right"},{default:o(()=>[t(g,{timeout:2e3,rounded:"pill"},{activator:o(({props:s})=>[t(b,$(s,{variant:"text",icon:"mdi-clipboard-multiple-outline",size:"small",onClick:d}),null,16)]),default:o(()=>[p(" "+i(l.$t("_app.messages.clipboard.text")),1)]),_:1})]),_:1})]),_:1}),t(w,{class:"pb-3"}),t(r(C),{data:n.value?r(a).app.config:r(a).app,deep:1,showLine:!1,showIcon:!0,showLength:!0},null,8,["data"])]),_:1})]),_:1})}}};export{O as default};
diff --git a/www/fhemapp4/assets/PanelCard-23faa282.js b/www/fhemapp4/assets/PanelCard-5296e7c7.js
similarity index 99%
rename from www/fhemapp4/assets/PanelCard-23faa282.js
rename to www/fhemapp4/assets/PanelCard-5296e7c7.js
index f93050f..005a15b 100644
--- a/www/fhemapp4/assets/PanelCard-23faa282.js
+++ b/www/fhemapp4/assets/PanelCard-5296e7c7.js
@@ -1,4 +1,4 @@
-import{u as G,c as S,r as y,o as m,b as T,x as q,t as j,k,a as E,w as z,j as W,y as he,F as Z,e as b,z as ne,f as N,q as ae,d as _e,l as Re,A as re,B as ie,C as Me,D as Ve,s as Q,E as ke,G as ge,H as Le,m as Se,I as Pe,J as Te,h as B,K as je,L as Fe,i as Ie,p as Ne,M as Ue,N as He,O as qe,P as Be}from"./index-c99434e3.js";const We={__name:"PanelMainInfo",props:{el:Object,iconmap:Array,devices:Object,height:String},setup(e){const t=e,n=G(),i=S(()=>n.handleDefs(t.el.text,["text","format"],["",!t.el.text2&&!t.el.text3&&!t.el.icon?"text-h6":"text-caption"])),u=S(()=>n.handleDefs(t.el.text2,["text","format"],["",t.el.text&&!t.el.text3&&!t.el.icon?"text-h6":"text-caption"])),s=S(()=>n.handleDefs(t.el.text3,["text","format"],["","text-caption"])),l=S(()=>{let a=n.handleDefs(t.el.icon,["icon","color","size"],["","","x-large"]);return a.icon&&(a.icon=n.getIcon(a.icon,t.iconmap)),a}),r=S(()=>{let a=n.handleDefs(t.el.status,["level","color","min","max","reverse","linear"],[0,"success",0,100,!1,!1]);return a.level=Math.round((a.level-a.min)/(a.max-a.min)*100),a.reverse=!!a.reverse,a});return(a,o)=>{const c=y("v-icon"),f=y("v-progress-circular"),C=y("v-progress-linear");return m(),T(Z,null,[e.el.text?(m(),T("div",{key:0,class:q(i.value.format)},j(i.value.text),3)):k("",!0),e.el.icon?(m(),E(c,{key:1,color:l.value.color,size:l.value.size},{default:z(()=>[W(j(l.value.icon),1)]),_:1},8,["color","size"])):k("",!0),e.el.status&&!r.value.linear?(m(),E(f,{key:2,width:"4",modelValue:r.value.level,"onUpdate:modelValue":o[0]||(o[0]=w=>r.value.level=w),color:r.value.color,reverse:r.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),e.el.status&&r.value.linear?(m(),E(C,{key:3,height:"7",rounded:"",modelValue:r.value.level,"onUpdate:modelValue":o[1]||(o[1]=w=>r.value.level=w),color:r.value.color,reverse:r.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),he("div",{class:q(e.el.text2?u.value.format:s.value.format)},[e.el.text2?(m(),T("span",{key:0,class:q(u.value.format)},j(u.value.text),3)):k("",!0),e.el.text3?(m(),T("span",{key:1,class:q(s.value.format)},j(s.value.text),3)):k("",!0)],2)],64)}}},Ke={__name:"PanelMainBtn",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=S(()=>{let a=n.handleDefs(t.el.btn,["icon","disabled","color","variant"],["",!1,"","text"]);return a.icon&&(a.icon=n.getIcon(a.icon,t.iconmap)),a}),u=S(()=>{let a=n.handleDefs(t.el.status,["level","color","min","max","reverse"],[0,"success",0,100,!1]);return a.level=Math.round((a.level-a.min)/(a.max-a.min)*100),a.reverse=!!a.reverse,a}),s={timer:!1,long:!1};function l(a){let o=[],c=a.cmd,f;if(a.type==="cmd"){for(const C of t.devices)o=C.split(":"),f=RegExp(o[0],"g"),f.test(c)&&(c=c.replace(f,o[1]));n.request("text",c)}a.type==="route"&&ne.push({name:"devices",params:{view:a.cmd},query:ne.currentRoute.value.query}),a.type==="url"&&window.open(a.cmd,"_self")}function r(a){let o=n.handleDefs(t.el.click,["cmd","type"],["","cmd"],!1,null,!0),c=n.handleDefs(t.el.longClick,["cmd","type"],["","cmd"],!1,null,!0),f=n.handleDefs(t.el.longRelease,["cmd","type"],["","cmd"],!1,null,!0);a==="mouseStart"&&(s.timer=setTimeout(()=>{s.long=!0,c.cmd&&l(c)},1e3)),a==="mouseEnd"&&(s.long?f.cmd&&l(f):o.cmd&&l(o),clearTimeout(s.timer),s.long=!1)}return(a,o)=>{const c=y("v-progress-linear"),f=y("v-icon"),C=y("v-btn");return m(),T(Z,null,[e.el.status?(m(),E(c,{key:0,height:"4",modelValue:u.value.level,"onUpdate:modelValue":o[0]||(o[0]=w=>u.value.level=w),color:u.value.color,reverse:u.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),b(C,{icon:"",variant:i.value.variant,disabled:i.value.disabled,color:i.value.color,onMousedown:o[1]||(o[1]=w=>r("mouseStart")),onMouseup:o[2]||(o[2]=w=>r("mouseEnd")),class:"my-2"},{default:z(()=>[b(f,{size:"large"},{default:z(()=>[W(j(i.value.icon),1)]),_:1})]),_:1},8,["variant","disabled","color"])],64)}}},Je={class:"text-white"},Ge={__name:"PanelMainSlider",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=N();function u(a){i.value=a}const s=S(()=>{let a=n.handleDefs(t.el.slider,["cmd","current","color","min","max","steps","reverse","size","vertical"],["",0,"",0,100,10,!1,4,!1],!1,null,!0);return/%v/.test(a.current)&&(a.current=a.current.replace("%v",i.value)),u(a.current),a});let l=null;function r(a){let o=s.value.cmd,c=/\./.exec(s.value.steps),f=0,C=[];c&&(f=s.value.steps.slice(c.index).length-1),o=o.replace("%v",a.toFixed(f));for(const w of t.devices)C=w.split(":"),RegExp(C[0]).test(o)&&(o=o.replace(C[0],C[1]));clearTimeout(l),l=setTimeout(()=>{n.request("text",o)},500)}return(a,o)=>{const c=y("v-slider");return m(),E(c,{modelValue:i.value,"onUpdate:modelValue":[o[0]||(o[0]=f=>i.value=f),o[1]||(o[1]=f=>r(f))],min:s.value.min,max:s.value.max,step:s.value.steps,reverse:s.value.reverse,direction:s.value.vertical?"vertical":"horizontal","track-size":s.value.size,color:s.value.color,"hide-details":"","thumb-label":""},{"thumb-label":z(({modelValue:f})=>[he("div",Je,j(f),1)]),_:1},8,["modelValue","min","max","step","reverse","direction","track-size","color"])}}},Ye={__name:"PanelMainImage",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=N(!1),u=S(()=>n.handleDefs(t.el.image,["source","height"],["",null]));return(s,l)=>{const r=y("v-skeleton-loader"),a=y("v-img");return m(),T(Z,null,[i.value?k("",!0):(m(),E(r,{key:0,type:"image"})),b(a,{src:u.value.source,height:u.value.height,onLoad:l[0]||(l[0]=o=>i.value=!0)},null,8,["src","height"])],64)}}},Ze={__name:"PanelMainMenu",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=S(()=>{let l=n.handleDefs(t.el.btn,["icon","disabled","color","variant"],["mdi-dots-vertical",!1,"","text"]);return l.icon&&(l.icon=n.getIcon(l.icon,t.iconmap)),l}),u=S(()=>{let l=[],r=n.handleDefs(t.el.menu,["name","cmd"],["",""],!0,","),a={};for(const o of r)a={name:/:/.test(o.name)?o.name.split(":")[0]:o.name,cmd:/:/.test(o.cmd)?o.cmd.split(":")[1]:o.cmd},l.push(a);return l});function s(l){let r=[];for(const a of t.devices)r=a.split(":"),RegExp(r[0]).test(l)&&(l=l.replace(r[0],r[1]));return n.request("text",l)}return(l,r)=>{const a=y("v-icon"),o=y("v-btn"),c=y("v-list-item-title"),f=y("v-list-item"),C=y("v-list"),w=y("v-menu");return m(),E(w,null,{activator:z(({props:g})=>[b(o,ae(g,{icon:"",variant:i.value.variant,disabled:i.value.disabled||u.value.length<1,color:i.value.color,class:"my-2"}),{default:z(()=>[b(a,{size:"large"},{default:z(()=>[W(j(i.value.icon),1)]),_:1})]),_:2},1040,["variant","disabled","color"])]),default:z(()=>[b(C,null,{default:z(()=>[(m(!0),T(Z,null,_e(u.value,(g,p)=>(m(),E(f,{key:p,value:p,onClick:h=>s(g.cmd)},{default:z(()=>[b(c,null,{default:z(()=>[W(j(g.name),1)]),_:2},1024)]),_:2},1032,["value","onClick"]))),128))]),_:1})]),_:1})}}};var de=null;function Xe(e){return de||(de=(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){return setTimeout(t,16)}).bind(window)),de(e)}var ve=null;function $e(e){ve||(ve=(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(t){clearTimeout(t)}).bind(window)),ve(e)}function Qe(e){var t=document.createElement("style");return t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e)),(document.querySelector("head")||document.body).appendChild(t),t}function le(e,t){t===void 0&&(t={});var n=document.createElement(e);return Object.keys(t).forEach(function(i){n[i]=t[i]}),n}function Oe(e,t,n){var i=window.getComputedStyle(e,n||null)||{display:"none"};return i[t]}function me(e){if(!document.documentElement.contains(e))return{detached:!0,rendered:!1};for(var t=e;t!==document;){if(Oe(t,"display")==="none")return{detached:!1,rendered:!1};t=t.parentNode}return{detached:!1,rendered:!0}}var et='.resize-triggers{visibility:hidden;opacity:0;pointer-events:none}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:"";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}',pe=0,se=null;function tt(e,t){e.__resize_mutation_handler__||(e.__resize_mutation_handler__=rt.bind(e));var n=e.__resize_listeners__;if(!n){if(e.__resize_listeners__=[],window.ResizeObserver){var i=e.offsetWidth,u=e.offsetHeight,s=new ResizeObserver(function(){!e.__resize_observer_triggered__&&(e.__resize_observer_triggered__=!0,e.offsetWidth===i&&e.offsetHeight===u)||ue(e)}),l=me(e),r=l.detached,a=l.rendered;e.__resize_observer_triggered__=r===!1&&a===!1,e.__resize_observer__=s,s.observe(e)}else if(e.attachEvent&&e.addEventListener)e.__resize_legacy_resize_handler__=function(){ue(e)},e.attachEvent("onresize",e.__resize_legacy_resize_handler__),document.addEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);else if(pe||(se=Qe(et)),it(e),e.__resize_rendered__=me(e).rendered,window.MutationObserver){var o=new MutationObserver(e.__resize_mutation_handler__);o.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.__resize_mutation_observer__=o}}e.__resize_listeners__.push(t),pe++}function nt(e,t){var n=e.__resize_listeners__;if(n){if(t&&n.splice(n.indexOf(t),1),!n.length||!t){if(e.detachEvent&&e.removeEventListener){e.detachEvent("onresize",e.__resize_legacy_resize_handler__),document.removeEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);return}e.__resize_observer__?(e.__resize_observer__.unobserve(e),e.__resize_observer__.disconnect(),e.__resize_observer__=null):(e.__resize_mutation_observer__&&(e.__resize_mutation_observer__.disconnect(),e.__resize_mutation_observer__=null),e.removeEventListener("scroll",xe),e.removeChild(e.__resize_triggers__.triggers),e.__resize_triggers__=null),e.__resize_listeners__=null}!--pe&&se&&se.parentNode.removeChild(se)}}function at(e){var t=e.__resize_last__,n=t.width,i=t.height,u=e.offsetWidth,s=e.offsetHeight;return u!==n||s!==i?{width:u,height:s}:null}function rt(){var e=me(this),t=e.rendered,n=e.detached;t!==this.__resize_rendered__&&(!n&&this.__resize_triggers__&&(ye(this),this.addEventListener("scroll",xe,!0)),this.__resize_rendered__=t,ue(this))}function xe(){var e=this;ye(this),this.__resize_raf__&&$e(this.__resize_raf__),this.__resize_raf__=Xe(function(){var t=at(e);t&&(e.__resize_last__=t,ue(e))})}function ue(e){!e||!e.__resize_listeners__||e.__resize_listeners__.forEach(function(t){t.call(e,e)})}function it(e){var t=Oe(e,"position");(!t||t==="static")&&(e.style.position="relative"),e.__resize_old_position__=t,e.__resize_last__={};var n=le("div",{className:"resize-triggers"}),i=le("div",{className:"resize-expand-trigger"}),u=le("div"),s=le("div",{className:"resize-contract-trigger"});i.appendChild(u),n.appendChild(i),n.appendChild(s),e.appendChild(n),e.__resize_triggers__={triggers:n,expand:i,expandChild:u,contract:s},ye(e),e.addEventListener("scroll",xe,!0),e.__resize_last__={width:e.offsetWidth,height:e.offsetHeight}}function ye(e){var t=e.__resize_triggers__,n=t.expand,i=t.expandChild,u=t.contract,s=u.scrollWidth,l=u.scrollHeight,r=n.offsetWidth,a=n.offsetHeight,o=n.scrollWidth,c=n.scrollHeight;u.scrollLeft=s,u.scrollTop=l,i.style.width=r+1+"px",i.style.height=a+1+"px",n.scrollLeft=o,n.scrollTop=c}var J=function(){return J=Object.assign||function(e){for(var t,n=1,i=arguments.length;nn.handleDefs(t.el.text,["text","format"],["",!t.el.text2&&!t.el.text3&&!t.el.icon?"text-h6":"text-caption"])),u=S(()=>n.handleDefs(t.el.text2,["text","format"],["",t.el.text&&!t.el.text3&&!t.el.icon?"text-h6":"text-caption"])),s=S(()=>n.handleDefs(t.el.text3,["text","format"],["","text-caption"])),l=S(()=>{let a=n.handleDefs(t.el.icon,["icon","color","size"],["","","x-large"]);return a.icon&&(a.icon=n.getIcon(a.icon,t.iconmap)),a}),r=S(()=>{let a=n.handleDefs(t.el.status,["level","color","min","max","reverse","linear"],[0,"success",0,100,!1,!1]);return a.level=Math.round((a.level-a.min)/(a.max-a.min)*100),a.reverse=!!a.reverse,a});return(a,o)=>{const c=y("v-icon"),f=y("v-progress-circular"),C=y("v-progress-linear");return m(),T(Z,null,[e.el.text?(m(),T("div",{key:0,class:q(i.value.format)},j(i.value.text),3)):k("",!0),e.el.icon?(m(),E(c,{key:1,color:l.value.color,size:l.value.size},{default:z(()=>[W(j(l.value.icon),1)]),_:1},8,["color","size"])):k("",!0),e.el.status&&!r.value.linear?(m(),E(f,{key:2,width:"4",modelValue:r.value.level,"onUpdate:modelValue":o[0]||(o[0]=w=>r.value.level=w),color:r.value.color,reverse:r.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),e.el.status&&r.value.linear?(m(),E(C,{key:3,height:"7",rounded:"",modelValue:r.value.level,"onUpdate:modelValue":o[1]||(o[1]=w=>r.value.level=w),color:r.value.color,reverse:r.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),he("div",{class:q(e.el.text2?u.value.format:s.value.format)},[e.el.text2?(m(),T("span",{key:0,class:q(u.value.format)},j(u.value.text),3)):k("",!0),e.el.text3?(m(),T("span",{key:1,class:q(s.value.format)},j(s.value.text),3)):k("",!0)],2)],64)}}},Ke={__name:"PanelMainBtn",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=S(()=>{let a=n.handleDefs(t.el.btn,["icon","disabled","color","variant"],["",!1,"","text"]);return a.icon&&(a.icon=n.getIcon(a.icon,t.iconmap)),a}),u=S(()=>{let a=n.handleDefs(t.el.status,["level","color","min","max","reverse"],[0,"success",0,100,!1]);return a.level=Math.round((a.level-a.min)/(a.max-a.min)*100),a.reverse=!!a.reverse,a}),s={timer:!1,long:!1};function l(a){let o=[],c=a.cmd,f;if(a.type==="cmd"){for(const C of t.devices)o=C.split(":"),f=RegExp(o[0],"g"),f.test(c)&&(c=c.replace(f,o[1]));n.request("text",c)}a.type==="route"&&ne.push({name:"devices",params:{view:a.cmd},query:ne.currentRoute.value.query}),a.type==="url"&&window.open(a.cmd,"_self")}function r(a){let o=n.handleDefs(t.el.click,["cmd","type"],["","cmd"],!1,null,!0),c=n.handleDefs(t.el.longClick,["cmd","type"],["","cmd"],!1,null,!0),f=n.handleDefs(t.el.longRelease,["cmd","type"],["","cmd"],!1,null,!0);a==="mouseStart"&&(s.timer=setTimeout(()=>{s.long=!0,c.cmd&&l(c)},1e3)),a==="mouseEnd"&&(s.long?f.cmd&&l(f):o.cmd&&l(o),clearTimeout(s.timer),s.long=!1)}return(a,o)=>{const c=y("v-progress-linear"),f=y("v-icon"),C=y("v-btn");return m(),T(Z,null,[e.el.status?(m(),E(c,{key:0,height:"4",modelValue:u.value.level,"onUpdate:modelValue":o[0]||(o[0]=w=>u.value.level=w),color:u.value.color,reverse:u.value.reverse},null,8,["modelValue","color","reverse"])):k("",!0),b(C,{icon:"",variant:i.value.variant,disabled:i.value.disabled,color:i.value.color,onMousedown:o[1]||(o[1]=w=>r("mouseStart")),onMouseup:o[2]||(o[2]=w=>r("mouseEnd")),class:"my-2"},{default:z(()=>[b(f,{size:"large"},{default:z(()=>[W(j(i.value.icon),1)]),_:1})]),_:1},8,["variant","disabled","color"])],64)}}},Je={class:"text-white"},Ge={__name:"PanelMainSlider",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=N();function u(a){i.value=a}const s=S(()=>{let a=n.handleDefs(t.el.slider,["cmd","current","color","min","max","steps","reverse","size","vertical"],["",0,"",0,100,10,!1,4,!1],!1,null,!0);return/%v/.test(a.current)&&(a.current=a.current.replace("%v",i.value)),u(a.current),a});let l=null;function r(a){let o=s.value.cmd,c=/\./.exec(s.value.steps),f=0,C=[];c&&(f=s.value.steps.slice(c.index).length-1),o=o.replace("%v",a.toFixed(f));for(const w of t.devices)C=w.split(":"),RegExp(C[0]).test(o)&&(o=o.replace(C[0],C[1]));clearTimeout(l),l=setTimeout(()=>{n.request("text",o)},500)}return(a,o)=>{const c=y("v-slider");return m(),E(c,{modelValue:i.value,"onUpdate:modelValue":[o[0]||(o[0]=f=>i.value=f),o[1]||(o[1]=f=>r(f))],min:s.value.min,max:s.value.max,step:s.value.steps,reverse:s.value.reverse,direction:s.value.vertical?"vertical":"horizontal","track-size":s.value.size,color:s.value.color,"hide-details":"","thumb-label":""},{"thumb-label":z(({modelValue:f})=>[he("div",Je,j(f),1)]),_:1},8,["modelValue","min","max","step","reverse","direction","track-size","color"])}}},Ye={__name:"PanelMainImage",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=N(!1),u=S(()=>n.handleDefs(t.el.image,["source","height"],["",null]));return(s,l)=>{const r=y("v-skeleton-loader"),a=y("v-img");return m(),T(Z,null,[i.value?k("",!0):(m(),E(r,{key:0,type:"image"})),b(a,{src:u.value.source,height:u.value.height,onLoad:l[0]||(l[0]=o=>i.value=!0)},null,8,["src","height"])],64)}}},Ze={__name:"PanelMainMenu",props:{el:Object,iconmap:Array,devices:Array,height:String},setup(e){const t=e,n=G(),i=S(()=>{let l=n.handleDefs(t.el.btn,["icon","disabled","color","variant"],["mdi-dots-vertical",!1,"","text"]);return l.icon&&(l.icon=n.getIcon(l.icon,t.iconmap)),l}),u=S(()=>{let l=[],r=n.handleDefs(t.el.menu,["name","cmd"],["",""],!0,","),a={};for(const o of r)a={name:/:/.test(o.name)?o.name.split(":")[0]:o.name,cmd:/:/.test(o.cmd)?o.cmd.split(":")[1]:o.cmd},l.push(a);return l});function s(l){let r=[];for(const a of t.devices)r=a.split(":"),RegExp(r[0]).test(l)&&(l=l.replace(r[0],r[1]));return n.request("text",l)}return(l,r)=>{const a=y("v-icon"),o=y("v-btn"),c=y("v-list-item-title"),f=y("v-list-item"),C=y("v-list"),w=y("v-menu");return m(),E(w,null,{activator:z(({props:g})=>[b(o,ae(g,{icon:"",variant:i.value.variant,disabled:i.value.disabled||u.value.length<1,color:i.value.color,class:"my-2"}),{default:z(()=>[b(a,{size:"large"},{default:z(()=>[W(j(i.value.icon),1)]),_:1})]),_:2},1040,["variant","disabled","color"])]),default:z(()=>[b(C,null,{default:z(()=>[(m(!0),T(Z,null,_e(u.value,(g,p)=>(m(),E(f,{key:p,value:p,onClick:h=>s(g.cmd)},{default:z(()=>[b(c,null,{default:z(()=>[W(j(g.name),1)]),_:2},1024)]),_:2},1032,["value","onClick"]))),128))]),_:1})]),_:1})}}};var de=null;function Xe(e){return de||(de=(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){return setTimeout(t,16)}).bind(window)),de(e)}var ve=null;function $e(e){ve||(ve=(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(t){clearTimeout(t)}).bind(window)),ve(e)}function Qe(e){var t=document.createElement("style");return t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e)),(document.querySelector("head")||document.body).appendChild(t),t}function le(e,t){t===void 0&&(t={});var n=document.createElement(e);return Object.keys(t).forEach(function(i){n[i]=t[i]}),n}function Oe(e,t,n){var i=window.getComputedStyle(e,n||null)||{display:"none"};return i[t]}function me(e){if(!document.documentElement.contains(e))return{detached:!0,rendered:!1};for(var t=e;t!==document;){if(Oe(t,"display")==="none")return{detached:!1,rendered:!1};t=t.parentNode}return{detached:!1,rendered:!0}}var et='.resize-triggers{visibility:hidden;opacity:0;pointer-events:none}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:"";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}',pe=0,se=null;function tt(e,t){e.__resize_mutation_handler__||(e.__resize_mutation_handler__=rt.bind(e));var n=e.__resize_listeners__;if(!n){if(e.__resize_listeners__=[],window.ResizeObserver){var i=e.offsetWidth,u=e.offsetHeight,s=new ResizeObserver(function(){!e.__resize_observer_triggered__&&(e.__resize_observer_triggered__=!0,e.offsetWidth===i&&e.offsetHeight===u)||ue(e)}),l=me(e),r=l.detached,a=l.rendered;e.__resize_observer_triggered__=r===!1&&a===!1,e.__resize_observer__=s,s.observe(e)}else if(e.attachEvent&&e.addEventListener)e.__resize_legacy_resize_handler__=function(){ue(e)},e.attachEvent("onresize",e.__resize_legacy_resize_handler__),document.addEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);else if(pe||(se=Qe(et)),it(e),e.__resize_rendered__=me(e).rendered,window.MutationObserver){var o=new MutationObserver(e.__resize_mutation_handler__);o.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.__resize_mutation_observer__=o}}e.__resize_listeners__.push(t),pe++}function nt(e,t){var n=e.__resize_listeners__;if(n){if(t&&n.splice(n.indexOf(t),1),!n.length||!t){if(e.detachEvent&&e.removeEventListener){e.detachEvent("onresize",e.__resize_legacy_resize_handler__),document.removeEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);return}e.__resize_observer__?(e.__resize_observer__.unobserve(e),e.__resize_observer__.disconnect(),e.__resize_observer__=null):(e.__resize_mutation_observer__&&(e.__resize_mutation_observer__.disconnect(),e.__resize_mutation_observer__=null),e.removeEventListener("scroll",xe),e.removeChild(e.__resize_triggers__.triggers),e.__resize_triggers__=null),e.__resize_listeners__=null}!--pe&&se&&se.parentNode.removeChild(se)}}function at(e){var t=e.__resize_last__,n=t.width,i=t.height,u=e.offsetWidth,s=e.offsetHeight;return u!==n||s!==i?{width:u,height:s}:null}function rt(){var e=me(this),t=e.rendered,n=e.detached;t!==this.__resize_rendered__&&(!n&&this.__resize_triggers__&&(ye(this),this.addEventListener("scroll",xe,!0)),this.__resize_rendered__=t,ue(this))}function xe(){var e=this;ye(this),this.__resize_raf__&&$e(this.__resize_raf__),this.__resize_raf__=Xe(function(){var t=at(e);t&&(e.__resize_last__=t,ue(e))})}function ue(e){!e||!e.__resize_listeners__||e.__resize_listeners__.forEach(function(t){t.call(e,e)})}function it(e){var t=Oe(e,"position");(!t||t==="static")&&(e.style.position="relative"),e.__resize_old_position__=t,e.__resize_last__={};var n=le("div",{className:"resize-triggers"}),i=le("div",{className:"resize-expand-trigger"}),u=le("div"),s=le("div",{className:"resize-contract-trigger"});i.appendChild(u),n.appendChild(i),n.appendChild(s),e.appendChild(n),e.__resize_triggers__={triggers:n,expand:i,expandChild:u,contract:s},ye(e),e.addEventListener("scroll",xe,!0),e.__resize_last__={width:e.offsetWidth,height:e.offsetHeight}}function ye(e){var t=e.__resize_triggers__,n=t.expand,i=t.expandChild,u=t.contract,s=u.scrollWidth,l=u.scrollHeight,r=n.offsetWidth,a=n.offsetHeight,o=n.scrollWidth,c=n.scrollHeight;u.scrollLeft=s,u.scrollTop=l,i.style.width=r+1+"px",i.style.height=a+1+"px",n.scrollLeft=o,n.scrollTop=c}var J=function(){return J=Object.assign||function(e){for(var t,n=1,i=arguments.length;n"u"||typeof customElements>"u")return ee=!1;try{new Function("tag",`class EChartsElement extends HTMLElement {
__dispose = null;
diff --git a/www/fhemapp4/assets/SettingsView-0f80056c.js b/www/fhemapp4/assets/SettingsView-0f80056c.js
deleted file mode 100644
index 84fa920..0000000
--- a/www/fhemapp4/assets/SettingsView-0f80056c.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import{u as nt,f as Fe,g as or,r as F,o as H,a as J,w as I,e as y,h as z,b as Ke,F as ke,d as tt,i as Nn,j as we,t as De,k as re,l as Or,m as mt,c as Te,n as Cr,v as wr,p as lr,q as ir,s as Dr}from"./index-c99434e3.js";import{c as Pn,g as Tr,r as Ar,a as Pr,u as $r,V as Vr}from"./index-9739ee97.js";import{_ as Fr}from"./PanelCard-23faa282.js";const ue="_app.settings.header.",jr={__name:"SettingsHeader",setup(u){const e=nt(),n={required:r=>!!r||e.replacer("%t(_app.settings.rules.required)")},i=Fe(),a=or({name:"",title:"",icon:"",cmd:""});function l(){e.app.config.header.commands||(e.app.config.header.commands=[]),e.app.config.header.commands.push(JSON.parse(JSON.stringify(a))),i.value.reset()}function t(r){e.app.config.header.commands.splice(r,1)}return(r,o)=>{const s=F("v-btn"),c=F("v-list-item"),p=F("v-text-field"),v=F("v-col"),m=F("v-checkbox"),d=F("v-row"),g=F("v-divider"),h=F("v-form"),b=F("v-list");return H(),J(b,null,{default:I(()=>[y(c,{title:r.$t(ue+"barTitle")},{append:I(()=>[y(s,{color:"info",icon:"mdi-help-circle",variant:"text",onClick:o[0]||(o[0]=f=>z(e).help("kopfzeile"))})]),_:1},8,["title"]),y(c,null,{default:I(()=>[y(d,{"no-gutters":""},{default:I(()=>[y(v,{cols:"12",lg:"4",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"imageUrlPlaceholder"),label:r.$t(ue+"imageUrl"),modelValue:z(e).app.config.header.imageUrl,"onUpdate:modelValue":o[1]||(o[1]=f=>z(e).app.config.header.imageUrl=f)},null,8,["placeholder","label","modelValue"])]),_:1}),y(v,{cols:"12",lg:"4",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"imageGradientPlaceholder"),label:r.$t(ue+"imageGradient"),modelValue:z(e).app.config.header.imageGradient,"onUpdate:modelValue":o[2]||(o[2]=f=>z(e).app.config.header.imageGradient=f)},null,8,["placeholder","label","modelValue"])]),_:1}),y(v,{cols:"6",lg:"",class:"pt-1"},{default:I(()=>[y(m,{hint:r.$t(ue+"showTimeHint"),label:r.$t(ue+"showTime"),modelValue:z(e).app.config.header.showTime,"onUpdate:modelValue":o[3]||(o[3]=f=>z(e).app.config.header.showTime=f)},null,8,["hint","label","modelValue"])]),_:1}),y(v,{cols:"6",lg:"",class:"pt-1"},{default:I(()=>[y(m,{hint:r.$t(ue+"showDateHint"),label:r.$t(ue+"showDate"),modelValue:z(e).app.config.header.showDate,"onUpdate:modelValue":o[4]||(o[4]=f=>z(e).app.config.header.showDate=f)},null,8,["hint","label","modelValue"])]),_:1}),y(v,{cols:"6",lg:"",class:"pt-1"},{default:I(()=>[y(m,{hint:r.$t(ue+"showTitleHint"),label:r.$t(ue+"showTitle"),modelValue:z(e).app.config.header.showTitle,"onUpdate:modelValue":o[5]||(o[5]=f=>z(e).app.config.header.showTitle=f)},null,8,["hint","label","modelValue"])]),_:1})]),_:1})]),_:1}),y(g),y(c,{title:r.$t(ue+"darkModeOverFhem")},{append:I(()=>[y(s,{color:"info",icon:"mdi-help-circle",variant:"text",onClick:o[6]||(o[6]=f=>z(e).help("farbschema"))})]),_:1},8,["title"]),y(c,null,{default:I(()=>[y(d,{"no-gutters":""},{default:I(()=>[y(v,{cols:"12",md:"4",class:"pt-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:"device-reading:value",label:"Definition",modelValue:z(e).app.config.header.darkModeOverFhem,"onUpdate:modelValue":o[7]||(o[7]=f=>z(e).app.config.header.darkModeOverFhem=f)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),y(g),y(c,{title:r.$t(ue+"optionsTitle")},{append:I(()=>[y(s,{color:"info",icon:"mdi-help-circle",variant:"text",onClick:o[8]||(o[8]=f=>z(e).help("optionsmenü"))})]),_:1},8,["title"]),y(c,null,{default:I(()=>[y(d,{"no-gutters":""},{default:I(()=>[y(v,{cols:"6",lg:""},{default:I(()=>[y(m,{label:r.$t(ue+"showDarkMode"),modelValue:z(e).app.config.header.showDarkMode,"onUpdate:modelValue":o[9]||(o[9]=f=>z(e).app.config.header.showDarkMode=f)},null,8,["label","modelValue"])]),_:1}),y(v,{cols:"6",lg:""},{default:I(()=>[y(m,{label:r.$t(ue+"showReloadPage"),modelValue:z(e).app.config.header.showReloadPage,"onUpdate:modelValue":o[10]||(o[10]=f=>z(e).app.config.header.showReloadPage=f)},null,8,["label","modelValue"])]),_:1}),y(v,{cols:"6",lg:""},{default:I(()=>[y(m,{label:r.$t(ue+"showSettings"),modelValue:z(e).app.config.header.showSettings,"onUpdate:modelValue":o[11]||(o[11]=f=>z(e).app.config.header.showSettings=f)},null,8,["label","modelValue"])]),_:1}),y(v,{cols:"6",lg:""},{default:I(()=>[y(m,{label:r.$t(ue+"showUpdate"),modelValue:z(e).app.config.header.showUpdate,"onUpdate:modelValue":o[12]||(o[12]=f=>z(e).app.config.header.showUpdate=f)},null,8,["label","modelValue"])]),_:1}),y(v,{cols:"6",lg:""},{default:I(()=>[y(m,{label:r.$t(ue+"showLanguages"),modelValue:z(e).app.config.header.showLanguages,"onUpdate:modelValue":o[13]||(o[13]=f=>z(e).app.config.header.showLanguages=f)},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1}),y(g),y(c,{title:r.$t(ue+"optionsCommandTitle")},{append:I(()=>[y(s,{color:"info",icon:"mdi-help-circle",variant:"text",onClick:o[14]||(o[14]=f=>z(e).help("optionsmenü-fhem-befehle"))})]),_:1},8,["title"]),(H(!0),Ke(ke,null,tt(z(e).app.config.header.commands,(f,x)=>(H(),J(c,{key:x},{default:I(()=>[y(d,{"no-gutters":""},{default:I(()=>[y(v,{cols:"12",lg:"2",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandNamePlaceholder"),label:r.$t(ue+"commandName"),rules:[n.required],modelValue:f.name,"onUpdate:modelValue":S=>f.name=S},null,8,["placeholder","label","rules","modelValue","onUpdate:modelValue"])]),_:2},1024),y(v,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandTitlePlaceholder"),label:r.$t(ue+"commandTitle"),rules:[n.required],modelValue:f.title,"onUpdate:modelValue":S=>f.title=S},null,8,["placeholder","label","rules","modelValue","onUpdate:modelValue"])]),_:2},1024),y(v,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandIconPlaceholder"),label:r.$t(ue+"commandIcon"),"append-inner-icon":f.icon,modelValue:f.icon,"onUpdate:modelValue":S=>f.icon=S},null,8,["placeholder","label","append-inner-icon","modelValue","onUpdate:modelValue"])]),_:2},1024),y(v,{cols:"10",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandCmdPlaceholder"),label:r.$t(ue+"commandCmd"),rules:[n.required],modelValue:f.cmd,"onUpdate:modelValue":S=>f.cmd=S},null,8,["placeholder","label","rules","modelValue","onUpdate:modelValue"])]),_:2},1024),y(v,{class:"pt-3 text-right"},{default:I(()=>[y(s,{variant:"text",icon:"mdi-delete",onClick:S=>t(x)},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),y(c,null,{default:I(()=>[y(h,{ref_key:"form",ref:i},{default:I(()=>[y(d,{"no-gutters":""},{default:I(()=>[y(v,{cols:"12",lg:"2",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandNamePlaceholder"),label:r.$t(ue+"commandName"),rules:[n.required],modelValue:a.name,"onUpdate:modelValue":o[15]||(o[15]=f=>a.name=f)},null,8,["placeholder","label","rules","modelValue"])]),_:1}),y(v,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandTitlePlaceholder"),label:r.$t(ue+"commandTitle"),rules:[n.required],modelValue:a.title,"onUpdate:modelValue":o[16]||(o[16]=f=>a.title=f)},null,8,["placeholder","label","rules","modelValue"])]),_:1}),y(v,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandIconPlaceholder"),label:r.$t(ue+"commandIcon"),"append-inner-icon":a.icon,modelValue:a.icon,"onUpdate:modelValue":o[17]||(o[17]=f=>a.icon=f)},null,8,["placeholder","label","append-inner-icon","modelValue"])]),_:1}),y(v,{cols:"9",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(p,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:r.$t(ue+"commandCmdPlaceholder"),label:r.$t(ue+"commandCmd"),rules:[n.required],modelValue:a.cmd,"onUpdate:modelValue":o[18]||(o[18]=f=>a.cmd=f)},null,8,["placeholder","label","rules","modelValue"])]),_:1}),y(v,{class:"pt-3 text-right"},{default:I(()=>[y(s,{variant:"text",icon:"mdi-cancel",onClick:o[19]||(o[19]=f=>i.value.reset())}),y(s,{variant:"text",icon:"mdi-plus",disabled:!a.name||!a.title||!a.cmd,onClick:o[20]||(o[20]=f=>l())},null,8,["disabled"])]),_:1})]),_:1})]),_:1},512)]),_:1})]),_:1})}}},ye="_app.settings.navigation.",Rr={__name:"SettingsNavigation",setup(u){const{mobile:e}=Nn(),n=nt(),i=or({path:[],route:["navigation"],items:[],newItem:{name:null,title:null,icon:null,divider:!1,groupAsChips:!1,sort:!1,group:[]}}),a=Fe(),l={required:p=>!!p||n.replacer("%t(_app.settings.rules.required)")};function t(p){typeof p<"u"&&(i.path.push(p,"group"),i.route.push(i.items[p].name)),i.items=n.getEl(n.app.config.navigation,i.path)}function r(){let p=JSON.parse(JSON.stringify(i.newItem));n.getEl(n.app.config.navigation,i.path).push(p),t(),a.value.reset()}function o(p){n.getEl(n.app.config.navigation,i.path).splice(p,1)}function s(p){return(n.getEl(i.items[p],["group"])||[]).length}function c(){i.route.pop(),i.path.splice(-2,2),t()}return t(),(p,v)=>{const m=F("v-btn"),d=F("v-list-item"),g=F("v-text-field"),h=F("v-col"),b=F("v-checkbox"),f=F("v-icon"),x=F("v-badge"),S=F("v-row"),C=F("v-divider"),O=F("v-form"),P=F("v-list");return H(),J(P,null,{default:I(()=>[y(d,{title:p.$t(ye+"title")},{append:I(()=>[y(m,{color:"info",icon:"mdi-help-circle",variant:"text",onClick:v[0]||(v[0]=D=>z(n).help("navigation"))})]),_:1},8,["title"]),i.path.length>0?(H(),J(d,{key:0},{default:I(()=>[y(m,{variant:"text",icon:"mdi-arrow-up-left",onClick:v[1]||(v[1]=D=>c())}),we(" "+De(i.route.join(" > ")),1)]),_:1})):re("",!0),(H(!0),Ke(ke,null,tt(i.items,(D,E)=>(H(),J(d,{key:E},{default:I(()=>[y(S,{"no-gutters":""},{default:I(()=>[y(h,{cols:"12",lg:"2",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"namePlaceholder"),label:p.$t(ye+"name"),rules:[l.required],modelValue:D.name,"onUpdate:modelValue":w=>D.name=w},null,8,["placeholder","label","rules","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"title1Placeholder"),label:p.$t(ye+"title1"),modelValue:D.title,"onUpdate:modelValue":w=>D.title=w},null,8,["placeholder","label","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"iconPlaceholder"),label:p.$t(ye+"icon"),"append-inner-icon":D.icon,modelValue:D.icon,"onUpdate:modelValue":w=>D.icon=w},null,8,["placeholder","label","append-inner-icon","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{cols:4,lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"groupAsChipsHint"),label:p.$t(ye+"groupAsChips"),modelValue:D.groupAsChips,"onUpdate:modelValue":w=>D.groupAsChips=w},null,8,["hint","label","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{cols:4,lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"sortHint"),label:p.$t(ye+"sort"),modelValue:D.sort,"onUpdate:modelValue":w=>D.sort=w},null,8,["hint","label","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{cols:"4",lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"dividerHint"),label:p.$t(ye+"divider"),modelValue:D.divider,"onUpdate:modelValue":w=>D.divider=w},null,8,["hint","label","modelValue","onUpdate:modelValue"])]),_:2},1024),y(h,{class:"pt-3 text-right"},{default:I(()=>[y(m,{variant:"text",icon:"",onClick:w=>t(E)},{default:I(()=>[s(E)>0?(H(),J(x,{key:0,color:"success",content:s(E)},{default:I(()=>[y(f,{icon:"mdi-arrow-down-right"})]),_:2},1032,["content"])):re("",!0),s(E)===0?(H(),J(f,{key:1,icon:"mdi-arrow-down-right"})):re("",!0)]),_:2},1032,["onClick"]),y(m,{variant:"text",icon:"mdi-delete",onClick:w=>o(E)},null,8,["onClick"])]),_:2},1024)]),_:2},1024),z(e)?(H(),J(C,{key:0})):re("",!0)]),_:2},1024))),128)),y(d,null,{default:I(()=>[y(O,{ref_key:"form",ref:a},{default:I(()=>[y(S,{"no-gutters":""},{default:I(()=>[y(h,{cols:"12",lg:"2",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"namePlaceholder"),label:p.$t(ye+"name"),rules:[l.required],modelValue:i.newItem.name,"onUpdate:modelValue":v[2]||(v[2]=D=>i.newItem.name=D)},null,8,["placeholder","label","rules","modelValue"])]),_:1}),y(h,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"title1Placeholder"),label:p.$t(ye+"title1"),modelValue:i.newItem.title,"onUpdate:modelValue":v[3]||(v[3]=D=>i.newItem.title=D)},null,8,["placeholder","label","modelValue"])]),_:1}),y(h,{cols:"12",lg:"3",class:"pt-3 pr-3"},{default:I(()=>[y(g,{density:"compact",variant:"outlined",clearable:"","persistent-placeholder":"",placeholder:p.$t(ye+"iconPlaceholder"),label:p.$t(ye+"icon"),"append-inner-icon":i.newItem.icon,modelValue:i.newItem.icon,"onUpdate:modelValue":v[4]||(v[4]=D=>i.newItem.icon=D)},null,8,["placeholder","label","append-inner-icon","modelValue"])]),_:1}),y(h,{cols:"4",lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"groupAsChipsHint"),label:p.$t(ye+"groupAsChips"),modelValue:i.newItem.groupAsChips,"onUpdate:modelValue":v[5]||(v[5]=D=>i.newItem.groupAsChips=D)},null,8,["hint","label","modelValue"])]),_:1}),y(h,{cols:"4",lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"sortHint"),label:p.$t(ye+"sort"),modelValue:i.newItem.sort,"onUpdate:modelValue":v[6]||(v[6]=D=>i.newItem.sort=D)},null,8,["hint","label","modelValue"])]),_:1}),y(h,{cols:"4",lg:"",class:"pt-1"},{default:I(()=>[y(b,{hint:p.$t(ye+"dividerHint"),label:p.$t(ye+"divider"),modelValue:i.newItem.divider,"onUpdate:modelValue":v[7]||(v[7]=D=>i.newItem.divider=D)},null,8,["hint","label","modelValue"])]),_:1}),y(h,{class:"pt-3 text-right"},{default:I(()=>[y(m,{variant:"text",icon:"mdi-cancel",onClick:v[8]||(v[8]=D=>a.value.reset())}),y(m,{variant:"text",icon:"mdi-plus",disabled:!i.newItem.name,onClick:v[9]||(v[9]=D=>r())},null,8,["disabled"])]),_:1})]),_:1})]),_:1},512)]),_:1})]),_:1})}}};function Gt(){return Gt=Object.assign||function(u){for(var e=1;e ";return e},lineNumbersCount:function(){var e=this.codeData.split(/\r\n|\n/).length;return e}},mounted:function(){this._recordCurrentState(),this.styleLineNumbers()},methods:{setLineNumbersHeight:function(){this.lineNumbersHeight=getComputedStyle(this.$refs.pre).height},styleLineNumbers:function(){if(!(!this.lineNumbers||!this.autoStyleLineNumbers)){var e=this.$refs.pre,n=this.$el.querySelector(".prism-editor__line-numbers"),i=window.getComputedStyle(e);this.$nextTick(function(){var a="border-top-left-radius",l="border-bottom-left-radius";if(n){n.style[a]=i[a],n.style[l]=i[l],e.style[a]="0",e.style[l]="0";var t=["background-color","margin-top","padding-top","font-family","font-size","line-height"];t.forEach(function(r){n.style[r]=i[r]}),n.style["margin-bottom"]="-"+i["padding-top"]}})}},_recordCurrentState:function(){var e=this.$refs.textarea;if(e){var n=e.value,i=e.selectionStart,a=e.selectionEnd;this._recordChange({value:n,selectionStart:i,selectionEnd:a})}},_getLines:function(e,n){return e.substring(0,n).split(`
-`)},_applyEdits:function(e){var n=this.$refs.textarea,i=this.history.stack[this.history.offset];i&&n&&(this.history.stack[this.history.offset]=Gt({},i,{selectionStart:n.selectionStart,selectionEnd:n.selectionEnd})),this._recordChange(e),this._updateInput(e)},_recordChange:function(e,n){n===void 0&&(n=!1);var i=this.history,a=i.stack,l=i.offset;if(a.length&&l>-1){this.history.stack=a.slice(0,l+1);var t=this.history.stack.length;if(t>zn){var r=t-zn;this.history.stack=a.slice(r,t),this.history.offset=Math.max(this.history.offset-r,0)}}var o=Date.now();if(n){var s=this.history.stack[this.history.offset];if(s&&o-s.timestamp =p&&N<=v&&L.startsWith(s)?L.substring(s.length):L}).join(`
-`);if(t!==m){var d=c[p];this._applyEdits({value:m,selectionStart:d.startsWith(s)?r-s.length:r,selectionEnd:o-(t.length-m.length)})}}else if(r!==o){var g=this._getLines(t,r),h=g.length-1,b=this._getLines(t,o).length-1,f=g[h];this._applyEdits({value:t.split(`
-`).map(function(L,N){return N>=h&&N<=b?s+L:L}).join(`
-`),selectionStart:/\S/.test(f)?r+s.length:r,selectionEnd:o+s.length*(b-h+1)})}else{var x=r+s.length;this._applyEdits({value:t.substring(0,r)+s+t.substring(o),selectionStart:x,selectionEnd:x})}else if(e.keyCode===Ur){var S=r!==o,C=t.substring(0,r);if(C.endsWith(s)&&!S){e.preventDefault();var O=r-s.length;this._applyEdits({value:t.substring(0,r-s.length)+t.substring(o),selectionStart:O,selectionEnd:O})}}else if(e.keyCode===Nr){if(r===o){var P=this._getLines(t,r).pop(),D=P==null?void 0:P.match(/^\s+/);if(D&&D[0]){e.preventDefault();var E=`
-`+D[0],w=r+E.length;this._applyEdits({value:t.substring(0,r)+E+t.substring(o),selectionStart:w,selectionEnd:w})}}}else if(e.keyCode===Gn||e.keyCode===Hn||e.keyCode===Bn||e.keyCode===kn){var j;e.keyCode===Gn&&e.shiftKey?j=["(",")"]:e.keyCode===Hn?e.shiftKey?j=["{","}"]:j=["[","]"]:e.keyCode===Bn?e.shiftKey?j=['"','"']:j=["'","'"]:e.keyCode===kn&&!e.shiftKey&&(j=["`","`"]),r!==o&&j&&(e.preventDefault(),this._applyEdits({value:t.substring(0,r)+j[0]+t.substring(r,o)+j[1]+t.substring(o),selectionStart:r,selectionEnd:o+2}))}else(bn?e.metaKey&&e.keyCode===Qt:e.ctrlKey&&e.keyCode===Qt)&&!e.shiftKey&&!e.altKey?(e.preventDefault(),this._undoEdit()):(bn?e.metaKey&&e.keyCode===Qt&&e.shiftKey:Br?e.ctrlKey&&e.keyCode===Lr:e.ctrlKey&&e.keyCode===Qt&&e.shiftKey)&&!e.altKey?(e.preventDefault(),this._redoEdit()):e.keyCode===Kr&&e.ctrlKey&&(!bn||e.shiftKey)&&(e.preventDefault(),this.capture=!this.capture)}}},render:function(){var e=this,n=mt("div",{class:"prism-editor__line-width-calc",style:"height: 0px; visibility: hidden; pointer-events: none;"},"999"),i=mt("div",{class:"prism-editor__line-numbers",style:{"min-height":this.lineNumbersHeight},"aria-hidden":"true"},[n,Array.from(Array(this.lineNumbersCount).keys()).map(function(r,o){return mt("div",{class:"prism-editor__line-number token comment"},""+ ++o)})]),a=mt("textarea",{ref:"textarea",onInput:this.handleChange,onKeydown:this.handleKeyDown,onClick:function(o){e.$emit("click",o)},onKeyup:function(o){e.$emit("keyup",o)},onFocus:function(o){e.$emit("focus",o)},onBlur:function(o){e.$emit("blur",o)},class:{"prism-editor__textarea":!0,"prism-editor__textarea--empty":this.isEmpty},spellCheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","data-gramm":"false",placeholder:this.placeholder,"data-testid":"textarea",readonly:this.readonly,value:this.codeData}),l=mt("pre",{ref:"pre",class:"prism-editor__editor","data-testid":"preview",innerHTML:this.content}),t=mt("div",{class:"prism-editor__container"},[a,l]);return mt("div",{class:"prism-editor-wrapper"},[this.lineNumbers&&i,t])}});var ur={exports:{}};(function(u){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
- * Prism: Lightweight, robust, elegant syntax highlighting
- *
- * @license MIT
- * @author Lea Verou
- * @namespace
- * @public
- */var n=function(i){var a=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,l=0,t={},r={manual:i.Prism&&i.Prism.manual,disableWorkerMessageHandler:i.Prism&&i.Prism.disableWorkerMessageHandler,util:{encode:function f(x){return x instanceof o?new o(x.type,f(x.content),x.alias):Array.isArray(x)?x.map(f):x.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(C){var f=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(C.stack)||[])[1];if(f){var x=document.getElementsByTagName("script");for(var S in x)if(x[S].src==f)return x[S]}return null}},isActive:function(f,x,S){for(var C="no-"+x;f;){var O=f.classList;if(O.contains(x))return!0;if(O.contains(C))return!1;f=f.parentElement}return!!S}},languages:{plain:t,plaintext:t,text:t,txt:t,extend:function(f,x){var S=r.util.clone(r.languages[f]);for(var C in x)S[C]=x[C];return S},insertBefore:function(f,x,S,C){C=C||r.languages;var O=C[f],P={};for(var D in O)if(O.hasOwnProperty(D)){if(D==x)for(var E in S)S.hasOwnProperty(E)&&(P[E]=S[E]);S.hasOwnProperty(D)||(P[D]=O[D])}var w=C[f];return C[f]=P,r.languages.DFS(r.languages,function(j,L){L===w&&j!=f&&(this[j]=P)}),P},DFS:function f(x,S,C,O){O=O||{};var P=r.util.objId;for(var D in x)if(x.hasOwnProperty(D)){S.call(x,D,x[D],C||D);var E=x[D],w=r.util.type(E);w==="Object"&&!O[P(E)]?(O[P(E)]=!0,f(E,S,null,O)):w==="Array"&&!O[P(E)]&&(O[P(E)]=!0,f(E,S,D,O))}}},plugins:{},highlightAll:function(f,x){r.highlightAllUnder(document,f,x)},highlightAllUnder:function(f,x,S){var C={callback:S,container:f,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};r.hooks.run("before-highlightall",C),C.elements=Array.prototype.slice.apply(C.container.querySelectorAll(C.selector)),r.hooks.run("before-all-elements-highlight",C);for(var O=0,P;P=C.elements[O++];)r.highlightElement(P,x===!0,C.callback)},highlightElement:function(f,x,S){var C=r.util.getLanguage(f),O=r.languages[C];r.util.setLanguage(f,C);var P=f.parentElement;P&&P.nodeName.toLowerCase()==="pre"&&r.util.setLanguage(P,C);var D=f.textContent,E={element:f,language:C,grammar:O,code:D};function w(L){E.highlightedCode=L,r.hooks.run("before-insert",E),E.element.innerHTML=E.highlightedCode,r.hooks.run("after-highlight",E),r.hooks.run("complete",E),S&&S.call(E.element)}if(r.hooks.run("before-sanity-check",E),P=E.element.parentElement,P&&P.nodeName.toLowerCase()==="pre"&&!P.hasAttribute("tabindex")&&P.setAttribute("tabindex","0"),!E.code){r.hooks.run("complete",E),S&&S.call(E.element);return}if(r.hooks.run("before-highlight",E),!E.grammar){w(r.util.encode(E.code));return}if(x&&i.Worker){var j=new Worker(r.filename);j.onmessage=function(L){w(L.data)},j.postMessage(JSON.stringify({language:E.language,code:E.code,immediateClose:!0}))}else w(r.highlight(E.code,E.grammar,E.language))},highlight:function(f,x,S){var C={code:f,grammar:x,language:S};if(r.hooks.run("before-tokenize",C),!C.grammar)throw new Error('The language "'+C.language+'" has no grammar.');return C.tokens=r.tokenize(C.code,C.grammar),r.hooks.run("after-tokenize",C),o.stringify(r.util.encode(C.tokens),C.language)},tokenize:function(f,x){var S=x.rest;if(S){for(var C in S)x[C]=S[C];delete x.rest}var O=new p;return v(O,O.head,f),c(f,O,x,O.head,0),d(O)},hooks:{all:{},add:function(f,x){var S=r.hooks.all;S[f]=S[f]||[],S[f].push(x)},run:function(f,x){var S=r.hooks.all[f];if(!(!S||!S.length))for(var C=0,O;O=S[C++];)O(x)}},Token:o};i.Prism=r;function o(f,x,S,C){this.type=f,this.content=x,this.alias=S,this.length=(C||"").length|0}o.stringify=function f(x,S){if(typeof x=="string")return x;if(Array.isArray(x)){var C="";return x.forEach(function(w){C+=f(w,S)}),C}var O={type:x.type,content:f(x.content,S),tag:"span",classes:["token",x.type],attributes:{},language:S},P=x.alias;P&&(Array.isArray(P)?Array.prototype.push.apply(O.classes,P):O.classes.push(P)),r.hooks.run("wrap",O);var D="";for(var E in O.attributes)D+=" "+E+'="'+(O.attributes[E]||"").replace(/"/g,""")+'"';return"<"+O.tag+' class="'+O.classes.join(" ")+'"'+D+">"+O.content+""+O.tag+">"};function s(f,x,S,C){f.lastIndex=x;var O=f.exec(S);if(O&&C&&O[1]){var P=O[1].length;O.index+=P,O[0]=O[0].slice(P)}return O}function c(f,x,S,C,O,P){for(var D in S)if(!(!S.hasOwnProperty(D)||!S[D])){var E=S[D];E=Array.isArray(E)?E:[E];for(var w=0;w=P.reach);G+=k.value.length,k=k.next){var de=k.value;if(x.length>f.length)return;if(!(de instanceof o)){var ce=1,le;if(R){if(le=s(V,G,f,N),!le||le.index>=f.length)break;var ve=le.index,Se=le.index+le[0].length,Z=G;for(Z+=k.value.length;ve>=Z;)k=k.next,Z+=k.value.length;if(Z-=k.value.length,G=Z,k.value instanceof o)continue;for(var me=k;me!==x.tail&&(ZP.reach&&(P.reach=ze);var Xe=k.prev;je&&(Xe=v(x,Xe,je),G+=je.length),m(x,Xe,ce);var rt=new o(D,L?r.tokenize(ge,L):ge,B,ge);if(k=v(x,Xe,rt),Ve&&v(x,k,Ve),ce>1){var Ae={cause:D+","+w,reach:ze};c(f,x,S,k.prev,G,Ae),P&&Ae.reach>P.reach&&(P.reach=Ae.reach)}}}}}}function p(){var f={value:null,prev:null,next:null},x={value:null,prev:f,next:null};f.next=x,this.head=f,this.tail=x,this.length=0}function v(f,x,S){var C=x.next,O={value:S,prev:x,next:C};return x.next=O,C.prev=O,f.length++,O}function m(f,x,S){for(var C=x.next,O=0;O]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/});Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}});Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}});Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript"));Prism.languages.js=Prism.languages.javascript;var dr={exports:{}};/**!
- * Sortable 1.14.0
- * @author RubaXa
- * @author owenm
- * @license MIT
- */function Wn(u,e){var n=Object.keys(u);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(u);e&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(u,a).enumerable})),n.push.apply(n,i)}return n}function it(u){for(var e=1;e=0)&&(n[a]=u[a]);return n}function Wr(u,e){if(u==null)return{};var n=zr(u,e),i,a;if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(u);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(u,i)&&(n[i]=u[i])}return n}function Yr(u){return Xr(u)||Jr(u)||Zr(u)||Qr()}function Xr(u){if(Array.isArray(u))return $n(u)}function Jr(u){if(typeof Symbol<"u"&&u[Symbol.iterator]!=null||u["@@iterator"]!=null)return Array.from(u)}function Zr(u,e){if(u){if(typeof u=="string")return $n(u,e);var n=Object.prototype.toString.call(u).slice(8,-1);if(n==="Object"&&u.constructor&&(n=u.constructor.name),n==="Map"||n==="Set")return Array.from(u);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $n(u,e)}}function $n(u,e){(e==null||e>u.length)&&(e=u.length);for(var n=0,i=new Array(e);n"&&(e=e.substring(1)),u)try{if(u.matches)return u.matches(e);if(u.msMatchesSelector)return u.msMatchesSelector(e);if(u.webkitMatchesSelector)return u.webkitMatchesSelector(e)}catch{return!1}return!1}}function ea(u){return u.host&&u!==document&&u.host.nodeType?u.host:u.parentNode}function et(u,e,n,i){if(u){n=n||document;do{if(e!=null&&(e[0]===">"?u.parentNode===n&&pn(u,e):pn(u,e))||i&&u===n)return u;if(u===n)break}while(u=ea(u))}return null}var Xn=/\s+/g;function Ee(u,e,n){if(u&&e)if(u.classList)u.classList[n?"add":"remove"](e);else{var i=(" "+u.className+" ").replace(Xn," ").replace(" "+e+" "," ");u.className=(i+(n?" "+e:"")).replace(Xn," ")}}function Y(u,e,n){var i=u&&u.style;if(i){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(u,""):u.currentStyle&&(n=u.currentStyle),e===void 0?n:n[e];!(e in i)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),i[e]=n+(typeof n=="string"?"":"px")}}function xt(u,e){var n="";if(typeof u=="string")n=u;else do{var i=Y(u,"transform");i&&i!=="none"&&(n=i+" "+n)}while(!e&&(u=u.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function fr(u,e,n){if(u){var i=u.getElementsByTagName(e),a=0,l=i.length;if(n)for(;a=l:t=a<=l,!t)return i;if(i===lt())break;i=ft(i,!1)}return!1}function Dt(u,e,n,i){for(var a=0,l=0,t=u.children;l2&&arguments[2]!==void 0?arguments[2]:{},a=i.evt,l=Wr(i,ia);Xt.pluginEvent.bind(q)(e,n,it({dragEl:K,parentEl:Ie,ghostEl:ne,rootEl:be,nextEl:bt,lastDownEl:on,cloneEl:Oe,cloneHidden:ct,dragStarted:Ut,putSortable:Ne,activeSortable:q.active,originalEvent:a,oldIndex:wt,oldDraggableIndex:kt,newIndex:Ye,newDraggableIndex:pt,hideGhostForTarget:br,unhideGhostForTarget:xr,cloneNowHidden:function(){ct=!0},cloneNowShown:function(){ct=!1},dispatchSortableEvent:function(r){Le({sortable:n,name:r,originalEvent:a})}},l))};function Le(u){Mt(it({putSortable:Ne,cloneEl:Oe,targetEl:K,rootEl:be,oldIndex:wt,oldDraggableIndex:kt,newIndex:Ye,newDraggableIndex:pt},u))}var K,Ie,ne,be,bt,on,Oe,ct,wt,Ye,kt,pt,qt,Ne,Ct=!1,cn=!1,fn=[],gt,qe,In,On,qn,_n,Ut,It,zt,Wt=!1,_t=!1,ln,Me,Cn=[],Vn=!1,vn=[],gn=typeof document<"u",en=pr,er=Yt||ut?"cssFloat":"float",sa=gn&&!_r&&!pr&&"draggable"in document.createElement("div"),gr=function(){if(gn){if(ut)return!1;var u=document.createElement("x");return u.style.cssText="pointer-events:auto",u.style.pointerEvents==="auto"}}(),hr=function(e,n){var i=Y(e),a=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),l=Dt(e,0,n),t=Dt(e,1,n),r=l&&Y(l),o=t&&Y(t),s=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+xe(l).width,c=o&&parseInt(o.marginLeft)+parseInt(o.marginRight)+xe(t).width;if(i.display==="flex")return i.flexDirection==="column"||i.flexDirection==="column-reverse"?"vertical":"horizontal";if(i.display==="grid")return i.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(l&&r.float&&r.float!=="none"){var p=r.float==="left"?"left":"right";return t&&(o.clear==="both"||o.clear===p)?"vertical":"horizontal"}return l&&(r.display==="block"||r.display==="flex"||r.display==="table"||r.display==="grid"||s>=a&&i[er]==="none"||t&&i[er]==="none"&&s+c>a)?"vertical":"horizontal"},ua=function(e,n,i){var a=i?e.left:e.top,l=i?e.right:e.bottom,t=i?e.width:e.height,r=i?n.left:n.top,o=i?n.right:n.bottom,s=i?n.width:n.height;return a===r||l===o||a+t/2===r+s/2},da=function(e,n){var i;return fn.some(function(a){var l=a[Ue].options.emptyInsertThreshold;if(!(!l||Mn(a))){var t=xe(a),r=e>=t.left-l&&e<=t.right+l,o=n>=t.top-l&&n<=t.bottom+l;if(r&&o)return i=a}}),i},yr=function(e){function n(l,t){return function(r,o,s,c){var p=r.options.group.name&&o.options.group.name&&r.options.group.name===o.options.group.name;if(l==null&&(t||p))return!0;if(l==null||l===!1)return!1;if(t&&l==="clone")return l;if(typeof l=="function")return n(l(r,o,s,c),t)(r,o,s,c);var v=(t?r:o).options.group.name;return l===!0||typeof l=="string"&&l===v||l.join&&l.indexOf(v)>-1}}var i={},a=e.group;(!a||an(a)!="object")&&(a={name:a}),i.name=a.name,i.checkPull=n(a.pull,!0),i.checkPut=n(a.put),i.revertClone=a.revertClone,e.group=i},br=function(){!gr&&ne&&Y(ne,"display","none")},xr=function(){!gr&&ne&&Y(ne,"display","")};gn&&document.addEventListener("click",function(u){if(cn)return u.preventDefault(),u.stopPropagation&&u.stopPropagation(),u.stopImmediatePropagation&&u.stopImmediatePropagation(),cn=!1,!1},!0);var ht=function(e){if(K){e=e.touches?e.touches[0]:e;var n=da(e.clientX,e.clientY);if(n){var i={};for(var a in e)e.hasOwnProperty(a)&&(i[a]=e[a]);i.target=i.rootEl=n,i.preventDefault=void 0,i.stopPropagation=void 0,n[Ue]._onDragOver(i)}}},pa=function(e){K&&K.parentNode[Ue]._isOutsideThisEl(e.target)};function q(u,e){if(!(u&&u.nodeType&&u.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(u));this.el=u,this.options=e=Ze({},e),u[Ue]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(u.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return hr(u,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,r){t.setData("Text",r.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:q.supportPointer!==!1&&"PointerEvent"in window&&!Ht,emptyInsertThreshold:5};Xt.initializePlugins(this,u,n);for(var i in n)!(i in e)&&(e[i]=n[i]);yr(e);for(var a in this)a.charAt(0)==="_"&&typeof this[a]=="function"&&(this[a]=this[a].bind(this));this.nativeDraggable=e.forceFallback?!1:sa,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?ie(u,"pointerdown",this._onTapStart):(ie(u,"mousedown",this._onTapStart),ie(u,"touchstart",this._onTapStart)),this.nativeDraggable&&(ie(u,"dragover",this),ie(u,"dragenter",this)),fn.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),Ze(this,aa())}q.prototype={constructor:q,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(It=null)},_getDirection:function(e,n){return typeof this.options.direction=="function"?this.options.direction.call(this,e,n,K):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,i=this.el,a=this.options,l=a.preventOnFilter,t=e.type,r=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,o=(r||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||o,c=a.filter;if(ba(i),!K&&!(/mousedown|pointerdown/.test(t)&&e.button!==0||a.disabled)&&!s.isContentEditable&&!(!this.nativeDraggable&&Ht&&o&&o.tagName.toUpperCase()==="SELECT")&&(o=et(o,a.draggable,i,!1),!(o&&o.animated)&&on!==o)){if(wt=Ce(o),kt=Ce(o,a.draggable),typeof c=="function"){if(c.call(this,e,o,this)){Le({sortable:n,rootEl:s,name:"filter",targetEl:o,toEl:i,fromEl:i}),He("filter",n,{evt:e}),l&&e.cancelable&&e.preventDefault();return}}else if(c&&(c=c.split(",").some(function(p){if(p=et(s,p.trim(),i,!1),p)return Le({sortable:n,rootEl:p,name:"filter",targetEl:o,fromEl:i,toEl:i}),He("filter",n,{evt:e}),!0}),c)){l&&e.cancelable&&e.preventDefault();return}a.handle&&!et(s,a.handle,i,!1)||this._prepareDragStart(e,r,o)}}},_prepareDragStart:function(e,n,i){var a=this,l=a.el,t=a.options,r=l.ownerDocument,o;if(i&&!K&&i.parentNode===l){var s=xe(i);if(be=l,K=i,Ie=K.parentNode,bt=K.nextSibling,on=i,qt=t.group,q.dragged=K,gt={target:K,clientX:(n||e).clientX,clientY:(n||e).clientY},qn=gt.clientX-s.left,_n=gt.clientY-s.top,this._lastX=(n||e).clientX,this._lastY=(n||e).clientY,K.style["will-change"]="all",o=function(){if(He("delayEnded",a,{evt:e}),q.eventCanceled){a._onDrop();return}a._disableDelayedDragEvents(),!Yn&&a.nativeDraggable&&(K.draggable=!0),a._triggerDragStart(e,n),Le({sortable:a,name:"choose",originalEvent:e}),Ee(K,t.chosenClass,!0)},t.ignore.split(",").forEach(function(c){fr(K,c.trim(),wn)}),ie(r,"dragover",ht),ie(r,"mousemove",ht),ie(r,"touchmove",ht),ie(r,"mouseup",a._onDrop),ie(r,"touchend",a._onDrop),ie(r,"touchcancel",a._onDrop),Yn&&this.nativeDraggable&&(this.options.touchStartThreshold=4,K.draggable=!0),He("delayStart",this,{evt:e}),t.delay&&(!t.delayOnTouchOnly||n)&&(!this.nativeDraggable||!(Yt||ut))){if(q.eventCanceled){this._onDrop();return}ie(r,"mouseup",a._disableDelayedDrag),ie(r,"touchend",a._disableDelayedDrag),ie(r,"touchcancel",a._disableDelayedDrag),ie(r,"mousemove",a._delayedDragTouchMoveHandler),ie(r,"touchmove",a._delayedDragTouchMoveHandler),t.supportPointer&&ie(r,"pointermove",a._delayedDragTouchMoveHandler),a._dragStartTimer=setTimeout(o,t.delay)}else o()}},_delayedDragTouchMoveHandler:function(e){var n=e.touches?e.touches[0]:e;Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){K&&wn(K),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;oe(e,"mouseup",this._disableDelayedDrag),oe(e,"touchend",this._disableDelayedDrag),oe(e,"touchcancel",this._disableDelayedDrag),oe(e,"mousemove",this._delayedDragTouchMoveHandler),oe(e,"touchmove",this._delayedDragTouchMoveHandler),oe(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,n){n=n||e.pointerType=="touch"&&e,!this.nativeDraggable||n?this.options.supportPointer?ie(document,"pointermove",this._onTouchMove):n?ie(document,"touchmove",this._onTouchMove):ie(document,"mousemove",this._onTouchMove):(ie(K,"dragend",this),ie(be,"dragstart",this._onDragStart));try{document.selection?sn(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,n){if(Ct=!1,be&&K){He("dragStarted",this,{evt:n}),this.nativeDraggable&&ie(document,"dragover",pa);var i=this.options;!e&&Ee(K,i.dragClass,!1),Ee(K,i.ghostClass,!0),q.active=this,e&&this._appendGhost(),Le({sortable:this,name:"start",originalEvent:n})}else this._nulling()},_emulateDragOver:function(){if(qe){this._lastX=qe.clientX,this._lastY=qe.clientY,br();for(var e=document.elementFromPoint(qe.clientX,qe.clientY),n=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(qe.clientX,qe.clientY),e!==n);)n=e;if(K.parentNode[Ue]._isOutsideThisEl(e),n)do{if(n[Ue]){var i=void 0;if(i=n[Ue]._onDragOver({clientX:qe.clientX,clientY:qe.clientY,target:e,rootEl:n}),i&&!this.options.dragoverBubble)break}e=n}while(n=n.parentNode);xr()}},_onTouchMove:function(e){if(gt){var n=this.options,i=n.fallbackTolerance,a=n.fallbackOffset,l=e.touches?e.touches[0]:e,t=ne&&xt(ne,!0),r=ne&&t&&t.a,o=ne&&t&&t.d,s=en&&Me&&Zn(Me),c=(l.clientX-gt.clientX+a.x)/(r||1)+(s?s[0]-Cn[0]:0)/(r||1),p=(l.clientY-gt.clientY+a.y)/(o||1)+(s?s[1]-Cn[1]:0)/(o||1);if(!q.active&&!Ct){if(i&&Math.max(Math.abs(l.clientX-this._lastX),Math.abs(l.clientY-this._lastY))=0&&(Le({rootEl:Ie,name:"add",toEl:Ie,fromEl:be,originalEvent:e}),Le({sortable:this,name:"remove",toEl:Ie,originalEvent:e}),Le({rootEl:Ie,name:"sort",toEl:Ie,fromEl:be,originalEvent:e}),Le({sortable:this,name:"sort",toEl:Ie,originalEvent:e})),Ne&&Ne.save()):Ye!==wt&&Ye>=0&&(Le({sortable:this,name:"update",toEl:Ie,originalEvent:e}),Le({sortable:this,name:"sort",toEl:Ie,originalEvent:e})),q.active&&((Ye==null||Ye===-1)&&(Ye=wt,pt=kt),Le({sortable:this,name:"end",toEl:Ie,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){He("nulling",this),be=K=Ie=ne=bt=Oe=on=ct=gt=qe=Ut=Ye=pt=wt=kt=It=zt=Ne=qt=q.dragged=q.ghost=q.clone=q.active=null,vn.forEach(function(e){e.checked=!0}),vn.length=In=On=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":K&&(this._onDragOver(e),ca(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],n,i=this.el.children,a=0,l=i.length,t=this.options;ai.right+a||u.clientX<=i.right&&u.clientY>i.bottom&&u.clientX>=i.left:u.clientX>i.right&&u.clientY>i.top||u.clientX<=i.right&&u.clientY>i.bottom+a}function ga(u,e,n,i,a,l,t,r){var o=i?u.clientY:u.clientX,s=i?n.height:n.width,c=i?n.top:n.left,p=i?n.bottom:n.right,v=!1;if(!t){if(r&&lnc+s*l/2:op-ln)return-zt}else if(o>c+s*(1-a)/2&&op-s*l/2)?o>c+s/2?1:-1:0}function ha(u){return Ce(K)1&&(te.forEach(function(r){l.addAnimationState({target:r,rect:Be?xe(r):t}),Sn(r),r.fromRect=t,i.removeAnimationState(r)}),Be=!1,Oa(!this.options.removeCloneOnHide,a))},dragOverCompleted:function(n){var i=n.sortable,a=n.isOwner,l=n.insertion,t=n.activeSortable,r=n.parentEl,o=n.putSortable,s=this.options;if(l){if(a&&t._hideClone(),Rt=!1,s.animation&&te.length>1&&(Be||!a&&!t.options.sort&&!o)){var c=xe(he,!1,!0,!0);te.forEach(function(v){v!==he&&(Qn(v,c),r.appendChild(v))}),Be=!0}if(!a)if(Be||rn(),te.length>1){var p=nn;t._showClone(i),t.options.animation&&!nn&&p&&We.forEach(function(v){t.addAnimationState({target:v,rect:Nt}),v.fromRect=Nt,v.thisAnimationDuration=null})}else t._showClone(i)}},dragOverAnimationCapture:function(n){var i=n.dragRect,a=n.isOwner,l=n.activeSortable;if(te.forEach(function(r){r.thisAnimationDuration=null}),l.options.animation&&!a&&l.multiDrag.isMultiDrag){Nt=Ze({},i);var t=xt(he,!0);Nt.top-=t.f,Nt.left-=t.e}},dragOverAnimationComplete:function(){Be&&(Be=!1,rn())},drop:function(n){var i=n.originalEvent,a=n.rootEl,l=n.parentEl,t=n.sortable,r=n.dispatchSortableEvent,o=n.oldIndex,s=n.putSortable,c=s||this.sortable;if(i){var p=this.options,v=l.children;if(!Ot)if(p.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),Ee(he,p.selectedClass,!~te.indexOf(he)),~te.indexOf(he))te.splice(te.indexOf(he),1),jt=null,Mt({sortable:t,rootEl:a,name:"deselect",targetEl:he,originalEvt:i});else{if(te.push(he),Mt({sortable:t,rootEl:a,name:"select",targetEl:he,originalEvt:i}),i.shiftKey&&jt&&t.el.contains(jt)){var m=Ce(jt),d=Ce(he);if(~m&&~d&&m!==d){var g,h;for(d>m?(h=m,g=d):(h=d,g=m+1);h1){var b=xe(he),f=Ce(he,":not(."+this.options.selectedClass+")");if(!Rt&&p.animation&&(he.thisAnimationDuration=null),c.captureAnimationState(),!Rt&&(p.animation&&(he.fromRect=b,te.forEach(function(S){if(S.thisAnimationDuration=null,S!==he){var C=Be?xe(S):b;S.fromRect=C,c.addAnimationState({target:S,rect:C})}})),rn(),te.forEach(function(S){v[f]?l.insertBefore(S,v[f]):l.appendChild(S),f++}),o===Ce(he))){var x=!1;te.forEach(function(S){if(S.sortableIndex!==Ce(S)){x=!0;return}}),x&&r("update")}te.forEach(function(S){Sn(S)}),c.animateAll()}_e=c}(a===l||s&&s.lastPutMode!=="clone")&&We.forEach(function(S){S.parentNode&&S.parentNode.removeChild(S)})}},nullingGlobal:function(){this.isMultiDrag=Ot=!1,We.length=0},destroyGlobal:function(){this._deselectMultiDrag(),oe(document,"pointerup",this._deselectMultiDrag),oe(document,"mouseup",this._deselectMultiDrag),oe(document,"touchend",this._deselectMultiDrag),oe(document,"keydown",this._checkKeyDown),oe(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(n){if(!(typeof Ot<"u"&&Ot)&&_e===this.sortable&&!(n&&et(n.target,this.options.draggable,this.sortable.el,!1))&&!(n&&n.button!==0))for(;te.length;){var i=te[0];Ee(i,this.options.selectedClass,!1),te.shift(),Mt({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:i,originalEvt:n})}},_checkKeyDown:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},Ze(u,{pluginName:"multiDrag",utils:{select:function(n){var i=n.parentNode[Ue];!i||!i.options.multiDrag||~te.indexOf(n)||(_e&&_e!==i&&(_e.multiDrag._deselectMultiDrag(),_e=i),Ee(n,i.options.selectedClass,!0),te.push(n))},deselect:function(n){var i=n.parentNode[Ue],a=te.indexOf(n);!i||!i.options.multiDrag||!~a||(Ee(n,i.options.selectedClass,!1),te.splice(a,1))}},eventProperties:function(){var n=this,i=[],a=[];return te.forEach(function(l){i.push({multiDragElement:l,index:l.sortableIndex});var t;Be&&l!==he?t=-1:Be?t=Ce(l,":not(."+n.options.selectedClass+")"):t=Ce(l),a.push({multiDragElement:l,index:t})}),{items:Yr(te),clones:[].concat(We),oldIndicies:i,newIndicies:a}},optionListeners:{multiDragKey:function(n){return n=n.toLowerCase(),n==="ctrl"?n="Control":n.length>1&&(n=n.charAt(0).toUpperCase()+n.substr(1)),n}}})}function Oa(u,e){te.forEach(function(n,i){var a=e.children[n.sortableIndex+(u?Number(i):0)];a?e.insertBefore(n,a):e.appendChild(n)})}function nr(u,e){We.forEach(function(n,i){var a=e.children[n.sortableIndex+(u?Number(i):0)];a?e.insertBefore(n,a):e.appendChild(n)})}function rn(){te.forEach(function(u){u!==he&&u.parentNode&&u.parentNode.removeChild(u)})}q.mount(new xa);q.mount(Kn,Ln);const Ca=Object.freeze(Object.defineProperty({__proto__:null,MultiDrag:Ia,Sortable:q,Swap:Sa,default:q},Symbol.toStringTag,{value:"Module"})),wa=Tr(Ca);(function(u,e){(function(i,a){u.exports=a(Ar,wa)})(typeof self<"u"?self:Pn,function(n,i){return function(a){var l={};function t(r){if(l[r])return l[r].exports;var o=l[r]={i:r,l:!1,exports:{}};return a[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=a,t.c=l,t.d=function(r,o,s){t.o(r,o)||Object.defineProperty(r,o,{enumerable:!0,get:s})},t.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t.t=function(r,o){if(o&1&&(r=t(r)),o&8||o&4&&typeof r=="object"&&r&&r.__esModule)return r;var s=Object.create(null);if(t.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:r}),o&2&&typeof r!="string")for(var c in r)t.d(s,c,(function(p){return r[p]}).bind(null,c));return s},t.n=function(r){var o=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(o,"a",o),o},t.o=function(r,o){return Object.prototype.hasOwnProperty.call(r,o)},t.p="",t(t.s="fb15")}({"00ee":function(a,l,t){var r=t("b622"),o=r("toStringTag"),s={};s[o]="z",a.exports=String(s)==="[object z]"},"0366":function(a,l,t){var r=t("1c0b");a.exports=function(o,s,c){if(r(o),s===void 0)return o;switch(c){case 0:return function(){return o.call(s)};case 1:return function(p){return o.call(s,p)};case 2:return function(p,v){return o.call(s,p,v)};case 3:return function(p,v,m){return o.call(s,p,v,m)}}return function(){return o.apply(s,arguments)}}},"057f":function(a,l,t){var r=t("fc6a"),o=t("241c").f,s={}.toString,c=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],p=function(v){try{return o(v)}catch{return c.slice()}};a.exports.f=function(m){return c&&s.call(m)=="[object Window]"?p(m):o(r(m))}},"06cf":function(a,l,t){var r=t("83ab"),o=t("d1e7"),s=t("5c6c"),c=t("fc6a"),p=t("c04e"),v=t("5135"),m=t("0cfb"),d=Object.getOwnPropertyDescriptor;l.f=r?d:function(h,b){if(h=c(h),b=p(b,!0),m)try{return d(h,b)}catch{}if(v(h,b))return s(!o.f.call(h,b),h[b])}},"0cfb":function(a,l,t){var r=t("83ab"),o=t("d039"),s=t("cc12");a.exports=!r&&!o(function(){return Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a!=7})},"13d5":function(a,l,t){var r=t("23e7"),o=t("d58f").left,s=t("a640"),c=t("ae40"),p=s("reduce"),v=c("reduce",{1:0});r({target:"Array",proto:!0,forced:!p||!v},{reduce:function(d){return o(this,d,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"14c3":function(a,l,t){var r=t("c6b6"),o=t("9263");a.exports=function(s,c){var p=s.exec;if(typeof p=="function"){var v=p.call(s,c);if(typeof v!="object")throw TypeError("RegExp exec method returned something other than an Object or null");return v}if(r(s)!=="RegExp")throw TypeError("RegExp#exec called on incompatible receiver");return o.call(s,c)}},"159b":function(a,l,t){var r=t("da84"),o=t("fdbc"),s=t("17c2"),c=t("9112");for(var p in o){var v=r[p],m=v&&v.prototype;if(m&&m.forEach!==s)try{c(m,"forEach",s)}catch{m.forEach=s}}},"17c2":function(a,l,t){var r=t("b727").forEach,o=t("a640"),s=t("ae40"),c=o("forEach"),p=s("forEach");a.exports=!c||!p?function(m){return r(this,m,arguments.length>1?arguments[1]:void 0)}:[].forEach},"1be4":function(a,l,t){var r=t("d066");a.exports=r("document","documentElement")},"1c0b":function(a,l){a.exports=function(t){if(typeof t!="function")throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(a,l,t){var r=t("b622"),o=r("iterator"),s=!1;try{var c=0,p={next:function(){return{done:!!c++}},return:function(){s=!0}};p[o]=function(){return this},Array.from(p,function(){throw 2})}catch{}a.exports=function(v,m){if(!m&&!s)return!1;var d=!1;try{var g={};g[o]=function(){return{next:function(){return{done:d=!0}}}},v(g)}catch{}return d}},"1d80":function(a,l){a.exports=function(t){if(t==null)throw TypeError("Can't call method on "+t);return t}},"1dde":function(a,l,t){var r=t("d039"),o=t("b622"),s=t("2d00"),c=o("species");a.exports=function(p){return s>=51||!r(function(){var v=[],m=v.constructor={};return m[c]=function(){return{foo:1}},v[p](Boolean).foo!==1})}},"23cb":function(a,l,t){var r=t("a691"),o=Math.max,s=Math.min;a.exports=function(c,p){var v=r(c);return v<0?o(v+p,0):s(v,p)}},"23e7":function(a,l,t){var r=t("da84"),o=t("06cf").f,s=t("9112"),c=t("6eeb"),p=t("ce4e"),v=t("e893"),m=t("94ca");a.exports=function(d,g){var h=d.target,b=d.global,f=d.stat,x,S,C,O,P,D;if(b?S=r:f?S=r[h]||p(h,{}):S=(r[h]||{}).prototype,S)for(C in g){if(P=g[C],d.noTargetGet?(D=o(S,C),O=D&&D.value):O=S[C],x=m(b?C:h+(f?".":"#")+C,d.forced),!x&&O!==void 0){if(typeof P==typeof O)continue;v(P,O)}(d.sham||O&&O.sham)&&s(P,"sham",!0),c(S,C,P,d)}}},"241c":function(a,l,t){var r=t("ca84"),o=t("7839"),s=o.concat("length","prototype");l.f=Object.getOwnPropertyNames||function(p){return r(p,s)}},"25f0":function(a,l,t){var r=t("6eeb"),o=t("825a"),s=t("d039"),c=t("ad6d"),p="toString",v=RegExp.prototype,m=v[p],d=s(function(){return m.call({source:"a",flags:"b"})!="/a/b"}),g=m.name!=p;(d||g)&&r(RegExp.prototype,p,function(){var b=o(this),f=String(b.source),x=b.flags,S=String(x===void 0&&b instanceof RegExp&&!("flags"in v)?c.call(b):x);return"/"+f+"/"+S},{unsafe:!0})},"2ca0":function(a,l,t){var r=t("23e7"),o=t("06cf").f,s=t("50c4"),c=t("5a34"),p=t("1d80"),v=t("ab13"),m=t("c430"),d="".startsWith,g=Math.min,h=v("startsWith"),b=!m&&!h&&!!function(){var f=o(String.prototype,"startsWith");return f&&!f.writable}();r({target:"String",proto:!0,forced:!b&&!h},{startsWith:function(x){var S=String(p(this));c(x);var C=s(g(arguments.length>1?arguments[1]:void 0,S.length)),O=String(x);return d?d.call(S,O,C):S.slice(C,C+O.length)===O}})},"2d00":function(a,l,t){var r=t("da84"),o=t("342f"),s=r.process,c=s&&s.versions,p=c&&c.v8,v,m;p?(v=p.split("."),m=v[0]+v[1]):o&&(v=o.match(/Edge\/(\d+)/),(!v||v[1]>=74)&&(v=o.match(/Chrome\/(\d+)/),v&&(m=v[1]))),a.exports=m&&+m},"342f":function(a,l,t){var r=t("d066");a.exports=r("navigator","userAgent")||""},"35a1":function(a,l,t){var r=t("f5df"),o=t("3f8c"),s=t("b622"),c=s("iterator");a.exports=function(p){if(p!=null)return p[c]||p["@@iterator"]||o[r(p)]}},"37e8":function(a,l,t){var r=t("83ab"),o=t("9bf2"),s=t("825a"),c=t("df75");a.exports=r?Object.defineProperties:function(v,m){s(v);for(var d=c(m),g=d.length,h=0,b;g>h;)o.f(v,b=d[h++],m[b]);return v}},"3bbe":function(a,l,t){var r=t("861d");a.exports=function(o){if(!r(o)&&o!==null)throw TypeError("Can't set "+String(o)+" as a prototype");return o}},"3ca3":function(a,l,t){var r=t("6547").charAt,o=t("69f3"),s=t("7dd0"),c="String Iterator",p=o.set,v=o.getterFor(c);s(String,"String",function(m){p(this,{type:c,string:String(m),index:0})},function(){var d=v(this),g=d.string,h=d.index,b;return h>=g.length?{value:void 0,done:!0}:(b=r(g,h),d.index+=b.length,{value:b,done:!1})})},"3f8c":function(a,l){a.exports={}},4160:function(a,l,t){var r=t("23e7"),o=t("17c2");r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},"428f":function(a,l,t){var r=t("da84");a.exports=r},"44ad":function(a,l,t){var r=t("d039"),o=t("c6b6"),s="".split;a.exports=r(function(){return!Object("z").propertyIsEnumerable(0)})?function(c){return o(c)=="String"?s.call(c,""):Object(c)}:Object},"44d2":function(a,l,t){var r=t("b622"),o=t("7c73"),s=t("9bf2"),c=r("unscopables"),p=Array.prototype;p[c]==null&&s.f(p,c,{configurable:!0,value:o(null)}),a.exports=function(v){p[c][v]=!0}},"44e7":function(a,l,t){var r=t("861d"),o=t("c6b6"),s=t("b622"),c=s("match");a.exports=function(p){var v;return r(p)&&((v=p[c])!==void 0?!!v:o(p)=="RegExp")}},4930:function(a,l,t){var r=t("d039");a.exports=!!Object.getOwnPropertySymbols&&!r(function(){return!String(Symbol())})},"4d64":function(a,l,t){var r=t("fc6a"),o=t("50c4"),s=t("23cb"),c=function(p){return function(v,m,d){var g=r(v),h=o(g.length),b=s(d,h),f;if(p&&m!=m){for(;h>b;)if(f=g[b++],f!=f)return!0}else for(;h>b;b++)if((p||b in g)&&g[b]===m)return p||b||0;return!p&&-1}};a.exports={includes:c(!0),indexOf:c(!1)}},"4de4":function(a,l,t){var r=t("23e7"),o=t("b727").filter,s=t("1dde"),c=t("ae40"),p=s("filter"),v=c("filter");r({target:"Array",proto:!0,forced:!p||!v},{filter:function(d){return o(this,d,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(a,l,t){var r=t("0366"),o=t("7b0b"),s=t("9bdd"),c=t("e95a"),p=t("50c4"),v=t("8418"),m=t("35a1");a.exports=function(g){var h=o(g),b=typeof this=="function"?this:Array,f=arguments.length,x=f>1?arguments[1]:void 0,S=x!==void 0,C=m(h),O=0,P,D,E,w,j,L;if(S&&(x=r(x,f>2?arguments[2]:void 0,2)),C!=null&&!(b==Array&&c(C)))for(w=C.call(h),j=w.next,D=new b;!(E=j.call(w)).done;O++)L=S?s(w,x,[E.value,O],!0):E.value,v(D,O,L);else for(P=p(h.length),D=new b(P);P>O;O++)L=S?x(h[O],O):h[O],v(D,O,L);return D.length=O,D}},"4fad":function(a,l,t){var r=t("23e7"),o=t("6f53").entries;r({target:"Object",stat:!0},{entries:function(c){return o(c)}})},"50c4":function(a,l,t){var r=t("a691"),o=Math.min;a.exports=function(s){return s>0?o(r(s),9007199254740991):0}},5135:function(a,l){var t={}.hasOwnProperty;a.exports=function(r,o){return t.call(r,o)}},5319:function(a,l,t){var r=t("d784"),o=t("825a"),s=t("7b0b"),c=t("50c4"),p=t("a691"),v=t("1d80"),m=t("8aa5"),d=t("14c3"),g=Math.max,h=Math.min,b=Math.floor,f=/\$([$&'`]|\d\d?|<[^>]*>)/g,x=/\$([$&'`]|\d\d?)/g,S=function(C){return C===void 0?C:String(C)};r("replace",2,function(C,O,P,D){var E=D.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,w=D.REPLACE_KEEPS_$0,j=E?"$":"$0";return[function(R,B){var U=v(this),V=R==null?void 0:R[C];return V!==void 0?V.call(R,U,B):O.call(String(U),R,B)},function(N,R){if(!E&&w||typeof R=="string"&&R.indexOf(j)===-1){var B=P(O,N,this,R);if(B.done)return B.value}var U=o(N),V=String(this),k=typeof R=="function";k||(R=String(R));var G=U.global;if(G){var de=U.unicode;U.lastIndex=0}for(var ce=[];;){var le=d(U,V);if(le===null||(ce.push(le),!G))break;var Se=String(le[0]);Se===""&&(U.lastIndex=m(V,c(U.lastIndex),de))}for(var Z="",me=0,ve=0;ve=me&&(Z+=V.slice(me,je)+Ae,me=je+ge.length)}return Z+V.slice(me)}];function L(N,R,B,U,V,k){var G=B+N.length,de=U.length,ce=x;return V!==void 0&&(V=s(V),ce=f),O.call(k,ce,function(le,Se){var Z;switch(Se.charAt(0)){case"$":return"$";case"&":return N;case"`":return R.slice(0,B);case"'":return R.slice(G);case"<":Z=V[Se.slice(1,-1)];break;default:var me=+Se;if(me===0)return le;if(me>de){var ve=b(me/10);return ve===0?le:ve<=de?U[ve-1]===void 0?Se.charAt(1):U[ve-1]+Se.charAt(1):le}Z=U[me-1]}return Z===void 0?"":Z})}})},5692:function(a,l,t){var r=t("c430"),o=t("c6cd");(a.exports=function(s,c){return o[s]||(o[s]=c!==void 0?c:{})})("versions",[]).push({version:"3.6.5",mode:r?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56ef":function(a,l,t){var r=t("d066"),o=t("241c"),s=t("7418"),c=t("825a");a.exports=r("Reflect","ownKeys")||function(v){var m=o.f(c(v)),d=s.f;return d?m.concat(d(v)):m}},"5a34":function(a,l,t){var r=t("44e7");a.exports=function(o){if(r(o))throw TypeError("The method doesn't accept regular expressions");return o}},"5c6c":function(a,l){a.exports=function(t,r){return{enumerable:!(t&1),configurable:!(t&2),writable:!(t&4),value:r}}},"5db7":function(a,l,t){var r=t("23e7"),o=t("a2bf"),s=t("7b0b"),c=t("50c4"),p=t("1c0b"),v=t("65f0");r({target:"Array",proto:!0},{flatMap:function(d){var g=s(this),h=c(g.length),b;return p(d),b=v(g,0),b.length=o(b,g,g,h,0,1,d,arguments.length>1?arguments[1]:void 0),b}})},6547:function(a,l,t){var r=t("a691"),o=t("1d80"),s=function(c){return function(p,v){var m=String(o(p)),d=r(v),g=m.length,h,b;return d<0||d>=g?c?"":void 0:(h=m.charCodeAt(d),h<55296||h>56319||d+1===g||(b=m.charCodeAt(d+1))<56320||b>57343?c?m.charAt(d):h:c?m.slice(d,d+2):(h-55296<<10)+(b-56320)+65536)}};a.exports={codeAt:s(!1),charAt:s(!0)}},"65f0":function(a,l,t){var r=t("861d"),o=t("e8b5"),s=t("b622"),c=s("species");a.exports=function(p,v){var m;return o(p)&&(m=p.constructor,typeof m=="function"&&(m===Array||o(m.prototype))?m=void 0:r(m)&&(m=m[c],m===null&&(m=void 0))),new(m===void 0?Array:m)(v===0?0:v)}},"69f3":function(a,l,t){var r=t("7f9a"),o=t("da84"),s=t("861d"),c=t("9112"),p=t("5135"),v=t("f772"),m=t("d012"),d=o.WeakMap,g,h,b,f=function(E){return b(E)?h(E):g(E,{})},x=function(E){return function(w){var j;if(!s(w)||(j=h(w)).type!==E)throw TypeError("Incompatible receiver, "+E+" required");return j}};if(r){var S=new d,C=S.get,O=S.has,P=S.set;g=function(E,w){return P.call(S,E,w),w},h=function(E){return C.call(S,E)||{}},b=function(E){return O.call(S,E)}}else{var D=v("state");m[D]=!0,g=function(E,w){return c(E,D,w),w},h=function(E){return p(E,D)?E[D]:{}},b=function(E){return p(E,D)}}a.exports={set:g,get:h,has:b,enforce:f,getterFor:x}},"6eeb":function(a,l,t){var r=t("da84"),o=t("9112"),s=t("5135"),c=t("ce4e"),p=t("8925"),v=t("69f3"),m=v.get,d=v.enforce,g=String(String).split("String");(a.exports=function(h,b,f,x){var S=x?!!x.unsafe:!1,C=x?!!x.enumerable:!1,O=x?!!x.noTargetGet:!1;if(typeof f=="function"&&(typeof b=="string"&&!s(f,"name")&&o(f,"name",b),d(f).source=g.join(typeof b=="string"?b:"")),h===r){C?h[b]=f:c(b,f);return}else S?!O&&h[b]&&(C=!0):delete h[b];C?h[b]=f:o(h,b,f)})(Function.prototype,"toString",function(){return typeof this=="function"&&m(this).source||p(this)})},"6f53":function(a,l,t){var r=t("83ab"),o=t("df75"),s=t("fc6a"),c=t("d1e7").f,p=function(v){return function(m){for(var d=s(m),g=o(d),h=g.length,b=0,f=[],x;h>b;)x=g[b++],(!r||c.call(d,x))&&f.push(v?[x,d[x]]:d[x]);return f}};a.exports={entries:p(!0),values:p(!1)}},"73d9":function(a,l,t){var r=t("44d2");r("flatMap")},7418:function(a,l){l.f=Object.getOwnPropertySymbols},"746f":function(a,l,t){var r=t("428f"),o=t("5135"),s=t("e538"),c=t("9bf2").f;a.exports=function(p){var v=r.Symbol||(r.Symbol={});o(v,p)||c(v,p,{value:s.f(p)})}},7839:function(a,l){a.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(a,l,t){var r=t("1d80");a.exports=function(o){return Object(r(o))}},"7c73":function(a,l,t){var r=t("825a"),o=t("37e8"),s=t("7839"),c=t("d012"),p=t("1be4"),v=t("cc12"),m=t("f772"),d=">",g="<",h="prototype",b="script",f=m("IE_PROTO"),x=function(){},S=function(E){return g+b+d+E+g+"/"+b+d},C=function(E){E.write(S("")),E.close();var w=E.parentWindow.Object;return E=null,w},O=function(){var E=v("iframe"),w="java"+b+":",j;return E.style.display="none",p.appendChild(E),E.src=String(w),j=E.contentWindow.document,j.open(),j.write(S("document.F=Object")),j.close(),j.F},P,D=function(){try{P=document.domain&&new ActiveXObject("htmlfile")}catch{}D=P?C(P):O();for(var E=s.length;E--;)delete D[h][s[E]];return D()};c[f]=!0,a.exports=Object.create||function(w,j){var L;return w!==null?(x[h]=r(w),L=new x,x[h]=null,L[f]=w):L=D(),j===void 0?L:o(L,j)}},"7dd0":function(a,l,t){var r=t("23e7"),o=t("9ed3"),s=t("e163"),c=t("d2bb"),p=t("d44e"),v=t("9112"),m=t("6eeb"),d=t("b622"),g=t("c430"),h=t("3f8c"),b=t("ae93"),f=b.IteratorPrototype,x=b.BUGGY_SAFARI_ITERATORS,S=d("iterator"),C="keys",O="values",P="entries",D=function(){return this};a.exports=function(E,w,j,L,N,R,B){o(j,w,L);var U=function(ve){if(ve===N&&ce)return ce;if(!x&&ve in G)return G[ve];switch(ve){case C:return function(){return new j(this,ve)};case O:return function(){return new j(this,ve)};case P:return function(){return new j(this,ve)}}return function(){return new j(this)}},V=w+" Iterator",k=!1,G=E.prototype,de=G[S]||G["@@iterator"]||N&&G[N],ce=!x&&de||U(N),le=w=="Array"&&G.entries||de,Se,Z,me;if(le&&(Se=s(le.call(new E)),f!==Object.prototype&&Se.next&&(!g&&s(Se)!==f&&(c?c(Se,f):typeof Se[S]!="function"&&v(Se,S,D)),p(Se,V,!0,!0),g&&(h[V]=D))),N==O&&de&&de.name!==O&&(k=!0,ce=function(){return de.call(this)}),(!g||B)&&G[S]!==ce&&v(G,S,ce),h[w]=ce,N)if(Z={values:U(O),keys:R?ce:U(C),entries:U(P)},B)for(me in Z)(x||k||!(me in G))&&m(G,me,Z[me]);else r({target:w,proto:!0,forced:x||k},Z);return Z}},"7f9a":function(a,l,t){var r=t("da84"),o=t("8925"),s=r.WeakMap;a.exports=typeof s=="function"&&/native code/.test(o(s))},"825a":function(a,l,t){var r=t("861d");a.exports=function(o){if(!r(o))throw TypeError(String(o)+" is not an object");return o}},"83ab":function(a,l,t){var r=t("d039");a.exports=!r(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})},8418:function(a,l,t){var r=t("c04e"),o=t("9bf2"),s=t("5c6c");a.exports=function(c,p,v){var m=r(p);m in c?o.f(c,m,s(0,v)):c[m]=v}},"861d":function(a,l){a.exports=function(t){return typeof t=="object"?t!==null:typeof t=="function"}},8875:function(a,l,t){var r,o,s;(function(c,p){o=[],r=p,s=typeof r=="function"?r.apply(l,o):r,s!==void 0&&(a.exports=s)})(typeof self<"u"?self:this,function(){function c(){var p=Object.getOwnPropertyDescriptor(document,"currentScript");if(!p&&"currentScript"in document&&document.currentScript||p&&p.get!==c&&document.currentScript)return document.currentScript;try{throw new Error}catch(P){var v=/.*at [^(]*\((.*):(.+):(.+)\)$/ig,m=/@([^@]*):(\d+):(\d+)\s*$/ig,d=v.exec(P.stack)||m.exec(P.stack),g=d&&d[1]||!1,h=d&&d[2]||!1,b=document.location.href.replace(document.location.hash,""),f,x,S,C=document.getElementsByTagName("script");g===b&&(f=document.documentElement.outerHTML,x=new RegExp("(?:[^\\n]+?\\n){0,"+(h-2)+"}[^<]*
+
diff --git a/www/fhemapp4/templates/motiondetector.json b/www/fhemapp4/templates/motiondetector.json
new file mode 100644
index 0000000..9bd051a
--- /dev/null
+++ b/www/fhemapp4/templates/motiondetector.json
@@ -0,0 +1,49 @@
+{
+ "name": "motiondetector",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "sensor:FHEM motiondetector device"
+ ],
+ "navigation": [
+ "sensor-a-room::Räume->%s",
+ "sensor-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "sensor-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "sensor-a-alias:^.+$:%s",
+ "sensor-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "sensor-motion:off:0",
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "sensor-motion:off:bereit",
+ "::Bewegung erkannt"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "sensor-motion:off::mdi-motion-sensor-off",
+ ":::mdi-motion-sensor"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/www/fhemapp4/templates/proplanta.json b/www/fhemapp4/templates/proplanta.json
new file mode 100644
index 0000000..91eb97b
--- /dev/null
+++ b/www/fhemapp4/templates/proplanta.json
@@ -0,0 +1,313 @@
+{
+ "name": "proplanta",
+ "author": "jemu75",
+ "date": "2023-12-08",
+ "panel": {
+ "devicekeys": [
+ "weather:FHEM Proplanta Device"
+ ],
+ "iconmap": [
+ "t1.gif:mdi-weather-sunny",
+ "t2.gif:mdi-weather-sunny",
+ "t3.gif:mdi-weather-partly-cloudy",
+ "t4.gif:mdi-weather-partly-cloudy",
+ "t5.gif:mdi-weather-cloudy",
+ "t6.gif:mdi-weather-partly-rainy",
+ "t7.gif:mdi-weather-rainy",
+ "t8.gif:mdi-weather-lightning",
+ "t9.gif:mdi-weather-partly-snowy",
+ "t10.gif:mdi-weather-snowy",
+ "t11.gif:mdi-weather-snowy-rainy",
+ "t12.gif:mdi-weather-hazy",
+ "t13.gif:mdi-weather-fog",
+ "t14.gif:mdi-weather-rainy",
+ "n1.gif:mdi-weather-night",
+ "n2.gif:mdi-weather-night",
+ "n3.gif:mdi-weather-night-partly-cloudy",
+ "n4.gif:mdi-weather-night-partly-cloudy",
+ "n5.gif:mdi-weather-cloudy",
+ "n6.gif:mdi-weather-partly-rainy",
+ "n7.gif:mdi-weather-rainy",
+ "n8.gif:mdi-weather-lightning",
+ "n9.gif:mdi-weather-partly-snowy",
+ "n10.gif:mdi-weather-snowy",
+ "n11.gif:mdi-weather-snowy-rainy",
+ "n12.gif:mdi-weather-hazy",
+ "n13.gif:mdi-weather-fog",
+ "n14.gif:mdi-weather-rainy"
+ ],
+ "expandable": [
+ "::true:false"
+ ],
+ "navigation": [
+ "weather-a-group::Gruppen->%s",
+ "weather-a-room::Räume->%s"
+ ]
+ },
+ "status": {
+ "bar": [
+ "weather-state:Tmin:100",
+ "::100:error"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "title": [
+ "weather-a-alias:^.+$:%s",
+ "weather-i-NAME::%s"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "weather-weather::%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "right2": "info",
+ "divider": [
+ "::true"
+ ]
+ },
+ "left1": {
+ "text": [
+ "::Luftdruck"
+ ],
+ "text2": [
+ "weather-pressure::%n()hPa"
+ ]
+ },
+ "right2": {
+ "text": [
+ "::Wind"
+ ],
+ "text2": [
+ "weather-wind::%n()km/h"
+ ]
+ }
+ },
+ {
+ "level": {
+ "divider": [
+ "::true"
+ ],
+ "left1": "info",
+ "mid": "info",
+ "right2": "info"
+ },
+ "left1": {
+ "text": [
+ "::Morgens"
+ ],
+ "icon": [
+ "weather-fc0_weatherMorningIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "::Mittags"
+ ],
+ "icon": [
+ "weather-fc0_weatherDayIcon::%s"
+ ]
+ },
+ "right2": {
+ "text": [
+ "::Abends"
+ ],
+ "icon": [
+ "weather-fc0_weatherEveningIcon::%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc0_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc0_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc0_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc0_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc0_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc1_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc1_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc1_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc1_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc1_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc2_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc2_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc2_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc2_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc2_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc3_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc3_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc3_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc3_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc3_tempMin::%n()°C"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "info",
+ "mid": "info",
+ "right2": "info",
+ "height": [
+ "::55px"
+ ]
+ },
+ "left1": {
+ "icon": [
+ "weather-fc4_weatherDayIcon::%s"
+ ]
+ },
+ "mid": {
+ "text": [
+ "weather-fc4_date::%d({ \"weekday\"\\: \"long\" }):text-left"
+ ],
+ "text3": [
+ "weather-fc4_weatherDay::%s:text-left text-caption"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "text": [
+ "weather-fc4_tempMax::%n()°C"
+ ],
+ "text3": [
+ "weather-fc4_tempMin::%n()°C"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "weather-weatherIcon:::%s"
+ ],
+ "mid1": [
+ "weather-state-ts::%d(time)"
+ ],
+ "right2": [
+ "weather-state:Tmin::mdi-sync",
+ ":::mdi-sync-off"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/www/fhemapp4/templates/smokedetector.json b/www/fhemapp4/templates/smokedetector.json
new file mode 100644
index 0000000..5c40767
--- /dev/null
+++ b/www/fhemapp4/templates/smokedetector.json
@@ -0,0 +1,49 @@
+{
+ "name": "smokedetector",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "smoke:FHEM smokedetector device"
+ ],
+ "navigation": [
+ "smoke-a-room::Räume->%s",
+ "smoke-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "smoke-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "smoke-a-alias:^.+$:%s",
+ "smoke-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "smoke-level:2:n(0):error",
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "mid": "info"
+ },
+ "mid": {
+ "text": [
+ "smoke-level:2:Rauchentwicklung",
+ "::bereit"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "level:2::mdi-fire",
+ "level:::mdi-smoke-detector"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/www/fhemapp4/templates/sonosplayer.json b/www/fhemapp4/templates/sonosplayer.json
new file mode 100644
index 0000000..5ab81b1
--- /dev/null
+++ b/www/fhemapp4/templates/sonosplayer.json
@@ -0,0 +1,168 @@
+{
+ "name": "sonosplayer",
+ "author": "jemu75",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "player:FHEM Sonosplayer device"
+ ],
+ "navigation": [
+ "player-a-room::Räume->%s",
+ "player-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "player-a-sortby::%s"
+ ],
+ "expandable": [
+ "::true"
+ ]
+ },
+ "status": {
+ "title": [
+ "player-a-alias:^.+$:%s",
+ "player-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "player-presence:^(?!appeared):0:error",
+ "player-transportState:^(?!PLAYING):0",
+ "player-currentTrackPositionSimulatedPercent:0.1:%n()",
+ "player-transportState:PLAYING:100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "btn",
+ "right2": "btn"
+ },
+ "left1": {
+ "btn": [
+ "player-presence:disappeared:mdi-skip-previous:true",
+ "player-nextTrackHandle:.\\\\|:mdi-skip-previous",
+ "player-nextTrackHandle::mdi-skip-previous:true"
+ ],
+ "click": [
+ "::set player previous"
+ ]
+ },
+ "mid": {
+ "btn": [
+ "player-presence:disappeared:mdi-play:true::outlined",
+ "player-transportState:PLAYING:mdi-pause:false::outlined",
+ "player-transportState::mdi-play:false::outlined"
+ ],
+ "click": [
+ "player-transportState:PLAYING:set player Pause",
+ "::set player Play"
+ ],
+ "size": [
+ "::6"
+ ]
+ },
+ "right2": {
+ "btn": [
+ "player-presence:disappeared:mdi-skip-next:true",
+ "player-nextTrackHandle:\\\\|.:mdi-skip-next",
+ "player-nextTrackHandle::mdi-skip-next:true"
+ ],
+ "click": [
+ "::set player next"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "info",
+ "left1": null,
+ "show": [
+ "player-currentTitle:^.+$:true",
+ "player-currentSource:^.+$:true",
+ "::false"
+ ]
+ },
+ "mid": {
+ "text": [
+ "player-currentTitle:^.+$:%s:text-h6",
+ "player-currentSource:^.+$:%s:text-h6"
+ ],
+ "text2": [
+ "player-currentArtist:^.+$:%s ~ "
+ ],
+ "text3": [
+ "player-currentAlbum:^.+$:%s"
+ ]
+ }
+ },
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "slider",
+ "right2": "info"
+ },
+ "left1": {
+ "btn": [
+ "player-GroupMute:1:mdi-volume-high",
+ "player-GroupMute:0:mdi-volume-mute"
+ ],
+ "click": [
+ "player-GroupMute:1:set player mute 0",
+ "player-GroupMute:0:set player Mute 1"
+ ],
+ "size": [
+ "::2"
+ ]
+ },
+ "mid": {
+ "slider": [
+ "player-GroupVolume::set player GroupVolume %v:%n(0):on:0:40:1"
+ ]
+ },
+ "right2": {
+ "size": [
+ "::1"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "image",
+ "left1": "info",
+ "right2": "info",
+ "show": [
+ "player-currentAlbumArtURL:empty:false",
+ "::true"
+ ],
+ "height": [
+ "::350px"
+ ]
+ },
+ "mid": {
+ "image": [
+ "player-currentAlbumArtURL::%s"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "left1": {},
+ "right2": {}
+ }
+ ],
+ "info": {
+ "left1": [
+ "player-Mute:1::mdi-volume-off",
+ "player-transportState:PLAYING::mdi-play",
+ ":::mdi-pause"
+ ],
+ "mid1": [
+ "player-currentTrackProvider:.:%s"
+ ],
+ "right2": [
+ "player-currentTrackPositionSimulated::%s"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/www/fhemapp4/templates/temperatur.json b/www/fhemapp4/templates/temperatur.json
new file mode 100644
index 0000000..ec35a6e
--- /dev/null
+++ b/www/fhemapp4/templates/temperatur.json
@@ -0,0 +1,53 @@
+{
+ "name": "temperatur",
+ "author": "jemu",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "temp:FHEM temperatur device"
+ ],
+ "navigation": [
+ "temp-a-room::Räume->%s",
+ "temp-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "temp-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "temp-a-alias:^.+$:%s",
+ "temp-i-NAME::%s"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ],
+ "bar": [
+ "::100"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "info",
+ "right2": "info"
+ },
+ "left1": {
+ "text": [
+ "temp-temperature::%n(1)°C"
+ ]
+ },
+ "right2": {
+ "text": [
+ "temp-humidity::%n()%"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "left1": [
+ "temp-temperature:0::mdi-thermometer",
+ "temp-temperature:::mdi-snowflake"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/www/fhemapp4/templates/templates.json b/www/fhemapp4/templates/templates.json
index adbb501..2856ff1 100644
--- a/www/fhemapp4/templates/templates.json
+++ b/www/fhemapp4/templates/templates.json
@@ -1,3 +1,3 @@
[
- "switch", "light", "dimmer", "contact", "blind"
+ "switch", "light", "dimmer", "contact", "blind", "thermostat", "temperatur", "smokedetector", "motiondetector", "sonosplayer", "proplanta"
]
\ No newline at end of file
diff --git a/www/fhemapp4/templates/thermostat.json b/www/fhemapp4/templates/thermostat.json
new file mode 100644
index 0000000..b7b48c1
--- /dev/null
+++ b/www/fhemapp4/templates/thermostat.json
@@ -0,0 +1,238 @@
+{
+ "name": "thermostat",
+ "author": "jemu75",
+ "date": "2024-04-16",
+ "panel": {
+ "devicekeys": [
+ "thermo:FHEM thermostat device",
+ "valve:FHEM Valve device"
+ ],
+ "navigation": [
+ "thermo-a-room::Räume->%s",
+ "thermo-a-group::Gruppen->%s"
+ ],
+ "sortby": [
+ "thermo-a-sortby::%s"
+ ]
+ },
+ "status": {
+ "title": [
+ "thermo-a-alias:^.+$:%s",
+ "thermo-i-NAME::%s"
+ ],
+ "bar": [
+ "valve-pct:^.+$:%n(0)",
+ "valve-state:on:100",
+ "valve-state::0"
+ ],
+ "imageUrl": [
+ "::images/header_01.png"
+ ]
+ },
+ "main": [
+ {
+ "level": {
+ "left1": "btn",
+ "mid": "info",
+ "right2": "btn"
+ },
+ "left1": {
+ "btn": [
+ "::mdi-minus"
+ ],
+ "divider": [
+ "::true"
+ ],
+ "click": [
+ "thermo-desired-temp:17.5:set thermo desired-temp %n(1,-0.5)"
+ ],
+ "longClick": [
+ "thermo-R-nightTemp:^.+$:set thermo desired-temp %n(1,0)"
+ ]
+ },
+ "mid": {
+ "divider": [
+ "::true"
+ ],
+ "text": [
+ "thermo-desired-temp:off:aus",
+ "thermo-desired-temp::%n(1)°C"
+ ],
+ "size": [
+ "::7"
+ ]
+ },
+ "right2": {
+ "btn": [
+ "::mdi-plus"
+ ],
+ "click": [
+ "thermo-desired-temp:25:",
+ "thermo-desired-temp::set thermo desired-temp %n(1,0.5)"
+ ],
+ "longClick": [
+ "thermo-R-dayTemp:^.+$:set thermo desired-temp %n(1,0)"
+ ]
+ }
+ },
+ {
+ "level": {
+ "mid": "chart",
+ "height": [
+ "280px"
+ ]
+ },
+ "mid": {
+ "options": {
+ "legend": {
+ "show": false
+ },
+ "yAxis": {
+ "show": false
+ },
+ "grid": {
+ "top": 0,
+ "bottom": 0,
+ "left": 0,
+ "right": 0
+ },
+ "series": [
+ {
+ "type": "gauge",
+ "center": [
+ "50%",
+ "65%"
+ ],
+ "startAngle": 200,
+ "endAngle": -20,
+ "min": 10,
+ "max": 30,
+ "splitNumber": 10,
+ "itemStyle": {
+ "color": "#FFAB91"
+ },
+ "progress": {
+ "show": true,
+ "overlap": false,
+ "width": 20
+ },
+ "pointer": {
+ "show": false
+ },
+ "axisLine": {
+ "lineStyle": {
+ "width": 20
+ }
+ },
+ "axisTick": {
+ "distance": -30,
+ "splitNumber": 4,
+ "lineStyle": {
+ "width": 2,
+ "color": "#999"
+ }
+ },
+ "splitLine": {
+ "distance": -36,
+ "length": 12,
+ "lineStyle": {
+ "width": 3,
+ "color": "#999"
+ }
+ },
+ "axisLabel": {
+ "distance": -10,
+ "color": "#999",
+ "fontSize": 10
+ },
+ "anchor": {
+ "show": false
+ },
+ "title": {
+ "show": false
+ },
+ "detail": {
+ "valueAnimation": true,
+ "width": "60%",
+ "lineHeight": 40,
+ "borderRadius": 8,
+ "offsetCenter": [
+ 0,
+ "-15%"
+ ],
+ "fontSize": 35,
+ "fontWeight": "bolder",
+ "color": "inherit"
+ }
+ },
+ {
+ "type": "gauge",
+ "center": [
+ "50%",
+ "65%"
+ ],
+ "startAngle": 200,
+ "endAngle": -20,
+ "min": 10,
+ "max": 30,
+ "itemStyle": {
+ "color": "#FD7347"
+ },
+ "progress": {
+ "show": true,
+ "width": 8
+ },
+ "pointer": {
+ "show": false
+ },
+ "axisLine": {
+ "show": false
+ },
+ "axisTick": {
+ "show": false
+ },
+ "splitLine": {
+ "show": false
+ },
+ "axisLabel": {
+ "show": false
+ },
+ "detail": {
+ "valueAnimation": true,
+ "width": "60%",
+ "lineHeight": 40,
+ "borderRadius": 8,
+ "offsetCenter": [
+ 0,
+ "15%"
+ ],
+ "fontSize": 20,
+ "fontWeight": "normal",
+ "color": "inherit"
+ }
+ }
+ ]
+ },
+ "serie": [
+ "thermo-desired-temp::%s:Soll:1:°C:gauge",
+ "thermo-measured-temp::%s:Temperatur:1:°C:gauge"
+ ]
+ }
+ }
+ ],
+ "info": {
+ "mid1": [
+ "thermo-measured-temp::%n(1)°C:mdi-thermometer"
+ ],
+ "mid2": [
+ "thermo-humidity::%n()%:mdi-water"
+ ],
+ "left1": [
+ "thermo-tempState:day::mdi-weather-sunny",
+ "thermo-tempState:night::mdi-weather-night"
+ ],
+ "left2": [
+ "thermo-controlMode:auto::mdi-clock-time-four-outline"
+ ]
+ }
+}
\ No newline at end of file