iobroker.satellite-display 0.0.1 → 0.0.2

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 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
@@ -46,6 +46,7 @@ to 8 tiles. Swipe left from the clock to reach them; a page without tiles is ski
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
 
@@ -66,6 +67,11 @@ Details of the kinds:
66
67
  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
68
  and switching on restores the last level.
68
69
  - **Button:** writes `true` (or `1` for a number state), e.g. to a scene or a script trigger.
70
+ - **Thermostat:** three states: the current temperature (the arc), the target temperature (written by − and +)
71
+ and, optional, the heating relay (the dot: green on, grey off). − and + change the target on the screen at
72
+ once by the step (0.5 unless set); one second after the last press the adapter writes it. The scale and the
73
+ limits of the target come from the object of the target temperature (`min`/`max`), else 5-30. Needs the
74
+ satellite firmware **2.0.1**; an older firmware is reported in the log and the tile is left out.
69
75
  - A value that is no number (text, `true`/`false`) shows as text on a value tile.
70
76
 
71
77
  The toggle and the slider change at once on the screen. When the device does not follow, the tile shows the real
@@ -98,6 +104,12 @@ again by itself.
98
104
  ### **WORK IN PROGRESS**
99
105
  -->
100
106
 
107
+ ### 0.0.2 (2026-11-09)
108
+
109
+ - Thermostat tile: current temperature in an arc, the target temperature with − and +, a dot for the heating
110
+ relay (satellite firmware 2.0.1)
111
+ - Released through GitHub Actions with provenance
112
+
101
113
  ### 0.0.1 (2026-11-09)
102
114
 
103
115
  - 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:[`q`,`w`,`l`],chart:[`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,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:``,state3:``,label:``,unit:``,icon:``,decimals:``,min:``,max:``,step:``}}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`,thermostat:`sd_kind_thermostat`},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`,heatOn:`#4CAF50`,heatOff:`#4B5563`},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,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&&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`||t===`thermostat`?n.state2:``,state3:t===`thermostat`&&n.state3||``})}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`}})}),b=(t,n)=>{let r=t/2-M(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:L.track,strokeWidth:M(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:L.accent,strokeWidth:M(5),strokeDasharray:`${a*h} ${a*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})]})};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:M(6),top:M(5),width:M(10),height:M(10),borderRadius:`50%`,background:o===!0||Number(o)>0?L.heatOn:L.heatOff}}):null,l=e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,color:L.label,flex:1},children:[i(`span`,{style:{fontSize:M(18),fontWeight:700},children:`−`}),i(`span`,{style:{fontSize:t.size===`l`?M(22):M(11),color:t.size===`l`?`#fff`:L.label},children:a}),i(`span`,{style:{fontSize:M(18),fontWeight:700},children:`+`})]});return t.size===`l`?e(c,{children:[s,g,e(`div`,{style:{display:`flex`,alignItems:`center`,gap:M(12)},children:[b(M(52),{display:`block`,flex:`none`}),l]})]}):e(c,{children:[s,g,b(M(46),{display:`block`,margin:`0 auto`}),i(`div`,{style:{display:`flex`,marginTop:-M(4)},children:l})]})}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`,display:e.type===`thermostat`?`flex`:void 0,flexDirection:e.type===`thermostat`?`column`:void 0,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`||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:[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`,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)&&!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};
@@ -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-Dd31YUW5.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,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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 − / +"
33
38
  }
@@ -29,5 +29,10 @@
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": "Шаг − / +"
33
38
  }
@@ -29,5 +29,10 @@
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": "Крок − / +"
33
38
  }
@@ -29,5 +29,10 @@
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": "− / + 的步长"
33
38
  }
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "satellite-display",
4
- "version": "0.0.1",
4
+ "version": "0.0.2",
5
5
  "news": {
6
+ "0.0.2": {
7
+ "en": "Thermostat tile: current temperature, target with - and +, heating relay (satellite firmware 2.0.1)",
8
+ "de": "Thermostat-Kachel: Ist-Temperatur, Soll mit - und +, Heizungsrelais (Satelliten-Firmware 2.0.1)",
9
+ "ru": "Плитка термостата: текущая температура, заданная с - и +, реле отопления (прошивка сателлита 2.0.1)",
10
+ "pt": "Bloco de termostato: temperatura atual, alvo com - e +, relé do aquecimento (firmware do satélite 2.0.1)",
11
+ "nl": "Thermostaattegel: huidige temperatuur, doel met - en +, verwarmingsrelais (satellietfirmware 2.0.1)",
12
+ "fr": "Tuile thermostat : température actuelle, consigne avec - et +, relais du chauffage (firmware du satellite 2.0.1)",
13
+ "it": "Riquadro termostato: temperatura attuale, obiettivo con - e +, relè del riscaldamento (firmware del satellite 2.0.1)",
14
+ "es": "Mosaico de termostato: temperatura actual, objetivo con - y +, relé de la calefacción (firmware del satélite 2.0.1)",
15
+ "pl": "Kafelek termostatu: temperatura bieżąca, zadana z - i +, przekaźnik ogrzewania (firmware satelity 2.0.1)",
16
+ "uk": "Плитка термостата: поточна температура, задана з - і +, реле опалення (прошивка сателіта 2.0.1)",
17
+ "zh-cn": "恒温器磁贴:当前温度、用 - 和 + 调节的目标温度、供暖继电器(卫星固件 2.0.1)"
18
+ },
6
19
  "0.0.1": {
7
20
  "en": "First version: tile pages on the touch display of ESPHome voice satellites",
8
21
  "de": "Erste Version: Kachelseiten auf dem Touch-Display von ESPHome-Sprachsatelliten",
package/lib/layout.js CHANGED
@@ -18,8 +18,12 @@ const TYPES = {
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 button
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: type === 'dimmer' ? String(row.state2 || '').trim() : '',
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 = { PAGES, SLOTS, SIZES, TYPES, ICONS, idOf, numberOrNull, normalizeSatellites, normalizeTiles };
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 = { SatelliteLink, TILE_ACTIONS, ARG, convertArg, parseTileInput, skipUnknownMessages, UnknownMessage };
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 { toNumber, isOn, textOf, levelPercent, levelValue, switchValue, tileArgs } = require('./lib/values');
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 state of a dimmer
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
- if (b.tile.state2) {
258
- const state2 = await this.getForeignStateAsync(b.tile.state2);
259
- this.push(b, b.tile.state2, state2?.val);
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,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.satellite-display",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers and buttons bound to ioBroker states",
5
5
  "author": {
6
6
  "name": "sadam6752-tech",
@@ -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};