iobroker.satellite-display 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +26 -3
- package/admin/custom/assets/Components-dEIM9Tps.js +1 -0
- package/admin/custom/customComponents.js +1 -1
- package/admin/custom/i18n/de.json +8 -1
- package/admin/custom/i18n/en.json +8 -1
- package/admin/custom/i18n/es.json +8 -1
- package/admin/custom/i18n/fr.json +8 -1
- package/admin/custom/i18n/it.json +8 -1
- package/admin/custom/i18n/nl.json +8 -1
- package/admin/custom/i18n/pl.json +8 -1
- package/admin/custom/i18n/pt.json +8 -1
- package/admin/custom/i18n/ru.json +8 -1
- package/admin/custom/i18n/uk.json +8 -1
- package/admin/custom/i18n/zh-cn.json +8 -1
- package/admin/jsonConfig.json +1 -1
- package/io-package.json +38 -12
- package/lib/layout.js +32 -7
- package/lib/satellite.js +20 -1
- package/lib/values.js +29 -2
- package/main.js +66 -9
- package/package.json +2 -2
- package/admin/custom/assets/Components-Dqt07U-e.js +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 sadam6752-tech <sadam6752@gmail.com>
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sadam6752-tech <sadam6752@gmail.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -41,11 +41,12 @@ to 8 tiles. Swipe left from the clock to reach them; a page without tiles is ski
|
|
|
41
41
|
| --- | --- | --- | --- |
|
|
42
42
|
| Value | name, number with unit, or a text | all | – |
|
|
43
43
|
| Gauge | name, arc from the scale start to its end, number | square, large | – |
|
|
44
|
-
| Value with bar | name, number, bar along the scale |
|
|
45
|
-
| Value with chart | name, number, line of the last 60 values | wide, large | – |
|
|
44
|
+
| Value with bar | name, number, bar along the scale | all | – |
|
|
45
|
+
| Value with chart | name, number, line of the last 60 values | small, wide, large | – |
|
|
46
46
|
| Switch | name, toggle; the tile lights up when on | small, square, wide | toggles the state |
|
|
47
47
|
| Dimmer | name, toggle, slider, percent | wide, large | toggle and slider write the states |
|
|
48
48
|
| Button | icon, name | small, square, wide | writes `true` to the state |
|
|
49
|
+
| Thermostat | name, arc with the current temperature, − target +, a dot for the heating relay | square, large | − and + write the target |
|
|
49
50
|
|
|
50
51
|
## Settings
|
|
51
52
|
|
|
@@ -54,7 +55,8 @@ to 8 tiles. Swipe left from the clock to reach them; a page without tiles is ski
|
|
|
54
55
|
2. **Tiles:** a graphical editor. Choose the satellite and the page; the preview shows the screen with the current
|
|
55
56
|
values. Click a free cell to add a tile, drag a tile to move it, click a tile to edit it on the right: kind,
|
|
56
57
|
size, the state (with the object browser of the admin), name, unit, icon and scale. Name, unit and scale may stay
|
|
57
|
-
empty: they come from the object of the state. A tile
|
|
58
|
+
empty: they come from the object of the state. A tile the adapter would leave out is marked red, with the reason
|
|
59
|
+
(a size its kind does not come in, a thermostat without its target, more than eight tiles on a page).
|
|
58
60
|
3. **Charts (optional):** a history adapter (history, sql, influxdb). A chart then starts with the last hours of its
|
|
59
61
|
state instead of empty.
|
|
60
62
|
|
|
@@ -66,6 +68,11 @@ Details of the kinds:
|
|
|
66
68
|
writes the level when it is released. The second state is its on/off. Without a second state a level of 0 is off,
|
|
67
69
|
and switching on restores the last level.
|
|
68
70
|
- **Button:** writes `true` (or `1` for a number state), e.g. to a scene or a script trigger.
|
|
71
|
+
- **Thermostat:** three states: the current temperature (the arc), the target temperature (written by − and +)
|
|
72
|
+
and, optional, the heating relay (the dot: green on, grey off). − and + change the target on the screen at
|
|
73
|
+
once by the step (0.5 unless set); one second after the last press the adapter writes it. The scale and the
|
|
74
|
+
limits of the target come from the object of the target temperature (`min`/`max`), else 5-30. Needs the
|
|
75
|
+
satellite firmware **2.0.1**; an older firmware is reported in the log and the tile is left out.
|
|
69
76
|
- A value that is no number (text, `true`/`false`) shows as text on a value tile.
|
|
70
77
|
|
|
71
78
|
The toggle and the slider change at once on the screen. When the device does not follow, the tile shows the real
|
|
@@ -85,6 +92,8 @@ again by itself.
|
|
|
85
92
|
|
|
86
93
|
## Notes
|
|
87
94
|
|
|
95
|
+
- The small bar and chart tiles (1 × 1) need the satellite firmware **2.0.2**; an older one leaves them empty and
|
|
96
|
+
writes a warning into its own log.
|
|
88
97
|
- The satellite firmware must be **2.0.0** or newer; an older firmware is reported in the log ("tile pages need the
|
|
89
98
|
satellite firmware 2.0.0").
|
|
90
99
|
- The format between adapter and firmware is described in
|
|
@@ -93,11 +102,25 @@ again by itself.
|
|
|
93
102
|
|
|
94
103
|
## Changelog
|
|
95
104
|
|
|
105
|
+
Older changes: [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
|
|
106
|
+
|
|
96
107
|
<!--
|
|
97
108
|
Placeholder for the next version (at the beginning of the line):
|
|
98
109
|
### **WORK IN PROGRESS**
|
|
99
110
|
-->
|
|
100
111
|
|
|
112
|
+
### 0.0.3 (2026-11-09)
|
|
113
|
+
|
|
114
|
+
- Small bar and chart tiles (1 × 1): the name and the value on one line, the bar or the line below (satellite
|
|
115
|
+
firmware 2.0.2)
|
|
116
|
+
- The tile editor marks a tile the adapter would leave out, with the reason
|
|
117
|
+
|
|
118
|
+
### 0.0.2 (2026-11-09)
|
|
119
|
+
|
|
120
|
+
- Thermostat tile: current temperature in an arc, the target temperature with − and +, a dot for the heating
|
|
121
|
+
relay (satellite firmware 2.0.1)
|
|
122
|
+
- Released through GitHub Actions with provenance
|
|
123
|
+
|
|
101
124
|
### 0.0.1 (2026-11-09)
|
|
102
125
|
|
|
103
126
|
- First version: tile pages on the touch display of ESPHome voice satellites, with a graphical tile editor
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BtcMQbqk.js";import{$r as e,Dn as t,K as n,Mt as r,Qr as i,Qt as a,Sn as o,Yt as s,Zr as c,Zt as l,_ as u,cn as d,en as f,m as p,on as m,pt as h,rn as g,tn as _,zn as v}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-B7AZpjV-.js";import{t as y}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare__shared-B2hx53j0.js";var b={s:[1,1],q:[1,2],w:[2,1],l:[2,2]},x={value:[`s`,`q`,`w`,`l`],gauge:[`q`,`l`],bar:[`s`,`q`,`w`,`l`],chart:[`s`,`w`,`l`],switch:[`s`,`q`,`w`],dimmer:[`w`,`l`],button:[`s`,`q`,`w`],thermostat:[`q`,`l`]},S=`lightbulb.lamp.ceiling-light.power-plug.power.fan.radiator.thermometer.water-percent.flash.solar-power.battery.window-closed.window-open.door.garage.blinds.lock.lock-open.bell.television.movie.music.speaker.coffee.washing-machine.dishwasher.car.home.bed.sofa.shower.weather-sunny.weather-night.alarm.play.pause.stop.check.close`.split(`.`);function C(e){return!x[e.type]||!x[e.type].includes(e.size)?`sd_bad_size`:e.type===`thermostat`&&!String(e.state2||``).trim()?`sd_need_target`:``}function w(e,t){let n=e=>String(e||``).trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)||`satellite`;return n(e)===n(t)}function T(e,t,n){let[r,i]=b[e];return t>=0&&n>=0&&t+r<=2&&n+i<=4}function E(e,t){let[n,r]=b[e.size],[i,a]=b[t.size];return e.col<t.col+i&&t.col<e.col+n&&e.row<t.row+a&&t.row<e.row+r}function D(e,t,n,r,i,a,o=-1){return T(r,i,a)?!e.some((e,s)=>s!==o&&e.enabled!==!1&&w(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&E(e,{size:r,col:i,row:a})):!1}function O(e,t,n,r,i=-1){for(let a=0;a<4;a++)for(let o=0;o<2;o++)if(D(e,t,n,r,o,a,i))return{col:o,row:a};return null}function k(e,t,n,r,i){return e.findIndex(e=>e.enabled!==!1&&w(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&E(e,{size:`s`,col:r,row:i}))}function A(e,t,n){return e.map((e,t)=>({t:e,i:t})).filter(e=>e.t.enabled!==!1&&w(e.t.satellite,t)&&Number(e.t.page)===n).slice(8).map(e=>e.i)}function j(e,t,n,r){return{enabled:!0,satellite:e,page:t,col:n,row:r,size:`s`,type:`value`,state:``,state2:``,state3:``,label:``,unit:``,icon:``,decimals:``,min:``,max:``,step:``}}var M=1.5,N=e=>Math.round(e*M),P=e=>6+e*157,F=e=>6+Math.floor(e*117/2),I={value:`sd_kind_value`,gauge:`sd_kind_gauge`,bar:`sd_kind_bar`,chart:`sd_kind_chart`,switch:`sd_kind_switch`,dimmer:`sd_kind_dimmer`,button:`sd_kind_button`,thermostat:`sd_kind_thermostat`},L={s:`1 × 1`,q:`1 × 2`,w:`2 × 1`,l:`2 × 2`},R={screen:`#0B1118`,tile:`#18212B`,tileOn:`#0C4A6E`,label:`#8A9AAC`,accent:`#38BDF8`,track:`#2E3A47`,heatOn:`#4CAF50`,heatOff:`#4B5563`},z={TileEditor:class extends y{constructor(e){super(e),this.state={...this.state,satellite:``,page:1,selected:-1,pickFor:null,dragging:-1,values:{},names:{}}}async componentDidMount(){await super.componentDidMount();let e=this.satelliteNames();e.length&&this.setState({satellite:e[0]},()=>void this.readStates())}tiles(){let e=y.getValue(this.props.data,`tiles`);return Array.isArray(e)?e:[]}satelliteNames(){let e=y.getValue(this.props.data,`satellites`),t=(Array.isArray(e)?e:[]).map(e=>String((e==null?void 0:e.name)||``).trim()).filter(Boolean);for(let e of this.tiles()){let n=String(e.satellite||``).trim();n&&!t.some(e=>w(e,n))&&t.push(n)}return t}isConfigured(e){let t=y.getValue(this.props.data,`satellites`);return(Array.isArray(t)?t:[]).some(t=>w((t==null?void 0:t.name)||``,e))}setTiles(e,t=this.state.selected){this.setState({selected:t},()=>void this.onChange(`tiles`,e,()=>void this.readStates()))}update(e,t){let n=this.tiles().map((n,r)=>r===e?{...n,...t}:n);this.setTiles(n)}async readStates(){let e=this.props.oContext.socket,t=new Set;for(let e of this.pageTiles())for(let n of[e.tile.state,e.tile.state2,e.tile.state3])n&&!(n in this.state.values)&&t.add(n);if(!t.size)return;let n={},r={},i=u.getLanguage();for(let o of t)try{var a;let t=await e.getState(o);n[o]=t==null?void 0:t.val;let s=await e.getObject(o),c=s==null||(a=s.common)==null?void 0:a.name;r[o]=typeof c==`object`&&c?c[i]||c.en||``:String(c||``)}catch{n[o]=void 0}this.setState(e=>({values:{...e.values,...n},names:{...e.names,...r}}))}pageTiles(){return this.tiles().map((e,t)=>({tile:e,index:t})).filter(e=>e.tile.enabled!==!1&&w(e.tile.satellite,this.state.satellite)&&Number(e.tile.page)===this.state.page&&!!b[e.tile.size])}addAt(e,t){let n=[...this.tiles(),j(this.state.satellite,this.state.page,e,t)];this.setTiles(n,n.length-1)}moveTo(e,t,n){let r=this.tiles()[e];r&&D(this.tiles(),this.state.satellite,this.state.page,r.size,t,n,e)&&this.update(e,{col:t,row:n})}remove(e){this.setTiles(this.tiles().filter((t,n)=>n!==e),-1)}changeKind(e,t){let n=this.tiles()[e],{size:r,col:i,row:a}=n;if(!x[t].includes(r)){let o=x[t].find(t=>D(this.tiles(),n.satellite,Number(n.page),t,i,a,e));if(o)r=o;else for(let o of x[t]){let t=O(this.tiles(),n.satellite,Number(n.page),o,e);if(t){r=o,{col:i,row:a}=t;break}}}this.update(e,{type:t,size:r,col:i,row:a,state2:t===`dimmer`||t===`thermostat`?n.state2:``,state3:t===`thermostat`&&n.state3||``})}changePage(e,t){let n=this.tiles()[e],r=O(this.tiles(),n.satellite,t,n.size,e);r&&(this.update(e,{page:t,...r}),this.setState({page:t}))}renderTileFace(t,n,r){let a=this.state.values[t.state],o=t.label||this.state.names[t.state]||t.state.split(`.`).pop()||u.t(`sd_no_state`),s=typeof a==`number`?a:NaN,l=t.unit&&t.type!==`dimmer`?` ${t.unit}`:``,d=a==null?`–`:typeof a==`number`?`${Number(a.toFixed(t.decimals===``||t.decimals===null?1:Number(t.decimals)))}${l}`:`${String(a)}${typeof a==`boolean`?``:l}`,f=t.type===`dimmer`&&t.state2?!!this.state.values[t.state2]:a===!0||typeof a==`number`&&a>0,p=t.min===``||t.min===null?0:Number(t.min),m=t.max===``||t.max===null?100:Number(t.max),h=Number.isFinite(s)&&m>p?Math.max(0,Math.min(1,(s-p)/(m-p))):.5,g=i(`div`,{style:{color:R.label,fontSize:N(10),whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:o}),_=r>N(60),v=i(`div`,{style:{fontSize:N(_?22:14)},children:d}),y=i(`div`,{style:{width:N(26),height:N(14),borderRadius:N(7),background:f?R.accent:R.track,position:`relative`,flex:`none`},children:i(`div`,{style:{position:`absolute`,top:N(2),left:N(f?14:2),width:N(10),height:N(10),borderRadius:`50%`,background:`#fff`}})}),b=(t,n)=>{let r=t/2-N(4),a=Math.PI*2*r*.75;return e(`svg`,{width:t,height:t,style:n,children:[i(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:R.track,strokeWidth:N(5),strokeDasharray:`${a} ${a*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:R.accent,strokeWidth:N(5),strokeDasharray:`${a*h} ${a*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+N(4),textAnchor:`middle`,fill:`#fff`,fontSize:N(11),children:d})]})};switch(t.type){case`thermostat`:{let n=this.state.values[t.state2],r=Number(t.step)>0?Number(t.step):.5,a=typeof n==`number`?`${n.toFixed(+(r<1))}${t.unit?` ${t.unit}`:``}`:`–`,o=t.state3?this.state.values[t.state3]:void 0,s=t.state3&&o!=null?i(`div`,{style:{position:`absolute`,right:N(6),top:N(5),width:N(10),height:N(10),borderRadius:`50%`,background:o===!0||Number(o)>0?R.heatOn:R.heatOff}}):null,l=e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,color:R.label,flex:1},children:[i(`span`,{style:{fontSize:N(18),fontWeight:700},children:`−`}),i(`span`,{style:{fontSize:t.size===`l`?N(22):N(11),color:t.size===`l`?`#fff`:R.label},children:a}),i(`span`,{style:{fontSize:N(18),fontWeight:700},children:`+`})]});return t.size===`l`?e(c,{children:[s,g,e(`div`,{style:{display:`flex`,alignItems:`center`,gap:N(12)},children:[b(N(52),{display:`block`,flex:`none`}),l]})]}):e(c,{children:[s,g,b(N(46),{display:`block`,margin:`0 auto`}),i(`div`,{style:{display:`flex`,marginTop:-N(4)},children:l})]})}case`gauge`:{let t=N(56),n=t/2-N(4),r=Math.PI*2*n*.75;return e(c,{children:[g,e(`svg`,{width:t,height:t,style:{display:`block`,margin:`${N(2)}px auto 0`},children:[i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:R.track,strokeWidth:N(5),strokeDasharray:`${r} ${r*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:R.accent,strokeWidth:N(5),strokeDasharray:`${r*h} ${r*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+N(4),textAnchor:`middle`,fill:`#fff`,fontSize:N(11),children:d})]})]})}case`bar`:case`chart`:return t.size===`s`?e(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100%`},children:[e(`div`,{style:{display:`flex`,alignItems:`center`,gap:N(4)},children:[i(`div`,{style:{flex:1,minWidth:0},children:g}),i(`div`,{style:{fontSize:N(14)},children:d})]}),t.type===`bar`?i(`div`,{style:{height:N(4),background:R.track,borderRadius:N(2),marginTop:`auto`,marginBottom:N(4)},children:i(`div`,{style:{width:`${h*100}%`,height:`100%`,background:R.accent,borderRadius:N(2)}})}):i(`svg`,{width:n-N(16),height:N(14),style:{display:`block`,marginTop:`auto`,marginBottom:N(2)},children:i(`polyline`,{fill:`none`,stroke:R.accent,strokeWidth:2,points:[0,.6,.4,.7,.3,.5,.2,.45,.35].map((e,t)=>`${t*(n-N(16))/8},${e*N(14)}`).join(` `)})})]}):t.type===`chart`?e(c,{children:[g,v,i(`svg`,{width:n-N(16),height:N(18),style:{display:`block`},children:i(`polyline`,{fill:`none`,stroke:R.accent,strokeWidth:2,points:[0,.6,.4,.7,.3,.5,.2,.45,.35].map((e,t)=>`${t*(n-N(16))/8},${e*N(18)}`).join(` `)})})]}):e(c,{children:[g,v,i(`div`,{style:{height:N(5),background:R.track,borderRadius:N(3),marginTop:N(_?14:2)},children:i(`div`,{style:{width:`${h*100}%`,height:`100%`,background:R.accent,borderRadius:N(3)}})})]});case`switch`:return e(`div`,{style:{display:`flex`,alignItems:_?`flex-start`:`center`,gap:N(6),height:`100%`,flexDirection:_?`column`:`row`,justifyContent:`space-between`},children:[i(`div`,{style:{flex:1,minWidth:0},children:g}),i(`div`,{style:{alignSelf:`flex-end`},children:y})]});case`dimmer`:return e(`div`,{style:{display:`flex`,alignItems:`center`,gap:N(6),height:`100%`},children:[i(`div`,{style:{width:N(40),minWidth:0},children:g}),y,i(`div`,{style:{flex:1,height:N(5),background:R.track,borderRadius:N(3)},children:i(`div`,{style:{width:`${Number.isFinite(s)?Math.max(0,Math.min(100,s)):50}%`,height:`100%`,background:R.accent,borderRadius:N(3)}})}),i(`div`,{style:{fontSize:N(11),width:N(30),textAlign:`right`},children:Number.isFinite(s)?`${Math.round(s)} %`:`–`})]});case`button`:return e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`center`,height:`100%`,gap:N(6),flexDirection:_?`column`:`row`},children:[t.icon?e(`span`,{style:{color:R.accent,fontSize:N(9)},children:[`◉ `,t.icon]}):null,i(`span`,{style:{fontSize:N(11)},children:o})]});default:return r<=N(53)&&n<=N(151)?e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,height:`100%`},children:[i(`div`,{style:{minWidth:0,flex:1},children:g}),i(`div`,{style:{fontSize:N(13)},children:d})]}):e(c,{children:[g,v]})}}renderScreen(){let t=this.tiles(),n=new Set(A(t,this.state.satellite,this.state.page)),a=[];for(let e=0;e<4;e++)for(let n=0;n<2;n++)k(t,this.state.satellite,this.state.page,n,e)===-1&&a.push(i(f,{title:u.t(`sd_add_here`),children:i(`div`,{onClick:()=>this.addAt(n,e),onDragOver:e=>e.preventDefault(),onDrop:t=>{t.preventDefault(),this.moveTo(this.state.dragging,n,e)},style:{position:`absolute`,left:N(P(n)),top:N(F(e)),width:N(151),height:N(F(e+1)-6-F(e)),border:`1px dashed #3a4654`,borderRadius:N(8),display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#56657a`,cursor:`pointer`,boxSizing:`border-box`},children:i(r,{})})},`c${n}${e}`));return e(`div`,{style:{position:`relative`,width:N(320),height:N(240),background:R.screen,borderRadius:10,outline:`8px solid #2a2a2a`,margin:8,flex:`none`,fontFamily:`Roboto, sans-serif`},children:[a,this.pageTiles().map(({tile:e,index:t})=>{let[r,a]=b[e.size],o=N(r===2?308:151),s=N(F(e.row+a)-6-F(e.row)),c=t===this.state.selected,l=n.has(t)?`sd_too_many`:C(e),d=e.type===`switch`&&(this.state.values[e.state]===!0||Number(this.state.values[e.state])>0);return i(`div`,{draggable:!0,onDragStart:()=>this.setState({dragging:t,selected:t}),onDragEnd:()=>this.setState({dragging:-1}),onDragOver:e=>e.preventDefault(),onDrop:e=>{var t;e.preventDefault();let n=(t=e.currentTarget.parentElement)==null?void 0:t.getBoundingClientRect();if(n){let t=Math.min(1,Math.max(0,Math.floor((e.clientX-n.left)/N(157)))),r=Math.min(3,Math.max(0,Math.floor((e.clientY-n.top)/N(58.5))));this.moveTo(this.state.dragging,t,r)}},onClick:()=>this.setState({selected:t}),title:l?u.t(l):``,style:{position:`absolute`,left:N(P(e.col)),top:N(F(e.row)),width:o,height:s,boxSizing:`border-box`,padding:`${N(4)}px ${N(7)}px`,display:e.type===`thermostat`?`flex`:void 0,flexDirection:e.type===`thermostat`?`column`:void 0,background:d?R.tileOn:R.tile,borderRadius:N(8),color:`#fff`,cursor:`grab`,overflow:`hidden`,border:`2px solid ${c?R.accent:l?`#EF4444`:`transparent`}`,opacity:l?.5:1,userSelect:`none`},children:this.renderTileFace(e,o,s)},t)})]})}renderStateField(n,r,a,o){return e(g,{sx:{display:`flex`,gap:1,alignItems:`center`},children:[i(s,{variant:`standard`,fullWidth:!0,label:u.t(o),value:r[a]||``,onChange:e=>this.update(n,{[a]:e.target.value})}),i(t,{size:`small`,title:u.t(`sd_pick_state`),onClick:()=>this.setState({pickFor:a}),children:i(h,{})})]})}renderPanel(){let t=this.state.selected,r=this.tiles()[t];if(!r||!w(r.satellite,this.state.satellite))return i(_,{variant:`body2`,sx:{opacity:.7,p:1},children:u.t(`sd_hint`)});let f=this.tiles(),p=e=>e===``?``:Number(e),h=r.type===`gauge`||r.type===`bar`||r.type===`chart`||r.type===`thermostat`,y=r.type===`dimmer`?`sd_level_state`:r.type===`thermostat`?`sd_current_state`:`sd_state`;return e(g,{sx:{display:`flex`,flexDirection:`column`,gap:1.5,minWidth:260,maxWidth:360,flex:1},children:[C(r)?i(_,{variant:`body2`,color:`error`,children:u.t(C(r))}):null,i(o,{control:i(d,{checked:r.enabled!==!1,onChange:e=>this.update(t,{enabled:e.target.checked})}),label:u.t(`sd_active`)}),i(s,{select:!0,variant:`standard`,label:u.t(`sd_kind`),value:r.type,onChange:e=>this.changeKind(t,e.target.value),children:Object.keys(x).map(e=>i(v,{value:e,children:u.t(I[e])},e))}),e(g,{children:[i(_,{variant:`caption`,sx:{opacity:.7},children:u.t(`sd_size`)}),i(a,{exclusive:!0,size:`small`,value:r.size,sx:{display:`flex`},onChange:(e,n)=>n&&this.update(t,{size:n}),children:x[r.type].map(e=>i(l,{value:e,sx:{flex:1},disabled:e!==r.size&&!D(f,r.satellite,Number(r.page),e,r.col,r.row,t),children:L[e]},e))})]}),this.renderStateField(t,r,`state`,y),r.type===`dimmer`?this.renderStateField(t,r,`state2`,`sd_onoff_state`):null,r.type===`thermostat`?this.renderStateField(t,r,`state2`,`sd_target_state`):null,r.type===`thermostat`?this.renderStateField(t,r,`state3`,`sd_relay_state`):null,e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,sx:{flex:2},label:u.t(`sd_label`),placeholder:this.state.names[r.state]||``,value:r.label||``,slotProps:{htmlInput:{maxLength:24}},onChange:e=>this.update(t,{label:e.target.value})}),r.type!==`dimmer`&&r.type!==`button`&&r.type!==`switch`?i(s,{variant:`standard`,sx:{flex:1},label:u.t(`sd_unit`),value:r.unit||``,slotProps:{htmlInput:{maxLength:8}},onChange:e=>this.update(t,{unit:e.target.value})}):null]}),r.type===`button`||r.type===`switch`&&r.size===`q`?e(s,{select:!0,variant:`standard`,label:u.t(`sd_icon`),value:r.icon||``,onChange:e=>this.update(t,{icon:e.target.value}),children:[i(v,{value:``,children:`–`}),S.map(e=>i(v,{value:e,children:e},e))]}):null,r.type===`value`||h?e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_decimals`),value:r.decimals??``,slotProps:{htmlInput:{min:0,max:3}},onChange:e=>this.update(t,{decimals:p(e.target.value)})}),h?e(c,{children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_min`),value:r.min??``,onChange:e=>this.update(t,{min:p(e.target.value)})}),i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_max`),value:r.max??``,onChange:e=>this.update(t,{max:p(e.target.value)})})]}):null]}):null,r.type===`thermostat`?i(s,{variant:`standard`,type:`number`,label:u.t(`sd_step`),placeholder:`0.5`,value:r.step??``,slotProps:{htmlInput:{min:.1,step:.1}},onChange:e=>this.update(t,{step:p(e.target.value)})}):null,i(s,{select:!0,variant:`standard`,label:u.t(`sd_page`),value:Number(r.page),onChange:e=>this.changePage(t,Number(e.target.value)),children:[1,2,3,4].map(e=>i(v,{value:e,disabled:e!==Number(r.page)&&!O(f,r.satellite,e,r.size,t),children:e},e))}),i(m,{color:`error`,variant:`outlined`,startIcon:i(n,{}),onClick:()=>this.remove(t),children:u.t(`sd_delete`)})]})}renderPicker(){let e=this.state.selected,t=this.state.pickFor,n=this.tiles()[e];return!t||!n?null:i(p,{dialogName:`satelliteDisplayTile`,socket:this.props.oContext.socket,theme:this.props.oContext.theme,themeType:this.props.oContext.themeType,imagePrefix:`../..`,selected:n[t]||``,onClose:()=>this.setState({pickFor:null}),onOk:n=>{let r=Array.isArray(n)?n[0]:n;this.setState({pickFor:null}),r&&this.update(e,{[t]:r})}})}renderItem(){let t=this.satelliteNames();if(!t.length)return i(_,{sx:{p:2},children:u.t(`sd_no_satellites`)});let n=t.find(e=>w(e,this.state.satellite))||t[0],r=[1,2,3,4].map(e=>this.tiles().filter(t=>t.enabled!==!1&&w(t.satellite,n)&&Number(t.page)===e).length),o=this.tiles().filter(e=>e.enabled===!1&&w(e.satellite,n)&&Number(e.page)===this.state.page).length;return e(g,{sx:{width:`100%`},children:[e(g,{sx:{display:`flex`,gap:2,alignItems:`center`,flexWrap:`wrap`,mb:2},children:[i(s,{select:!0,variant:`standard`,label:u.t(`sd_satellite`),value:n,sx:{minWidth:180},onChange:e=>this.setState({satellite:e.target.value,selected:-1},()=>void this.readStates()),children:t.map(e=>i(v,{value:e,children:this.isConfigured(e)?e:`${e} (${u.t(`sd_not_configured`)})`},e))}),i(a,{exclusive:!0,size:`small`,value:this.state.page,onChange:(e,t)=>t&&this.setState({page:t,selected:-1},()=>void this.readStates()),children:Array.from({length:4},(e,t)=>t+1).map(t=>e(l,{value:t,children:[u.t(`sd_page`),` `,t,r[t-1]?` (${r[t-1]})`:``]},t))})]}),e(g,{sx:{display:`flex`,gap:3,alignItems:`flex-start`,flexWrap:`wrap`},children:[e(g,{children:[this.renderScreen(),e(_,{variant:`caption`,component:`div`,sx:{opacity:.7,mt:2,maxWidth:N(320)},children:[u.t(`sd_how`),o?` ${u.t(`sd_disabled_count`,o)}`:``]})]}),this.renderPanel()]}),this.renderPicker()]})}}};export{z as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./assets/dist-ClWhWsnT.js";import{t}from"./assets/helpers-DYkm0lQU.js";import{t as n}from"./assets/vite-preload-helper-D97eqSzU.js";var r={},i=new Set,a=new Map;function o(e,t){let n=a.get(e);return n||(n=Promise.resolve().then(t).catch(t=>{throw a.delete(e),t}),a.set(e,n)),n}async function s(e){if(typeof document>`u`)return;let t=r[e]||[];await Promise.all(t.map(e=>{let t=new URL(e,import.meta.url).href;return i.has(t)||(i.add(t),document.querySelector(`link[rel="stylesheet"][href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var c={"./Components":async()=>{await s(`./Components`),await Promise.all([]);let e=await o(`./Components`,()=>n(()=>import(`./assets/Components-Dqt07U-e.js`),[],import.meta.url)),t=e&&e.__mf_remote_dependency_pending;t&&typeof t.then==`function`&&await t;let r={};return Object.assign(r,e),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var l=`__mf_init__virtual:mf:__mfe_internal__SatDisplay__mf_owner__180606781360439__mf_v__runtimeInit__mf_v__.js__`,u=globalThis[l];if(!u){let e,t,n=new Promise((n,r)=>{e=n,t=r});u=globalThis[l]={initPromise:n,initResolve:e,initReject:t}}var d=u.initResolve,f=`__mf_module_cache__`;globalThis[f]||={share:{},remote:{}},globalThis[f].share||={},globalThis[f].remote||={};var p=globalThis[f];for(let e of Object.keys(p.share))if(e.startsWith(`default:`)){let t=e.slice(8);p.share[t]===void 0&&(p.share[t]=p.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;p.share[t]===void 0&&(p.share[t]=p.share[e])}var m={},h=Array.isArray(`default`)?`default`:[`default`],g=`default`,_=`SatDisplay`,v=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],y,b;async function x(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var S=Symbol(`mf.originalSharedProvider`),C={emit:e=>e},w=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],T=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[S]:r});return n},E=(e,t)=>{if(!t)return;let n=Object.entries(e||{}),r=n.find(([,e])=>e===t);if(r)return{version:r[0],provider:t,registered:!0};if(typeof t.version==`string`&&t.version)return{version:t.version,provider:t,registered:!1};let i=n.filter(([,e])=>e===t||!!(t.from&&(e==null?void 0:e.from)===t.from));if(i.length===1)return{version:i[0][0],provider:t,registered:!1}},D=(e,n,r,i)=>{var a;if(!e||!r)return;let o=Object.fromEntries(Object.entries(e).filter(([,e])=>{var t;return(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));if(Object.keys(o).length===0)return;let s=w(r),c=T(o,i),l={};for(let e of s)l[e||`default`]={[n]:c};let u=(a=t.getRegisteredShare(l,n,{...r,scope:s,strategy:i},C))==null?void 0:a.shared;return(u==null?void 0:u[S])||u},O=(e,t,n,r)=>{var i;let a=e=>k(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>{var t;return!a(e)&&(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=D(o,t,n,r);return a(s)?void 0:s},k=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),A=(e,t,n,r,i,a,o,s,c)=>{var l,u;if(c!==`version-first`||!s)return;let d=t==null||(l=t.options)==null||(l=l.shared)==null?void 0:l[i],f=Array.isArray(d)?d.find(e=>(e==null?void 0:e.version)===a):void 0,p=((s==null?void 0:s.from)===(t==null||(u=t.options)==null?void 0:u.name)?s:void 0)||(k(f,s)?f:t?void 0:s);if(p)return e.some(e=>{var i,a;return e!==t&&(e==null||(i=e.options)==null?void 0:i.name)===(o==null?void 0:o.from)&&(e==null||(a=e.shareScopeMap)==null?void 0:a[r])===n})?p:void 0},ee=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?A(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&(!a.registered||k(u,s)))return{provider:u,scopeRootProvider:l}};async function te(){return y||=x(()=>n(()=>import(`./assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js`),[],import.meta.url)).catch(e=>{throw y=void 0,e}),y}async function j(){return c}async function M(t={},n=[],r={}){var i,a;let o=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},s=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},c=Symbol.for(`module-federation.shared-cache-listeners`),l=Symbol.for(`module-federation.shared-cache-owners`),f=e=>{let t=e[l];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,l,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},y=(e,t)=>{var n;return(n=e[l])==null?void 0:n[t.canonical]},S=e=>{let t=[e,e==null?void 0:e.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},C=(e,t)=>{if(e===t)return!0;let n=S(e),r=S(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},w=(e,t,n,r)=>{var i;let a=s(e,t);if(a!==void 0&&C(a,n))return n;e[t.canonical]=n;let o=t.aliases||[];for(let t of o)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let u=e[l];r===void 0?u&&delete u[t.canonical]:f(e)[t.canonical]=r;let d=(i=e[c])==null?void 0:i[t.canonical];if(d)for(let e of d)e(n);return n},T=Symbol.for(`module-federation.tree-shaking-shared-cache`),A=e=>{let t=e[T];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,T,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},j=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=A(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},M=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),N=e=>{let t=e[M];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,M,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},P=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[M])==null||(r=r[t.canonical])==null?void 0:r[n]:i},F=(e,t,n,r)=>{let i=N(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},I=((i=globalThis.__FEDERATION__)==null?void 0:i.__INSTANCES__)||[],L=(a=n.find(e=>e==null?void 0:e.from))==null?void 0:a.from,ne=I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)===L&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t})||I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)!==_&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t}),R=Object.create(null),re=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},ie=(e,t)=>{var n;for(let[i,a]of Object.entries(((n=q.shareScopeMap)==null?void 0:n[e])||{}))for(let[e,n]of Object.entries(a||{})){var r;if(!n||n.get===((r=B[i])==null?void 0:r.get))continue;let a=t[i]||={};a[e]===void 0&&(a[e]=n)}},ae=(e,t)=>{ie(e,t);let n=!ne&&Object.values(t||{}).some(e=>Object.values(e||{}).some(V)),r=n?re(t):t;return R[e]={host:t,runtime:r,isWebpackScope:n},r},oe=()=>{let e=Object.values(R).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},z=Object.create(null);for(let[e,n]of Object.entries(t)){let t=z[e]=Object.create(null);for(let[e,r]of Object.entries(n))t[e]=Object.assign({},r)}let{usedShared:B,usedRemotes:se}=await te();function V(e){if(typeof(e==null?void 0:e.get)!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let ce=Object.values(z).some(e=>Object.values(e||{}).some(V)),le=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},H=(e,n,r,i)=>{if(typeof O!=`function`)return;let a=le(e),o=!i||a===e?[[e,n]]:[[e,n],[a,B[a]]];for(let[n,i]of o){if(!i)continue;let a=O(r?n===e?r:z[n]:z[n]??t[n],n,i,`version-first`);if(a)return a}},ue=(e,t,n)=>{let r=H(e,t,n,!0);return r&&V(r)&&!r.lib&&!r.loaded?r:void 0};var U=m[g];if(U||=m[g]={from:_},n.indexOf(U)>=0)return;n.push(U);let de=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},fe=[],pe=globalThis.window===void 0?await Promise.all([]):[],W=`__mf_vite_runtime_share_load_id__`,me=0,G=new Map,K=new Map,q=e({name:_,remotes:se,shared:B,plugins:[he(),ge(),...fe,...pe],shareStrategy:`version-first`});q.initShareScopeMap(`default`,ae(`default`,t));function he(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=n===void 0?void 0:K.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}function ge(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let _e=q.sharedHandler.hooks.lifecycle.resolveShare;if(!q.__mfKeepAdoptedProviders){var J,ve;q.__mfKeepAdoptedProviders=!0,(J=q.sharedHandler)==null||(J=J.hooks)==null||(J=J.lifecycle)==null||(J=J.afterRegisterShare)==null||(ve=J.on)==null||ve.call(J,e=>{var t,n,r;let{shared:i,previousShared:a,registeredShared:o}=e||{};if((i==null||(t=i.shareConfig)==null?void 0:t.import)!==!1||o!==i||!a||((n=a.shareConfig)==null?void 0:n.import)===!1)return;let s=(r=q.shareScopeMap)==null||(r=r[e.scope])==null?void 0:r[e.pkgName];s&&s[i.version]===i&&(s[i.version]=a)})}let Y=new WeakMap;_e.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=e.resolver;return typeof r==`function`&&(e.resolver=(...t)=>{var i;let a=r(...t);if((a==null||(i=a.shared)==null||(i=i.shareConfig)==null?void 0:i.import)===!1&&typeof D==`function`&&B[e.pkgName]){var o,s;let t=D((o=e.shareScopeMap)==null||(o=o[e.scope])==null?void 0:o[e.pkgName],e.pkgName,B[e.pkgName],`version-first`);t&&((s=t.shareConfig)==null?void 0:s.import)!==!1&&(a={shared:t,useTreesShaking:a.useTreesShaking})}let c=a==null?void 0:a.shared;return c&&(typeof c==`object`||typeof c==`function`)&&!Y.has(c)&&Y.set(c,{from:c.from}),n!==void 0&&c&&G.set(n,c),a}),e});let ye=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??(n==null?void 0:n.scope)??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},be=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),xe=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},Se=async(e,t,n)=>{let r=++me;K.set(r,{pinned:n});try{let n=await q.loadShare(e,{customShareInfo:{shareConfig:t,[W]:r}});return{factory:n===!1?void 0:n,selectedProvider:G.get(r)}}finally{G.delete(r),K.delete(r)}},Ce=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ye(n,r,i,a);if(!c)return;let l;try{l=await Se(e,t,c)}catch(e){throw c.release(!1),e}let u=l==null?void 0:l.factory;if(u===void 0){c.release(!1);return}let d=be(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=Y.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:(n==null?void 0:n[t])===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??xe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=Y.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&(n==null?void 0:n[h.version])!==h.provider))return{provider:h.provider,selection:h,resolved:v}},X=new Set,we=new Map,Te=async(e,n,r)=>{var i;let a=!!((i=n.shareConfig)!=null&&i.singleton);if(!a&&n.canLiveRebind!==!1)try{var c,l;let i=O(r,e,n,`version-first`),u=E(r,i);if(!u||((c=n.shareConfig)==null?void 0:c.import)===!1&&k(i,n)||(i==null||(l=i.shareConfig)==null?void 0:l.import)===!1)return;let{version:d}=u;if(!a&&d!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let f=o(e,a,n.version,n.scope);if(s(p.share,f)!==void 0)return;let m=t[e],h=m==null?void 0:m[d];if(u.registered&&!k(h,i))return;let g,_=i.lib;if(!_&&V(i)||(!_&&i.loading&&(_=await i.loading),!_&&i.loaded&&typeof i.get==`function`&&(_=await i.get()),!_))return;let v=typeof _==`function`?_():_,y=await Promise.resolve(v),b=u.registered?h:i;g={provider:b,selection:{provider:b,version:d,from:i.from,registered:u.registered},resolved:y};let x=g==null?void 0:g.provider,S=g==null?void 0:g.selection;if(!S)return;let C=g==null?void 0:g.resolved;if(C===void 0||s(p.share,f)!==void 0||S.registered&&(m==null?void 0:m[S.version])!==x)return;w(p.share,f,de(C),S.from),X.add(x)}catch(t){console.error(`[Module Federation] Failed to bridge materialized shared module "`+e+`"`,t)}},Ee=async(e,n,r,i,a)=>{try{var c,l,u,d;let f=o(e,(c=n.shareConfig)==null?void 0:c.singleton,n.version,n.scope),m=s(p.share,f),h=y(p.share,f),g=O(r,e,n,`version-first`),v=g||D(r,e,n,`version-first`)||n,b=E(r,v);if(!b)return;let x=k(v,n),{version:S}=b;if(!((l=n.shareConfig)!=null&&l.singleton)&&S!==n.version)return;let C=i==null?void 0:i[S],T=ee(I,ne,t,`default`,e,b,g,C,`version-first`);if(!T&&!x)return;let{provider:A,scopeRootProvider:te}=T||{provider:v,scopeRootProvider:void 0};if(n.canLiveRebind===!1||((u=n.shareConfig)==null?void 0:u.import)===!1&&k(A,n)||(A==null||(d=A.shareConfig)==null?void 0:d.import)===!1||m!==void 0&&h!==_)return;let j=t[e],M=j==null?void 0:j[S];if(b.registered&&!te&&!k(M,A))return;let N=await Ce(e,n.shareConfig,j,S,M,A,b.registered&&!x),P=N==null?void 0:N.provider,F=N==null?void 0:N.selection;if(!F||k(P,n)||a&&(a.version!==F.version||!k({from:F.from},a.provider))||X.has(P))return;let L=N==null?void 0:N.resolved;if(L===void 0)return;let R=s(p.share,f),re=y(p.share,f);if(R!==void 0&&re!==_||F.registered&&(j==null?void 0:j[F.version])!==P)return;a||we.set(e,{version:F.version,provider:{from:F.from}}),X.add(P);let ie=de(L);w(p.share,f,ie,F.from)}catch(t){console.error(`[Module Federation] Failed to bridge external shared module "`+e+`"`,t)}};for(let e of v)await Promise.all(e.map(async e=>{let t=B[e];t&&t.materialize!==!1&&!t.treeShaking&&await Te(e,t,z[e])}));for(let[e,t]of Object.entries(B)){var De;if(t.treeShaking)continue;let n=o(e,(De=t.shareConfig)==null?void 0:De.singleton,t.version,t.scope);if(s(p.share,n)!==void 0)continue;let r=o(e,!0,t.version,t.scope),i=s(p.share,r);i!==void 0&&w(p.share,n,i,y(p.share,r))}let Oe=[`react`,`react/jsx-runtime`,`react-dom`,`@emotion/react`,`react-dom/client`,`@emotion/styled`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`],ke=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],Z=new Map(Oe.map((e,t)=>[e,t])),Ae={1:[0],2:[0],3:[0],4:[0,2],5:[3,0],6:[3,5,0,2],7:[6,0],8:[0,2,7,6],9:[3,5,8,7,6,0,2]},Q=Oe.filter(e=>{var t;return B[e]&&(B[e].materialize!==!1||((t=B[e].shareConfig)==null?void 0:t.import)===!1&&!B[e].lazy)});p.providerInit||=new Map;let je=(e,t)=>{let n=p.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return p.providerInit.set(e,r),r.catch(()=>p.providerInit.delete(e)),r};var Me=async e=>{let t=new Set(e);for(let e of ke)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{var t,n,r;let i=B[e],a=o(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);if(((n=i.shareConfig)==null?void 0:n.import)===!1||i.treeShaking||s(p.share,a)!==void 0)return;let c=o(e,!0,i.version,i.scope),l=s(p.share,c);if(l!==void 0){w(p.share,a,l,y(p.share,c));return}let u=typeof H==`function`?H(e,i):void 0;if(u){var d,f;let t=u.lib;if(!t&&u.loading&&(t=await u.loading),!t&&u.loaded&&typeof u.get==`function`&&(t=await u.get()),t){let e=typeof t==`function`?t():t,n=await Promise.resolve(e);w(p.share,a,(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(n),u.from);return}if(typeof V==`function`&&V(u)&&((d=i.shareConfig)!=null&&d.singleton||((f=E(z[e],u))==null?void 0:f.version)===i.version))return}let m=a.canonical,h=await je(m,async()=>{let e=await i.get(),t=typeof e==`function`?e():e;return Promise.resolve(t)});for(let t of((r=q.options.shared)==null?void 0:r[e])||[])t.get===i.get&&(t.eager=!0);let g=(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(h),v=g===h?{...h}:g;v.__esModule!==!0&&Object.defineProperty(v,"__esModule",{value:!0,enumerable:!1}),w(p.share,a,v,_)}))};let $=e=>{var t,n;let r=B[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=o(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?P(p.share,i,_)===void 0&&s(p.share,i)===void 0:s(p.share,i)===void 0},Ne=e=>{var t,n;let r=B[e],i=o(e,(t=r.shareConfig)==null?void 0:t.singleton,r.version,r.scope);return(r.treeShaking?P(p.share,i,_)??s(p.share,i):s(p.share,i))===void 0?r.treeShaking||((n=r.shareConfig)==null?void 0:n.import)===!1?!0:typeof O==`function`&&!!O(z[e],e,r,`version-first`):!1},Pe=e=>{let t=!0;for(;t;){t=!1;for(let n of Q){let r=Z.get(n);e.has(r)||(Ae[r]||[]).some(t=>e.has(t))&&(e.add(r),t=!0)}}return e},Fe=Pe(new Set(Q.filter(Ne).map(e=>Z.get(e)))),Ie=Q.filter(e=>!Fe.has(Z.get(e)));var Le=Q.filter(e=>Fe.has(Z.get(e)));await Me(Ie);try{await x(async()=>{await Promise.all(await q.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}oe();let Re=async()=>{for(let e of v)await Promise.all(e.map(async e=>{let n=B[e];n&&n.materialize!==!1&&!n.treeShaking&&await Ee(e,n,t[e],z[e],void 0)}))};ce?b=Re:await Re();try{var ze;let e=(ze=globalThis.__FEDERATION__)==null?void 0:ze.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of h){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=B==null?void 0:B[e],i=z[e],a=we.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!k(t,a.provider))continue;let n=i[e];(t===n||n!=null&&n.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let e of v)await Promise.all(e.map(async e=>{let n=t[e];n&&await Ee(e,B[e],n,z[e],we.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let Be=async()=>{},Ve=async(e,n)=>{var r,i;let a=o(e,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),c=n.treeShaking?P(p.share,a,_):s(p.share,a);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||c!==void 0||ue(e,n,z[e]))return;let l=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},u=t==null?void 0:t[e],d=D(u,e,n,`version-first`)||n,f=E(u,d);if(!f)return;let m=e=>{var t;return e===n||(e==null||(t=e.shareConfig)==null?void 0:t.import)===!1};if(m(d))return;let{version:h}=f,g=u==null?void 0:u[h],v=await Ce(e,n.shareConfig,u,h,g,d,f.registered),y=v==null?void 0:v.selection,b=v==null?void 0:v.provider,x=v==null?void 0:v.resolved;if(!y||m(b)||x===void 0||(n.treeShaking?P(p.share,a,_):s(p.share,a))!==void 0||y.registered&&(u==null?void 0:u[y.version])!==b)return;let S=l(x);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];j(p.share,a,e,S),F(p.share,a,_,S)}else w(p.share,a,S,y.from)},He=[],Ue=new Set;for(let e of Le){let t=B[e],n=Z.get(e);if($(e))try{var We;t.treeShaking?await Be(e,t):((We=t.shareConfig)==null?void 0:We.import)===!1&&await Ve(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t)}$(e)&&Ue.add(n)}Pe(Ue),He.push(...Le.filter(e=>!Ue.has(Z.get(e)))),await Me(He);let Ge=new Map;return u.loadLazyShares=async e=>{let n=new Set(e);for(let e of v)await Promise.all(e.filter(e=>n.has(e)).map(e=>{let n=B[e];if(!n||!n.lazy||!$(e))return;let r=Ge.get(e);return r||(r=Ee(e,n,t[e],z[e],void 0).then(()=>$(e)?Ve(e,n):void 0),r.catch(()=>Ge.delete(e)),Ge.set(e,r)),r}))},d(q),q}async function N(e){let t=await j();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return b&&await b(),p.pendingShareLoads&&await Promise.all(p.pendingShareLoads),t[e]().then(e=>()=>e)}export{N as get,M as init};
|
|
1
|
+
import{t as e}from"./assets/dist-ClWhWsnT.js";import{t}from"./assets/helpers-DYkm0lQU.js";import{t as n}from"./assets/vite-preload-helper-D97eqSzU.js";var r={},i=new Set,a=new Map;function o(e,t){let n=a.get(e);return n||(n=Promise.resolve().then(t).catch(t=>{throw a.delete(e),t}),a.set(e,n)),n}async function s(e){if(typeof document>`u`)return;let t=r[e]||[];await Promise.all(t.map(e=>{let t=new URL(e,import.meta.url).href;return i.has(t)||(i.add(t),document.querySelector(`link[rel="stylesheet"][href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var c={"./Components":async()=>{await s(`./Components`),await Promise.all([]);let e=await o(`./Components`,()=>n(()=>import(`./assets/Components-dEIM9Tps.js`),[],import.meta.url)),t=e&&e.__mf_remote_dependency_pending;t&&typeof t.then==`function`&&await t;let r={};return Object.assign(r,e),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var l=`__mf_init__virtual:mf:__mfe_internal__SatDisplay__mf_owner__180606781360439__mf_v__runtimeInit__mf_v__.js__`,u=globalThis[l];if(!u){let e,t,n=new Promise((n,r)=>{e=n,t=r});u=globalThis[l]={initPromise:n,initResolve:e,initReject:t}}var d=u.initResolve,f=`__mf_module_cache__`;globalThis[f]||={share:{},remote:{}},globalThis[f].share||={},globalThis[f].remote||={};var p=globalThis[f];for(let e of Object.keys(p.share))if(e.startsWith(`default:`)){let t=e.slice(8);p.share[t]===void 0&&(p.share[t]=p.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;p.share[t]===void 0&&(p.share[t]=p.share[e])}var m={},h=Array.isArray(`default`)?`default`:[`default`],g=`default`,_=`SatDisplay`,v=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],y,b;async function x(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var S=Symbol(`mf.originalSharedProvider`),C={emit:e=>e},w=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],T=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[S]:r});return n},E=(e,t)=>{if(!t)return;let n=Object.entries(e||{}),r=n.find(([,e])=>e===t);if(r)return{version:r[0],provider:t,registered:!0};if(typeof t.version==`string`&&t.version)return{version:t.version,provider:t,registered:!1};let i=n.filter(([,e])=>e===t||!!(t.from&&(e==null?void 0:e.from)===t.from));if(i.length===1)return{version:i[0][0],provider:t,registered:!1}},D=(e,n,r,i)=>{var a;if(!e||!r)return;let o=Object.fromEntries(Object.entries(e).filter(([,e])=>{var t;return(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));if(Object.keys(o).length===0)return;let s=w(r),c=T(o,i),l={};for(let e of s)l[e||`default`]={[n]:c};let u=(a=t.getRegisteredShare(l,n,{...r,scope:s,strategy:i},C))==null?void 0:a.shared;return(u==null?void 0:u[S])||u},O=(e,t,n,r)=>{var i;let a=e=>k(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>{var t;return!a(e)&&(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=D(o,t,n,r);return a(s)?void 0:s},k=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),A=(e,t,n,r,i,a,o,s,c)=>{var l,u;if(c!==`version-first`||!s)return;let d=t==null||(l=t.options)==null||(l=l.shared)==null?void 0:l[i],f=Array.isArray(d)?d.find(e=>(e==null?void 0:e.version)===a):void 0,p=((s==null?void 0:s.from)===(t==null||(u=t.options)==null?void 0:u.name)?s:void 0)||(k(f,s)?f:t?void 0:s);if(p)return e.some(e=>{var i,a;return e!==t&&(e==null||(i=e.options)==null?void 0:i.name)===(o==null?void 0:o.from)&&(e==null||(a=e.shareScopeMap)==null?void 0:a[r])===n})?p:void 0},ee=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?A(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&(!a.registered||k(u,s)))return{provider:u,scopeRootProvider:l}};async function te(){return y||=x(()=>n(()=>import(`./assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js`),[],import.meta.url)).catch(e=>{throw y=void 0,e}),y}async function j(){return c}async function M(t={},n=[],r={}){var i,a;let o=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},s=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},c=Symbol.for(`module-federation.shared-cache-listeners`),l=Symbol.for(`module-federation.shared-cache-owners`),f=e=>{let t=e[l];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,l,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},y=(e,t)=>{var n;return(n=e[l])==null?void 0:n[t.canonical]},S=e=>{let t=[e,e==null?void 0:e.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},C=(e,t)=>{if(e===t)return!0;let n=S(e),r=S(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},w=(e,t,n,r)=>{var i;let a=s(e,t);if(a!==void 0&&C(a,n))return n;e[t.canonical]=n;let o=t.aliases||[];for(let t of o)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let u=e[l];r===void 0?u&&delete u[t.canonical]:f(e)[t.canonical]=r;let d=(i=e[c])==null?void 0:i[t.canonical];if(d)for(let e of d)e(n);return n},T=Symbol.for(`module-federation.tree-shaking-shared-cache`),A=e=>{let t=e[T];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,T,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},j=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=A(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},M=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),N=e=>{let t=e[M];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,M,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},P=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[M])==null||(r=r[t.canonical])==null?void 0:r[n]:i},F=(e,t,n,r)=>{let i=N(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},I=((i=globalThis.__FEDERATION__)==null?void 0:i.__INSTANCES__)||[],L=(a=n.find(e=>e==null?void 0:e.from))==null?void 0:a.from,ne=I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)===L&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t})||I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)!==_&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t}),R=Object.create(null),re=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},ie=(e,t)=>{var n;for(let[i,a]of Object.entries(((n=q.shareScopeMap)==null?void 0:n[e])||{}))for(let[e,n]of Object.entries(a||{})){var r;if(!n||n.get===((r=B[i])==null?void 0:r.get))continue;let a=t[i]||={};a[e]===void 0&&(a[e]=n)}},ae=(e,t)=>{ie(e,t);let n=!ne&&Object.values(t||{}).some(e=>Object.values(e||{}).some(V)),r=n?re(t):t;return R[e]={host:t,runtime:r,isWebpackScope:n},r},oe=()=>{let e=Object.values(R).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},z=Object.create(null);for(let[e,n]of Object.entries(t)){let t=z[e]=Object.create(null);for(let[e,r]of Object.entries(n))t[e]=Object.assign({},r)}let{usedShared:B,usedRemotes:se}=await te();function V(e){if(typeof(e==null?void 0:e.get)!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let ce=Object.values(z).some(e=>Object.values(e||{}).some(V)),le=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},H=(e,n,r,i)=>{if(typeof O!=`function`)return;let a=le(e),o=!i||a===e?[[e,n]]:[[e,n],[a,B[a]]];for(let[n,i]of o){if(!i)continue;let a=O(r?n===e?r:z[n]:z[n]??t[n],n,i,`version-first`);if(a)return a}},ue=(e,t,n)=>{let r=H(e,t,n,!0);return r&&V(r)&&!r.lib&&!r.loaded?r:void 0};var U=m[g];if(U||=m[g]={from:_},n.indexOf(U)>=0)return;n.push(U);let de=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},fe=[],pe=globalThis.window===void 0?await Promise.all([]):[],W=`__mf_vite_runtime_share_load_id__`,me=0,G=new Map,K=new Map,q=e({name:_,remotes:se,shared:B,plugins:[he(),ge(),...fe,...pe],shareStrategy:`version-first`});q.initShareScopeMap(`default`,ae(`default`,t));function he(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=n===void 0?void 0:K.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}function ge(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let _e=q.sharedHandler.hooks.lifecycle.resolveShare;if(!q.__mfKeepAdoptedProviders){var J,ve;q.__mfKeepAdoptedProviders=!0,(J=q.sharedHandler)==null||(J=J.hooks)==null||(J=J.lifecycle)==null||(J=J.afterRegisterShare)==null||(ve=J.on)==null||ve.call(J,e=>{var t,n,r;let{shared:i,previousShared:a,registeredShared:o}=e||{};if((i==null||(t=i.shareConfig)==null?void 0:t.import)!==!1||o!==i||!a||((n=a.shareConfig)==null?void 0:n.import)===!1)return;let s=(r=q.shareScopeMap)==null||(r=r[e.scope])==null?void 0:r[e.pkgName];s&&s[i.version]===i&&(s[i.version]=a)})}let Y=new WeakMap;_e.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=e.resolver;return typeof r==`function`&&(e.resolver=(...t)=>{var i;let a=r(...t);if((a==null||(i=a.shared)==null||(i=i.shareConfig)==null?void 0:i.import)===!1&&typeof D==`function`&&B[e.pkgName]){var o,s;let t=D((o=e.shareScopeMap)==null||(o=o[e.scope])==null?void 0:o[e.pkgName],e.pkgName,B[e.pkgName],`version-first`);t&&((s=t.shareConfig)==null?void 0:s.import)!==!1&&(a={shared:t,useTreesShaking:a.useTreesShaking})}let c=a==null?void 0:a.shared;return c&&(typeof c==`object`||typeof c==`function`)&&!Y.has(c)&&Y.set(c,{from:c.from}),n!==void 0&&c&&G.set(n,c),a}),e});let ye=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??(n==null?void 0:n.scope)??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},be=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),xe=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},Se=async(e,t,n)=>{let r=++me;K.set(r,{pinned:n});try{let n=await q.loadShare(e,{customShareInfo:{shareConfig:t,[W]:r}});return{factory:n===!1?void 0:n,selectedProvider:G.get(r)}}finally{G.delete(r),K.delete(r)}},Ce=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ye(n,r,i,a);if(!c)return;let l;try{l=await Se(e,t,c)}catch(e){throw c.release(!1),e}let u=l==null?void 0:l.factory;if(u===void 0){c.release(!1);return}let d=be(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=Y.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:(n==null?void 0:n[t])===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??xe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=Y.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&(n==null?void 0:n[h.version])!==h.provider))return{provider:h.provider,selection:h,resolved:v}},X=new Set,we=new Map,Te=async(e,n,r)=>{var i;let a=!!((i=n.shareConfig)!=null&&i.singleton);if(!a&&n.canLiveRebind!==!1)try{var c,l;let i=O(r,e,n,`version-first`),u=E(r,i);if(!u||((c=n.shareConfig)==null?void 0:c.import)===!1&&k(i,n)||(i==null||(l=i.shareConfig)==null?void 0:l.import)===!1)return;let{version:d}=u;if(!a&&d!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let f=o(e,a,n.version,n.scope);if(s(p.share,f)!==void 0)return;let m=t[e],h=m==null?void 0:m[d];if(u.registered&&!k(h,i))return;let g,_=i.lib;if(!_&&V(i)||(!_&&i.loading&&(_=await i.loading),!_&&i.loaded&&typeof i.get==`function`&&(_=await i.get()),!_))return;let v=typeof _==`function`?_():_,y=await Promise.resolve(v),b=u.registered?h:i;g={provider:b,selection:{provider:b,version:d,from:i.from,registered:u.registered},resolved:y};let x=g==null?void 0:g.provider,S=g==null?void 0:g.selection;if(!S)return;let C=g==null?void 0:g.resolved;if(C===void 0||s(p.share,f)!==void 0||S.registered&&(m==null?void 0:m[S.version])!==x)return;w(p.share,f,de(C),S.from),X.add(x)}catch(t){console.error(`[Module Federation] Failed to bridge materialized shared module "`+e+`"`,t)}},Ee=async(e,n,r,i,a)=>{try{var c,l,u,d;let f=o(e,(c=n.shareConfig)==null?void 0:c.singleton,n.version,n.scope),m=s(p.share,f),h=y(p.share,f),g=O(r,e,n,`version-first`),v=g||D(r,e,n,`version-first`)||n,b=E(r,v);if(!b)return;let x=k(v,n),{version:S}=b;if(!((l=n.shareConfig)!=null&&l.singleton)&&S!==n.version)return;let C=i==null?void 0:i[S],T=ee(I,ne,t,`default`,e,b,g,C,`version-first`);if(!T&&!x)return;let{provider:A,scopeRootProvider:te}=T||{provider:v,scopeRootProvider:void 0};if(n.canLiveRebind===!1||((u=n.shareConfig)==null?void 0:u.import)===!1&&k(A,n)||(A==null||(d=A.shareConfig)==null?void 0:d.import)===!1||m!==void 0&&h!==_)return;let j=t[e],M=j==null?void 0:j[S];if(b.registered&&!te&&!k(M,A))return;let N=await Ce(e,n.shareConfig,j,S,M,A,b.registered&&!x),P=N==null?void 0:N.provider,F=N==null?void 0:N.selection;if(!F||k(P,n)||a&&(a.version!==F.version||!k({from:F.from},a.provider))||X.has(P))return;let L=N==null?void 0:N.resolved;if(L===void 0)return;let R=s(p.share,f),re=y(p.share,f);if(R!==void 0&&re!==_||F.registered&&(j==null?void 0:j[F.version])!==P)return;a||we.set(e,{version:F.version,provider:{from:F.from}}),X.add(P);let ie=de(L);w(p.share,f,ie,F.from)}catch(t){console.error(`[Module Federation] Failed to bridge external shared module "`+e+`"`,t)}};for(let e of v)await Promise.all(e.map(async e=>{let t=B[e];t&&t.materialize!==!1&&!t.treeShaking&&await Te(e,t,z[e])}));for(let[e,t]of Object.entries(B)){var De;if(t.treeShaking)continue;let n=o(e,(De=t.shareConfig)==null?void 0:De.singleton,t.version,t.scope);if(s(p.share,n)!==void 0)continue;let r=o(e,!0,t.version,t.scope),i=s(p.share,r);i!==void 0&&w(p.share,n,i,y(p.share,r))}let Oe=[`react`,`react/jsx-runtime`,`react-dom`,`@emotion/react`,`react-dom/client`,`@emotion/styled`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`],ke=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],Z=new Map(Oe.map((e,t)=>[e,t])),Ae={1:[0],2:[0],3:[0],4:[0,2],5:[3,0],6:[3,5,0,2],7:[6,0],8:[0,2,7,6],9:[3,5,8,7,6,0,2]},Q=Oe.filter(e=>{var t;return B[e]&&(B[e].materialize!==!1||((t=B[e].shareConfig)==null?void 0:t.import)===!1&&!B[e].lazy)});p.providerInit||=new Map;let je=(e,t)=>{let n=p.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return p.providerInit.set(e,r),r.catch(()=>p.providerInit.delete(e)),r};var Me=async e=>{let t=new Set(e);for(let e of ke)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{var t,n,r;let i=B[e],a=o(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);if(((n=i.shareConfig)==null?void 0:n.import)===!1||i.treeShaking||s(p.share,a)!==void 0)return;let c=o(e,!0,i.version,i.scope),l=s(p.share,c);if(l!==void 0){w(p.share,a,l,y(p.share,c));return}let u=typeof H==`function`?H(e,i):void 0;if(u){var d,f;let t=u.lib;if(!t&&u.loading&&(t=await u.loading),!t&&u.loaded&&typeof u.get==`function`&&(t=await u.get()),t){let e=typeof t==`function`?t():t,n=await Promise.resolve(e);w(p.share,a,(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(n),u.from);return}if(typeof V==`function`&&V(u)&&((d=i.shareConfig)!=null&&d.singleton||((f=E(z[e],u))==null?void 0:f.version)===i.version))return}let m=a.canonical,h=await je(m,async()=>{let e=await i.get(),t=typeof e==`function`?e():e;return Promise.resolve(t)});for(let t of((r=q.options.shared)==null?void 0:r[e])||[])t.get===i.get&&(t.eager=!0);let g=(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(h),v=g===h?{...h}:g;v.__esModule!==!0&&Object.defineProperty(v,"__esModule",{value:!0,enumerable:!1}),w(p.share,a,v,_)}))};let $=e=>{var t,n;let r=B[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=o(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?P(p.share,i,_)===void 0&&s(p.share,i)===void 0:s(p.share,i)===void 0},Ne=e=>{var t,n;let r=B[e],i=o(e,(t=r.shareConfig)==null?void 0:t.singleton,r.version,r.scope);return(r.treeShaking?P(p.share,i,_)??s(p.share,i):s(p.share,i))===void 0?r.treeShaking||((n=r.shareConfig)==null?void 0:n.import)===!1?!0:typeof O==`function`&&!!O(z[e],e,r,`version-first`):!1},Pe=e=>{let t=!0;for(;t;){t=!1;for(let n of Q){let r=Z.get(n);e.has(r)||(Ae[r]||[]).some(t=>e.has(t))&&(e.add(r),t=!0)}}return e},Fe=Pe(new Set(Q.filter(Ne).map(e=>Z.get(e)))),Ie=Q.filter(e=>!Fe.has(Z.get(e)));var Le=Q.filter(e=>Fe.has(Z.get(e)));await Me(Ie);try{await x(async()=>{await Promise.all(await q.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}oe();let Re=async()=>{for(let e of v)await Promise.all(e.map(async e=>{let n=B[e];n&&n.materialize!==!1&&!n.treeShaking&&await Ee(e,n,t[e],z[e],void 0)}))};ce?b=Re:await Re();try{var ze;let e=(ze=globalThis.__FEDERATION__)==null?void 0:ze.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of h){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=B==null?void 0:B[e],i=z[e],a=we.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!k(t,a.provider))continue;let n=i[e];(t===n||n!=null&&n.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let e of v)await Promise.all(e.map(async e=>{let n=t[e];n&&await Ee(e,B[e],n,z[e],we.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let Be=async()=>{},Ve=async(e,n)=>{var r,i;let a=o(e,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),c=n.treeShaking?P(p.share,a,_):s(p.share,a);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||c!==void 0||ue(e,n,z[e]))return;let l=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},u=t==null?void 0:t[e],d=D(u,e,n,`version-first`)||n,f=E(u,d);if(!f)return;let m=e=>{var t;return e===n||(e==null||(t=e.shareConfig)==null?void 0:t.import)===!1};if(m(d))return;let{version:h}=f,g=u==null?void 0:u[h],v=await Ce(e,n.shareConfig,u,h,g,d,f.registered),y=v==null?void 0:v.selection,b=v==null?void 0:v.provider,x=v==null?void 0:v.resolved;if(!y||m(b)||x===void 0||(n.treeShaking?P(p.share,a,_):s(p.share,a))!==void 0||y.registered&&(u==null?void 0:u[y.version])!==b)return;let S=l(x);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];j(p.share,a,e,S),F(p.share,a,_,S)}else w(p.share,a,S,y.from)},He=[],Ue=new Set;for(let e of Le){let t=B[e],n=Z.get(e);if($(e))try{var We;t.treeShaking?await Be(e,t):((We=t.shareConfig)==null?void 0:We.import)===!1&&await Ve(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t)}$(e)&&Ue.add(n)}Pe(Ue),He.push(...Le.filter(e=>!Ue.has(Z.get(e)))),await Me(He);let Ge=new Map;return u.loadLazyShares=async e=>{let n=new Set(e);for(let e of v)await Promise.all(e.filter(e=>n.has(e)).map(e=>{let n=B[e];if(!n||!n.lazy||!$(e))return;let r=Ge.get(e);return r||(r=Ee(e,n,t[e],z[e],void 0).then(()=>$(e)?Ve(e,n):void 0),r.catch(()=>Ge.delete(e)),Ge.set(e,r)),r}))},d(q),q}async function N(e){let t=await j();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return b&&await b(),p.pendingShareLoads&&await Promise.all(p.pendingShareLoads),t[e]().then(e=>()=>e)}export{N as get,M as init};
|
|
2
2
|
if (typeof document !== 'undefined' && document.head) {
|
|
3
3
|
try {
|
|
4
4
|
for (const __mfWarmupPath of ["assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js","assets/dist-ClWhWsnT.js","assets/vite-preload-helper-D97eqSzU.js","assets/utils-BLvN1RVq.js"]) {
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satellit",
|
|
30
30
|
"sd_not_configured": "nicht in der Liste der Satelliten",
|
|
31
31
|
"sd_how": "Eine freie Zelle anklicken fügt eine Kachel hinzu, eine Kachel ziehen verschiebt sie. Die Vorschau zeigt die aktuellen Werte; die Farben des Satelliten können leicht abweichen.",
|
|
32
|
-
"sd_disabled_count": "%s inaktive Kachel(n) auf dieser Seite werden nicht gezeigt."
|
|
32
|
+
"sd_disabled_count": "%s inaktive Kachel(n) auf dieser Seite werden nicht gezeigt.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat mit Sollwert",
|
|
34
|
+
"sd_current_state": "Ist-Temperatur",
|
|
35
|
+
"sd_target_state": "Soll-Temperatur",
|
|
36
|
+
"sd_relay_state": "Heizungsrelais (optional, der Punkt)",
|
|
37
|
+
"sd_step": "Schrittweite von − / +",
|
|
38
|
+
"sd_bad_size": "Diese Art gibt es nicht in dieser Größe, die Kachel wird weggelassen: andere Größe wählen oder auf der Seite Platz schaffen.",
|
|
39
|
+
"sd_need_target": "Ein Thermostat braucht den Datenpunkt der Soll-Temperatur, bis dahin wird die Kachel weggelassen."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satellite",
|
|
30
30
|
"sd_not_configured": "not in the list of satellites",
|
|
31
31
|
"sd_how": "Click a free cell to add a tile, drag a tile to move it. The preview shows the current values; the colours of the satellite may differ a little.",
|
|
32
|
-
"sd_disabled_count": "%s inactive tile(s) on this page are not shown."
|
|
32
|
+
"sd_disabled_count": "%s inactive tile(s) on this page are not shown.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat",
|
|
34
|
+
"sd_current_state": "Current temperature",
|
|
35
|
+
"sd_target_state": "Target temperature",
|
|
36
|
+
"sd_relay_state": "Heating relay (optional, the dot)",
|
|
37
|
+
"sd_step": "Step of − / +",
|
|
38
|
+
"sd_bad_size": "This kind does not come in this size, the tile is left out: choose another size, or make room on the page.",
|
|
39
|
+
"sd_need_target": "A thermostat needs the state of its target temperature, the tile is left out until it has one."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satélite",
|
|
30
30
|
"sd_not_configured": "no está en la lista de satélites",
|
|
31
31
|
"sd_how": "Haga clic en una celda libre para añadir un mosaico, arrastre un mosaico para moverlo. La vista previa muestra los valores actuales; los colores del satélite pueden variar un poco.",
|
|
32
|
-
"sd_disabled_count": "%s mosaico(s) inactivo(s) en esta página no se muestran."
|
|
32
|
+
"sd_disabled_count": "%s mosaico(s) inactivo(s) en esta página no se muestran.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura actual",
|
|
35
|
+
"sd_target_state": "Temperatura deseada",
|
|
36
|
+
"sd_relay_state": "Relé de la calefacción (opcional, el punto)",
|
|
37
|
+
"sd_step": "Paso de − / +",
|
|
38
|
+
"sd_bad_size": "Este tipo no existe en este tamaño, el mosaico se omite: elija otro tamaño o libere espacio en la página.",
|
|
39
|
+
"sd_need_target": "Un termostato necesita el estado de la temperatura deseada, hasta entonces el mosaico se omite."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satellite vocal",
|
|
30
30
|
"sd_not_configured": "absent de la liste des satellites",
|
|
31
31
|
"sd_how": "Cliquez sur une case libre pour ajouter une tuile, faites glisser une tuile pour la déplacer. L'aperçu montre les valeurs actuelles ; les couleurs du satellite peuvent différer un peu.",
|
|
32
|
-
"sd_disabled_count": "%s tuile(s) inactive(s) sur cette page ne sont pas affichées."
|
|
32
|
+
"sd_disabled_count": "%s tuile(s) inactive(s) sur cette page ne sont pas affichées.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat d'ambiance",
|
|
34
|
+
"sd_current_state": "Température actuelle",
|
|
35
|
+
"sd_target_state": "Température de consigne",
|
|
36
|
+
"sd_relay_state": "Relais du chauffage (facultatif, le point)",
|
|
37
|
+
"sd_step": "Pas de − / +",
|
|
38
|
+
"sd_bad_size": "Ce type n'existe pas dans cette taille, la tuile est omise : choisissez une autre taille ou libérez de la place sur la page.",
|
|
39
|
+
"sd_need_target": "Un thermostat a besoin de l'état de la température de consigne, la tuile est omise jusque-là."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satellite vocale",
|
|
30
30
|
"sd_not_configured": "non nell'elenco dei satelliti",
|
|
31
31
|
"sd_how": "Fai clic su una cella libera per aggiungere un riquadro, trascina un riquadro per spostarlo. L'anteprima mostra i valori attuali; i colori del satellite possono differire un po'.",
|
|
32
|
-
"sd_disabled_count": "%s riquadro/i inattivo/i in questa pagina non sono mostrati."
|
|
32
|
+
"sd_disabled_count": "%s riquadro/i inattivo/i in questa pagina non sono mostrati.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura attuale",
|
|
35
|
+
"sd_target_state": "Temperatura desiderata",
|
|
36
|
+
"sd_relay_state": "Relè del riscaldamento (facoltativo, il punto)",
|
|
37
|
+
"sd_step": "Passo di − / +",
|
|
38
|
+
"sd_bad_size": "Questo tipo non esiste in questa dimensione, il riquadro viene omesso: scegli un'altra dimensione o libera spazio nella pagina.",
|
|
39
|
+
"sd_need_target": "Un termostato ha bisogno dello stato della temperatura desiderata, fino ad allora il riquadro viene omesso."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satelliet",
|
|
30
30
|
"sd_not_configured": "niet in de lijst met satellieten",
|
|
31
31
|
"sd_how": "Klik op een vrije cel om een tegel toe te voegen, sleep een tegel om hem te verplaatsen. De voorvertoning toont de huidige waarden; de kleuren van de satelliet kunnen iets afwijken.",
|
|
32
|
-
"sd_disabled_count": "%s inactieve tegel(s) op deze pagina worden niet getoond."
|
|
32
|
+
"sd_disabled_count": "%s inactieve tegel(s) op deze pagina worden niet getoond.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostaat",
|
|
34
|
+
"sd_current_state": "Huidige temperatuur",
|
|
35
|
+
"sd_target_state": "Gewenste temperatuur",
|
|
36
|
+
"sd_relay_state": "Verwarmingsrelais (optioneel, de stip)",
|
|
37
|
+
"sd_step": "Stap van − / +",
|
|
38
|
+
"sd_bad_size": "Dit soort bestaat niet in deze grootte, de tegel wordt weggelaten: kies een andere grootte of maak ruimte op de pagina.",
|
|
39
|
+
"sd_need_target": "Een thermostaat heeft de state van de gewenste temperatuur nodig, tot dan wordt de tegel weggelaten."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satelita",
|
|
30
30
|
"sd_not_configured": "brak na liście satelitów",
|
|
31
31
|
"sd_how": "Kliknij wolną komórkę, aby dodać kafelek, przeciągnij kafelek, aby go przenieść. Podgląd pokazuje bieżące wartości; kolory na satelicie mogą się nieco różnić.",
|
|
32
|
-
"sd_disabled_count": "Nieaktywne kafelki na tej stronie, które nie są pokazane: %s."
|
|
32
|
+
"sd_disabled_count": "Nieaktywne kafelki na tej stronie, które nie są pokazane: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Termostat z nastawą",
|
|
34
|
+
"sd_current_state": "Temperatura bieżąca",
|
|
35
|
+
"sd_target_state": "Temperatura zadana",
|
|
36
|
+
"sd_relay_state": "Przekaźnik ogrzewania (opcjonalnie, kropka)",
|
|
37
|
+
"sd_step": "Krok − / +",
|
|
38
|
+
"sd_bad_size": "Ten rodzaj nie występuje w tym rozmiarze, kafelek zostanie pominięty: wybierz inny rozmiar lub zwolnij miejsce na stronie.",
|
|
39
|
+
"sd_need_target": "Termostat potrzebuje stanu temperatury zadanej, do tego czasu kafelek jest pomijany."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Satélite",
|
|
30
30
|
"sd_not_configured": "não está na lista de satélites",
|
|
31
31
|
"sd_how": "Clique numa célula livre para adicionar um mosaico, arraste um mosaico para o mover. A pré-visualização mostra os valores atuais; as cores do satélite podem diferir um pouco.",
|
|
32
|
-
"sd_disabled_count": "%s mosaico(s) inativo(s) nesta página não são mostrados."
|
|
32
|
+
"sd_disabled_count": "%s mosaico(s) inativo(s) nesta página não são mostrados.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura atual",
|
|
35
|
+
"sd_target_state": "Temperatura desejada",
|
|
36
|
+
"sd_relay_state": "Relé do aquecimento (opcional, o ponto)",
|
|
37
|
+
"sd_step": "Passo de − / +",
|
|
38
|
+
"sd_bad_size": "Este tipo não existe neste tamanho, o bloco é omitido: escolha outro tamanho ou liberte espaço na página.",
|
|
39
|
+
"sd_need_target": "Um termóstato precisa do estado da temperatura desejada, até lá o bloco é omitido."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Сателлит",
|
|
30
30
|
"sd_not_configured": "нет в списке сателлитов",
|
|
31
31
|
"sd_how": "Нажмите на свободную клетку, чтобы добавить плитку, перетащите плитку, чтобы переместить. Превью показывает текущие значения; цвета на сателлите могут немного отличаться.",
|
|
32
|
-
"sd_disabled_count": "Неактивных плиток на этой странице, которые не показаны: %s."
|
|
32
|
+
"sd_disabled_count": "Неактивных плиток на этой странице, которые не показаны: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Термостат",
|
|
34
|
+
"sd_current_state": "Текущая температура",
|
|
35
|
+
"sd_target_state": "Заданная температура",
|
|
36
|
+
"sd_relay_state": "Реле отопления (необязательно, индикатор)",
|
|
37
|
+
"sd_step": "Шаг − / +",
|
|
38
|
+
"sd_bad_size": "Этот вид не бывает такого размера, плитка будет пропущена: выберите другой размер или освободите место на странице.",
|
|
39
|
+
"sd_need_target": "Термостату нужно состояние заданной температуры, без него плитка пропускается."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "Сателіт",
|
|
30
30
|
"sd_not_configured": "немає у списку сателітів",
|
|
31
31
|
"sd_how": "Натисніть на вільну клітинку, щоб додати плитку, перетягніть плитку, щоб перемістити. Попередній перегляд показує поточні значення; кольори на сателіті можуть трохи відрізнятися.",
|
|
32
|
-
"sd_disabled_count": "Неактивних плиток на цій сторінці, які не показано: %s."
|
|
32
|
+
"sd_disabled_count": "Неактивних плиток на цій сторінці, які не показано: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Термостат",
|
|
34
|
+
"sd_current_state": "Поточна температура",
|
|
35
|
+
"sd_target_state": "Задана температура",
|
|
36
|
+
"sd_relay_state": "Реле опалення (необов'язково, індикатор)",
|
|
37
|
+
"sd_step": "Крок − / +",
|
|
38
|
+
"sd_bad_size": "Цей вид не буває такого розміру, плитку буде пропущено: виберіть інший розмір або звільніть місце на сторінці.",
|
|
39
|
+
"sd_need_target": "Термостату потрібен стан заданої температури, без нього плитка пропускається."
|
|
33
40
|
}
|
|
@@ -29,5 +29,12 @@
|
|
|
29
29
|
"sd_satellite": "卫星设备",
|
|
30
30
|
"sd_not_configured": "不在卫星设备列表中",
|
|
31
31
|
"sd_how": "点击空白格添加磁贴,拖动磁贴可移动它。预览显示当前数值;卫星设备上的颜色可能略有不同。",
|
|
32
|
-
"sd_disabled_count": "此页有 %s 个未启用的磁贴未显示。"
|
|
32
|
+
"sd_disabled_count": "此页有 %s 个未启用的磁贴未显示。",
|
|
33
|
+
"sd_kind_thermostat": "恒温器",
|
|
34
|
+
"sd_current_state": "当前温度",
|
|
35
|
+
"sd_target_state": "目标温度",
|
|
36
|
+
"sd_relay_state": "供暖继电器(可选,圆点)",
|
|
37
|
+
"sd_step": "− / + 的步长",
|
|
38
|
+
"sd_bad_size": "此类型没有这个尺寸,该磁贴将被忽略:请选择其他尺寸或在页面上腾出空间。",
|
|
39
|
+
"sd_need_target": "恒温器需要目标温度的状态,在此之前该磁贴将被忽略。"
|
|
33
40
|
}
|
package/admin/jsonConfig.json
CHANGED
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "satellite-display",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.3",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.0.3": {
|
|
7
|
+
"en": "Small bar and chart tiles (1 x 1, satellite firmware 2.0.2); the editor marks tiles that would be left out",
|
|
8
|
+
"de": "Kleine Balken- und Verlaufskacheln (1 x 1, Satelliten-Firmware 2.0.2); der Editor markiert Kacheln, die weggelassen würden",
|
|
9
|
+
"ru": "Маленькие плитки с полосой и графиком (1 x 1, прошивка сателлита 2.0.2); редактор отмечает плитки, которые будут пропущены",
|
|
10
|
+
"pt": "Blocos pequenos de barra e gráfico (1 x 1, firmware do satélite 2.0.2); o editor marca os blocos que seriam omitidos",
|
|
11
|
+
"nl": "Kleine balk- en grafiektegels (1 x 1, satellietfirmware 2.0.2); de editor markeert tegels die zouden worden weggelaten",
|
|
12
|
+
"fr": "Petites tuiles barre et courbe (1 x 1, firmware du satellite 2.0.2) ; l'éditeur marque les tuiles qui seraient omises",
|
|
13
|
+
"it": "Piccoli riquadri con barra e grafico (1 x 1, firmware del satellite 2.0.2); l'editor segna i riquadri che verrebbero omessi",
|
|
14
|
+
"es": "Mosaicos pequeños de barra y gráfico (1 x 1, firmware del satélite 2.0.2); el editor marca los mosaicos que se omitirían",
|
|
15
|
+
"pl": "Małe kafelki z paskiem i wykresem (1 x 1, firmware satelity 2.0.2); edytor oznacza kafelki, które zostałyby pominięte",
|
|
16
|
+
"uk": "Малі плитки зі смугою та графіком (1 x 1, прошивка сателіта 2.0.2); редактор позначає плитки, які буде пропущено",
|
|
17
|
+
"zh-cn": "小型进度条和图表磁贴(1 x 1,卫星固件 2.0.2);编辑器会标记将被忽略的磁贴"
|
|
18
|
+
},
|
|
19
|
+
"0.0.2": {
|
|
20
|
+
"en": "Thermostat tile: current temperature, target with - and +, heating relay (satellite firmware 2.0.1)",
|
|
21
|
+
"de": "Thermostat-Kachel: Ist-Temperatur, Soll mit - und +, Heizungsrelais (Satelliten-Firmware 2.0.1)",
|
|
22
|
+
"ru": "Плитка термостата: текущая температура, заданная с - и +, реле отопления (прошивка сателлита 2.0.1)",
|
|
23
|
+
"pt": "Bloco de termostato: temperatura atual, alvo com - e +, relé do aquecimento (firmware do satélite 2.0.1)",
|
|
24
|
+
"nl": "Thermostaattegel: huidige temperatuur, doel met - en +, verwarmingsrelais (satellietfirmware 2.0.1)",
|
|
25
|
+
"fr": "Tuile thermostat : température actuelle, consigne avec - et +, relais du chauffage (firmware du satellite 2.0.1)",
|
|
26
|
+
"it": "Riquadro termostato: temperatura attuale, obiettivo con - e +, relè del riscaldamento (firmware del satellite 2.0.1)",
|
|
27
|
+
"es": "Mosaico de termostato: temperatura actual, objetivo con - y +, relé de la calefacción (firmware del satélite 2.0.1)",
|
|
28
|
+
"pl": "Kafelek termostatu: temperatura bieżąca, zadana z - i +, przekaźnik ogrzewania (firmware satelity 2.0.1)",
|
|
29
|
+
"uk": "Плитка термостата: поточна температура, задана з - і +, реле опалення (прошивка сателіта 2.0.1)",
|
|
30
|
+
"zh-cn": "恒温器磁贴:当前温度、用 - 和 + 调节的目标温度、供暖继电器(卫星固件 2.0.1)"
|
|
31
|
+
},
|
|
6
32
|
"0.0.1": {
|
|
7
33
|
"en": "First version: tile pages on the touch display of ESPHome voice satellites",
|
|
8
34
|
"de": "Erste Version: Kachelseiten auf dem Touch-Display von ESPHome-Sprachsatelliten",
|
|
@@ -31,17 +57,17 @@
|
|
|
31
57
|
"zh-cn": "卫星显示屏"
|
|
32
58
|
},
|
|
33
59
|
"desc": {
|
|
34
|
-
"en": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers and
|
|
35
|
-
"de": "Kachelseiten auf dem Touch-Display von ESPHome-Sprachsatelliten: Werte, Anzeigen, Verläufe, Schalter, Dimmer und
|
|
36
|
-
"ru": "Страницы плиток на сенсорном дисплее голосовых сателлитов ESPHome: значения, шкалы, графики, выключатели,
|
|
37
|
-
"pt": "Páginas de mosaicos no ecrã tátil de satélites de voz ESPHome: valores, mostradores, gráficos, interruptores, reguladores e
|
|
38
|
-
"nl": "Tegelpagina's op het aanraakscherm van ESPHome-spraaksatellieten: waarden, meters, grafieken, schakelaars, dimmers en
|
|
39
|
-
"fr": "Pages de tuiles sur l'écran tactile des satellites vocaux ESPHome : valeurs, jauges, courbes, interrupteurs, variateurs et
|
|
40
|
-
"it": "Pagine di riquadri sul display touch dei satelliti vocali ESPHome: valori, indicatori, grafici, interruttori, dimmer e
|
|
41
|
-
"es": "Páginas de mosaicos en la pantalla táctil de satélites de voz ESPHome: valores, indicadores, gráficos, interruptores, reguladores y
|
|
42
|
-
"pl": "Strony kafelków na ekranie dotykowym satelitów głosowych ESPHome: wartości, wskaźniki, wykresy, przełączniki, ściemniacze i
|
|
43
|
-
"uk": "Сторінки плиток на сенсорному дисплеї голосових сателітів ESPHome: значення, шкали, графіки, вимикачі,
|
|
44
|
-
"zh-cn": "ESPHome 语音卫星触摸屏上的磁贴页面:与 ioBroker
|
|
60
|
+
"en": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers, buttons and thermostats bound to ioBroker states",
|
|
61
|
+
"de": "Kachelseiten auf dem Touch-Display von ESPHome-Sprachsatelliten: Werte, Anzeigen, Verläufe, Schalter, Dimmer, Tasten und Thermostate, verbunden mit ioBroker-Datenpunkten",
|
|
62
|
+
"ru": "Страницы плиток на сенсорном дисплее голосовых сателлитов ESPHome: значения, шкалы, графики, выключатели, диммеры, кнопки и термостаты, связанные с состояниями ioBroker",
|
|
63
|
+
"pt": "Páginas de mosaicos no ecrã tátil de satélites de voz ESPHome: valores, mostradores, gráficos, interruptores, reguladores, botões e termóstatos ligados a estados do ioBroker",
|
|
64
|
+
"nl": "Tegelpagina's op het aanraakscherm van ESPHome-spraaksatellieten: waarden, meters, grafieken, schakelaars, dimmers, knoppen en thermostaten gekoppeld aan ioBroker-states",
|
|
65
|
+
"fr": "Pages de tuiles sur l'écran tactile des satellites vocaux ESPHome : valeurs, jauges, courbes, interrupteurs, variateurs, boutons et thermostats liés aux états ioBroker",
|
|
66
|
+
"it": "Pagine di riquadri sul display touch dei satelliti vocali ESPHome: valori, indicatori, grafici, interruttori, dimmer, pulsanti e termostati collegati agli stati di ioBroker",
|
|
67
|
+
"es": "Páginas de mosaicos en la pantalla táctil de satélites de voz ESPHome: valores, indicadores, gráficos, interruptores, reguladores, botones y termostatos vinculados a estados de ioBroker",
|
|
68
|
+
"pl": "Strony kafelków na ekranie dotykowym satelitów głosowych ESPHome: wartości, wskaźniki, wykresy, przełączniki, ściemniacze, przyciski i termostaty powiązane ze stanami ioBroker",
|
|
69
|
+
"uk": "Сторінки плиток на сенсорному дисплеї голосових сателітів ESPHome: значення, шкали, графіки, вимикачі, димери, кнопки та термостати, пов'язані зі станами ioBroker",
|
|
70
|
+
"zh-cn": "ESPHome 语音卫星触摸屏上的磁贴页面:与 ioBroker 状态绑定的数值、仪表、图表、开关、调光器、按钮和恒温器"
|
|
45
71
|
},
|
|
46
72
|
"authors": [
|
|
47
73
|
"sadam6752-tech <sadam6752@gmail.com>"
|
package/lib/layout.js
CHANGED
|
@@ -13,13 +13,17 @@ const SIZES = { s: [1, 1], q: [1, 2], w: [2, 1], l: [2, 2] };
|
|
|
13
13
|
const TYPES = {
|
|
14
14
|
value: ['s', 'q', 'w', 'l'],
|
|
15
15
|
gauge: ['q', 'l'],
|
|
16
|
-
bar: ['q', 'w', 'l'],
|
|
17
|
-
chart: ['w', 'l'],
|
|
16
|
+
bar: ['s', 'q', 'w', 'l'],
|
|
17
|
+
chart: ['s', 'w', 'l'],
|
|
18
18
|
switch: ['s', 'q', 'w'],
|
|
19
19
|
dimmer: ['w', 'l'],
|
|
20
20
|
button: ['s', 'q', 'w'],
|
|
21
|
+
thermostat: ['q', 'l'],
|
|
21
22
|
};
|
|
22
23
|
|
|
24
|
+
/** Step of the - / + buttons of a thermostat when none is set */
|
|
25
|
+
const DEFAULT_STEP = 0.5;
|
|
26
|
+
|
|
23
27
|
/** Icons the firmware has (components/tiles/tiles.cpp of the satellite firmware) */
|
|
24
28
|
const ICONS = [
|
|
25
29
|
'lightbulb',
|
|
@@ -82,9 +86,11 @@ const ICONS = [
|
|
|
82
86
|
* @property {number} gridCol - Column 0..1 of the top left cell
|
|
83
87
|
* @property {number} gridRow - Row 0..3 of the top left cell
|
|
84
88
|
* @property {string} size - s, q, w or l
|
|
85
|
-
* @property {string} type - value, gauge, bar, chart, switch, dimmer or
|
|
86
|
-
* @property {string} state - Bound state
|
|
87
|
-
* @property {string} state2 - On/off state of a dimmer (optional)
|
|
89
|
+
* @property {string} type - value, gauge, bar, chart, switch, dimmer, button or thermostat
|
|
90
|
+
* @property {string} state - Bound state (the current temperature of a thermostat)
|
|
91
|
+
* @property {string} state2 - On/off state of a dimmer (optional), target temperature of a thermostat
|
|
92
|
+
* @property {string} state3 - Heating relay of a thermostat (optional)
|
|
93
|
+
* @property {number} step - Step of the - / + buttons of a thermostat
|
|
88
94
|
* @property {string} label - Name on the tile, empty = name of the object
|
|
89
95
|
* @property {string} unit - Unit, empty = unit of the object
|
|
90
96
|
* @property {string} icon - Icon name or empty
|
|
@@ -223,6 +229,12 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
223
229
|
problems.push(`${where}: no state chosen`);
|
|
224
230
|
continue;
|
|
225
231
|
}
|
|
232
|
+
const state2 = type === 'dimmer' || type === 'thermostat' ? String(row.state2 || '').trim() : '';
|
|
233
|
+
if (type === 'thermostat' && !state2) {
|
|
234
|
+
problems.push(`${where}: a thermostat needs the state of its target temperature`);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const step = numberOrNull(row.step);
|
|
226
238
|
let icon = String(row.icon || '').trim();
|
|
227
239
|
if (icon.startsWith('mdi:')) {
|
|
228
240
|
icon = icon.slice(4);
|
|
@@ -242,7 +254,9 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
242
254
|
size,
|
|
243
255
|
type,
|
|
244
256
|
state,
|
|
245
|
-
state2
|
|
257
|
+
state2,
|
|
258
|
+
state3: type === 'thermostat' ? String(row.state3 || '').trim() : '',
|
|
259
|
+
step: step !== null && step > 0 ? step : DEFAULT_STEP,
|
|
246
260
|
label: String(row.label || '').trim(),
|
|
247
261
|
unit: String(row.unit || '').trim(),
|
|
248
262
|
icon,
|
|
@@ -254,4 +268,15 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
254
268
|
return result;
|
|
255
269
|
}
|
|
256
270
|
|
|
257
|
-
module.exports = {
|
|
271
|
+
module.exports = {
|
|
272
|
+
PAGES,
|
|
273
|
+
SLOTS,
|
|
274
|
+
SIZES,
|
|
275
|
+
TYPES,
|
|
276
|
+
ICONS,
|
|
277
|
+
DEFAULT_STEP,
|
|
278
|
+
idOf,
|
|
279
|
+
numberOrNull,
|
|
280
|
+
normalizeSatellites,
|
|
281
|
+
normalizeTiles,
|
|
282
|
+
};
|
package/lib/satellite.js
CHANGED
|
@@ -7,6 +7,8 @@ const { EventEmitter } = require('node:events');
|
|
|
7
7
|
|
|
8
8
|
/** The actions the firmware 2.0.0 brings (docs/TILES.md of the satellite firmware) */
|
|
9
9
|
const TILE_ACTIONS = ['tile_set', 'tile_value', 'tile_text', 'tile_state', 'tile_history', 'tile_clear'];
|
|
10
|
+
/** Actions of newer firmware; without them the tiles that need them are left out */
|
|
11
|
+
const OPTIONAL_ACTIONS = { tile_setpoint: '2.0.1' };
|
|
10
12
|
|
|
11
13
|
/** Argument types of ESPHome actions (ServiceArgType of api.proto) */
|
|
12
14
|
const ARG = { BOOL: 0, INT: 1, FLOAT: 2, STRING: 3, BOOL_ARRAY: 4, INT_ARRAY: 5, FLOAT_ARRAY: 6, STRING_ARRAY: 7 };
|
|
@@ -268,6 +270,14 @@ class SatelliteLink extends EventEmitter {
|
|
|
268
270
|
}
|
|
269
271
|
}
|
|
270
272
|
|
|
273
|
+
/**
|
|
274
|
+
* @param {string} name - Action
|
|
275
|
+
* @returns {boolean} True when the firmware of the satellite has it
|
|
276
|
+
*/
|
|
277
|
+
has(name) {
|
|
278
|
+
return this.actions.has(name);
|
|
279
|
+
}
|
|
280
|
+
|
|
271
281
|
/**
|
|
272
282
|
* Calls an action of the satellite.
|
|
273
283
|
*
|
|
@@ -293,4 +303,13 @@ class SatelliteLink extends EventEmitter {
|
|
|
293
303
|
}
|
|
294
304
|
}
|
|
295
305
|
|
|
296
|
-
module.exports = {
|
|
306
|
+
module.exports = {
|
|
307
|
+
SatelliteLink,
|
|
308
|
+
TILE_ACTIONS,
|
|
309
|
+
OPTIONAL_ACTIONS,
|
|
310
|
+
ARG,
|
|
311
|
+
convertArg,
|
|
312
|
+
parseTileInput,
|
|
313
|
+
skipUnknownMessages,
|
|
314
|
+
UnknownMessage,
|
|
315
|
+
};
|
package/lib/values.js
CHANGED
|
@@ -140,24 +140,50 @@ function switchValue(on, common) {
|
|
|
140
140
|
return on;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
/**
|
|
144
|
+
* The target temperature a thermostat tile asks for, on the grid of its step and within the range of the object.
|
|
145
|
+
*
|
|
146
|
+
* @param {number} value - Setpoint from the satellite
|
|
147
|
+
* @param {number} step - Step of the - / + buttons
|
|
148
|
+
* @param {Partial<ioBroker.StateCommon>} common - Common part of the object of the target temperature
|
|
149
|
+
* @returns {number} Value to write
|
|
150
|
+
*/
|
|
151
|
+
function setpointValue(value, step, common) {
|
|
152
|
+
let v = step > 0 ? Math.round(value / step) * step : value;
|
|
153
|
+
if (typeof common.min === 'number') {
|
|
154
|
+
v = Math.max(common.min, v);
|
|
155
|
+
}
|
|
156
|
+
if (typeof common.max === 'number') {
|
|
157
|
+
v = Math.min(common.max, v);
|
|
158
|
+
}
|
|
159
|
+
// no 21.500000000000004
|
|
160
|
+
return Math.round(v * 1000) / 1000;
|
|
161
|
+
}
|
|
162
|
+
|
|
143
163
|
/**
|
|
144
164
|
* The arguments of tile_set for a tile, the empty fields filled from the object of its state.
|
|
145
165
|
*
|
|
146
166
|
* @param {import('./layout').Tile} tile - Tile from the settings
|
|
147
167
|
* @param {ioBroker.Object | null | undefined} obj - Object of its state
|
|
148
168
|
* @param {string} lang - Language of the system
|
|
169
|
+
* @param {ioBroker.Object | null} [obj2] - Object of the second state (the target temperature of a thermostat)
|
|
149
170
|
* @returns {Record<string, string | number>} Arguments of tile_set
|
|
150
171
|
*/
|
|
151
|
-
function tileArgs(tile, obj, lang) {
|
|
172
|
+
function tileArgs(tile, obj, lang, obj2) {
|
|
152
173
|
const common = /** @type {Partial<ioBroker.StateCommon>} */ (obj?.common || {});
|
|
174
|
+
const common2 = /** @type {Partial<ioBroker.StateCommon>} */ (obj2?.common || {});
|
|
153
175
|
let label = tile.label || nameOf(common.name, lang) || tile.state.split('.').pop() || '';
|
|
154
176
|
label = label.slice(0, 24);
|
|
155
|
-
const unit = (tile.type === 'dimmer' ? '' : tile.unit || common.unit || '').slice(0, 8);
|
|
177
|
+
const unit = (tile.type === 'dimmer' ? '' : tile.unit || common.unit || common2.unit || '').slice(0, 8);
|
|
156
178
|
let min = tile.min;
|
|
157
179
|
let max = tile.max;
|
|
158
180
|
if (tile.type === 'gauge' || tile.type === 'bar') {
|
|
159
181
|
min ??= typeof common.min === 'number' ? common.min : 0;
|
|
160
182
|
max ??= typeof common.max === 'number' ? common.max : 100;
|
|
183
|
+
} else if (tile.type === 'thermostat') {
|
|
184
|
+
// the scale of the arc and the limits of the target: from the object of the target temperature
|
|
185
|
+
min ??= typeof common2.min === 'number' ? common2.min : 5;
|
|
186
|
+
max ??= typeof common2.max === 'number' ? common2.max : 30;
|
|
161
187
|
} else if (tile.type === 'chart') {
|
|
162
188
|
// equal values: the chart scales itself
|
|
163
189
|
min ??= 0;
|
|
@@ -197,5 +223,6 @@ module.exports = {
|
|
|
197
223
|
levelPercent,
|
|
198
224
|
levelValue,
|
|
199
225
|
switchValue,
|
|
226
|
+
setpointValue,
|
|
200
227
|
tileArgs,
|
|
201
228
|
};
|
package/main.js
CHANGED
|
@@ -7,10 +7,19 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const utils = require('@iobroker/adapter-core');
|
|
10
|
-
const { SatelliteLink } = require('./lib/satellite');
|
|
10
|
+
const { SatelliteLink, OPTIONAL_ACTIONS } = require('./lib/satellite');
|
|
11
11
|
const { normalizeSatellites, normalizeTiles } = require('./lib/layout');
|
|
12
12
|
const { NAMES } = require('./lib/names');
|
|
13
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
toNumber,
|
|
15
|
+
isOn,
|
|
16
|
+
textOf,
|
|
17
|
+
levelPercent,
|
|
18
|
+
levelValue,
|
|
19
|
+
switchValue,
|
|
20
|
+
setpointValue,
|
|
21
|
+
tileArgs,
|
|
22
|
+
} = require('./lib/values');
|
|
14
23
|
|
|
15
24
|
/** After a touch the tile shows the real state again after this time (when the device did not follow) */
|
|
16
25
|
const RESYNC_MS = 3000;
|
|
@@ -27,7 +36,8 @@ const CHART_POINTS = 60;
|
|
|
27
36
|
* @property {Tile} tile - The tile
|
|
28
37
|
* @property {Record<string, string | number>} args - Its tile_set arguments
|
|
29
38
|
* @property {Partial<ioBroker.StateCommon>} common - Common part of the object of its state
|
|
30
|
-
* @property {Partial<ioBroker.StateCommon>} common2 - Common part of the object of the on/off
|
|
39
|
+
* @property {Partial<ioBroker.StateCommon>} common2 - Common part of the object of the second state (on/off of a
|
|
40
|
+
* dimmer, target temperature of a thermostat)
|
|
31
41
|
* @property {number} lastLevel - Last level above 0 of a dimmer (switched on again with it)
|
|
32
42
|
*/
|
|
33
43
|
|
|
@@ -54,6 +64,8 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
54
64
|
this.stopping = false;
|
|
55
65
|
/** @type {Set<string>} read-only states already reported */
|
|
56
66
|
this.readOnlyWarned = new Set();
|
|
67
|
+
/** @type {Set<string>} satellites already told that their firmware is too old for a tile */
|
|
68
|
+
this.oldFirmwareWarned = new Set();
|
|
57
69
|
}
|
|
58
70
|
|
|
59
71
|
async onReady() {
|
|
@@ -178,16 +190,19 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
178
190
|
for (const tile of tiles) {
|
|
179
191
|
const obj = await objectOf(tile.state);
|
|
180
192
|
const obj2 = tile.state2 ? await objectOf(tile.state2) : null;
|
|
193
|
+
if (tile.state3) {
|
|
194
|
+
await objectOf(tile.state3);
|
|
195
|
+
}
|
|
181
196
|
/** @type {Bound} */
|
|
182
197
|
const b = {
|
|
183
198
|
tile,
|
|
184
|
-
args: tileArgs(tile, obj, this.lang),
|
|
199
|
+
args: tileArgs(tile, obj, this.lang, obj2),
|
|
185
200
|
common: /** @type {Partial<ioBroker.StateCommon>} */ (obj?.common || {}),
|
|
186
201
|
common2: /** @type {Partial<ioBroker.StateCommon>} */ (obj2?.common || {}),
|
|
187
202
|
lastLevel: 100,
|
|
188
203
|
};
|
|
189
204
|
this.bound.push(b);
|
|
190
|
-
for (const id of [tile.state, tile.state2].filter(Boolean)) {
|
|
205
|
+
for (const id of [tile.state, tile.state2, tile.state3].filter(Boolean)) {
|
|
191
206
|
const list = this.byState.get(id) || [];
|
|
192
207
|
list.push(b);
|
|
193
208
|
this.byState.set(id, list);
|
|
@@ -230,7 +245,7 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
230
245
|
return;
|
|
231
246
|
}
|
|
232
247
|
link.call('tile_clear', { page: 0 });
|
|
233
|
-
const mine = this.bound.filter(b => b.tile.satellite === sat.id);
|
|
248
|
+
const mine = this.bound.filter(b => b.tile.satellite === sat.id && this.supported(sat, link, b));
|
|
234
249
|
for (const b of mine) {
|
|
235
250
|
link.call('tile_set', b.args);
|
|
236
251
|
}
|
|
@@ -242,6 +257,28 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
242
257
|
}
|
|
243
258
|
}
|
|
244
259
|
|
|
260
|
+
/**
|
|
261
|
+
* A thermostat needs the action tile_setpoint of a newer firmware; without it the tile is left out.
|
|
262
|
+
*
|
|
263
|
+
* @param {SatelliteConfig} sat - Satellite
|
|
264
|
+
* @param {SatelliteLink} link - Its connection
|
|
265
|
+
* @param {Bound} b - Tile
|
|
266
|
+
* @returns {boolean} True when the firmware can show the tile
|
|
267
|
+
*/
|
|
268
|
+
supported(sat, link, b) {
|
|
269
|
+
if (b.tile.type !== 'thermostat' || link.has('tile_setpoint')) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
const key = `${sat.id}/tile_setpoint`;
|
|
273
|
+
if (!this.oldFirmwareWarned.has(key)) {
|
|
274
|
+
this.oldFirmwareWarned.add(key);
|
|
275
|
+
this.log.warn(
|
|
276
|
+
`${sat.name}: a thermostat tile needs the satellite firmware ${OPTIONAL_ACTIONS.tile_setpoint} or newer, it is left out`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
|
|
245
282
|
/**
|
|
246
283
|
* Sends the current values of a tile.
|
|
247
284
|
*
|
|
@@ -254,9 +291,9 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
254
291
|
try {
|
|
255
292
|
const state = await this.getForeignStateAsync(b.tile.state);
|
|
256
293
|
this.push(b, b.tile.state, state?.val);
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
this.push(b,
|
|
294
|
+
for (const id of [b.tile.state2, b.tile.state3].filter(Boolean)) {
|
|
295
|
+
const other = await this.getForeignStateAsync(id);
|
|
296
|
+
this.push(b, id, other?.val);
|
|
260
297
|
}
|
|
261
298
|
} catch (e) {
|
|
262
299
|
this.log.debug(`Reading ${b.tile.state} failed: ${e.message}`);
|
|
@@ -314,6 +351,24 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
314
351
|
link.call('tile_state', { page, slot, on: isOn(val) });
|
|
315
352
|
}
|
|
316
353
|
break;
|
|
354
|
+
case 'thermostat':
|
|
355
|
+
// one state can be bound twice (e.g. the target as the current value too): send each meaning
|
|
356
|
+
if (id === b.tile.state) {
|
|
357
|
+
const n = toNumber(val);
|
|
358
|
+
if (n !== null) {
|
|
359
|
+
link.call('tile_value', { page, slot, value: n });
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (id === b.tile.state2 && link.has('tile_setpoint')) {
|
|
363
|
+
const n = toNumber(val);
|
|
364
|
+
if (n !== null) {
|
|
365
|
+
link.call('tile_setpoint', { page, slot, value: n, step: b.tile.step });
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (id === b.tile.state3) {
|
|
369
|
+
link.call('tile_state', { page, slot, on: isOn(val) });
|
|
370
|
+
}
|
|
371
|
+
break;
|
|
317
372
|
default:
|
|
318
373
|
break;
|
|
319
374
|
}
|
|
@@ -426,6 +481,8 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
426
481
|
b.lastLevel = input.value;
|
|
427
482
|
}
|
|
428
483
|
target = { id: tile.state, val: levelValue(input.value, b.common), common: b.common };
|
|
484
|
+
} else if (tile.type === 'thermostat' && input.input === 'setpoint') {
|
|
485
|
+
target = { id: tile.state2, val: setpointValue(input.value, tile.step, b.common2), common: b.common2 };
|
|
429
486
|
} else if (tile.type === 'button' && input.input === 'press') {
|
|
430
487
|
target = { id: tile.state, val: b.common.type === 'number' ? 1 : true, common: b.common };
|
|
431
488
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.satellite-display",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers and
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers, buttons and thermostats bound to ioBroker states",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sadam6752-tech",
|
|
7
7
|
"email": "sadam6752@gmail.com"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BtcMQbqk.js";import{$r as e,Dn as t,K as n,Mt as r,Qr as i,Qt as a,Sn as o,Yt as s,Zr as c,Zt as l,_ as u,cn as d,en as f,m as p,on as m,pt as h,rn as g,tn as _,zn as v}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-B7AZpjV-.js";import{t as y}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare__shared-B2hx53j0.js";var b={s:[1,1],q:[1,2],w:[2,1],l:[2,2]},x={value:[`s`,`q`,`w`,`l`],gauge:[`q`,`l`],bar:[`q`,`w`,`l`],chart:[`w`,`l`],switch:[`s`,`q`,`w`],dimmer:[`w`,`l`],button:[`s`,`q`,`w`]},S=`lightbulb.lamp.ceiling-light.power-plug.power.fan.radiator.thermometer.water-percent.flash.solar-power.battery.window-closed.window-open.door.garage.blinds.lock.lock-open.bell.television.movie.music.speaker.coffee.washing-machine.dishwasher.car.home.bed.sofa.shower.weather-sunny.weather-night.alarm.play.pause.stop.check.close`.split(`.`);function C(e,t){let n=e=>String(e||``).trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)||`satellite`;return n(e)===n(t)}function w(e,t,n){let[r,i]=b[e];return t>=0&&n>=0&&t+r<=2&&n+i<=4}function T(e,t){let[n,r]=b[e.size],[i,a]=b[t.size];return e.col<t.col+i&&t.col<e.col+n&&e.row<t.row+a&&t.row<e.row+r}function E(e,t,n,r,i,a,o=-1){return w(r,i,a)?!e.some((e,s)=>s!==o&&e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:r,col:i,row:a})):!1}function D(e,t,n,r,i=-1){for(let a=0;a<4;a++)for(let o=0;o<2;o++)if(E(e,t,n,r,o,a,i))return{col:o,row:a};return null}function O(e,t,n,r,i){return e.findIndex(e=>e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:`s`,col:r,row:i}))}function k(e,t,n){return e.map((e,t)=>({t:e,i:t})).filter(e=>e.t.enabled!==!1&&C(e.t.satellite,t)&&Number(e.t.page)===n).slice(8).map(e=>e.i)}function A(e,t,n,r){return{enabled:!0,satellite:e,page:t,col:n,row:r,size:`s`,type:`value`,state:``,state2:``,label:``,unit:``,icon:``,decimals:``,min:``,max:``}}var j=1.5,M=e=>Math.round(e*j),N=e=>6+e*157,P=e=>6+Math.floor(e*117/2),F={value:`sd_kind_value`,gauge:`sd_kind_gauge`,bar:`sd_kind_bar`,chart:`sd_kind_chart`,switch:`sd_kind_switch`,dimmer:`sd_kind_dimmer`,button:`sd_kind_button`},I={s:`1 × 1`,q:`1 × 2`,w:`2 × 1`,l:`2 × 2`},L={screen:`#0B1118`,tile:`#18212B`,tileOn:`#0C4A6E`,label:`#8A9AAC`,accent:`#38BDF8`,track:`#2E3A47`},R={TileEditor:class extends y{constructor(e){super(e),this.state={...this.state,satellite:``,page:1,selected:-1,pickFor:null,dragging:-1,values:{},names:{}}}async componentDidMount(){await super.componentDidMount();let e=this.satelliteNames();e.length&&this.setState({satellite:e[0]},()=>void this.readStates())}tiles(){let e=y.getValue(this.props.data,`tiles`);return Array.isArray(e)?e:[]}satelliteNames(){let e=y.getValue(this.props.data,`satellites`),t=(Array.isArray(e)?e:[]).map(e=>String((e==null?void 0:e.name)||``).trim()).filter(Boolean);for(let e of this.tiles()){let n=String(e.satellite||``).trim();n&&!t.some(e=>C(e,n))&&t.push(n)}return t}isConfigured(e){let t=y.getValue(this.props.data,`satellites`);return(Array.isArray(t)?t:[]).some(t=>C((t==null?void 0:t.name)||``,e))}setTiles(e,t=this.state.selected){this.setState({selected:t},()=>void this.onChange(`tiles`,e,()=>void this.readStates()))}update(e,t){let n=this.tiles().map((n,r)=>r===e?{...n,...t}:n);this.setTiles(n)}async readStates(){let e=this.props.oContext.socket,t=new Set;for(let e of this.pageTiles())for(let n of[e.tile.state,e.tile.state2])n&&!(n in this.state.values)&&t.add(n);if(!t.size)return;let n={},r={},i=u.getLanguage();for(let o of t)try{var a;let t=await e.getState(o);n[o]=t==null?void 0:t.val;let s=await e.getObject(o),c=s==null||(a=s.common)==null?void 0:a.name;r[o]=typeof c==`object`&&c?c[i]||c.en||``:String(c||``)}catch{n[o]=void 0}this.setState(e=>({values:{...e.values,...n},names:{...e.names,...r}}))}pageTiles(){return this.tiles().map((e,t)=>({tile:e,index:t})).filter(e=>e.tile.enabled!==!1&&C(e.tile.satellite,this.state.satellite)&&Number(e.tile.page)===this.state.page&&!!b[e.tile.size])}addAt(e,t){let n=[...this.tiles(),A(this.state.satellite,this.state.page,e,t)];this.setTiles(n,n.length-1)}moveTo(e,t,n){let r=this.tiles()[e];r&&E(this.tiles(),this.state.satellite,this.state.page,r.size,t,n,e)&&this.update(e,{col:t,row:n})}remove(e){this.setTiles(this.tiles().filter((t,n)=>n!==e),-1)}changeKind(e,t){let n=this.tiles()[e],{size:r,col:i,row:a}=n;if(!x[t].includes(r)){let o=x[t].find(t=>E(this.tiles(),n.satellite,Number(n.page),t,i,a,e));if(o)r=o;else for(let o of x[t]){let t=D(this.tiles(),n.satellite,Number(n.page),o,e);if(t){r=o,{col:i,row:a}=t;break}}}this.update(e,{type:t,size:r,col:i,row:a,state2:t===`dimmer`?n.state2:``})}changePage(e,t){let n=this.tiles()[e],r=D(this.tiles(),n.satellite,t,n.size,e);r&&(this.update(e,{page:t,...r}),this.setState({page:t}))}renderTileFace(t,n,r){let a=this.state.values[t.state],o=t.label||this.state.names[t.state]||t.state.split(`.`).pop()||u.t(`sd_no_state`),s=typeof a==`number`?a:NaN,l=t.unit&&t.type!==`dimmer`?` ${t.unit}`:``,d=a==null?`–`:typeof a==`number`?`${Number(a.toFixed(t.decimals===``||t.decimals===null?1:Number(t.decimals)))}${l}`:`${String(a)}${typeof a==`boolean`?``:l}`,f=t.type===`dimmer`&&t.state2?!!this.state.values[t.state2]:a===!0||typeof a==`number`&&a>0,p=t.min===``||t.min===null?0:Number(t.min),m=t.max===``||t.max===null?100:Number(t.max),h=Number.isFinite(s)&&m>p?Math.max(0,Math.min(1,(s-p)/(m-p))):.5,g=i(`div`,{style:{color:L.label,fontSize:M(10),whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:o}),_=r>M(60),v=i(`div`,{style:{fontSize:M(_?22:14)},children:d}),y=i(`div`,{style:{width:M(26),height:M(14),borderRadius:M(7),background:f?L.accent:L.track,position:`relative`,flex:`none`},children:i(`div`,{style:{position:`absolute`,top:M(2),left:M(f?14:2),width:M(10),height:M(10),borderRadius:`50%`,background:`#fff`}})});switch(t.type){case`gauge`:{let t=M(56),n=t/2-M(4),r=Math.PI*2*n*.75;return e(c,{children:[g,e(`svg`,{width:t,height:t,style:{display:`block`,margin:`${M(2)}px auto 0`},children:[i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.track,strokeWidth:M(5),strokeDasharray:`${r} ${r*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.accent,strokeWidth:M(5),strokeDasharray:`${r*h} ${r*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+M(4),textAnchor:`middle`,fill:`#fff`,fontSize:M(11),children:d})]})]})}case`bar`:return e(c,{children:[g,v,i(`div`,{style:{height:M(5),background:L.track,borderRadius:M(3),marginTop:M(_?14:2)},children:i(`div`,{style:{width:`${h*100}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})})]});case`chart`:return e(c,{children:[g,v,i(`svg`,{width:n-M(16),height:M(18),style:{display:`block`},children:i(`polyline`,{fill:`none`,stroke:L.accent,strokeWidth:2,points:[0,.6,.4,.7,.3,.5,.2,.45,.35].map((e,t)=>`${t*(n-M(16))/8},${e*M(18)}`).join(` `)})})]});case`switch`:return e(`div`,{style:{display:`flex`,alignItems:_?`flex-start`:`center`,gap:M(6),height:`100%`,flexDirection:_?`column`:`row`,justifyContent:`space-between`},children:[i(`div`,{style:{flex:1,minWidth:0},children:g}),i(`div`,{style:{alignSelf:`flex-end`},children:y})]});case`dimmer`:return e(`div`,{style:{display:`flex`,alignItems:`center`,gap:M(6),height:`100%`},children:[i(`div`,{style:{width:M(40),minWidth:0},children:g}),y,i(`div`,{style:{flex:1,height:M(5),background:L.track,borderRadius:M(3)},children:i(`div`,{style:{width:`${Number.isFinite(s)?Math.max(0,Math.min(100,s)):50}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})}),i(`div`,{style:{fontSize:M(11),width:M(30),textAlign:`right`},children:Number.isFinite(s)?`${Math.round(s)} %`:`–`})]});case`button`:return e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`center`,height:`100%`,gap:M(6),flexDirection:_?`column`:`row`},children:[t.icon?e(`span`,{style:{color:L.accent,fontSize:M(9)},children:[`◉ `,t.icon]}):null,i(`span`,{style:{fontSize:M(11)},children:o})]});default:return r<=M(53)&&n<=M(151)?e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,height:`100%`},children:[i(`div`,{style:{minWidth:0,flex:1},children:g}),i(`div`,{style:{fontSize:M(13)},children:d})]}):e(c,{children:[g,v]})}}renderScreen(){let t=this.tiles(),n=new Set(k(t,this.state.satellite,this.state.page)),a=[];for(let e=0;e<4;e++)for(let n=0;n<2;n++)O(t,this.state.satellite,this.state.page,n,e)===-1&&a.push(i(f,{title:u.t(`sd_add_here`),children:i(`div`,{onClick:()=>this.addAt(n,e),onDragOver:e=>e.preventDefault(),onDrop:t=>{t.preventDefault(),this.moveTo(this.state.dragging,n,e)},style:{position:`absolute`,left:M(N(n)),top:M(P(e)),width:M(151),height:M(P(e+1)-6-P(e)),border:`1px dashed #3a4654`,borderRadius:M(8),display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#56657a`,cursor:`pointer`,boxSizing:`border-box`},children:i(r,{})})},`c${n}${e}`));return e(`div`,{style:{position:`relative`,width:M(320),height:M(240),background:L.screen,borderRadius:10,outline:`8px solid #2a2a2a`,margin:8,flex:`none`,fontFamily:`Roboto, sans-serif`},children:[a,this.pageTiles().map(({tile:e,index:t})=>{let[r,a]=b[e.size],o=M(r===2?308:151),s=M(P(e.row+a)-6-P(e.row)),c=t===this.state.selected,l=e.type===`switch`&&(this.state.values[e.state]===!0||Number(this.state.values[e.state])>0);return i(`div`,{draggable:!0,onDragStart:()=>this.setState({dragging:t,selected:t}),onDragEnd:()=>this.setState({dragging:-1}),onDragOver:e=>e.preventDefault(),onDrop:e=>{var t;e.preventDefault();let n=(t=e.currentTarget.parentElement)==null?void 0:t.getBoundingClientRect();if(n){let t=Math.min(1,Math.max(0,Math.floor((e.clientX-n.left)/M(157)))),r=Math.min(3,Math.max(0,Math.floor((e.clientY-n.top)/M(58.5))));this.moveTo(this.state.dragging,t,r)}},onClick:()=>this.setState({selected:t}),title:n.has(t)?u.t(`sd_too_many`):``,style:{position:`absolute`,left:M(N(e.col)),top:M(P(e.row)),width:o,height:s,boxSizing:`border-box`,padding:`${M(4)}px ${M(7)}px`,background:l?L.tileOn:L.tile,borderRadius:M(8),color:`#fff`,cursor:`grab`,overflow:`hidden`,border:`2px solid ${c?L.accent:n.has(t)?`#EF4444`:`transparent`}`,opacity:n.has(t)?.5:1,userSelect:`none`},children:this.renderTileFace(e,o,s)},t)})]})}renderStateField(n,r,a,o){return e(g,{sx:{display:`flex`,gap:1,alignItems:`center`},children:[i(s,{variant:`standard`,fullWidth:!0,label:u.t(o),value:r[a]||``,onChange:e=>this.update(n,{[a]:e.target.value})}),i(t,{size:`small`,title:u.t(`sd_pick_state`),onClick:()=>this.setState({pickFor:a}),children:i(h,{})})]})}renderPanel(){let t=this.state.selected,r=this.tiles()[t];if(!r||!C(r.satellite,this.state.satellite))return i(_,{variant:`body2`,sx:{opacity:.7,p:1},children:u.t(`sd_hint`)});let f=this.tiles(),p=e=>e===``?``:Number(e),h=r.type===`gauge`||r.type===`bar`||r.type===`chart`;return e(g,{sx:{display:`flex`,flexDirection:`column`,gap:1.5,minWidth:260,maxWidth:360,flex:1},children:[i(o,{control:i(d,{checked:r.enabled!==!1,onChange:e=>this.update(t,{enabled:e.target.checked})}),label:u.t(`sd_active`)}),i(s,{select:!0,variant:`standard`,label:u.t(`sd_kind`),value:r.type,onChange:e=>this.changeKind(t,e.target.value),children:Object.keys(x).map(e=>i(v,{value:e,children:u.t(F[e])},e))}),e(g,{children:[i(_,{variant:`caption`,sx:{opacity:.7},children:u.t(`sd_size`)}),i(a,{exclusive:!0,size:`small`,value:r.size,sx:{display:`flex`},onChange:(e,n)=>n&&this.update(t,{size:n}),children:x[r.type].map(e=>i(l,{value:e,sx:{flex:1},disabled:e!==r.size&&!E(f,r.satellite,Number(r.page),e,r.col,r.row,t),children:I[e]},e))})]}),this.renderStateField(t,r,`state`,r.type===`dimmer`?`sd_level_state`:`sd_state`),r.type===`dimmer`?this.renderStateField(t,r,`state2`,`sd_onoff_state`):null,e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,sx:{flex:2},label:u.t(`sd_label`),placeholder:this.state.names[r.state]||``,value:r.label||``,slotProps:{htmlInput:{maxLength:24}},onChange:e=>this.update(t,{label:e.target.value})}),r.type!==`dimmer`&&r.type!==`button`&&r.type!==`switch`?i(s,{variant:`standard`,sx:{flex:1},label:u.t(`sd_unit`),value:r.unit||``,slotProps:{htmlInput:{maxLength:8}},onChange:e=>this.update(t,{unit:e.target.value})}):null]}),r.type===`button`||r.type===`switch`&&r.size===`q`?e(s,{select:!0,variant:`standard`,label:u.t(`sd_icon`),value:r.icon||``,onChange:e=>this.update(t,{icon:e.target.value}),children:[i(v,{value:``,children:`–`}),S.map(e=>i(v,{value:e,children:e},e))]}):null,r.type===`value`||h?e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_decimals`),value:r.decimals??``,slotProps:{htmlInput:{min:0,max:3}},onChange:e=>this.update(t,{decimals:p(e.target.value)})}),h?e(c,{children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_min`),value:r.min??``,onChange:e=>this.update(t,{min:p(e.target.value)})}),i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_max`),value:r.max??``,onChange:e=>this.update(t,{max:p(e.target.value)})})]}):null]}):null,i(s,{select:!0,variant:`standard`,label:u.t(`sd_page`),value:Number(r.page),onChange:e=>this.changePage(t,Number(e.target.value)),children:[1,2,3,4].map(e=>i(v,{value:e,disabled:e!==Number(r.page)&&!D(f,r.satellite,e,r.size,t),children:e},e))}),i(m,{color:`error`,variant:`outlined`,startIcon:i(n,{}),onClick:()=>this.remove(t),children:u.t(`sd_delete`)})]})}renderPicker(){let e=this.state.selected,t=this.state.pickFor,n=this.tiles()[e];return!t||!n?null:i(p,{dialogName:`satelliteDisplayTile`,socket:this.props.oContext.socket,theme:this.props.oContext.theme,themeType:this.props.oContext.themeType,imagePrefix:`../..`,selected:n[t]||``,onClose:()=>this.setState({pickFor:null}),onOk:n=>{let r=Array.isArray(n)?n[0]:n;this.setState({pickFor:null}),r&&this.update(e,{[t]:r})}})}renderItem(){let t=this.satelliteNames();if(!t.length)return i(_,{sx:{p:2},children:u.t(`sd_no_satellites`)});let n=t.find(e=>C(e,this.state.satellite))||t[0],r=[1,2,3,4].map(e=>this.tiles().filter(t=>t.enabled!==!1&&C(t.satellite,n)&&Number(t.page)===e).length),o=this.tiles().filter(e=>e.enabled===!1&&C(e.satellite,n)&&Number(e.page)===this.state.page).length;return e(g,{sx:{width:`100%`},children:[e(g,{sx:{display:`flex`,gap:2,alignItems:`center`,flexWrap:`wrap`,mb:2},children:[i(s,{select:!0,variant:`standard`,label:u.t(`sd_satellite`),value:n,sx:{minWidth:180},onChange:e=>this.setState({satellite:e.target.value,selected:-1},()=>void this.readStates()),children:t.map(e=>i(v,{value:e,children:this.isConfigured(e)?e:`${e} (${u.t(`sd_not_configured`)})`},e))}),i(a,{exclusive:!0,size:`small`,value:this.state.page,onChange:(e,t)=>t&&this.setState({page:t,selected:-1},()=>void this.readStates()),children:Array.from({length:4},(e,t)=>t+1).map(t=>e(l,{value:t,children:[u.t(`sd_page`),` `,t,r[t-1]?` (${r[t-1]})`:``]},t))})]}),e(g,{sx:{display:`flex`,gap:3,alignItems:`flex-start`,flexWrap:`wrap`},children:[e(g,{children:[this.renderScreen(),e(_,{variant:`caption`,component:`div`,sx:{opacity:.7,mt:2,maxWidth:M(320)},children:[u.t(`sd_how`),o?` ${u.t(`sd_disabled_count`,o)}`:``]})]}),this.renderPanel()]}),this.renderPicker()]})}}};export{R as default};
|