matterbridge 3.3.3 → 3.3.4-dev-20251020-4d2dd49
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/CHANGELOG.md +21 -0
- package/dist/broadcastServer.js +1 -86
- package/dist/broadcastServerTypes.js +0 -24
- package/dist/cli.js +110 -444
- package/dist/cliEmitter.js +0 -37
- package/dist/cliHistory.js +15 -95
- package/dist/clusters/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -24
- package/dist/deviceManager.js +1 -124
- package/dist/devices/airConditioner.js +0 -57
- package/dist/devices/batteryStorage.js +1 -48
- package/dist/devices/cooktop.js +0 -55
- package/dist/devices/dishwasher.js +0 -57
- package/dist/devices/evse.js +10 -74
- package/dist/devices/export.js +0 -5
- package/dist/devices/extractorHood.js +0 -42
- package/dist/devices/heatPump.js +2 -50
- package/dist/devices/laundryDryer.js +3 -62
- package/dist/devices/laundryWasher.js +4 -70
- package/dist/devices/microwaveOven.js +5 -88
- package/dist/devices/oven.js +0 -85
- package/dist/devices/refrigerator.js +0 -102
- package/dist/devices/roboticVacuumCleaner.js +9 -100
- package/dist/devices/solarPower.js +0 -38
- package/dist/devices/speaker.js +0 -84
- package/dist/devices/temperatureControl.js +3 -25
- package/dist/devices/waterHeater.js +2 -82
- package/dist/dgram/coap.js +13 -126
- package/dist/dgram/dgram.js +2 -114
- package/dist/dgram/mb_coap.js +3 -41
- package/dist/dgram/mb_mdns.js +15 -80
- package/dist/dgram/mdns.js +137 -299
- package/dist/dgram/multicast.js +1 -62
- package/dist/dgram/unicast.js +0 -54
- package/dist/frontend.js +34 -413
- package/dist/frontendTypes.js +0 -45
- package/dist/helpers.js +0 -53
- package/dist/index.js +0 -25
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.js +0 -3
- package/dist/matter/types.js +0 -3
- package/dist/matterbridge.js +51 -873
- package/dist/matterbridgeAccessoryPlatform.js +0 -36
- package/dist/matterbridgeBehaviors.js +5 -71
- package/dist/matterbridgeDeviceTypes.js +17 -630
- package/dist/matterbridgeDynamicPlatform.js +0 -36
- package/dist/matterbridgeEndpoint.js +58 -1412
- package/dist/matterbridgeEndpointHelpers.js +10 -368
- package/dist/matterbridgePlatform.js +1 -341
- package/dist/matterbridgeTypes.js +0 -26
- package/dist/pluginManager.js +3 -325
- package/dist/shelly.js +7 -168
- package/dist/storage/export.js +0 -1
- package/dist/update.js +0 -69
- package/dist/utils/colorUtils.js +2 -97
- package/dist/utils/commandLine.js +6 -55
- package/dist/utils/copyDirectory.js +1 -38
- package/dist/utils/createDirectory.js +0 -33
- package/dist/utils/createZip.js +2 -47
- package/dist/utils/deepCopy.js +0 -39
- package/dist/utils/deepEqual.js +1 -72
- package/dist/utils/error.js +0 -41
- package/dist/utils/export.js +0 -1
- package/dist/utils/hex.js +0 -124
- package/dist/utils/inspector.js +200 -0
- package/dist/utils/isvalid.js +0 -101
- package/dist/utils/jestHelpers.js +3 -153
- package/dist/utils/network.js +5 -108
- package/dist/utils/spawn.js +0 -71
- package/dist/utils/tracker.js +229 -0
- package/dist/utils/wait.js +8 -60
- package/frontend/build/assets/index.js +4 -4
- package/frontend/build/assets/vendor_mdi.js +1 -1
- package/frontend/package.json +1 -1
- package/npm-shrinkwrap.json +44 -44
- package/package.json +2 -3
- package/dist/broadcastServer.d.ts +0 -105
- package/dist/broadcastServer.d.ts.map +0 -1
- package/dist/broadcastServer.js.map +0 -1
- package/dist/broadcastServerTypes.d.ts +0 -719
- package/dist/broadcastServerTypes.d.ts.map +0 -1
- package/dist/broadcastServerTypes.js.map +0 -1
- package/dist/cli.d.ts +0 -26
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cliEmitter.d.ts +0 -50
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.js.map +0 -1
- package/dist/cliHistory.d.ts +0 -74
- package/dist/cliHistory.d.ts.map +0 -1
- package/dist/cliHistory.js.map +0 -1
- package/dist/clusters/export.d.ts +0 -2
- package/dist/clusters/export.d.ts.map +0 -1
- package/dist/clusters/export.js.map +0 -1
- package/dist/defaultConfigSchema.d.ts +0 -28
- package/dist/defaultConfigSchema.d.ts.map +0 -1
- package/dist/defaultConfigSchema.js.map +0 -1
- package/dist/deviceManager.d.ts +0 -117
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/devices/airConditioner.d.ts +0 -98
- package/dist/devices/airConditioner.d.ts.map +0 -1
- package/dist/devices/airConditioner.js.map +0 -1
- package/dist/devices/batteryStorage.d.ts +0 -48
- package/dist/devices/batteryStorage.d.ts.map +0 -1
- package/dist/devices/batteryStorage.js.map +0 -1
- package/dist/devices/cooktop.d.ts +0 -60
- package/dist/devices/cooktop.d.ts.map +0 -1
- package/dist/devices/cooktop.js.map +0 -1
- package/dist/devices/dishwasher.d.ts +0 -71
- package/dist/devices/dishwasher.d.ts.map +0 -1
- package/dist/devices/dishwasher.js.map +0 -1
- package/dist/devices/evse.d.ts +0 -75
- package/dist/devices/evse.d.ts.map +0 -1
- package/dist/devices/evse.js.map +0 -1
- package/dist/devices/export.d.ts +0 -17
- package/dist/devices/export.d.ts.map +0 -1
- package/dist/devices/export.js.map +0 -1
- package/dist/devices/extractorHood.d.ts +0 -46
- package/dist/devices/extractorHood.d.ts.map +0 -1
- package/dist/devices/extractorHood.js.map +0 -1
- package/dist/devices/heatPump.d.ts +0 -47
- package/dist/devices/heatPump.d.ts.map +0 -1
- package/dist/devices/heatPump.js.map +0 -1
- package/dist/devices/laundryDryer.d.ts +0 -67
- package/dist/devices/laundryDryer.d.ts.map +0 -1
- package/dist/devices/laundryDryer.js.map +0 -1
- package/dist/devices/laundryWasher.d.ts +0 -81
- package/dist/devices/laundryWasher.d.ts.map +0 -1
- package/dist/devices/laundryWasher.js.map +0 -1
- package/dist/devices/microwaveOven.d.ts +0 -168
- package/dist/devices/microwaveOven.d.ts.map +0 -1
- package/dist/devices/microwaveOven.js.map +0 -1
- package/dist/devices/oven.d.ts +0 -105
- package/dist/devices/oven.d.ts.map +0 -1
- package/dist/devices/oven.js.map +0 -1
- package/dist/devices/refrigerator.d.ts +0 -118
- package/dist/devices/refrigerator.d.ts.map +0 -1
- package/dist/devices/refrigerator.js.map +0 -1
- package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
- package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
- package/dist/devices/roboticVacuumCleaner.js.map +0 -1
- package/dist/devices/solarPower.d.ts +0 -40
- package/dist/devices/solarPower.d.ts.map +0 -1
- package/dist/devices/solarPower.js.map +0 -1
- package/dist/devices/speaker.d.ts +0 -87
- package/dist/devices/speaker.d.ts.map +0 -1
- package/dist/devices/speaker.js.map +0 -1
- package/dist/devices/temperatureControl.d.ts +0 -166
- package/dist/devices/temperatureControl.d.ts.map +0 -1
- package/dist/devices/temperatureControl.js.map +0 -1
- package/dist/devices/waterHeater.d.ts +0 -111
- package/dist/devices/waterHeater.d.ts.map +0 -1
- package/dist/devices/waterHeater.js.map +0 -1
- package/dist/dgram/coap.d.ts +0 -205
- package/dist/dgram/coap.d.ts.map +0 -1
- package/dist/dgram/coap.js.map +0 -1
- package/dist/dgram/dgram.d.ts +0 -141
- package/dist/dgram/dgram.d.ts.map +0 -1
- package/dist/dgram/dgram.js.map +0 -1
- package/dist/dgram/mb_coap.d.ts +0 -24
- package/dist/dgram/mb_coap.d.ts.map +0 -1
- package/dist/dgram/mb_coap.js.map +0 -1
- package/dist/dgram/mb_mdns.d.ts +0 -24
- package/dist/dgram/mb_mdns.d.ts.map +0 -1
- package/dist/dgram/mb_mdns.js.map +0 -1
- package/dist/dgram/mdns.d.ts +0 -290
- package/dist/dgram/mdns.d.ts.map +0 -1
- package/dist/dgram/mdns.js.map +0 -1
- package/dist/dgram/multicast.d.ts +0 -67
- package/dist/dgram/multicast.d.ts.map +0 -1
- package/dist/dgram/multicast.js.map +0 -1
- package/dist/dgram/unicast.d.ts +0 -56
- package/dist/dgram/unicast.d.ts.map +0 -1
- package/dist/dgram/unicast.js.map +0 -1
- package/dist/frontend.d.ts +0 -235
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/frontendTypes.d.ts +0 -529
- package/dist/frontendTypes.d.ts.map +0 -1
- package/dist/frontendTypes.js.map +0 -1
- package/dist/helpers.d.ts +0 -48
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts +0 -33
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/export.d.ts +0 -2
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts +0 -2
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts +0 -2
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts +0 -2
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts +0 -2
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts +0 -5
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts +0 -3
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterbridge.d.ts +0 -469
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -42
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts +0 -2399
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts +0 -761
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -42
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts +0 -1545
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -560
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts +0 -402
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts +0 -209
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -353
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts +0 -174
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts +0 -2
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts +0 -75
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -99
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/commandLine.d.ts +0 -59
- package/dist/utils/commandLine.d.ts.map +0 -1
- package/dist/utils/commandLine.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts +0 -33
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createDirectory.d.ts +0 -34
- package/dist/utils/createDirectory.d.ts.map +0 -1
- package/dist/utils/createDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts +0 -39
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts +0 -32
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts +0 -54
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/error.d.ts +0 -44
- package/dist/utils/error.d.ts.map +0 -1
- package/dist/utils/error.js.map +0 -1
- package/dist/utils/export.d.ts +0 -13
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/hex.d.ts +0 -89
- package/dist/utils/hex.d.ts.map +0 -1
- package/dist/utils/hex.js.map +0 -1
- package/dist/utils/isvalid.d.ts +0 -103
- package/dist/utils/isvalid.d.ts.map +0 -1
- package/dist/utils/isvalid.js.map +0 -1
- package/dist/utils/jestHelpers.d.ts +0 -137
- package/dist/utils/jestHelpers.d.ts.map +0 -1
- package/dist/utils/jestHelpers.js.map +0 -1
- package/dist/utils/network.d.ts +0 -115
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts +0 -35
- package/dist/utils/spawn.d.ts.map +0 -1
- package/dist/utils/spawn.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -54
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{B as e,y as
|
|
2
|
-
`).map((t,I)=>e.jsx("li",{style:{padding:0,margin:0,wordBreak:"break-all"},children:t},I)),e.jsx("li",{ref:j,style:{padding:0,margin:0}})]})]}),e.jsxs(Oe,{sx:{justifyContent:"center"},children:[
|
|
3
|
-
`)},[]),
|
|
4
|
-
`)),["debug","info","notice","warn","error","fatal"].includes(h.response.level)&&(g.current==="info"&&h.response.level==="debug"||g.current==="notice"&&(h.response.level==="debug"||h.response.level==="info")||g.current==="warn"&&(h.response.level==="debug"||h.response.level==="info"||h.response.level==="notice")||g.current==="error"&&(h.response.level==="debug"||h.response.level==="info"||h.response.level==="notice"||h.response.level==="warn")||g.current==="fatal"&&(h.response.level==="debug"||h.response.level==="info"||h.response.level==="notice"||h.response.level==="warn"||h.response.level==="error")))||F.current!=="*"&&F.current!==""&&!h.response.message.toLowerCase().includes(F.current.toLowerCase())&&!h.response.name.toLowerCase().includes(F.current.toLowerCase())||h.response.name==="Commissioning"&&h.response.message.includes("is uncommissioned"))return;p(ve=>{const ae=[...ve,{level:h.response.level,time:h.response.time,name:h.response.name,message:h.response.message}];return ae.length>j*2?ae.slice(j):ae})}else{if(r&&console.log(`WebSocket received message id ${h.id} method ${h.method}:`,h),h.id===0)N.current.forEach(he=>he.listener(h));else{const he=N.current.find(ve=>ve.id===h.id);he?he.listener(h):console.warn(`WebSocket no listener found for message id ${h.id}:`,h)}return}}catch(h){console.error(`WebSocket error parsing message: ${h}`,h instanceof Error?h.stack:null)}},S.current.onopen=()=>{r&&console.log(`WebSocket: Connected to WebSocket: ${ne}`),k("WebSocket",`Connected to WebSocket: ${ne}`),H(!0),A(),q.current=1,u.current=setTimeout(()=>{m.current=setInterval(()=>{w({id:W.current,method:"ping",src:"Frontend",dst:"Matterbridge",params:{}}),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{r&&console.error(`WebSocketUse: No pong response received from WebSocket: ${ne}`),k("WebSocket",`No pong response received from WebSocket: ${ne}`),H(!1)},1e3*$)},1e3*ie)},1e3*K)},S.current.onclose=()=>{r&&console.error(`WebSocket: Disconnected from WebSocket ${ye?"with Ingress":""}: ${ne}`),k("WebSocket",`Disconnected from WebSocket: ${ne}`),H(!1),A(),c(),u.current&&clearTimeout(u.current),s.current&&clearTimeout(s.current),m.current&&clearInterval(m.current),k("WebSocket",`Reconnecting (attempt ${q.current} of ${Z}) to WebSocket${ye?" (Ingress)":""}: ${ne}`),ye?setTimeout(de,5e3):q.current===1?de():q.current<Z?setTimeout(de,1e3*q.current):k("WebSocket",`Reconnect attempts exceeded limit of ${Z} retries, refresh the page to reconnect to: ${ne}`),q.current=q.current+1},S.current.onerror=B=>{r&&console.error(`WebSocket: WebSocket error connecting to ${ne}:`,B),k("WebSocket",`WebSocket error connecting to ${ne}`)})},[ne]),de=o.useCallback(()=>{r&&console.log(`WebSocket attemptReconnect ${q.current}/${Z} to:`,ne),le()},[le]);o.useEffect(()=>(le(),()=>{S.current&&S.current.readyState===WebSocket.OPEN&&S.current.close()}),[le]);const ge=o.useMemo(()=>({messages:b,maxMessages:j,autoScroll:I,setMessages:p,setLogFilters:E,setMaxMessages:t,setAutoScroll:v}),[b,p,E]),_=o.useMemo(()=>({maxMessages:j,autoScroll:I,logFilterLevel:d,logFilterSearch:i,setMessages:p,setLogFilters:E,setMaxMessages:t,setAutoScroll:v,online:M,retry:q.current,getUniqueId:C,addListener:Q,removeListener:ce,sendMessage:w,logMessage:k}),[j,I,p,E,t,v,M,q.current,Q,ce,w,k]);return e.jsx(nr.Provider,{value:ge,children:e.jsx(fe.Provider,{value:_,children:n})})}function en(n){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 296.2 296.2",...n,children:[e.jsxs("defs",{children:[e.jsxs("linearGradient",{id:"lg1",x1:"16.6",y1:"16.6",x2:"279.6",y2:"279.6",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#00b48d"}),e.jsx("stop",{offset:".1",stopColor:"#3faa77"}),e.jsx("stop",{offset:".3",stopColor:"#234148"}),e.jsx("stop",{offset:".7",stopColor:"#203b44"}),e.jsx("stop",{offset:".9",stopColor:"#ad2e6e"}),e.jsx("stop",{offset:"1",stopColor:"#c81b74"})]}),e.jsxs("linearGradient",{id:"lg2",x1:"31.1",y1:"31.1",x2:"265.1",y2:"265.1",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#00b48d"}),e.jsx("stop",{offset:".2",stopColor:"#285251"}),e.jsx("stop",{offset:".4",stopColor:"#234148"}),e.jsx("stop",{offset:".8",stopColor:"#203b44"}),e.jsx("stop",{offset:".9",stopColor:"#a8316c"}),e.jsx("stop",{offset:"1",stopColor:"#c81b74"})]}),e.jsxs("linearGradient",{id:"lg3",x1:"116.2",y1:"143.9",x2:"139.8",y2:"143.9",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#8bc751"}),e.jsx("stop",{offset:"1",stopColor:"#0db14b"})]}),e.jsx("linearGradient",{id:"lg4",x1:"136.1",y1:"100.8",x2:"159.6",y2:"100.8",xlinkHref:"#lg3"}),e.jsx("linearGradient",{id:"lg5",x1:"155.3",y1:"143.9",x2:"178.9",y2:"143.9",xlinkHref:"#lg3"}),e.jsxs("linearGradient",{id:"lg6",x1:"46.8",y1:"25.7",x2:"89.6",y2:"74.8",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#b1d34a"}),e.jsx("stop",{offset:"1",stopColor:"#50b848"})]})]}),e.jsx("rect",{width:"296.2",height:"296.2",rx:"56.7",ry:"56.7",style:{fill:"url(#lg1)"}}),e.jsx("rect",{x:"16.3",y:"16.3",width:"263.6",height:"263.6",rx:"50.5",ry:"50.5",style:{fill:"url(#lg2)"}}),e.jsx("circle",{cx:"128",cy:"143.9",r:"11.8",style:{fill:"url(#lg3)"}}),e.jsx("circle",{cx:"147.8",cy:"100.8",r:"11.8",style:{fill:"url(#lg4)"}}),e.jsx("path",{d:"m244.6 114.5.4-.5L160 33a17 17 0 0 0-24.7-.5l-86.4 83.3a15 15 0 0 0 9.2 26.9h19.3v-4.7l-13.7-12.7v-.1l83.7-80.8 84.2 81-13.9 12.8v4.5h19.5a15 15 0 0 0 7.4-28.1Z",style:{fill:"url(#lg3)"}}),e.jsx("circle",{cx:"167.1",cy:"143.9",r:"11.8",style:{fill:"url(#lg5)"}}),e.jsx("path",{fill:"#fff",d:"M219 89.3V35.5a10.5 10.5 0 1 0-21 0v33.7l21 20Z"}),e.jsx("path",{d:"M91.4 73.3H83a37 37 0 0 0-14.5-28.4L65 50.2c.1 0 12.6 9 11.7 25.4-5.3-.4-11.2-1.9-16.3-5.3-11.8-7.8-16-23.7-11.9-46 8.7 1.5 34 7 43 22.8 4.1 7.3 4.1 16.1 0 26.2Z",style:{fill:"url(#lg6)"}}),e.jsx("path",{d:"M65.9 80a49.6 49.6 0 0 0 17.8 2.2l16.6-16c1.6-8.3.5-15.7-3.3-22.4C84.6 22 47.8 17.5 46.2 17.4l-3-.4-.6 3c-3.8 18.4-5.9 50.6 23.2 60ZM48.4 24.4c8.7 1.5 34 7 43 22.8 4.1 7.3 4.1 16.1 0 26.2H83a37 37 0 0 0-14.5-28.4l-3.7 5.3c.1 0 12.6 9 11.7 25.4-5.3-.4-11.2-1.9-16.3-5.3-11.9-7.8-16-23.7-11.9-46Z",fill:"#1e5857"}),e.jsx("path",{fill:"#fff",d:"M250.5 90.5a17.4 17.4 0 1 1 0-34.8 17.4 17.4 0 0 1 0 34.8Zm0-22.7a5.4 5.4 0 0 0 0 10.7 5.3 5.3 0 0 0 0-10.7ZM258.8 148.2a15.9 15.9 0 0 0-9.6 28.5c-.8 4.2-5.4 4.6-5.4 4.6h-26v-43l13.6-13-1.8-2-82.2-79-81.2 78.3-2.5 2.6 13.7 13v42.9H53a21.5 21.5 0 1 0 11.7 15h12.6v18.8c0 7.8 6.4 14.1 14.1 14.1h29.3v14.8H64a10.6 10.6 0 0 0-17.7 8 10.6 10.6 0 0 0 17.6 8h157.6a16.3 16.3 0 1 0 0-16h-84.8V229h66.8c7.8 0 14.2-6.3 14.2-14.1v-19.2h27.6c14.3 0 17.8-12.8 18.5-16.6a15.9 15.9 0 0 0-5-30.9ZM43.7 210.8a10.3 10.3 0 1 1 0-20.6 10.3 10.3 0 0 1 0 20.6Zm192 36a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm-77-34.8h-22v-34h22v34Zm8.4-79.8c2.7 0 5.2 1 7.2 2.5v-10.4L188 137s2.6 1.3 4.6 1.3h6.7v68c0 3.2-2.6 5.7-5.7 5.7h-19v-34h1.4a7.5 7.5 0 0 0 0-15H120a7.5 7.5 0 0 0 0 15h.7v34h-19.3a5.7 5.7 0 0 1-5.7-5.6v-68.1h6.7c2 0 4.6-1.3 4.6-1.3l13.7-12.7v10.4a11.7 11.7 0 0 1 16 1.6v-13a14.9 14.9 0 0 0-25-10.8s-.1.2-.1.2l-.5.5-6.9 7H92.5l55-53.2 55.1 53.2h-11.8l-7-7c0-.2-.2-.3-.4-.5l-.2-.2a14.8 14.8 0 0 0-25 10.9v12.9c2.2-2.5 5.3-4.1 8.9-4.1Zm91.7 36.7a4.9 4.9 0 1 1 0-9.7 4.9 4.9 0 0 1 0 9.7Z"})]})}function De(){const{retry:n}=o.useContext(fe),d=()=>{window.location.reload()};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",width:"100vw",height:"100vh",justifyContent:"center",alignItems:"center",fontSize:"20px",color:"var(--main-text-color)",backgroundColor:"var(--main-bg-color)"},children:[e.jsx(en,{style:{height:"128px",width:"128px",margin:"10px",marginBottom:"20px"}}),n<100?e.jsxs(e.Fragment,{children:[e.jsx(Dr,{style:{color:"var(--primary-color)"}}),e.jsx("div",{style:{marginTop:"20px",color:"var(--primary-color)",textAlign:"center"},children:e.jsxs("span",{children:["Reconnecting to Matterbridge ","(attempt "+n+")","..."]})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{marginTop:"20px",color:"var(--primary-color)",textAlign:"center"},children:[e.jsx("span",{children:"Unable to connect to Matterbridge after multiple attempts."}),e.jsx("br",{}),e.jsx("span",{children:"Please check your network connection."}),e.jsx("br",{})]}),e.jsx(oe,{variant:"contained",color:"primary",onClick:d,style:{marginTop:"20px"},children:"Refresh the Page"})]})]})}function tn({value:n,maxChars:d}){let l=n;if(n.length>d&&d>3){const i=d-3,a=n.substring(0,Math.ceil(i/2)),b=n.substring(n.length-Math.floor(i/2),n.length);l=`${a} … ${b}`}return n!==l?e.jsx(O,{title:n,placement:"top",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[0,12]}}]}},children:e.jsx("span",{children:l})}):e.jsx("span",{children:l})}function Me({children:n,style:d}){const l={display:"flex",flexDirection:"column",flex:"0 0 auto",width:"100%",overflow:"hidden",margin:"0px",padding:"0px",gap:"0px",backgroundColor:"var(--div-bg-color)",boxShadow:"5px 5px 10px var(--div-shadow-color)",border:"1px solid var(--table-border-color)",borderRadius:"var(--div-border-radius)",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function Ze({children:n,style:d}){const l={display:"flex",flexDirection:"row",justifyContent:"space-between",width:"100%",height:"30px",borderBottom:"1px solid var(--table-border-color)",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",margin:"0px",padding:"0px",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function Ye({children:n,style:d}){const l={color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",fontSize:"16px",fontWeight:"bold",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function ut({children:n,style:d}){const l={display:"flex",flexDirection:"row",justifyContent:"space-between",width:"100%",height:"30px",color:"var(--footer-text-color)",backgroundColor:"var(--footer-bg-color)",margin:"0px",padding:"0px",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function gt({children:n,style:d}){const l={color:"var(--footer-text-color)",backgroundColor:"var(--footer-bg-color)",fontSize:"14px",fontWeight:"bold",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function tt({children:n,style:d}){const l={color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",fontSize:"14px",fontWeight:"normal",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function ot({children:n,style:d,onClose:l}){const i={display:"flex",flexDirection:"row",margin:"0px",padding:"0px",paddingRight:"10px",gap:"10px"};return e.jsxs("div",{style:{...i,...d},children:[n,vi]})}function rn({systemInfo:n,compact:d}){const{addListener:l,removeListener:i,getUniqueId:a,sendMessage:b}=o.useContext(fe),[p,j]=o.useState(n),t=o.useRef(a());if(r&&console.log("SystemInfoTable loading with systemInfo:",p,"compact:",d),n&&d&&p.totalMemory&&p.freeMemory){const P=p.totalMemory,c=p.freeMemory;p.freeMemory=`${c} / ${P}`,p.totalMemory=""}if(n&&d&&p.heapTotal&&p.heapUsed){const P=p.heapTotal,c=p.heapUsed;p.heapUsed=`${c} / ${P}`,p.heapTotal=""}if(n&&d&&p.osRelease&&p.osType){const P=p.osType,c=p.osRelease;p.osType=`${P} (${c})`,p.osRelease=""}if(n&&d&&p.osArch&&p.osPlatform){const P=p.osPlatform,c=p.osArch;p.osPlatform=`${P} (${c})`,p.osArch=""}const I=(P,c,x,f,R)=>{j(N=>({...N,totalMemory:P,freeMemory:c,heapTotal:x,heapUsed:f,rss:R}))},v=P=>{j(c=>({...c,cpuUsage:P.toFixed(2)+" %"}))},M=P=>{j(c=>({...c,processCpuUsage:P.toFixed(2)+" %"}))},H=(P,c)=>{j(x=>({...x,systemUptime:P,processUptime:c}))},V=()=>{r&&console.log("SystemInfoTable handleViewHistory clicked"),b({id:t.current,sender:"Header",method:"/api/viewhistorypage",src:"Frontend",dst:"Matterbridge",params:{}})};o.useEffect(()=>{const P=c=>{r&&console.log("SystemInfoTable received WebSocket Message:",c),c.method==="memory_update"&&c.response&&c.response.totalMemory&&c.response.freeMemory&&c.response.heapTotal&&c.response.heapUsed&&c.response.rss?(r&&console.log("SystemInfoTable received memory_update",c),I(c.response.totalMemory,c.response.freeMemory,c.response.heapTotal,c.response.heapUsed,c.response.rss)):c.method==="cpu_update"&&c.response&&c.response.cpuUsage?(r&&console.log("SystemInfoTable received cpu_update",c),v(c.response.cpuUsage),M(c.response.processCpuUsage)):c.method==="uptime_update"&&c.response&&c.response.systemUptime&&c.response.processUptime?(r&&console.log("SystemInfoTable received uptime_update",c),H(c.response.systemUptime,c.response.processUptime)):c.method==="/api/viewhistorypage"&&c.id===t.current&&c.success===!0&&(r&&console.log("SystemInfoTable received /api/viewhistorypage success"),window.open("./api/viewhistory","_blank","noopener,noreferrer"))};return l(P,t.current),r&&console.log(`SystemInfoTable added WebSocket listener id ${t.current}`),()=>{i(P),r&&console.log("SystemInfoTable removed WebSocket listener")}},[l,i]);const[T,A]=o.useState(!1);return!p||T?null:(r&&console.log("SystemInfoTable rendering..."),e.jsxs(Me,{style:{flex:"0 1 auto",width:"302px",minWidth:"302px"},children:[e.jsxs(Ze,{children:[e.jsx(Ye,{children:"System Information"}),e.jsx(ot,{onClose:()=>A(!0),children:e.jsx(U,{size:"small",sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},onClick:V,children:e.jsx(O,{title:"Open the cpu and memory usage page",arrow:!0,children:e.jsx(re,{path:fo,size:"22px"})})})})]}),e.jsx("div",{className:"MbfWindowDivTable",children:e.jsx("table",{style:{border:"none",borderCollapse:"collapse"},children:e.jsx("tbody",{style:{border:"none",borderCollapse:"collapse"},children:Object.entries(p).filter(([P,c])=>c!==void 0&&c!=="").map(([P,c],x)=>e.jsxs("tr",{className:x%2===0?"table-content-even":"table-content-odd",style:{border:"none",borderCollapse:"collapse"},children:[e.jsx("td",{style:{border:"none",borderCollapse:"collapse"},children:P.replace("interfaceName","Interface name").replace("macAddress","Mac address").replace("ipv4Address","IPv4 address").replace("ipv6Address","IPv6 address").replace("nodeVersion","Node version").replace("hostname","Hostname").replace("user","User").replace("osType","Os").replace("osPlatform","Platform").replace("freeMemory","Memory").replace("systemUptime","System uptime").replace("processUptime","Process uptime").replace("cpuUsage","Host CPU").replace("processCpuUsage","Process CPU").replace("rss","Rss").replace("heapUsed","Heap")}),e.jsx("td",{style:{border:"none",borderCollapse:"collapse"},children:e.jsx(tn,{value:typeof c!="string"?c.toString():c,maxChars:24})})]},P))})})})]}))}const on=o.memo(rn),Qt={margin:"0px",padding:"0px",color:"var(--div-text-color)",transition:"color 0.2s ease","& svg":{display:"block"},"& svg path":{fill:"var(--div-text-color)",transition:"fill 0.2s ease"},"&:hover":{color:"var(--primary-color)"},"&:hover svg path":{fill:"var(--primary-color)"},"&:focus-visible":{outline:"2px solid var(--primary-color)",outlineOffset:"2px"}},nn=n=>{if(!n)return"";const d=n.toString().replace(/[^0-9]/g,"");if(d.length<5)return d;const l=d.slice(0,4),i=d.slice(4,7),a=d.slice(7,11);return[l,i,a].filter(Boolean).join("-")};function sn({id:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:b}=o.useContext(fe),[p,j]=o.useState(null),t=o.useRef(null),I=o.useRef(null),v=o.useRef(b()),{showConfirmCancelDialog:M}=o.useContext(_e);r&&console.log(`QRDiv loading with id = "${n}" storeId = "${t.current}" timeout = ${I.current} and matter:`,p),o.useEffect(()=>{r&&console.log(`QRDiv id effect "${n}"`),t.current=n,I.current&&clearTimeout(I.current),I.current=null,n?(r&&console.log(`QRDiv id effect sending data request for storeId "${n}"`),l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:n,server:!0}})):(r&&console.log("QRDiv id effect setting matter to null"),j(null))},[n,l]),o.useEffect(()=>{const c=x=>{r&&console.log("QRDiv received WebSocket Message:",x),x.method==="refresh_required"&&x.response.changed==="matter"&&x.response.matter&&(r&&console.log(`QRDiv received refresh_required: changed=${x.response.changed} for storeId "${x.response.matter.id}":`,x.response.matter),t.current===x.response.matter.id&&(r&&console.log(`QRDiv received refresh_required/matter: setting matter data for storeId "${x.response.matter.id}":`,x.response.matter),I.current&&clearTimeout(I.current),x.response.matter.advertising&&x.response.matter.advertiseTime&&x.response.matter.advertiseTime+9e5<=Date.now()&&(x.response.matter.advertising=!1),j(x.response.matter),x.response.matter.advertising&&(r&&console.log(`QRDiv setting matter advertise timeout for storeId "${x.response.matter.id}":`,x.response.matter.advertiseTime+9e5-Date.now()),I.current=setTimeout(()=>{I.current&&clearTimeout(I.current),r&&console.log(`QRDiv clearing advertising state for storeId "${t.current}" after 15 minutes`),j(f=>f&&{...f,advertising:!1})},x.response.matter.advertiseTime+9e5-Date.now()))))};return i(c,v.current),r&&console.log("QRDiv webSocket effect mounted"),()=>{a(c),I.current&&clearTimeout(I.current),I.current=null,r&&console.log("QRDiv webSocket effect unmounted")}},[i,a]);const H=()=>{r&&console.log(`QRDiv sent matter startCommission for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,startCommission:!0}})},V=()=>{r&&console.log(`QRDiv sent matter stopCommission for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,stopCommission:!0}})},T=()=>{r&&console.log(`QRDiv sent matter advertise for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,advertise:!0}})},A=c=>{r&&console.log(`QRDiv sent matter removeFabric for node "${p?.id}" and fabricIndex ${c}`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,removeFabric:c}})},P=async()=>{if(!p||!p.manualPairingCode)return;const c=p.manualPairingCode.toString();try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(c);else{const x=document.createElement("textarea");x.value=c,x.style.position="fixed",x.style.opacity="0",document.body.appendChild(x),x.focus(),x.select(),document.execCommand("copy"),document.body.removeChild(x)}r&&console.log("Manual pairing code copied to clipboard")}catch(x){console.error("Failed to copy manual pairing code",x)}};return!p||!d?(r&&console.log("QRDiv rendering undefined state"),null):p.online?p.advertising&&p.qrPairingCode&&p.manualPairingCode?(r&&console.log("QRDiv rendering advertising state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsxs(Ze,{children:[e.jsx(Ye,{children:"QR pairing code"}),e.jsxs(ot,{children:[e.jsx(U,{"aria-label":"send advertising",size:"small",onClick:T,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(O,{title:"Send again the mDNS advertisement",arrow:!0,children:e.jsx(re,{path:zt,size:"22px"})})}),e.jsx(U,{"aria-label":"stop pairing",size:"small",onClick:V,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(O,{title:"Turn off pairing",arrow:!0,children:e.jsx(re,{path:xo,size:"22px"})})})]})]}),e.jsx(tt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(_o,{value:p.qrPairingCode,size:256,level:"M",fgColor:"var(--div-text-color)",bgColor:"var(--div-bg-color)",style:{margin:"20px"}}),e.jsxs(ut,{style:{justifyContent:"space-between"},children:[e.jsxs(gt,{style:{fontWeight:"normal",color:"var(--div-text-color)"},children:["Manual pairing code: ",nn(p.manualPairingCode)]}),e.jsx(ot,{children:e.jsx(O,{title:"Copy manual pairing code",arrow:!0,children:e.jsx(U,{"aria-label":"copy manual pairing code",size:"small",onClick:P,sx:Qt,children:e.jsx(re,{path:bo,size:.85})})})})]})]})):p.commissioned&&p.fabricInformations&&p.sessionInformations?(r&&console.log("QRDiv rendering commissioned state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px",overflow:"hidden"},children:[e.jsxs(Ze,{children:[e.jsx(Ye,{children:"Paired fabrics"}),e.jsxs(ot,{children:[e.jsx(U,{"aria-label":"send advertising",size:"small",onClick:T,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(O,{title:"Send again the mDNS advertisement",arrow:!0,children:e.jsx(re,{path:zt,size:"22px"})})}),e.jsx(U,{"aria-label":"start pairing",size:"small",onClick:H,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(O,{title:"Turn on pairing",arrow:!0,children:e.jsx(re,{path:qt,size:"22px"})})})]})]}),e.jsx(tt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx("div",{className:"MbfWindowBodyColumn",style:{paddingTop:"0px"},children:p.fabricInformations.map((c,x)=>e.jsxs("div",{style:{margin:"0px",padding:"10px",gap:"0px",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",textAlign:"left",fontSize:"14px"},children:[e.jsxs("div",{style:{marginLeft:"20px",marginBottom:"10px",display:"flex",flexDirection:"row",justifyContent:"space-between",gap:"20px",alignItems:"center"},children:[e.jsxs("p",{className:"status-blue",style:{margin:"0px",padding:"3px 10px",width:"200px",fontSize:"14px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},children:["Fabric: ",c.fabricIndex]}),e.jsx(O,{title:"Remove the fabric. You will also need to remove it from the controller.",arrow:!0,children:e.jsx(U,{"aria-label":"remove the fabric",size:"small",onClick:()=>M("Remove fabric","Are you sure you want to remove this fabric? You will also need to remove it from the controller.","RemoveFabric",()=>A(c.fabricIndex),()=>{}),sx:{...Qt,padding:"2px"},children:e.jsx(re,{path:vo,size:1})})})]}),e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Vendor: ",c.rootVendorId," ",c.rootVendorName]}),c.label!==""&&e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Label: ",c.label]}),e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Sessions: ",p.sessionInformations?p.sessionInformations.filter(f=>f.fabric?.fabricIndex===c.fabricIndex&&f.isPeerActive===!0).length:"0"," ","subscriptions: ",p.sessionInformations?p.sessionInformations.filter(f=>f.fabric?.fabricIndex===c.fabricIndex&&f.isPeerActive===!0&&f.numberOfActiveSubscriptions>0).length:"0"]})]},x))}),e.jsx(ut,{style:{justifyContent:"center"},children:e.jsxs(gt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]})):!p.commissioned&&!p.advertising?(r&&console.log("QRDiv rendering not commissioned and not advertising state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsx(Ze,{children:e.jsx(Ye,{children:"QR pairing code"})}),e.jsx(tt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(oe,{onClick:H,endIcon:e.jsx(re,{path:qt,size:1}),style:{margin:"20px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:"Turn on pairing"}),e.jsx(ut,{style:{justifyContent:"center"},children:e.jsxs(gt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]})):(r&&console.log("QRDiv rendering unknown state"),null):(r&&console.log("QRDiv rendering offline state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsx(Ze,{style:{height:"30px",justifyContent:"space-between"},children:e.jsx(Ye,{children:"Server node"})}),e.jsx(tt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(tt,{style:{fontWeight:"bold"},children:"Server offline"}),e.jsx(ut,{style:{justifyContent:"center"},children:e.jsxs(gt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]}))}const an=o.memo(sn);function ln(){const{logMessage:n,sendMessage:d,getUniqueId:l}=o.useContext(fe),[i,a]=o.useState("matterbridge-"),[b,p]=o.useState(!1),[j,t]=o.useState(null),I=o.useRef(l()),v=W=>{W.preventDefault(),p(!0)},M=()=>{p(!1)},H=W=>{W.preventDefault(),p(!1);const m=W.dataTransfer.files[0];if(m){n("Plugins",`Installing package ${m.name}. Please wait...`);const s=new FormData;s.append("file",m),s.append("filename",m.name),fetch("./api/uploadpackage",{method:"POST",body:s}).then(u=>u.text()).then(u=>{n("Plugins",`Server response: ${u}`)}).catch(u=>{console.error("Error uploading plugin file:",u),n("Plugins",`Error installing package ${u}`)})}},V=W=>{const m=W.target.files&&W.target.files[0];if(m){n("Plugins",`Uploading package ${m.name}`);const s=new FormData;s.append("file",m),s.append("filename",m.name),fetch("./api/uploadpackage",{method:"POST",body:s}).then(u=>u.text()).then(u=>{n("Plugins",`Server response: ${u}`)}).catch(u=>{console.error("Error uploading plugin file:",u),n("Plugins",`Error uploading package ${u}`)})}},T=()=>{d({id:I.current,sender:"InstallPlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:i,restart:!1}})},A=()=>{document.getElementById("file-upload")?.click()},P=()=>{d({id:I.current,sender:"InstallPlugins",method:"/api/addplugin",src:"Frontend",dst:"Matterbridge",params:{pluginNameOrPath:i}})},c=W=>{W.preventDefault(),d({id:I.current,sender:"InstallPlugins",method:"/api/uninstall",src:"Frontend",dst:"Matterbridge",params:{packageName:i}})},x=W=>{W.preventDefault(),console.log("Right-clicked Upload button")},f=W=>{W.preventDefault(),console.log("Right-clicked Add button")},R=W=>{t(W.currentTarget)},N=W=>{W!==""&&a(W),t(null)},[S,q]=o.useState(!1);return r&&console.log("HomeInstallAddPlugins rendering..."),S?null:e.jsxs(Me,{children:[e.jsxs(Ze,{children:[e.jsx(Ye,{children:"Install plugins"}),e.jsx(ot,{onClose:()=>q(!0)})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"row",flex:"1 1 auto",alignItems:"center",justifyContent:"space-between",margin:"0px",padding:"10px",gap:"20px"},onDragOver:v,onDragLeave:M,onDrop:H,children:[e.jsx(me,{value:i,onChange:W=>{a(W.target.value)},size:"small",id:"plugin-name",label:"Plugin name or plugin path",variant:"outlined",fullWidth:!0}),e.jsx(U,{onClick:R,children:e.jsx(Pr,{})}),e.jsxs(Ke,{id:"simple-menu",anchorEl:j,keepMounted:!0,open:!!j,onClose:()=>N(""),children:[e.jsx(D,{onClick:()=>N("matterbridge-zigbee2mqtt"),children:"matterbridge-zigbee2mqtt"}),e.jsx(D,{onClick:()=>N("matterbridge-somfy-tahoma"),children:"matterbridge-somfy-tahoma"}),e.jsx(D,{onClick:()=>N("matterbridge-shelly"),children:"matterbridge-shelly"}),e.jsx(D,{onClick:()=>N("matterbridge-hass"),children:"matterbridge-hass"}),e.jsx(D,{onClick:()=>N("matterbridge-webhooks"),children:"matterbridge-webhooks"}),e.jsx(D,{onClick:()=>N("matterbridge-bthome"),children:"matterbridge-bthome"}),e.jsx(D,{onClick:()=>N("matterbridge-test"),children:"matterbridge-test"}),e.jsx(D,{onClick:()=>N("matterbridge-example-accessory-platform"),children:"matterbridge-example-accessory-platform"}),e.jsx(D,{onClick:()=>N("matterbridge-example-dynamic-platform"),children:"matterbridge-example-dynamic-platform"}),e.jsx(D,{onClick:()=>N("matterbridge-eve-door"),children:"matterbridge-eve-door"}),e.jsx(D,{onClick:()=>N("matterbridge-eve-motion"),children:"matterbridge-eve-motion"}),e.jsx(D,{onClick:()=>N("matterbridge-eve-energy"),children:"matterbridge-eve-energy"}),e.jsx(D,{onClick:()=>N("matterbridge-eve-weather"),children:"matterbridge-eve-weather"}),e.jsx(D,{onClick:()=>N("matterbridge-eve-room"),children:"matterbridge-eve-room"})]}),e.jsx(O,{title:"Install or update a plugin from npm",children:e.jsxs(oe,{onClick:T,onContextMenu:c,endIcon:e.jsx(ke,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Install"]})}),e.jsx(O,{title:"Upload and install a plugin from a tarball",children:e.jsxs(oe,{onClick:A,onContextMenu:x,endIcon:e.jsx(Nr,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Upload"]})}),e.jsx(O,{title:"Add an installed plugin",children:e.jsxs(oe,{onClick:P,onContextMenu:f,endIcon:e.jsx(bt,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Add"]})}),e.jsx("input",{id:"file-upload",type:"file",accept:".tgz",style:{display:"none"},onChange:V})]})]})}const dn=o.memo(ln);function Ue({status:n,enabledText:d="Enabled",disabledText:l=void 0,tooltipText:i=void 0,onClick:a}){if(n===void 0)return null;{const b=e.jsx("div",{className:n?"status-enabled":"status-disabled",style:{cursor:"default"},onClick:a,children:n?d:l??d});return i!==void 0?e.jsx(O,{title:i,children:b}):b}}function cn(n,d,l){const i=n?.[l],a=d?.[l];return i==null&&a==null?0:i==null?-1:a==null?1:typeof i=="boolean"&&typeof a=="boolean"?i===a?0:i?1:-1:typeof i=="number"&&typeof a=="number"?i-a:String(i).localeCompare(String(a))}function pn({name:n,title:d,columns:l,rows:i,getRowKey:a,footerLeft:b,footerRight:p,onRowClick:j}){const t=o.useRef(new WeakMap),I=o.useRef(1),v=m=>{if(typeof a=="string"&&m&&m[a]!=null)return m[a];if(typeof a=="function"){const g=a(m);if(g!=null)return g}const s=l?.[0]?.id;if(s&&m&&m[s]!=null)return m[s];console.warn(`MbfTable(${n}): using fallback stable row key; consider providing getRowKey prop for better React performance`);let u=t.current.get(m);return u||(u=`rk_${I.current++}`,t.current.set(m,u)),u},[M,H]=o.useState(localStorage.getItem(`${n}_table_order_by`)||null),[V,T]=o.useState(localStorage.getItem(`${n}_table_order`)||null),[A,P]=o.useState(!1),[c,x]=o.useState(()=>{try{const m=localStorage.getItem(`${n}_column_visibility`);if(m)return JSON.parse(m)}catch{}return{}}),f=o.useMemo(()=>{const m={};for(const s of l)s.hidden||(m[s.id]=s.required?!0:c[s.id]!==!1);return m},[l,c]),R=o.useMemo(()=>{if(!M||!V)return i;const m=l.find(u=>u.id===M);if(!m||m.noSort)return i;const s=i.map((u,g)=>({el:u,index:g}));return s.sort((u,g)=>{let F;return typeof m.comparator=="function"?F=m.comparator(u.el,g.el):F=cn(u.el,g.el,M),F!==0?V==="asc"?F:-F:u.index-g.index}),s.map(u=>u.el)},[i,M,V,l]),N=m=>{if(M!==m||!M){H(m),T("asc"),localStorage.setItem(`${n}_table_order_by`,m),localStorage.setItem(`${n}_table_order`,"asc");return}if(V==="asc"){T("desc"),localStorage.setItem(`${n}_table_order`,"desc");return}H(null),T(null),localStorage.removeItem(`${n}_table_order_by`),localStorage.removeItem(`${n}_table_order`)},S=()=>{P(!A)},q=m=>{x(s=>{const u=l.find(ue=>ue.id===m);if(u&&u.required)return s;const g=f[m]!==!1,F={...s};g?F[m]=!1:delete F[m];try{localStorage.setItem(`${n}_column_visibility`,JSON.stringify(F))}catch{}return F})},W=()=>{x({});try{localStorage.removeItem(`${n}_column_visibility`)}catch{}P(!1)};return r&&console.log(`Rendering table ${n}${M&&V?` ordered by ${M}:${V}`:""}`),e.jsxs("div",{style:{display:"flex",flexDirection:"column",margin:"0",padding:"0",gap:"0",width:"100%",flex:"1 1 auto",height:"100%",minHeight:0,overflow:"hidden"},children:[e.jsxs(Le,{open:A,onClose:(m,s)=>{s==="backdropClick"||s==="escapeKeyDown"||S()},disableEscapeKeyDown:!0,disableRestoreFocus:!0,children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:`Configure ${n} columns`})]})}),e.jsx(We,{children:e.jsx(Lr,{children:l.filter(m=>!m.hidden).map(m=>e.jsx(Ve,{control:e.jsx(Ee,{disabled:!!m.required,checked:m.required?!0:f[m.id]!==!1,onChange:()=>q(m.id)}),label:m.label},m.id))})}),e.jsxs(Oe,{children:[e.jsx(oe,{onClick:W,children:"Reset"}),e.jsx(oe,{variant:"contained",onClick:m=>{if(m?.currentTarget&&typeof m.currentTarget.blur=="function")try{m.currentTarget.blur()}catch{}const s=document.activeElement;if(s&&s instanceof HTMLElement&&typeof s.blur=="function")try{s.blur()}catch{}S()},children:"Close"})]})]}),e.jsxs("div",{className:"MbfWindowHeader",style:{height:"30px",minHeight:"30px",justifyContent:"space-between",borderBottom:"none"},children:[e.jsx("p",{className:"MbfWindowHeaderText",children:n}),d&&e.jsx("p",{className:"MbfWindowHeaderText",children:d}),e.jsx("div",{className:"MbfWindowHeaderFooterIcons",children:e.jsx(U,{onClick:m=>{if(m?.currentTarget?.blur)try{m.currentTarget.blur()}catch{}S()},"aria-label":"Configure Columns",style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},children:e.jsx(O,{title:`Configure ${n} columns`,children:e.jsx(re,{path:yo,size:"20px",color:"var(--header-text-color)"})})})})]}),e.jsx("div",{style:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,width:"100%",overflow:"auto",margin:"0px",padding:"0px",gap:"0"},children:e.jsxs("table",{"aria-label":`${n} table`,style:{width:"100%",borderCollapse:"collapse"},children:[e.jsx("thead",{style:{position:"sticky",top:0,zIndex:10,border:"none",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color"},children:e.jsx("tr",{style:{height:"30px",minHeight:"30px"},children:l.map(m=>{if(m.hidden||!m.required&&f[m.id]===!1)return null;const s=!m.noSort,u=s&&M===m.id&&!!V;return e.jsxs("th",{onClick:s?()=>N(m.id):void 0,style:{margin:"0",padding:"5px 10px",position:"sticky",top:0,minWidth:m.minWidth,maxWidth:m.maxWidth,textAlign:m.align||"left",cursor:s?"pointer":"default",border:"none",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",whiteSpace:m.maxWidth?"nowrap":void 0,overflow:m.maxWidth?"hidden":void 0,textOverflow:m.maxWidth?"ellipsis":void 0},"aria-sort":s?u?V==="asc"?"ascending":"descending":"none":void 0,children:[m.label,u&&e.jsxs("span",{style:{marginLeft:6},children:[V==="asc"&&e.jsx(re,{path:jo,size:"15px"}),V==="desc"&&e.jsx(re,{path:wo,size:"15px"})]})]},m.id)})})}),e.jsx("tbody",{children:R.map((m,s)=>{const u=v(m);return e.jsx("tr",{className:s%2===0?"table-content-even":"table-content-odd",onClick:j?g=>j(m,u,g):void 0,style:{height:"30px",minHeight:"30px",border:"none",borderCollapse:"collapse",cursor:j?"pointer":void 0},children:l.map(g=>{if(g.hidden||!g.required&&f[g.id]===!1)return null;const F=m[g.id];return e.jsx("td",{style:{border:"none",borderCollapse:"collapse",textAlign:g.align||"left",padding:"5px 10px",margin:"0",maxWidth:g.maxWidth,whiteSpace:g.maxWidth?"nowrap":void 0,overflow:g.maxWidth?"hidden":void 0,textOverflow:g.maxWidth?"ellipsis":void 0},children:typeof g.render=="function"?g.render(F,u,m,g):typeof F=="boolean"?e.jsx(Ee,{checked:F,disabled:!0,size:"small",sx:{m:0,p:0,color:"var(--table-text-color)","&.Mui-disabled":{color:"var(--table-text-color)",opacity:.7}}}):g.format&&typeof F=="number"?g.format(F):F!=null?String(F):null},g.id)})},u)})})]})}),(b||p)&&e.jsxs("div",{className:"MbfWindowFooter",style:{height:"30px",minHeight:"30px",justifyContent:"space-between",border:"none"},children:[e.jsx("p",{className:"MbfWindowFooterText",style:{fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)"},children:b}),e.jsx("p",{className:"MbfWindowFooterText",style:{fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)"},children:p})]})]})}function un(n){return o.memo(n)}const wt=un(pn);function Gt(n){return n.id!==0&&n.src==="Matterbridge"&&n.dst==="Frontend"}const Be={fontSize:"16px",fontWeight:"bold",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},Qe={fontSize:"12px",fontWeight:"normal",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},gn={fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)",backgroundColor:"var(--div-bg-color)"},mn={fontSize:"16px",fontWeight:"bold",backgroundColor:"var(--div-bg-color)"},Fe={padding:"0px",margin:"0px"},hn="5px 10px 5px 10px",mt={},xe={},ht={},ft={};let Ge=[],Mt=[];const fn=({open:n,onClose:d,plugin:l})=>{const{sendMessage:i,addListener:a,removeListener:b,getUniqueId:p}=o.useContext(fe),j=o.useRef(p()),[t,I]=o.useState(l.configJson),[v,M]=o.useState(null),[H,V]=o.useState({"ui:submitButtonOptions":{submitText:"Confirm"},"ui:globalOptions":{orderable:!0}}),[T,A]=o.useState("");let P={};o.useEffect(()=>{const C=w=>{w.src==="Matterbridge"&&w.dst==="Frontend"&&(Gt(w)&&w.id===j.current&&w.method==="/api/select/devices"&&w.response&&(r&&console.log(`ConfigPluginDialog (id: ${w.id}) received ${w.response.length} /api/select/devices:`,w.response),Ge=w.response),Gt(w)&&w.id===j.current&&w.method==="/api/select/entities"&&w.response&&(r&&console.log(`ConfigPluginDialog (id: ${w.id}) received ${w.response.length} /api/select/entities:`,w.response),Mt=w.response))};return a(C,j.current),r&&console.log("ConfigPluginDialog added WebSocket listener id:",j.current),t&&v&&v.properties&&(Object.keys(v.properties).forEach(w=>{Object.keys(v.properties[w]).forEach(k=>{k.startsWith("ui:")&&(H[w]={},H[w][k]=v.properties[w][k],delete v.properties[w][k])})}),V(H)),l.name&&l.configJson&&l.schemaJson&&(I(l.configJson),M(l.schemaJson),i({id:j.current,sender:"ConfigPlugin",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name}}),i({id:j.current,sender:"ConfigPlugin",method:"/api/select/entities",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name}}),r&&console.log('HomePlugins sent "/api/select/devices" and "/api/select/entities" for plugin:',l.name)),()=>{b(C),r&&console.log("ConfigPluginDialog removed WebSocket listener")}},[a,t,l,b,v,i,H]);const c=(C,w)=>{P=C.formData},x=C=>{r&&console.log("ConfigPluginDialog handleSaveChanges:",C.formData),I(C.formData),l.configJson=C.formData,l.restartRequired=!0,i({id:j.current,sender:"ConfigPlugin",method:"/api/savepluginconfig",src:"Frontend",dst:"Matterbridge",params:{pluginName:C.formData.name,formData:C.formData}}),d()};function f(C){const{id:w,label:k,onKeyChange:E,onDropPropertyClick:Q,disabled:ce,schema:le,children:de,registry:ge,readonly:_,required:B}=C,{templates:h}=ge,{RemoveButton:he}=h.ButtonTemplates;if(!(Ko in le))return e.jsx(Y,{sx:{display:"flex",flexDirection:"column",flexGrow:1,padding:0,margin:0,border:"none"},children:de});const ae=({target:ee})=>E(ee&&ee.value);return e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",flexGrow:1,padding:0,margin:0,border:"none"},children:[e.jsx(me,{id:`${w}-key`,name:`${w}-key`,required:B,disabled:ce||_,defaultValue:k,onBlur:_?void 0:ae,type:"text",variant:"outlined",sx:{width:"250px",minWidth:"250px",maxWidth:"250px",marginRight:"20px"}}),e.jsx(Y,{sx:{flex:1},children:de}),e.jsx(he,{disabled:ce||_,onClick:Q(k),registry:ge})]})}function R(C){const{children:w,description:k,displayLabel:E,errors:Q,help:ce,hidden:le,registry:de,uiSchema:ge}=C,_=Qo(ge),B=Go("WrapIfAdditionalTemplate",de,_);return le?e.jsx("div",{style:{display:"none"},children:w}):e.jsx(Y,{sx:{display:"flex",flexDirection:"column",flexGrow:1,padding:0,margin:0,border:"none"},children:e.jsxs(B,{...C,children:[E===!0&&k,w,Q,ce]})})}function N(C){const{description:w}=C;return w?e.jsx(se,{sx:Qe,children:w}):null}function S(C){const{required:w,title:k}=C;return k?e.jsx(Y,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:e.jsxs(se,{sx:Be,children:["Title ",k," ",w&&e.jsx("mark",{children:"***"})]})}):null}function q(C){const{help:w}=C;return w?e.jsx(Y,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:e.jsx(se,{sx:gn,children:w})}):null}function W(C){const{errors:w}=C;return w?e.jsxs(Y,{sx:{padding:"10px",margin:"10px",border:"1px solid grey"},children:[e.jsx(se,{color:"error",sx:mn,children:"Please fix the following errors:"}),e.jsx(et,{children:w.map((k,E)=>e.jsxs($r,{children:[e.jsx(z,{children:e.jsx(Wr,{color:"error"})}),e.jsx(X,{primary:k.stack})]},E))})]}):null}function m(C){const{errors:w}=C;return w?e.jsx(Y,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:w.map((k,E)=>e.jsxs(se,{color:"error",variant:"body2",sx:{marginLeft:1},children:["This field ",k]},E))}):null}function s(C){const{id:w,name:k,_schema:E,_uiSchema:Q,value:ce,options:le,label:de,type:ge,placeholder:_,required:B,disabled:h,readonly:he,autofocus:ve,onChange:ae,onChangeOverride:ee,onBlur:te,onFocus:Pe,_rawErrors:Ne,_hideError:Xe,_registry:y,_formContext:J}=C,Ce=({target:{value:Se}})=>ae(Se===""?le.emptyValue:Se),Re=({target:Se})=>te(w,Se&&Se.value),nt=({target:Se})=>Pe(w,Se&&Se.value);return e.jsx(Y,{sx:{padding:"0px",margin:"0px"},children:e.jsx(me,{id:w,name:w,label:_&&_!==""?de:void 0,variant:"outlined",placeholder:_&&_!==""?_:de,required:B,disabled:h||he,autoFocus:ve,value:ce||ce===0?ce:"",type:ge,autoComplete:ge==="password"?"current-password":k,onChange:ee||Ce,onBlur:Re,onFocus:nt,fullWidth:!0})})}function u(C){return console.log("ArrayFieldTitleTemplate:",C),null}function g(C){return console.log("ArrayFieldDescriptionTemplate:",C),null}function F(C){return console.log("ArrayFieldItemTemplate:",C),null}function ue(C){const{canAdd:w,onAddClick:k,schema:E,title:Q}=C,[ce,le]=o.useState(!1),[de,ge]=o.useState(!1),[_,B]=o.useState(!1),[h,he]=o.useState(""),ve=y=>{he(y.target.value)},ae=()=>{r&&console.log("ArrayFieldTemplate: handleDialogDeviceToggle filter:",h,"selectDevices:",Ge),le(!ce)},ee=()=>{r&&console.log("ArrayFieldTemplate: handleDialogEntityToggle filter:",h,"selectEntities:",Mt),ge(!de)},te=()=>{r&&console.log("ArrayFieldTemplate: handleDialogDeviceEntityToggle filter:",h,"selectDevices:",Ge),B(!_)},Pe=y=>{le(!1),E.selectFrom==="serial"?E.items.default=y.serial:E.selectFrom==="name"&&(E.items.default=y.name),k()},Ne=y=>{ge(!1),E.selectEntityFrom==="name"?E.items.default=y.name:E.selectEntityFrom==="description"&&(E.items.default=y.description),k()},Xe=y=>{B(!1),E.selectDeviceEntityFrom==="name"?E.items.default=y.name:E.selectDeviceEntityFrom==="description"&&(E.items.default=y.description),k()};return e.jsxs(Y,{sx:{margin:"0px",padding:"5px 10px 5px 10px",border:"1px solid grey"},children:[Q&&e.jsxs(Y,{sx:{margin:"0px",padding:"0px",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[Q&&e.jsx(se,{sx:Be,children:Q}),w&&e.jsxs(Y,{sx:{margin:"0px",padding:"0px",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[E.selectFrom&&e.jsx(O,{title:"Add a device from the list",children:e.jsx(U,{onClick:ae,size:"small",color:"primary",sx:Fe,children:e.jsx(st,{})})}),E.selectEntityFrom&&e.jsx(O,{title:"Add an entity from the list",children:e.jsx(U,{onClick:ee,size:"small",color:"primary",sx:Fe,children:e.jsx(st,{})})}),E.selectDeviceEntityFrom&&e.jsx(O,{title:"Add a device entity from the list",children:e.jsx(U,{onClick:te,size:"small",color:"primary",sx:Fe,children:e.jsx(st,{})})}),e.jsx(O,{title:"Add a new item",children:e.jsx(U,{onClick:k,size:"small",color:"primary",sx:Fe,children:e.jsx(bt,{})})})]})]}),E.description&&e.jsx(se,{sx:Qe,children:E.description}),C.items.map(y=>e.jsxs(Y,{sx:{margin:"2px 0px",padding:"0px",display:"flex",alignItems:"center"},children:[e.jsx(Y,{sx:{flexGrow:1,marginRight:"10px"},children:y.children}),e.jsx(U,{disabled:!y.hasMoveUp,onClick:y.onReorderClick(y.index,y.index-1),size:"small",color:"primary",sx:Fe,children:e.jsx(Ht,{})}),e.jsx(U,{disabled:!y.hasMoveDown,onClick:y.onReorderClick(y.index,y.index+1),size:"small",color:"primary",sx:Fe,children:e.jsx(Rt,{})}),e.jsx(U,{onClick:y.onDropIndexClick(y.index),size:"small",color:"primary",sx:Fe,children:e.jsx(Nt,{})})]},y.index)),e.jsxs(Le,{open:ce,onClose:ae,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select a device"}),e.jsxs(We,{children:[e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:h,onChange:ve,placeholder:"Enter serial or name"})]}),e.jsx(et,{dense:!0,children:Ge.filter(y=>y.serial.toLowerCase().includes(h.toLowerCase())||y.name.toLowerCase().includes(h.toLowerCase())).map((y,J)=>e.jsxs(at,{onClick:()=>Pe(y),sx:mt,children:[y.icon==="wifi"&&e.jsx(z,{children:e.jsx(rt,{style:xe})}),y.icon==="ble"&&e.jsx(z,{children:e.jsx(lt,{style:xe})}),y.icon==="hub"&&e.jsx(z,{children:e.jsx(dt,{style:xe})}),e.jsx(X,{primary:y.name,secondary:y.serial,primaryTypographyProps:{style:ht},secondaryTypographyProps:{style:ft}})]},J))})]}),e.jsx(Oe,{children:e.jsx(oe,{onClick:ae,children:"Close"})})]}),e.jsxs(Le,{open:de,onClose:ee,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select an entity"}),e.jsxs(We,{children:[e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:h,onChange:ve,placeholder:"Enter name or description"})]}),e.jsx(et,{dense:!0,children:Mt.filter(y=>y.name.toLowerCase().includes(h.toLowerCase())||y.description.toLowerCase().includes(h.toLowerCase())).map((y,J)=>e.jsxs(at,{onClick:()=>Ne(y),sx:mt,children:[y.icon==="wifi"&&e.jsx(z,{children:e.jsx(rt,{style:xe})}),y.icon==="ble"&&e.jsx(z,{children:e.jsx(lt,{style:xe})}),y.icon==="hub"&&e.jsx(z,{children:e.jsx(dt,{style:xe})}),y.icon==="component"&&e.jsx(z,{children:e.jsx(Ot,{style:xe})}),y.icon==="matter"&&e.jsx(z,{children:e.jsx(Vt,{style:xe})}),e.jsx(X,{primary:y.name,secondary:y.description,primaryTypographyProps:{style:ht},secondaryTypographyProps:{style:ft}})]},J))})]}),e.jsx(Oe,{children:e.jsx(oe,{onClick:ee,children:"Close"})})]}),e.jsxs(Le,{open:_,onClose:te,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsxs($e,{children:["Select an entity for ",Q]}),e.jsx(We,{children:e.jsx(et,{dense:!0,children:Ge.filter(y=>y.serial===Q||y.name===Q).map(y=>y.entities?.map((J,Ce)=>e.jsxs(at,{onClick:()=>Xe(J),sx:mt,children:[J.icon==="wifi"&&e.jsx(z,{children:e.jsx(rt,{style:xe})}),J.icon==="ble"&&e.jsx(z,{children:e.jsx(lt,{style:xe})}),J.icon==="hub"&&e.jsx(z,{children:e.jsx(dt,{style:xe})}),J.icon==="component"&&e.jsx(z,{children:e.jsx(Ot,{style:xe})}),J.icon==="matter"&&e.jsx(z,{children:e.jsx(Vt,{style:xe})}),e.jsx(X,{primary:J.name,secondary:J.description,primaryTypographyProps:{style:ht},secondaryTypographyProps:{style:ft}})]},Ce)))})}),e.jsx(Oe,{children:e.jsx(oe,{onClick:te,children:"Close"})})]})]})}function be(C){const{onAddClick:w,schema:k,properties:E,title:Q,description:ce}=C,[le,de]=o.useState(!1),[ge,_]=o.useState(""),B=ee=>{_(ee.target.value)},h=()=>{de(!le)},he=ee=>{r&&console.log(`ObjectFieldTemplate: handleSelectValue value "${ee.serial}" for schema "${k.selectFrom}"`),de(!1);let te="";k.selectFrom==="serial"?te=ee.serial:k.selectFrom==="name"&&(te=ee.name),A(te),r&&console.log(`ObjectFieldTemplate: handleSelectValue newkey "${te}"`),w(k)()},ve=()=>{w(k)()},ae=!k.additionalProperties;return r&&console.log(`ObjectFieldTemplate: isRoot ${ae} newkey "${T}"`),!ae&&T!==""&&(r&&console.log("ObjectFieldTemplate: newkey",T,"properties",E),E.forEach(ee=>{if(ee.name==="newKey"&&ee.content.key==="newKey"&&ee.content.props.name==="newKey"&&ee.content.props.onKeyChange&&T!==""){r&&console.log("ObjectFieldTemplate: newkey onKeyChange",T);const te=T;A(""),ee.content.props.onKeyChange(te)}})),e.jsxs(Y,{sx:{margin:"0px",padding:ae?"10px":"5px 10px 0px 10px",border:ae?"none":"1px solid grey"},children:[k.title&&ae&&e.jsx(Y,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px",marginBottom:"10px"},children:e.jsx(se,{sx:Be,children:k.title})}),Q&&!ae&&e.jsxs(Y,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px"},children:[e.jsx(se,{sx:Be,children:Q}),e.jsxs(Y,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px"},children:[k.selectFrom&&e.jsx(O,{title:"Add a device from the list",children:e.jsx(U,{onClick:h,size:"small",color:"primary",sx:Fe,children:e.jsx(st,{})})}),e.jsx(O,{title:"Add a new item",children:e.jsx(U,{onClick:ve,size:"small",color:"primary",sx:Fe,children:e.jsx(bt,{})})})]})]}),k.description&&e.jsx(Y,{sx:{padding:"0px",margin:"0px",marginBottom:"10px"},children:e.jsx(se,{sx:Qe,children:k.description})}),E.map(({content:ee,name:te,hidden:Pe})=>!Pe&&e.jsxs(Y,{sx:{margin:"0px",marginBottom:"10px",padding:["object","array","boolean"].includes(k.properties[te].type)?"0px":hn,border:["object","array","boolean"].includes(k.properties[te].type)?"none":"1px solid grey"},children:[!["object","array","boolean"].includes(k.properties[te].type)&&e.jsx(se,{sx:Be,children:te}),e.jsx(Y,{sx:{flexGrow:1,padding:"0px",margin:"0px"},children:ee})]},te)),e.jsxs(Le,{open:le,onClose:h,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select a device"}),e.jsxs(We,{children:[e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:ge,onChange:B,placeholder:"Enter serial or name"})]}),e.jsx(et,{dense:!0,children:Ge.filter(ee=>ee.serial.toLowerCase().includes(ge.toLowerCase())||ee.name.toLowerCase().includes(ge.toLowerCase())).map((ee,te)=>e.jsxs(at,{onClick:()=>he(ee),sx:mt,children:[ee.icon==="wifi"&&e.jsx(z,{children:e.jsx(rt,{style:xe})}),ee.icon==="ble"&&e.jsx(z,{children:e.jsx(lt,{style:xe})}),ee.icon==="hub"&&e.jsx(z,{children:e.jsx(dt,{style:xe})}),e.jsx(X,{primary:ee.name,secondary:ee.serial,primaryTypographyProps:{style:ht},secondaryTypographyProps:{style:ft}})]},te))})]}),e.jsx(Oe,{children:e.jsx(oe,{onClick:h,children:"Close"})})]})]})}function ne(C){const{uiSchema:w}=C,{submitText:k,norender:E}=Bo(w);return E?null:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",margin:"10px",padding:"0px",gap:"20px"},children:[e.jsx(oe,{type:"submit",variant:"contained",color:"primary",children:k}),e.jsx(oe,{variant:"contained",color:"primary",onClick:d,children:"Cancel"})]})}function ye(C){const{className:w,disabled:k,onClick:E,registry:Q,style:ce,uiSchema:le,...de}=C;return e.jsx(O,{title:"Remove the item",children:e.jsx(U,{disabled:k,size:"small",color:"primary",onClick:E,children:e.jsx(Nt,{})})})}function Z(C){const{className:w,disabled:k,onClick:E,registry:Q,uiSchema:ce,...le}=C;return e.jsx(O,{title:"Add an item",children:e.jsx(U,{size:"small",color:"primary",onClick:E,children:e.jsx(bt,{})})})}function ie(C){const{disabled:w,onClick:k,registry:E,style:Q,uiSchema:ce,...le}=C;return e.jsx(O,{title:"Move up the item",children:e.jsx(U,{size:"small",color:"primary",onClick:k,children:e.jsx(Ht,{})})})}function $(C){const{disabled:w,onClick:k,registry:E,style:Q,uiSchema:ce,...le}=C;return e.jsx(O,{title:"Move down the item",children:e.jsx(U,{size:"small",color:"primary",onClick:k,children:e.jsx(Rt,{})})})}function K(C){const{id:w,name:k,value:E,schema:Q,readonly:ce,onChange:le}=C,[de,ge]=o.useState(),_=h=>{r&&console.log(`CheckboxWidget ${k} onChangeField:`,h),ge(h&&h!==""?h:void 0)},B=()=>{r&&console.log(`CheckboxWidget onClick plugin="${l.name}" action="${k}" value="${de}"`),i({id:j.current,sender:"ConfigPlugin",method:"/api/action",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name,action:k,value:de,formData:P,id:w}}),Q.buttonClose===!0?d():Q.buttonSave===!0&&x({formData:t})};return Q.buttonText&&Q.description?e.jsxs(Y,{sx:{margin:"0px",padding:"10px",border:"1px solid grey",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx(se,{sx:Qe,children:Q.description}),e.jsx(oe,{variant:"contained",color:"primary",onClick:()=>B(),children:Q.buttonText})]}):Q.buttonField&&Q.description?e.jsxs(Y,{sx:{margin:"0px",padding:"10px",gap:"20px",border:"1px solid grey",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx(se,{sx:Qe,children:Q.description}),e.jsx(me,{id:k+"-input",name:k,label:Q.textLabel,placeholder:Q.textPlaceholder,onChange:h=>_(h.target.value),sx:{width:"250px",minWidth:"250px",maxWidth:"250px"}}),e.jsx(oe,{id:k+"-button",variant:"contained",color:"primary",disabled:de===void 0,onClick:()=>B(),children:Q.buttonField})]}):e.jsxs(Y,{sx:{margin:"0px",padding:"5px 10px",border:"1px solid grey"},children:[k&&e.jsxs(Y,{sx:{margin:"0px",padding:"0px",gap:"10px",display:"flex",justifyContent:"flex-start",alignItems:"center"},children:[e.jsx(se,{sx:Be,children:k}),e.jsx(Ee,{checked:E,readOnly:ce,onChange:()=>le(!E),sx:{padding:"0px",margin:"0px"}})]}),Q.description&&e.jsx(se,{sx:Qe,children:Q.description})]})}function L({schema:C,id:w,name:k,options:E,label:Q,hideLabel:ce,required:le,disabled:de,placeholder:ge,readonly:_,value:B,multiple:h,autofocus:he,onChange:ve,onBlur:ae,onFocus:ee,errorSchema:te,rawErrors:Pe=[],registry:Ne,uiSchema:Xe,hideError:y,formContext:J,...Ce}){const{enumOptions:Re,enumDisabled:nt,emptyValue:Se}=E;h=typeof h>"u"?!1:!!h;const $t=h?[]:"",Wt=typeof B>"u"||h&&B.length<1||!h&&B===$t,dr=({target:{value:Te}})=>ve(kt(Te,Re,Se)),cr=({target:Te})=>ae(w,kt(Te&&Te.value,Re,Se)),pr=({target:Te})=>ee(w,kt(Te&&Te.value,Re,Se)),Tt=qo(B,Re,h),{InputLabelProps:ur,SelectProps:gr,autocomplete:mr,...hr}=Ce,fr=!h&&C.default===void 0;return e.jsxs(me,{id:w,name:w,value:!Wt&&typeof Tt<"u"?Tt:$t,required:le,disabled:de||_,autoFocus:he,autoComplete:mr,placeholder:ge,error:Pe.length>0,onChange:dr,onBlur:cr,onFocus:pr,...hr,select:!0,InputLabelProps:{...ur,shrink:!Wt},SelectProps:{...gr,multiple:h},"aria-describedby":Uo(w),children:[fr&&e.jsx(D,{value:"",children:ge}),Array.isArray(Re)&&Re.map(({value:Te,label:xr},Ft)=>{const br=Array.isArray(nt)&&nt.indexOf(Te)!==-1;return e.jsx(D,{value:String(Ft),disabled:br,children:xr},Ft)})]})}return r&&console.log("ConfigPluginDialog rendering..."),!n||!v||!t?null:e.jsxs(Le,{open:n,onClose:d,slotProps:{paper:{sx:{maxWidth:"800px"}}},children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h3",{children:"Matterbridge plugin configuration"})]})}),e.jsx(We,{style:{padding:"0px",margin:"0px",width:"800px",height:"600px",overflow:"auto"},children:e.jsx(Ao,{schema:v,formData:t,uiSchema:H,validator:zo,templates:{FieldTemplate:R,BaseInputTemplate:s,TitleFieldTemplate:S,DescriptionFieldTemplate:N,FieldHelpTemplate:q,FieldErrorTemplate:m,ErrorListTemplate:W,WrapIfAdditionalTemplate:f,ArrayFieldTitleTemplate:u,ArrayFieldDescriptionTemplate:g,ArrayFieldItemTemplate:F,ArrayFieldTemplate:ue,ObjectFieldTemplate:be,ButtonTemplates:{SubmitButton:ne,RemoveButton:ye,AddButton:Z,MoveUpButton:ie,MoveDownButton:$}},widgets:{CheckboxWidget:K,SelectWidget:L},onChange:c,onSubmit:x})})]})};function ir(n){if(r&&console.log(`getQRColor (id: ${n?.id}) received matter:`,n??"undefined"),n===void 0||!n.online||!n.qrPairingCode&&!n.manualPairingCode&&!n.fabricInformations&&!n.sessionInformations)return"red";if(n.commissioned===!1&&n.qrPairingCode&&n.manualPairingCode)return"var(--primary-color)";let d=0,l=0;for(const i of n.sessionInformations??[])i.fabric&&i.isPeerActive===!0&&d++,i.numberOfActiveSubscriptions>0&&(l+=i.numberOfActiveSubscriptions);return n.commissioned===!0&&n.fabricInformations&&n.sessionInformations&&(d===0||l===0)?"var(--secondary-color)":"var(--div-text-color)"}function xn({storeId:n,setStoreId:d}){const{online:l,sendMessage:i,addListener:a,removeListener:b,getUniqueId:p}=o.useContext(fe),{showConfirmCancelDialog:j}=o.useContext(_e),t=o.useRef(p()),[I,v]=o.useState(null),[M,H]=o.useState(null),[V,T]=o.useState([]),A=[{label:"Name",id:"name",required:!0,render:($,K,L,C)=>e.jsx(O,{title:`Plugin path ${L.path}`,children:e.jsx("span",{style:{cursor:"pointer"},onClick:()=>m(L),children:L.name})})},{label:"Description",id:"description",render:($,K,L,C)=>e.jsx(O,{title:"Open the plugin homepage",children:e.jsx("span",{style:{cursor:"pointer"},onClick:()=>m(L),children:L.description})})},{label:"Version",id:"version",render:($,K,L,C)=>e.jsx(e.Fragment,{children:e.jsx(O,{title:`Plugin v.${L.version}`,children:e.jsx("span",{children:L.version.split("-dev-")[0]+(L.version.includes("-dev-")?"@dev":"")})})})},{label:"Author",id:"author",render:($,K,L,C)=>e.jsx(e.Fragment,{children:L.author?L.author.replace("https://github.com/",""):"Unknown"})},{label:"Type",id:"type",render:($,K,L,C)=>e.jsx(e.Fragment,{children:L.type?L.type.replace("Platform",""):"Unknown"})},{label:"Devices",id:"registeredDevices"},{label:"Actions",id:"actions",required:!0,noSort:!0,render:($,K,L,C)=>e.jsxs("div",{style:{margin:"0px",padding:"0px",gap:"4px",display:"flex",flexDirection:"row"},children:[M&&M.bridgeMode==="childbridge"&&!L.error&&L.enabled&&e.jsx(O,{title:"Shows the QRCode or the fabrics",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0",padding:"0",width:"19px",height:"19px",color:ir(L.matter)},onClick:()=>{L.matter?.id&&d(L.matter?.id)},size:"small",children:e.jsx(Zt,{})})}),M&&M.bridgeMode==="childbridge"&&!L.error&&L.enabled&&e.jsx(O,{title:"Restart the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0",padding:"0",width:"19px",height:"19px"},onClick:()=>q(L),size:"small",children:e.jsx(vt,{})})}),e.jsx(O,{title:"Plugin config",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{disabled:L.restartRequired===!0,style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>ye(L),size:"small",children:e.jsx(Tr,{})})}),M&&!M.readOnly&&e.jsx(O,{title:"Remove the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>{c("Remove plugin","Are you sure? This will also remove all devices and configuration from the controller.","remove",L)},size:"small",children:e.jsx(Fr,{})})}),L.enabled?e.jsx(O,{title:"Disable the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>{c("Disable plugin","Are you sure? This will also remove all devices and configuration from the controller.","disable",L)},size:"small",children:e.jsx(Rr,{})})}):e.jsx(e.Fragment,{}),L.enabled?e.jsx(e.Fragment,{}):e.jsx(O,{title:"Enable the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>W(L),size:"small",children:e.jsx(Hr,{})})}),e.jsx(O,{title:"Open the plugin help",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>u(L),size:"small",children:e.jsx(Yt,{})})}),e.jsx(O,{title:"Open the plugin version history",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>g(L),size:"small",children:e.jsx(Lt,{})})}),L.latestVersion!==void 0&&L.latestVersion!==L.version&&M&&!M.readOnly&&e.jsx(O,{title:"Update the plugin to the latest version",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{color:"var(--primary-color)",margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>R(L),size:"small",children:e.jsx(Ie,{})})}),L.version.includes("-dev-")&&L.devVersion!==void 0&&L.devVersion!==L.version&&M&&!M.readOnly&&e.jsx(O,{title:"Update the plugin to the latest dev version",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{color:"var(--primary-color)",margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>N(L),size:"small",children:e.jsx(Ie,{})})}),M&&!M.readOnly&&e.jsx(O,{title:"Sponsor the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{style:{margin:"0",padding:"0",width:"19px",height:"19px",color:"#b6409c"},onClick:()=>s(L),size:"small",children:e.jsx(Xt,{})})})]})},{label:"Status",id:"status",required:!0,noSort:!0,render:($,K,L,C)=>e.jsx("div",{style:{display:"flex",flexDirection:"row",flex:"1 1 auto",margin:"0",padding:"0",gap:"5px",width:"auto",maxWidth:"max-content"},children:L.error?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:!1,enabledText:"Error",disabledText:"Error",tooltipText:"The plugin is in error state. Check the log!"})}):e.jsx(e.Fragment,{children:L.enabled===!1?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:L.enabled,enabledText:"Enabled",disabledText:"Disabled",tooltipText:"Whether the plugin is enable or disabled"})}):e.jsx(e.Fragment,{children:L.loaded&&L.started&&L.configured?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:L.loaded,enabledText:"Running",tooltipText:"Whether the plugin is running"})}):e.jsxs(e.Fragment,{children:[e.jsx(Ue,{status:L.loaded,enabledText:"Loaded",tooltipText:"Whether the plugin has been loaded"}),e.jsx(Ue,{status:L.started,enabledText:"Started",tooltipText:"Whether the plugin started"}),e.jsx(Ue,{status:L.configured,enabledText:"Configured",tooltipText:"Whether the plugin has been configured"})]})})})})}];o.useEffect(()=>{const $=K=>{r&&console.log("HomePlugins received WebSocket Message:",K),K.method==="refresh_required"&&K.response.changed==="plugins"?(r&&console.log(`HomePlugins received refresh_required: changed=${K.response.changed} and sending /api/plugins request`),i({id:t.current,sender:"HomePlugins",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})):K.method==="refresh_required"&&K.response.changed==="matter"?(r&&console.log(`HomePlugins received refresh_required: changed=${K.response.changed} and setting matter id ${K.response.matter?.id}`),T(L=>{const C=L.findIndex(k=>k.matter?.id===K.response.matter?.id);if(C<0)return r&&console.log(`HomePlugins received refresh_required: changed=${K.response.changed} and matter id ${K.response.matter?.id} not found`),L;r&&console.log(`HomePlugins received refresh_required: changed=${K.response.changed} set matter id ${K.response.matter?.id}`);const w=[...L];return w[C]={...w[C],matter:K.response.matter},w})):K.method==="refresh_required"&&K.response.changed==="settings"&&(r&&console.log(`HomePlugins received refresh_required: changed=${K.response.changed} and sending /api/settings request`),i({id:t.current,sender:"HomePlugins",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})),K.id===t.current&&K.method==="/api/settings"?(r&&console.log(`HomePlugins (id: ${K.id}) received settings:`,K.response),v(K.response.systemInformation),H(K.response.matterbridgeInformation)):K.id===t.current&&K.method==="/api/plugins"&&(r&&console.log(`HomePlugins (id: ${K.id}) received ${K.response.length} plugins:`,K.response),T(K.response))};return a($,t.current),r&&console.log("HomePlugins added WebSocket listener id:",t.current),()=>{b($),r&&console.log("HomePlugins removed WebSocket listener")}},[a,b,i]),o.useEffect(()=>{l&&(r&&console.log("HomePlugins sending api requests"),i({id:t.current,sender:"HomePlugins",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),i({id:t.current,sender:"HomePlugins",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[l,i]);const P=o.useRef(null),c=($,K,L,C)=>{r&&console.log(`handleActionWithConfirmCancel ${L} ${C.name}`),P.current=C,j($,K,L,x,f)},x=$=>{r&&console.log(`handleConfirm action confirmed ${$} ${P.current?.name}`),$==="remove"&&P.current?S(P.current):$==="disable"&&P.current&&W(P.current),P.current=null},f=$=>{r&&console.log(`handleCancel action canceled ${$} ${P.current?.name}`),P.current=null},R=$=>{r&&console.log("handleUpdatePlugin plugin:",$.name),i({id:t.current,sender:"HomePlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:$.name,restart:!1}})},N=$=>{r&&console.log("handleUpdateDevPlugin plugin:",$.name),i({id:t.current,sender:"HomePlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:$.name+"@dev",restart:!1}})},S=$=>{r&&console.log("handleRemovePlugin plugin:",$.name),i({id:t.current,sender:"HomePlugins",method:"/api/removeplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:$.name}})},q=$=>{r&&console.log("handleRestartPlugin plugin:",$.name),i({id:t.current,sender:"HomePlugins",method:"/api/restartplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:$.name}})},W=$=>{r&&console.log("handleEnableDisablePlugin plugin:",$.name,"enabled:",$.enabled),$.enabled===!0?($.enabled=!1,i({id:t.current,sender:"HomePlugins",method:"/api/disableplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:$.name}})):($.enabled=!0,i({id:t.current,sender:"HomePlugins",method:"/api/enableplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:$.name}}))},m=$=>{r&&console.log(`handleHomepagePlugin plugin: ${$.name} homepage: ${$.homepage}`),$.homepage&&window.open($.homepage,"_blank")},s=$=>{r&&console.log("handleSponsorPlugin plugin:",$.name,"funding:",$.funding),$.funding&&window.open($.funding,"_blank")},u=$=>{r&&console.log("handleHelpPlugin plugin:",$.name,"help:",$.help),$.help&&window.open($.help,"_blank")},g=$=>{r&&console.log("handleChangelogPlugin plugin:",$.name,"changelog:",$.changelog),$.changelog&&window.open($.changelog,"_blank")},[F,ue]=o.useState(),[be,ne]=o.useState(!1),ye=$=>{r&&console.log("handleConfigPlugin plugin:",$.name),i({id:t.current,sender:"HomePlugins",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:$.name}}),i({id:t.current,sender:"HomePlugins",method:"/api/select/entities",src:"Frontend",dst:"Matterbridge",params:{plugin:$.name}}),ue($),Z()},Z=()=>{ne(!0)},ie=()=>{ne(!1)};return r&&console.log("HomePlugins rendering..."),l?e.jsxs("div",{className:"MbfWindowDiv",style:{margin:"0",padding:"0",gap:"0",width:"100%",flex:"0 0 auto",overflow:"hidden"},children:[F&&e.jsx(fn,{open:be,onClose:ie,plugin:F}),e.jsx(wt,{name:"Plugins",columns:A,rows:V,footerRight:"",footerLeft:""})]}):e.jsx(De,{})}const bn=o.memo(xn),vn=n=>`${n.pluginName}::${n.serial}`;function yn({storeId:n,setStoreId:d}){const{online:l,sendMessage:i,addListener:a,removeListener:b,getUniqueId:p}=o.useContext(fe),[j,t]=o.useState(!1),[I,v]=o.useState(!0),[M,H]=o.useState(null),[V,T]=o.useState([]),[A,P]=o.useState([]),[c,x]=o.useState([]),[f,R]=o.useState([]),N=o.useRef(p()),S=[{label:"Plugin",id:"pluginName"},{label:"Name",id:"name",required:!0},{label:"Serial",id:"serial"},{label:"Availability",id:"availability",render:(m,s,u,g)=>u.reachable===!0?"Online":u.reachable===!1?e.jsx("span",{style:{color:"red"},children:"Offline"}):"",comparator:(m,s)=>{const u=m.reachable===!0?1:m.reachable===!1?0:-1,g=s.reachable===!0?1:s.reachable===!1?0:-1;return u-g}},{label:"Power",id:"powerSource",render:(m,s,u,g)=>u.powerSource==="ac"||u.powerSource==="dc"?e.jsx(er,{fontSize:"small",sx:{color:"var(--primary-color)"}}):u.powerSource==="ok"?e.jsx(yt,{fontSize:"small",sx:{color:"green"}}):u.powerSource==="warning"?e.jsx(yt,{fontSize:"small",sx:{color:"yellow"}}):u.powerSource==="critical"?e.jsx(yt,{fontSize:"small",sx:{color:"red"}}):e.jsx("span",{})},{label:"Url",id:"configUrl"},{label:"Actions",id:"selected",required:!0,render:(m,s,u,g)=>e.jsxs("div",{style:{display:"flex",flexDirection:"row"},children:[u.matter!==void 0?e.jsx(O,{title:"Show the QRCode or the fabrics",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{onClick:()=>d(n===u.matter?.id?M?.matterbridgeInformation.bridgeMode==="bridge"?"Matterbridge":null:u.matter?.id||null),"aria-label":"Show the QRCode",sx:{margin:0,padding:0,color:ir(u.matter)},children:e.jsx(Zt,{fontSize:"small"})})}):e.jsx("div",{style:{width:"20px",height:"20px"}}),u.configUrl?e.jsx(O,{title:"Open the configuration page",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(U,{onClick:()=>window.open(u.configUrl,"_blank"),"aria-label":"Open config url",sx:{margin:0,padding:0},children:e.jsx(tr,{fontSize:"small"})})}):e.jsx("div",{style:{width:"20px",height:"20px"}}),u.selected!==void 0?e.jsx(O,{title:"Select/unselect the device",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Ee,{checked:u.selected,onChange:F=>W(F,u),sx:{margin:"0",marginLeft:"8px",padding:"0"},size:"small"})}):e.jsx("div",{style:{width:"20px",height:"20px"}})]})}],q=o.useCallback(m=>{m.selected=void 0;const s=V.find(F=>F.name===m.pluginName);if(!s)return console.error(`HomeDevices isSelected: plugin ${m.pluginName} not found for device ${m.name} `),m.selected;const u=s.schemaJson?.properties?.whiteList?.selectFrom;let g=s.configJson.postfix;return g===""&&(g=void 0),s.hasWhiteList===!0&&s.hasBlackList===!0&&u&&(m.selected=!0,u==="serial"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&s.configJson.whiteList.includes(g?m.serial.replace("-"+g,""):m.serial)&&(m.selected=!0),u==="serial"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&!s.configJson.whiteList.includes(g?m.serial.replace("-"+g,""):m.serial)&&(m.selected=!1),u==="serial"&&s.configJson.blackList&&s.configJson.blackList.length>0&&s.configJson.blackList.includes(g?m.serial.replace("-"+g,""):m.serial)&&(m.selected=!1),u==="name"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&s.configJson.whiteList.includes(m.name)&&(m.selected=!0),u==="name"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&!s.configJson.whiteList.includes(m.name)&&(m.selected=!1),u==="name"&&s.configJson.blackList&&s.configJson.blackList.length>0&&s.configJson.blackList.includes(m.name)&&(m.selected=!1)),m.selected},[V]);o.useEffect(()=>{const m=s=>{if(r&&console.log("HomeDevices received WebSocket Message:",s),s.method==="refresh_required"&&s.response.changed!=="matter"?(r&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and sending /api/plugins request`),i({id:N.current,sender:"HomeDevices",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})):s.method==="refresh_required"&&s.response.changed==="matter"?(r&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and setting matter id ${s.response.matter?.id}`),R(u=>{const g=u.findIndex(ue=>ue.name.replaceAll(" ","")===s.response.matter?.id);if(g<0)return r&&console.debug(`HomeDevices: matter id ${s.response.matter?.id} not found`),u;const F=[...u];return F[g]={...F[g],matter:s.response.matter},r&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and set matter id ${s.response.matter?.id}`),F})):s.method==="restart_required"?(r&&console.log("HomeDevices received restart_required"),t(!0)):s.method==="restart_not_required"?(r&&console.log("HomeDevices received restart_not_required"),t(!1)):s.method==="state_update"&&s.response.plugin&&s.response.serialNumber&&s.response.cluster.includes("BasicInformation")&&s.response.attribute==="reachable"&&(r&&console.log(`HomeDevices updating device reachability for plugin ${s.response.plugin} serial ${s.response.serialNumber} value ${s.response.value}`),P(u=>{const g=u.findIndex(F=>F.pluginName===s.response.plugin&&F.serial===s.response.serialNumber);return g<0?(r&&console.warn(`HomeDevices: device to update not found for plugin ${s.response.plugin} serial ${s.response.serialNumber}`),u):(u[g]={...u[g],reachable:s.response.value},[...u])})),s.id===N.current&&s.method==="/api/settings")r&&console.log(`HomeDevices (id: ${s.id}) received settings:`,s.response),H(s.response),t(s.response.matterbridgeInformation.restartRequired||s.response.matterbridgeInformation.fixedRestartRequired);else if(s.id===N.current&&s.method==="/api/plugins"){if(r&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} plugins:`,s.response),s.response){let u=!0;for(const g of s.response)g.enabled===!0&&(g.loaded!==!0||g.started!==!0||g.error===!0)&&(u=!1);if(!u)return;r&&console.log("HomeDevices reset plugins, devices and selectDevices"),v(!1),T(s.response),P([]),x([]),i({id:N.current,sender:"HomeDevices",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}}),r&&console.log("HomeDevices sent /api/devices");for(const g of s.response)g.enabled===!0&&g.loaded===!0&&g.started===!0&&g.error!==!0&&(i({id:N.current,sender:"HomeDevices",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:g.name}}),r&&console.log(`HomeDevices sent /api/select/devices for plugin: ${g.name}`))}}else if(s.id===N.current&&s.method==="/api/devices"){if(r&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} devices:`,s.response),s.response){for(const u of s.response)u.selected=q(u);P(s.response)}}else s.id===N.current&&s.method==="/api/select/devices"&&(r&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} selectDevices for plugin ${s.response&&s.response.length>0?s.response[0].pluginName:"without select devices"}:`,s.response),s.response&&s.response.length>0&&x(u=>{const g=u.filter(ue=>ue.pluginName!==s.response[0].pluginName),F=s.response.map(ue=>({...ue,selected:q(ue)}));return[...g,...F]}))};return a(m,N.current),r&&console.log(`HomeDevices added WebSocket listener id ${N.current}`),()=>{b(m),r&&console.log("HomeDevices removed WebSocket listener")}},[V,a,b,i,q]),o.useEffect(()=>{if(A.length===0&&c.length===0){R([]);return}r&&console.log(`HomeDevices mixing devices (${A.length}) and selectDevices (${c.length})`);const m=[];for(const s of A)m.push(s);for(const s of c)A.find(u=>u.pluginName===s.pluginName&&u.serial.includes(s.serial))||m.push(s);m.length>0&&(R(m),r&&console.log(`HomeDevices mixed ${m.length} devices and selectDevices`))},[V,A,c,R]),o.useEffect(()=>{l&&(r&&console.log("HomeDevices sending /api/settings and /api/plugins requests"),i({id:N.current,sender:"HomeDevices",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),i({id:N.current,sender:"HomeDevices",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[l,i]);const W=(m,s)=>{r&&console.log(`handleCheckboxChange: checkbox changed to ${m.target.checked} for device ${s.name} serial ${s.serial}`),A.findIndex(u=>u.pluginName===s.pluginName&&u.serial===s.serial)<0?(r&&console.warn(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in devices, trying in mixedDevices`),R(u=>{const g=u.findIndex(F=>F.pluginName===s.pluginName&&F.serial===s.serial);return g<0?(console.error(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in mixedDevices`),u):(u[g]={...u[g],selected:m.target.checked},[...u])})):P(u=>{const g=u.findIndex(F=>F.pluginName===s.pluginName&&F.serial===s.serial);return g<0?(console.error(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in devices`),u):(u[g]={...u[g],selected:m.target.checked},[...u])}),m.target.checked?i({id:N.current,sender:"HomeDevices",method:"/api/command",src:"Frontend",dst:"Matterbridge",params:{command:"selectdevice",plugin:s.pluginName,serial:s.serial,name:s.name}}):i({id:N.current,sender:"HomeDevices",method:"/api/command",src:"Frontend",dst:"Matterbridge",params:{command:"unselectdevice",plugin:s.pluginName,serial:s.serial,name:s.name}})};return r&&console.log("HomeDevices rendering..."),l?e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0",padding:"0",gap:"0",width:"100%",flex:"1 1 auto",overflow:"hidden"},children:e.jsx(wt,{name:"Devices",getRowKey:vn,rows:f,columns:S,footerLeft:I?"Waiting for the plugins to fully load...":`Registered devices: ${A.length.toString()}/${f.length.toString()}`,footerRight:j?"Restart required":""})}):e.jsx(De,{})}const jn=o.memo(yn);function Ct({children:n,style:d,name:l}){const{setCurrentPage:i}=o.useContext(_e);i(l),r&&console.log(`MbfPage: current page set to ${l}`);const a={display:"flex",flexDirection:"column",width:"100%",height:"100%",margin:"0px",padding:"0px",gap:"20px"};return e.jsx("div",{style:{...a,...d},children:n})}const wn=()=>"ontouchstart"in window||typeof window.DocumentTouch<"u"&&document instanceof window.DocumentTouch?(r&&console.log("WebSocketLogs detectTouchscreen = true"),!0):(r&&console.log("WebSocketLogs detectTouchscreen = false"),!1);function Cn(){const{messages:n,autoScroll:d}=o.useContext(nr),[l,i]=o.useState(!1),a=o.useRef(null),b=o.useMemo(()=>wn(),[]),p=v=>i(!0),j=v=>i(!1);o.useEffect(()=>{r&&console.log(`WebSocketLogs autoScroll: ${d} isHovering: ${l}`),d&&!l&&!b&&a.current?.scrollIntoView({behavior:"smooth"})},[n,l,d,b]);const t=v=>{switch(v.toLowerCase()){case"debug":return"gray";case"info":return"#267fb7";case"notice":return"green";case"warn":return"#e9db18";case"error":return"red";case"fatal":return"#ff0000";case"spawn":return"#ff00d0";default:return"#5c0e91"}},I=v=>{switch(v.toLowerCase()){case"warn":return"black";default:return"white"}};return e.jsx("div",{style:{margin:"0px",padding:"0px"},children:e.jsxs("ul",{style:{margin:"0px",padding:"0px"},onMouseEnter:p,onMouseLeave:j,children:[n.map((v,M)=>e.jsxs("li",{style:{wordWrap:"break-word",maxHeight:"200px",overflow:"hidden"},children:[e.jsx("span",{style:{marginRight:"5px",padding:"1px 5px",backgroundColor:t(v.level),color:I(v.level),fontSize:"12px",borderRadius:"3px",textAlign:"center"},children:v.level}),v.time&&e.jsx("span",{style:{marginRight:"3px",color:"#505050"},children:"["+v.time+"]"}),v.name&&e.jsx("span",{style:{marginRight:"3px",color:"#09516d"},children:"["+v.name+"]"}),e.jsx("span",{style:{color:"var(--main-log-color)"},children:v.message})]},M)),e.jsx("div",{ref:a})]})})}const sr=o.memo(Cn);function Sn(){const{logFilterLevel:n,logFilterSearch:d,autoScroll:l,online:i}=o.useContext(fe);return r&&console.log("HomeLogs rendering..."),i?e.jsxs("div",{className:"MbfWindowDiv",style:{flex:"1 1 auto",width:"100%",overflow:"hidden"},children:[e.jsxs("div",{className:"MbfWindowHeader",style:{height:"30px",minHeight:"30px",justifyContent:"space-between"},children:[e.jsx("p",{className:"MbfWindowHeaderText",children:"Logs"}),e.jsx("div",{className:"MbfWindowHeaderText",style:{display:"flex",justifyContent:"space-between"},children:e.jsxs("span",{style:{fontWeight:"normal",fontSize:"12px",marginTop:"2px"},children:['Filter: logger level "',n,'" and search "',d,'" Scroll: ',l?"auto":"manual"]})})]}),e.jsx("div",{style:{flex:"1 1 auto",margin:"0px",padding:"10px",overflow:"auto"},children:e.jsx(sr,{})})]}):e.jsx(De,{})}const kn=o.memo(Sn);function Mn(){const{online:n}=o.useContext(fe);return r&&console.log("HomeBrowserRefresh rendering..."),n?e.jsxs(Me,{children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Frontend Update"})}),e.jsxs("div",{className:"MbfWindowBody",style:{flexDirection:"row",justifyContent:"space-between"},children:[e.jsx("h4",{style:{margin:0},children:"The frontend has been updated. You are viewing an outdated web UI. Please refresh the page now."}),e.jsx("div",{children:e.jsx(oe,{onClick:()=>window.location.reload(),endIcon:e.jsx(Or,{}),style:{marginLeft:"10px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Refresh"})})]})]}):e.jsx(De,{})}const In=o.memo(Mn);function Dn({changelog:n}){const{online:d}=o.useContext(fe);return r&&console.log("HomeShowChangelog rendering..."),d?e.jsxs(Me,{children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge Update"})}),e.jsxs("div",{className:"MbfWindowBody",style:{flexDirection:"row",justifyContent:"space-between"},children:[e.jsx("h4",{style:{margin:0},children:"Matterbridge has been updated."}),e.jsxs("div",{children:[e.jsx(oe,{onClick:()=>window.open(n,"_blank"),endIcon:e.jsx(Lt,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Changelog"}),e.jsx(oe,{onClick:()=>window.location.reload(),endIcon:e.jsx(Vr,{}),style:{marginLeft:"10px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Close"})]})]})]}):e.jsx(De,{})}const Pn=o.memo(Dn);function Nn(){const[n,d]=o.useState(null),[l,i]=o.useState(null),[a,b]=o.useState([]),[p]=o.useState(localStorage.getItem("homePagePlugins")!=="false"),[j,t]=o.useState(localStorage.getItem("homePageMode")??"devices"),[I,v]=o.useState(""),[M,H]=o.useState(!1),[V,T]=o.useState(!1),[A,P]=o.useState(null),{addListener:c,removeListener:x,online:f,sendMessage:R,getUniqueId:N}=o.useContext(fe),S=o.useRef(N());return o.useEffect(()=>{const q=W=>{r&&console.log("Home received WebSocket Message:",W),W.method==="refresh_required"&&W.response.changed==="settings"&&(r&&console.log(`Home received refresh_required: changed=${W.response.changed} and sending /api/settings request`),P(null),b([]),R({id:S.current,sender:"Home",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),R({id:S.current,sender:"Home",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})),W.method==="/api/settings"&&W.id===S.current&&(r&&console.log("Home received settings:",W.response),d(W.response.systemInformation),i(W.response.matterbridgeInformation),W.response.matterbridgeInformation.matterbridgeVersion&&v(`https://github.com/Luligu/matterbridge/blob/${W.response.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?"dev":"main"}/CHANGELOG.md`),localStorage.getItem("frontendVersion")===null&&W.response.matterbridgeInformation.frontendVersion?localStorage.setItem("frontendVersion",W.response.matterbridgeInformation.frontendVersion):W.response.matterbridgeInformation.frontendVersion!==localStorage.getItem("frontendVersion")&&W.response.matterbridgeInformation.frontendVersion&&(localStorage.setItem("frontendVersion",W.response.matterbridgeInformation.frontendVersion),T(!0)),localStorage.getItem("matterbridgeVersion")===null?localStorage.setItem("matterbridgeVersion",W.response.matterbridgeInformation.matterbridgeVersion):W.response.matterbridgeInformation.matterbridgeVersion!==localStorage.getItem("matterbridgeVersion")&&(localStorage.setItem("matterbridgeVersion",W.response.matterbridgeInformation.matterbridgeVersion),H(!0)),W.response.matterbridgeInformation.shellyBoard&&(localStorage.getItem("homePageMode")||(localStorage.setItem("homePageMode","devices"),t("devices")))),W.method==="/api/plugins"&&W.id===S.current&&(r&&console.log("Home received plugins:",W.response),b(W.response))};return c(q,S.current),r&&console.log(`Home added WebSocket listener id ${S.current}`),()=>{x(q),r&&console.log("Home removed WebSocket listener")}},[c,x,R]),o.useEffect(()=>{if(r&&console.log(`Home storeId effect with storeId ${A}`),l?.bridgeMode==="bridge"&&!A&&(r&&console.log("Home storeId effect set storeId to Matterbridge"),P("Matterbridge")),l?.bridgeMode==="childbridge"&&!A&&a){for(const q of a)if(q.matter?.id){r&&console.log(`Home storeId effect set storeId to ${q.matter.id}`),P(q.matter.id);break}}},[l,a,A]),o.useEffect(()=>{f&&(r&&console.log("Home online effect, sending /api/settings and /api/plugins requests"),R({id:S.current,sender:"Home",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),R({id:S.current,sender:"Home",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[f,R]),r&&console.log("Home rendering..."),!f||!n||!l?e.jsx(De,{}):e.jsxs(Ct,{name:"Home",style:{flexDirection:"row"},children:[e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"302px",minWidth:"302px",gap:"20px"},children:[e.jsx(an,{id:A}),e.jsx(on,{systemInfo:n,compact:!0})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"100%",gap:"20px"},children:[V&&e.jsx(In,{}),M&&e.jsx(Pn,{changelog:I}),p&&!l.readOnly&&e.jsx(dn,{}),p&&e.jsx(bn,{storeId:A,setStoreId:P}),j==="devices"&&e.jsx(jn,{storeId:A,setStoreId:P}),j==="logs"&&e.jsx(kn,{})]})]})}const Ln=o.memo(Nn),xt=!1,Kt={display:"flex",gap:"2px",justifyContent:"space-evenly",width:"100%",height:"40px"},$n={margin:"0",padding:"0",fontSize:"36px",fontWeight:"medium",color:"var(--primary-color)"},Wn={margin:"0",padding:"0",fontSize:"20px",fontWeight:"medium",color:"var(--div-text-color)",textAlign:"center"},Jt={margin:"0",padding:"0",paddingBottom:"2px",fontSize:"16px",fontWeight:"medium",color:"var(--div-text-color)",textAlign:"center"},Tn={display:"flex",gap:"2px",justifyContent:"center",width:"100%",height:"18px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},Fn={margin:"0",padding:"0",fontSize:"12px",fontWeight:"normal",color:"var(--div-text-color)"},Rn={display:"flex",justifyContent:"center",width:"100%",height:"52px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},Hn={margin:"0",padding:"0",fontSize:"14px",fontWeight:"bold",color:"var(--div-text-color)"},On={display:"flex",gap:"4px",justifyContent:"center",width:"100%",height:"15px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},It={margin:"0",padding:"0px 4px",borderRadius:"5px",textAlign:"center",fontSize:"12px",fontWeight:"normal",color:"var(--secondary-color)"},Vn=[256,257,268,269],En=[266,267],_n=[259,260,261,271,272],An=[256,257,268,269,266,267,259,260,261,272];function G({icon:n,iconColor:d,cluster:l,value:i,unit:a,prefix:b}){return r&&console.log(`Render cluster "${l.clusterName}.${l.attributeName}" value(${typeof i}-${isNaN(i)}) "${i}" unit "${a}"`),b=b??!1,e.jsxs(Y,{sx:Kt,children:[n&&o.cloneElement(n,{key:`${l.clusterId}-${l.attributeId}-icon`,sx:{...$n,color:d??"var(--primary-color)"}}),e.jsxs(Y,{sx:{...Kt,gap:"4px",alignContent:"center",alignItems:"end",justifyContent:"center"},children:[a&&b===!0&&e.jsx(se,{sx:Jt,children:a},`${l.clusterId}-${l.attributeId}-unit`),e.jsx(se,{sx:Wn,children:i==null||typeof i=="number"&&isNaN(i)||i==="NaN"?"---":i},`${l.clusterId}-${l.attributeId}-value`),a&&b===!1&&e.jsx(se,{sx:Jt,children:a},`${l.clusterId}-${l.attributeId}-unit`)]},`${l.clusterId}-${l.attributeId}-valueunitbox`)]},`${l.clusterId}-${l.attributeId}-box`)}function zn({device:n,endpoint:d,id:l,deviceType:i,clusters:a}){const b=["Unknown","Good","Fair","Moderate","Poor","VeryPoor","Ext.Poor"];let p="";r&&console.log(`Device "${n.name}" endpoint "${d}" id "${l}" deviceType "0x${i.toString(16).padStart(4,"0")}" clusters (${a?.length})`);const j=a.find(t=>t.clusterName==="Descriptor"&&t.attributeName==="tagList")?.attributeLocalValue;if(j){let t="";j.map(I=>{I.label&&(t+=I.label+" ")}),p=t.trim()}if(i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="batVoltage").map(t=>p=`${t.attributeLocalValue} mV`),An.includes(i)&&a.filter(t=>t.clusterName==="LevelControl"&&t.attributeName==="currentLevel").map(t=>p=`Level ${t.attributeValue}`),i===514&&a.filter(t=>t.clusterName==="WindowCovering"&&t.attributeName==="currentPositionLiftPercent100ths").map(t=>p=`Position ${t.attributeLocalValue/100}%`),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="occupiedHeatingSetpoint").map(t=>p=`Heat ${t.attributeLocalValue/100}°C `),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="occupiedCoolingSetpoint").map(t=>p=p+`Cool ${t.attributeLocalValue/100}°C`),i===118&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="coState").map(t=>p=`${t.attributeLocalValue===0?"No CO detected":"CO alarm!"}`),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="voltage").map(t=>p=`${t.attributeLocalValue/1e3} V, `),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="activeCurrent").map(t=>p=p+`${t.attributeLocalValue/1e3} A, `),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="activePower").map(t=>p=p+`${t.attributeLocalValue/1e3} W`),i===39){const t=a.find(v=>v.clusterName==="ModeSelect"&&v.attributeName==="currentMode")?.attributeLocalValue;p=a.find(v=>v.clusterName==="ModeSelect"&&v.attributeName==="supportedModes")?.attributeLocalValue?.find(v=>v.mode===t)?.label||"Unknown"}if(i===116){const t=a.find(v=>v.clusterName==="RvcRunMode"&&v.attributeName==="currentMode")?.attributeLocalValue;p=a.find(v=>v.clusterName==="RvcRunMode"&&v.attributeName==="supportedModes")?.attributeLocalValue?.find(v=>v.mode===t)?.label||"Unknown"}return e.jsxs("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"5px",width:"150px",height:"150px",borderColor:"var(--div-bg-color)",borderRadius:"5px",justifyContent:"space-between"},children:[i===19&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(G,{icon:t.attributeLocalValue===!0?e.jsx(rt,{}):e.jsx(Er,{}),iconColor:t.attributeLocalValue===!0?"green":"red",cluster:t,value:t.attributeLocalValue===!0?"Online":"Offline"})),i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="batPercentRemaining").map(t=>e.jsx(G,{icon:e.jsx(yt,{}),cluster:t,value:t.attributeLocalValue/2,unit:"%"})),i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="wiredCurrentType").map(t=>e.jsx(G,{icon:e.jsx(er,{}),cluster:t,value:t.attributeLocalValue===0?"AC":"DC"})),i===1293&&a.filter(t=>t.clusterName==="DeviceEnergyManagement"&&t.attributeName==="esaState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Co,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Offline":"Online"})),Vn.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(G,{icon:e.jsx(_r,{}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),En.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(G,{icon:e.jsx(re,{path:So,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),_n.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(G,{icon:e.jsx(re,{path:ko,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),i===115&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Mo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===124&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Io,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===117&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Do,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===123&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(G,{icon:e.jsx(Et,{}),cluster:t,value:"Oven"})),i===112&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(G,{icon:e.jsx(Ar,{}),cluster:t,value:"Fridge"})),i===113&&a.filter(t=>t.clusterName==="TemperatureControl"&&t.attributeName==="selectedTemperatureLevel").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Po,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===121&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(G,{icon:e.jsx(Et,{}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===122&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="fanMode").map(t=>e.jsx(G,{icon:e.jsx(re,{path:No,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===120&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Ut,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Cooktop"})),i===119&&a.filter(t=>t.clusterName==="TemperatureControl"&&t.attributeName==="selectedTemperatureLevel").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Ut,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===514&&a.filter(t=>t.clusterName==="WindowCovering"&&t.attributeName==="currentPositionLiftPercent100ths").map(t=>e.jsx(G,{icon:e.jsx(zr,{}),cluster:t,value:t.attributeLocalValue/100,unit:"%"})),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="localTemperature").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Lo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:(t.attributeLocalValue??0)/100,unit:"°C"})),i===10&&a.filter(t=>t.clusterName==="DoorLock"&&t.attributeName==="lockState").map(t=>e.jsx(G,{icon:t.attributeValue==="1"?e.jsx(qr,{}):e.jsx(Ur,{}),cluster:t,value:t.attributeValue==="1"?"Locked":"Unlocked"})),i===43&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="percentCurrent").map(t=>e.jsx(G,{icon:e.jsx(Br,{}),cluster:t,value:t.attributeValue,unit:"%"})),i===15&&a.filter(t=>t.clusterName==="Switch"&&t.attributeName==="currentPosition").map(t=>e.jsx(G,{icon:e.jsx(re,{path:$o,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeValue,unit:"pos",prefix:!0})),i===39&&a.filter(t=>t.clusterName==="ModeSelect"&&t.attributeName==="currentMode").map(t=>e.jsx(G,{icon:e.jsx(Qr,{}),cluster:t,value:t.attributeValue,unit:"Mode",prefix:!0})),i===771&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(G,{icon:e.jsx(Gr,{}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),i===45&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="percentCurrent").map(t=>e.jsx(G,{icon:e.jsx(_t,{}),cluster:t,value:t.attributeValue,unit:"%"})),i===114&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="localTemperature").map(t=>e.jsx(G,{icon:e.jsx(_t,{}),cluster:t,value:(t.attributeLocalValue??0)/100,unit:"°C"})),i===67&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(G,{icon:e.jsx(Kr,{}),cluster:t,value:t.attributeLocalValue===!0?"Leak":"No leak"})),i===65&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(G,{icon:e.jsx(Jr,{}),cluster:t,value:t.attributeLocalValue===!0?"Freeze":"No freeze"})),i===68&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(G,{icon:e.jsx(Zr,{}),cluster:t,value:t.attributeLocalValue===!0?"Rain":"No rain"})),i===116&&a.filter(t=>t.clusterName==="RvcRunMode"&&t.attributeName==="currentMode").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Wo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeValue,unit:"Run mode",prefix:!0})),i===1292&&a.filter(t=>t.clusterName==="EnergyEvse"&&t.attributeName==="state").map(t=>e.jsx(G,{icon:e.jsx(re,{path:To,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Free":"In use"})),i===1295&&a.filter(t=>t.clusterName==="WaterHeaterManagement"&&t.attributeName==="tankPercentage").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Fo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Tank "+(t.attributeLocalValue??0)+"%"})),i===777&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="featureMap").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Ro,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"HeatPump"})),i===23&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="featureMap").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Ho,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Solar"})),i===24&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="featureMap").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Oo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Inverter"})),i===118&&a.find(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="featureMap"&&t.attributeLocalValue.smokeAlarm===!0)&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="smokeState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Bt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"No smoke":"Smoke!"})),i===118&&a.find(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="featureMap"&&t.attributeLocalValue.smokeAlarm===!1)&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="coState").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Bt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"No Co":"Co!"})),i===66&&a.filter(t=>t.clusterName==="ValveConfigurationAndControl"&&t.attributeName==="currentState").map(t=>e.jsx(G,{icon:e.jsx(Yr,{}),cluster:t,value:t.attributeLocalValue===0?"Closed":"Opened"})),i===44&&a.filter(t=>t.clusterName==="AirQuality"&&t.attributeName==="airQuality").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Vo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:b[t.attributeLocalValue??0]})),i===770&&a.filter(t=>t.clusterName==="TemperatureMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(G,{icon:e.jsx(Xr,{}),cluster:t,value:t.attributeLocalValue/100,unit:"°C"})),i===775&&a.filter(t=>t.clusterName==="RelativeHumidityMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(G,{icon:e.jsx(re,{path:Eo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue/100,unit:"%"})),i===774&&a.filter(t=>t.clusterName==="FlowMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(G,{icon:e.jsx(eo,{}),cluster:t,value:t.attributeLocalValue,unit:"l/h"})),i===773&&a.filter(t=>t.clusterName==="PressureMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(G,{icon:e.jsx(to,{}),cluster:t,value:t.attributeLocalValue,unit:"hPa"})),i===21&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(G,{icon:t.attributeValue==="true"?e.jsx(ro,{}):e.jsx(oo,{}),cluster:t,value:t.attributeValue==="true"?"Closed":"Opened"})),i===263&&a.filter(t=>t.clusterName==="OccupancySensing"&&t.attributeName==="occupancy").map(t=>e.jsx(G,{icon:t.attributeValue==="{ occupied: true }"?e.jsx(no,{}):e.jsx(io,{}),cluster:t,value:t.attributeValue==="{ occupied: true }"?"Occupied":"Unocc."})),i===262&&a.filter(t=>t.clusterName==="IlluminanceMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(G,{icon:e.jsx(so,{}),cluster:t,value:Math.round(Math.pow(10,t.attributeLocalValue/1e4)),unit:"lx"})),i===1296&&a.filter(t=>t.clusterName==="ElectricalEnergyMeasurement"&&t.attributeName==="cumulativeEnergyImported").map(t=>e.jsx(G,{icon:e.jsx(ao,{}),cluster:t,value:Math.round(t.attributeLocalValue?.energy/1e6),unit:"kwh"})),e.jsx(Y,{sx:Tn,children:e.jsx(se,{sx:Fn,children:p})}),e.jsx(Y,{sx:Rn,children:e.jsx(se,{sx:Hn,children:n.name})}),e.jsxs(Y,{sx:On,children:[r&&e.jsx(se,{sx:It,children:d}),e.jsx(se,{sx:It,children:l}),r&&e.jsxs(se,{sx:It,children:["0x",i.toString(16).padStart(4,"0")]})]})]})}function qn({filter:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:b}=o.useContext(fe),[p,j]=o.useState([]),[t,I]=o.useState({}),[v,M]=o.useState({}),[H,V]=o.useState({}),T=o.useRef(b()),A=o.useCallback(x=>{(r||xt)&&console.log(`DevicesIcons received state_update "${x.response.cluster}.${x.response.attribute}" for "${x.response.id}:${x.response.number}": "${x.response.value}"`,x.response);const f=p.find(N=>N.pluginName===x.response.plugin&&N.serial===x.response.serialNumber);if(!f){(r||xt)&&console.warn(`DevicesIcons updater device of plugin "${x.response.plugin}" serial "${x.response.serialNumber}" number "${x.response.number}" id "${x.response.id}" not found in devices(${p.length})`);return}const R=H[f.serial]?.find(N=>N.endpoint===x.response.number.toString()&&N.clusterName===x.response.cluster&&N.attributeName===x.response.attribute);if(!R){(r||xt)&&console.warn(`DevicesIcons updater device "${f.name}" serial "${f.serial}" cluster "${x.response.cluster}" attribute "${x.response.attribute}" not found in clusters(${H[f.serial]?.length})`);return}R.attributeValue=String(x.response.value),R.attributeLocalValue=x.response.value,V({...H}),(r||xt)&&console.log(`DevicesIcons updated "${R.clusterName}.${R.attributeName}" for device "${f.name}" serial "${f.serial}" to "${R.attributeValue}"`)},[H,p]),P=o.useCallback(x=>{if(r&&console.log(`DevicesIcons received for device "${x.response.deviceName}" serial "${x.response.serialNumber}" deviceTypes (${x.response.deviceTypes.length}) "${x.response.deviceTypes.join(",")}" clusters (${x.response.clusters.length}):`,x.response),x.response.clusters.length===0)return;const f=x.response.serialNumber;t[f]=[],v[f]=x.response.deviceTypes,H[f]=[];for(const R of x.response.clusters)t[f].find(N=>N.endpoint===R.endpoint)||t[f].push({endpoint:R.endpoint,id:R.id,deviceTypes:R.deviceTypes}),!["FixedLabel","Identify","Groups","PowerTopology"].includes(R.clusterName)&&H[f].push(R);I({...t}),M({...v}),V({...H}),r&&console.log(`DevicesIcons endpoints for "${f}":`,t[f]),r&&console.log(`DevicesIcons deviceTypes for "${f}":`,v[f]),r&&console.log(`DevicesIcons clusters for "${f}":`,H[f])},[H,v,t]);o.useEffect(()=>{const x=f=>{if(r&&console.log("DevicesIcons received WebSocket Message:",f),f.method==="refresh_required")r&&console.log(`DevicesIcons received refresh_required: changed=${f.response.changed} and sending api requests`),l({id:T.current,sender:"DevicesIcons",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}});else if(f.method==="state_update"&&f.response)A(f);else if(f.method==="/api/devices"&&f.response){r&&console.log(`DevicesIcons received ${f.response.length} devices:`,f.response),j(f.response),I({}),M({}),V({});for(const R of f.response)r&&console.log("DevicesIcons sending /api/clusters"),l({id:T.current,sender:"DevicesIcons",method:"/api/clusters",src:"Frontend",dst:"Matterbridge",params:{plugin:R.pluginName,endpoint:R.endpoint||0}})}else f.method==="/api/clusters"&&f.response&&P(f)};return i(x,T.current),r&&console.log("DevicesIcons WebSocket effect mounted"),()=>{a(x),r&&console.log("DevicesIcons WebSocket effect unmounted")}},[p]),o.useEffect(()=>(r&&console.log("DevicesIcons useEffect online mounting"),d&&(r&&console.log("DevicesIcons useEffect online sending api requests"),l({id:T.current,sender:"DevicesIcons",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}})),r&&console.log("DevicesIcons useEffect online mounted"),()=>{r&&console.log("DevicesIcons useEffect online unmounted")}),[d,l]);const c=o.memo(zn);return r&&console.log("DevicesIcons rendering..."),e.jsx("div",{style:{display:"flex",flexWrap:"wrap",paddingBottom:"5px",gap:"20px",width:"100%",overflow:"auto"},children:p.filter(x=>x.name.toLowerCase().includes(n)||x.serial.toLowerCase().includes(n)).map(x=>t[x.serial]&&t[x.serial].map(f=>f.deviceTypes.map(R=>e.jsx(c,{device:x,endpoint:f.endpoint,id:f.id,deviceType:R,clusters:H[x.serial].filter(N=>N.endpoint===f.endpoint)},`${x.pluginName}-${x.uniqueId}-${f.endpoint}-${f.id}-${R.toString()}`))))})}const Un=o.memo(qn),Bn=[{label:"Plugin name",id:"pluginName",required:!0},{label:"Device type",id:"type"},{label:"Endpoint",id:"endpoint",align:"right"},{label:"Name",id:"name",required:!0},{label:"Serial number",id:"serial"},{label:"Unique ID",id:"uniqueId"},{label:"Url",id:"configUrl"},{label:"Config",id:"configButton",noSort:!0,render:(n,d,l,i)=>l.configUrl?e.jsx(U,{onClick:()=>window.open(l.configUrl,"_blank"),"aria-label":"Open Config",sx:{margin:0,padding:0},children:e.jsx(tr,{fontSize:"small"})}):null},{label:"Cluster",id:"cluster"}],Qn=[{label:"Endpoint",id:"endpoint",required:!0},{label:"Id",id:"id"},{label:"Device Types",id:"deviceTypes",render:(n,d,l,i)=>Array.isArray(n)?e.jsx(e.Fragment,{children:n.map(a=>`0x${a.toString(16).padStart(4,"0")}`).join(", ")}):e.jsx(e.Fragment,{children:n})},{label:"Cluster Name",id:"clusterName",required:!0},{label:"Cluster ID",id:"clusterId"},{label:"Attribute Name",id:"attributeName",required:!0},{label:"Attribute ID",id:"attributeId"},{label:"Attribute Value",id:"attributeValue",required:!0,render:(n,d,l,i)=>e.jsx(O,{title:String(n),componentsProps:{tooltip:{sx:{fontSize:"14px",fontWeight:"normal",color:"#ffffff",backgroundColor:"var(--primary-color)"}}},children:e.jsx("div",{style:{maxWidth:"500px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:String(n)})})}],Gn=n=>`${n.pluginName}::${n.uniqueId}`,Kn=n=>`${n.endpoint}::${n.clusterName}::${n.attributeName}`;function Jn({filter:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:b}=o.useContext(fe),[p,j]=o.useState([]),[t,I]=o.useState(p),[v,M]=o.useState([]),[H,V]=o.useState(0),[T,A]=o.useState(null),[P,c]=o.useState(null),[x,f]=o.useState(null),[R,N]=o.useState(null),S=o.useRef(b()),q=o.useRef(t),W=o.useCallback(s=>{r&&console.log(`DevicesTable received state_update "${s.response.cluster}.${s.response.attribute}" for "${s.response.id}:${s.response.number}": "${s.response.value}"`,s.response);const u=q.current.find(g=>g.pluginName===s.response.plugin&&g.uniqueId===s.response.uniqueId);if(!u){r&&console.warn(`DevicesTable updater device of plugin "${s.response.plugin}" serial "${s.response.serialNumber}" not found in filteredDevicesRef.current`);return}if(T&&P&&u.pluginName===T&&u.uniqueId===R&&s.response.number.toString()===P){const g=v.find(F=>F.endpoint===s.response.number.toString()&&F.clusterName===s.response.cluster&&F.attributeName===s.response.attribute);if(!g){r&&console.warn(`DevicesTable updater cluster ${s.response.cluster}.${s.response.attribute} for device "${u.name}" serial "${u.serial}" not found in clusters`);return}g.attributeValue=typeof s.response.value=="object"?JSON.stringify(s.response.value,void 0,1).replaceAll('"',""):String(s.response.value),g.attributeLocalValue=s.response.value,M([...v]),r&&console.log(`DevicesTable updated attribute ${g.clusterName}.${g.attributeName} for device "${u.name}" serial "${u.serial}" to "${g.attributeValue}"`)}},[v,P,T,R]);o.useEffect(()=>{const s=u=>{if(r&&console.log("DevicesTable received WebSocket Message:",u),u.method==="refresh_required"&&u.response.changed==="devices")r&&console.log(`DevicesTable received refresh_required: changed=${u.response.changed} and sending /api/devices request`),l({id:S.current,sender:"DevicesTable",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}});else if(u.method==="state_update"&&u.response)W(u);else if(u.method==="/api/devices")r&&console.log(`DevicesTable received ${u.response.length} devices:`,u.response),j(u.response);else if(u.method==="/api/clusters"){r&&console.log(`DevicesTable received ${u.response.clusters.length} clusters for plugin ${u.response.plugin}:`,u.response),M(u.response.clusters);const g={};for(const F of u.response.clusters)r&&console.log("Cluster:",F.endpoint),g[F.endpoint]?g[F.endpoint]++:g[F.endpoint]=1;V(Object.keys(g).length)}};return i(s,S.current),r&&console.log("DevicesTable added WebSocket listener"),()=>{a(s),r&&console.log("DevicesTable removed WebSocket listener")}},[l,i,a,W]),o.useEffect(()=>{d&&(r&&console.log("DevicesTable sending api requests with id ",S.current),l({id:S.current,sender:"DevicesTable",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),l({id:S.current,sender:"DevicesTable",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}),l({id:S.current,sender:"DevicesTable",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}}))},[d,l]),o.useEffect(()=>{T&&P&&(r&&console.log("DevicesTable sending /api/clusters"),l({id:S.current,sender:"DevicesTable",method:"/api/clusters",src:"Frontend",dst:"Matterbridge",params:{plugin:T,endpoint:Number(P)}}))},[T,P,l]),o.useEffect(()=>{if(n===""){I(p),q.current=p;return}const s=p.filter(u=>u.name.toLowerCase().includes(n)||u.serial.toLowerCase().includes(n));I(s),q.current=s},[p,n]);const m=s=>{if(s.uniqueId===R){N(null),A(null),c(null),f(null);return}N(s.uniqueId),A(s.pluginName),c(s.endpoint?s.endpoint.toString():null),f(s.name)};return r&&console.log("DevicesTable rendering..."),d?e.jsxs("div",{style:{display:"flex",flexDirection:"column",margin:"0px",padding:"0px",gap:"20px",width:"100%",overflow:"hidden"},children:[e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"0px",gap:"0px",width:"100%",maxHeight:`${T&&P?"30%":"100%"}`,flex:"1 1 auto",overflow:"hidden"},children:e.jsx(wt,{name:"Registered devices",getRowKey:Gn,onRowClick:m,rows:t,columns:Bn,footerLeft:`Total devices: ${t.length.toString()}`})}),T&&P&&e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"0px",gap:"0px",width:"100%",height:"70%",maxHeight:"70%",flex:"1 1 auto",overflow:"hidden"},children:e.jsx(wt,{name:"Clusters",title:x||"",getRowKey:Kn,rows:v,columns:Qn,footerLeft:`Total child endpoints: ${H-1}`})})]}):e.jsx(De,{})}const Zn=o.memo(Jn);function Yn(){const{online:n}=o.useContext(fe),[d,l]=o.useState(""),[i,a]=o.useState("icon");o.useEffect(()=>{const j=localStorage.getItem("devicesFilter");j&&l(j)},[]),o.useEffect(()=>{const j=localStorage.getItem("devicesViewMode");j&&a(j)},[]);const b=j=>{l(j.target.value.toLowerCase()),localStorage.setItem("devicesFilter",j.target.value.toLowerCase())},p=j=>{a(j),localStorage.setItem("devicesViewMode",j)};return r&&console.log("Devices rendering..."),n?e.jsxs(Ct,{name:"Devices",children:[e.jsxs("div",{className:"MbfWindowBodyRow",style:{justifyContent:"space-between",padding:0,gap:"20px",width:"100%",height:"45px",minHeight:"45px",maxHeight:"45px"},children:[e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px"},children:[e.jsx(se,{sx:{fontSize:"16px",fontWeight:"normal",color:"var(--div-text-color)",marginLeft:"5px",whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{variant:"outlined",value:d,onChange:b,placeholder:"Enter the device name or serial number",sx:{width:"320px"},InputProps:{style:{backgroundColor:"var(--main-bg-color)"}}})]}),e.jsxs(Y,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px"},children:[e.jsx(se,{sx:{fontSize:"16px",fontWeight:"normal",color:"var(--div-text-color)",marginLeft:"5px",whiteSpace:"nowrap"},children:"View mode:"}),e.jsx(U,{onClick:()=>p("table"),"aria-label":"Table View",disabled:i==="table",children:e.jsx(O,{title:"Table View",children:e.jsx(lo,{style:{color:i==="table"?"var(--main-icon-color)":"var(--primary-color)"}})})}),e.jsx(U,{onClick:()=>p("icon"),"aria-label":"Icon View",disabled:i==="icon",children:e.jsx(O,{title:"Icon View (beta)",children:e.jsx(co,{style:{color:i==="icon"?"var(--main-icon-color)":"var(--primary-color)"}})})})]})]}),i==="table"&&e.jsx(Zn,{filter:d}),i==="icon"&&e.jsx(Un,{filter:d})]}):e.jsx(De,{})}const Xn=o.memo(Yn);function ei(){const[n,d]=o.useState(localStorage.getItem("logFilterLevel")??"info"),[l,i]=o.useState(localStorage.getItem("logFilterSearch")??"*"),[a,b]=o.useState(localStorage.getItem("logAutoScroll")!=="false"),{setMessages:p,setLogFilters:j,online:t,setAutoScroll:I}=o.useContext(fe),v=T=>{d(T.target.value),j(T.target.value,l),localStorage.setItem("logFilterLevel",T.target.value),r&&console.log("handleChangeLevel called with value:",T.target.value)},M=T=>{i(T.target.value),j(n,T.target.value),localStorage.setItem("logFilterSearch",T.target.value),r&&console.log("handleChangeSearch called with value:",T.target.value)},H=T=>{b(T.target.checked),I(T.target.checked),localStorage.setItem("logAutoScroll",T.target.value?"true":"false"),r&&console.log("handleAutoScrollChange called with value:",T.target.checked)},V=()=>{r&&console.log("handleClearLogsClick called"),p([])};return r&&console.log("Logs rendering..."),t?e.jsxs(Ct,{name:"Logs",children:[e.jsxs("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",margin:"0px",padding:"0px",gap:"10px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(At,{id:"select-level",style:{color:"var(--div-text-color)"},children:"Filter log by level:"}),e.jsxs(Je,{style:{height:"30px",backgroundColor:"var(--main-bg-color)"},labelId:"select-level",id:"debug-level",value:n,onChange:v,children:[e.jsx(D,{value:"debug",children:"Debug"}),e.jsx(D,{value:"info",children:"Info"}),e.jsx(D,{value:"notice",children:"Notice"}),e.jsx(D,{value:"warn",children:"Warn"}),e.jsx(D,{value:"error",children:"Error"}),e.jsx(D,{value:"fatal",children:"Fatal"})]}),e.jsx(At,{id:"search",style:{color:"var(--div-text-color)"},children:"Filter log by text:"}),e.jsx(me,{style:{width:"300px"},size:"small",id:"logsearch",variant:"outlined",value:l,onChange:M,InputProps:{style:{height:"30px",padding:"0 0px",backgroundColor:"var(--main-bg-color)"}}}),e.jsx(Ve,{control:e.jsx(Ee,{checked:a,onChange:H}),label:"Auto scroll",style:{color:"var(--div-text-color)"}})]}),e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:e.jsx(O,{title:"Clear the logs",children:e.jsx(oe,{onClick:V,endIcon:e.jsx(Nt,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Clear"})})})]}),e.jsx("div",{style:{flex:"1",overflow:"auto",margin:"0px",padding:"0px"},children:e.jsx(sr,{})})]}):e.jsx(De,{})}const ti=o.memo(ei),ri=({open:n,ip:d,onClose:l,onSave:i})=>{const a=d?d.split(".").slice(0,3).join(".")+".1":"",[b,p]=o.useState("dhcp"),[j,t]=o.useState({ip:d??"",subnet:"255.255.255.0",gateway:a,dns:a}),I=H=>V=>{t({...j,[H]:V.target.value})},v=()=>{l()},M=()=>{i({type:b,...j}),l()};return e.jsxs(Le,{open:n,onClose:(H,V)=>{V==="backdropClick"||V==="escapeKeyDown"||l()},maxWidth:"sm",style:{maxWidth:"550px",margin:"auto"},children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:"Network Configuration"})]})}),e.jsxs(We,{dividers:!0,children:[e.jsxs(rr,{component:"fieldset",fullWidth:!0,children:[e.jsx(je,{component:"legend",children:"Select IP Configuration"}),e.jsxs(or,{row:!0,value:b,onChange:H=>p(H.target.value),children:[e.jsx(Ve,{value:"dhcp",control:e.jsx(jt,{}),label:"DHCP"}),e.jsx(Ve,{value:"static",control:e.jsx(jt,{}),label:"Static"})]})]}),b==="static"&&e.jsxs(He,{container:!0,spacing:2,sx:{mt:2},children:[e.jsx(He,{size:6,children:e.jsx(me,{label:"IP Address",fullWidth:!0,value:j.ip,onChange:I("ip")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"Subnet Mask",fullWidth:!0,value:j.subnet,onChange:I("subnet")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"Gateway",fullWidth:!0,value:j.gateway,onChange:I("gateway")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"DNS Server",fullWidth:!0,value:j.dns,onChange:I("dns")})})]})]}),e.jsxs(Oe,{children:[e.jsx(oe,{onClick:v,children:"Cancel"}),e.jsx(oe,{variant:"contained",onClick:M,children:"Save"})]})]})},oi=({open:n,onClose:d,onSave:l})=>{const[i,a]=o.useState(""),[b,p]=o.useState(""),j=V=>{a(V.target.value)},t=V=>{p(V.target.value)},I=i.length>0&&i===b,v=()=>{d()},M=()=>{I&&(l(i),d())},H=()=>{l(""),d()};return e.jsxs(Le,{open:n,onClose:(V,T)=>{T==="backdropClick"||T==="escapeKeyDown"||d()},maxWidth:"sm",style:{maxWidth:"500px",margin:"auto"},disableEscapeKeyDown:!0,children:[e.jsx($e,{children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:"Change Password"})]})}),e.jsx(We,{dividers:!0,children:e.jsx(rr,{component:"fieldset",fullWidth:!0,sx:{margin:0,padding:0,gap:"20px"},children:e.jsxs(He,{container:!0,spacing:2,sx:{mt:2},children:[e.jsx(He,{size:12,children:e.jsx(me,{type:"password",autoComplete:"new-password",label:"New Password",size:"small",variant:"outlined",fullWidth:!0,value:i,onChange:j})}),e.jsx(He,{size:12,children:e.jsx(me,{type:"password",autoComplete:"new-password",label:"Confirm Password",size:"small",variant:"outlined",fullWidth:!0,value:b,onChange:t,error:b!==""&&i!==b,helperText:b!==""&&i!==b?"Passwords do not match":""})})]})})}),e.jsxs(Oe,{children:[e.jsx(oe,{onClick:v,children:"Cancel"}),e.jsx(oe,{variant:"contained",onClick:M,disabled:!I,children:"Change"}),e.jsx(oe,{variant:"contained",onClick:H,children:"Reset"})]})]})},pe=500;function ni(){const{online:n,addListener:d,removeListener:l,sendMessage:i,getUniqueId:a}=o.useContext(fe),[b,p]=o.useState(null),[j,t]=o.useState(null),I=o.useRef(a());return o.useEffect(()=>{const v=M=>{r&&console.log("Settings received WebSocket Message:",M),M.method==="refresh_required"&&M.response.changed==="settings"?(r&&console.log(`Settings received refresh_required: changed=${M.response.changed} and sending /api/settings request`),i({id:I.current,sender:"Settings",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):M.method==="/api/settings"&&(r&&console.log("Settings received /api/settings:",M.response),p(M.response.matterbridgeInformation),t(M.response.systemInformation))};return d(v,I.current),r&&console.log("Settings added WebSocket listener"),()=>{l(v),r&&console.log("Settings removed WebSocket listener")}},[d,l,i]),o.useEffect(()=>{n&&(r&&console.log("Settings received online"),i({id:I.current,sender:"Settings",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}))},[n,i]),r&&console.log("Settings rendering..."),!n||!b||!j?e.jsx(De,{}):e.jsx(Ct,{name:"Settings",children:e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"20px",width:"100%"},children:[e.jsx(ii,{matterbridgeInfo:b,systemInfo:j}),e.jsx(si,{matterbridgeInfo:b}),e.jsx(ai,{matterbridgeInfo:b}),e.jsx(li,{systemInfo:j})]})})}function ii({matterbridgeInfo:n,systemInfo:d}){const{sendMessage:l,getUniqueId:i}=o.useContext(fe),[a,b]=o.useState("bridge"),[p,j]=o.useState("Info"),[t,I]=o.useState(!1),[v,M]=o.useState("dark"),[H,V]=o.useState(localStorage.getItem("homePagePlugins")!=="false"),[T,A]=o.useState(localStorage.getItem("homePageMode")??"devices"),[P,c]=o.useState(localStorage.getItem("virtualMode")??"outlet"),x=o.useRef(i()),[f,R]=o.useState(!1),N=()=>R(!1),S=Z=>{r&&console.log("handleSaveNetConfig called with config:",Z),l({id:x.current,sender:"Settings",method:"/api/shellynetconfig",src:"Frontend",dst:"Matterbridge",params:Z})},[q,W]=o.useState(!1),m=()=>W(!1),s=Z=>{r&&console.log("handleSaveChangePassword called with password:",Z),l({id:x.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setpassword",value:Z}})};o.useEffect(()=>{n&&(b(n.bridgeMode==="bridge"?"bridge":"childbridge"),j(n.loggerLevel.charAt(0).toUpperCase()+n.loggerLevel.slice(1)),I(n.fileLogger),c(n.virtualMode))},[n]),o.useEffect(()=>{const Z=localStorage.getItem("frontendTheme");Z&&M(Z)},[]);const u=Z=>{r&&console.log("handleChangeBridgeMode called with value:",Z.target.value),b(Z.target.value),l({id:x.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setbridgemode",value:Z.target.value}})},g=Z=>{r&&console.log("handleChangeMbLoggerLevel called with value:",Z.target.value),j(Z.target.value),l({id:x.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmbloglevel",value:Z.target.value}})},F=Z=>{r&&console.log("handleLogOnFileMbChange called with value:",Z.target.checked),I(Z.target.checked),l({id:x.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmblogfile",value:Z.target.checked}})},ue=Z=>{const ie=Z.target.value;r&&console.log("handleChangeTheme called with value:",ie),M(ie),localStorage.setItem("frontendTheme",ie),document.body.setAttribute("frontend-theme",ie)},be=Z=>{const ie=Z.target.checked;r&&console.log("handleChangeHomePagePlugins called with value:",ie),V(ie),localStorage.setItem("homePagePlugins",ie?"true":"false")},ne=Z=>{const ie=Z.target.value;r&&console.log("handleChangeHomePageMode called with value:",ie),A(ie),localStorage.setItem("homePageMode",ie)},ye=Z=>{const ie=Z.target.value;r&&console.log("handleChangeVirtualMode called with value:",ie),c(ie),localStorage.setItem("virtualMode",ie),l({id:x.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setvirtualmode",value:ie}})};return!n||!d?null:e.jsxs(Me,{style:{width:`${pe}px`,maxWidth:`${pe}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge settings"})}),e.jsx(ri,{open:f,ip:d.ipv4Address,onClose:N,onSave:S}),e.jsx(oi,{open:q,onClose:m,onSave:s}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(Y,{sx:{gap:"10px",margin:"0px",padding:"10px",width:`${pe-20}px`,backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"matterbridgeInfo-mode",children:"Matterbridge mode:"}),e.jsxs(or,{row:!0,name:"mode-buttons-group",value:a,onChange:u,children:[e.jsx(Ve,{value:"bridge",control:e.jsx(jt,{}),label:"Bridge",disabled:n.readOnly===!0}),e.jsx(Ve,{value:"childbridge",control:e.jsx(jt,{}),label:"Childbridge",disabled:n.readOnly===!0})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"mblogger-level-label",children:"Logger level:"}),e.jsxs(Je,{style:{height:"30px"},labelId:"mblogger-level-label",id:"mblogger-level",value:p,onChange:g,children:[e.jsx(D,{value:"Debug",children:"Debug"}),e.jsx(D,{value:"Info",children:"Info"}),e.jsx(D,{value:"Notice",children:"Notice"}),e.jsx(D,{value:"Warn",children:"Warn"}),e.jsx(D,{value:"Error",children:"Error"}),e.jsx(D,{value:"Fatal",children:"Fatal"})]}),e.jsx(Ve,{style:{padding:"0px",margin:"0px"},control:e.jsx(Ee,{checked:t,onChange:F,name:"logOnFileMb"}),label:"Log on file:",labelPlacement:"start"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-theme-label",children:"Frontend theme:"}),e.jsxs(Je,{style:{height:"30px"},labelId:"frontend-theme-label",id:"frontend-theme",value:v,onChange:ue,children:[e.jsx(D,{value:"classic",children:"Classic"}),e.jsx(D,{value:"light",children:"Light"}),e.jsx(D,{value:"dark",children:"Dark"})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-home-plugin-label",children:"Home page plugins:"}),e.jsx(Ee,{checked:H,onChange:be,name:"showPlugins"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-home-label",children:"Home page bottom panel:"}),e.jsxs(Je,{style:{height:"30px"},labelId:"frontend-home-label",id:"frontend-home",value:T,onChange:ne,children:[e.jsx(D,{value:"logs",children:"Logs"}),e.jsx(D,{value:"devices",children:"Devices"})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"10px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-virtual-label",children:"Virtual devices:"}),e.jsxs(Je,{style:{height:"30px"},labelId:"frontend-virtual-label",id:"frontend-virtual",value:P,onChange:ye,children:[e.jsx(D,{value:"disabled",children:"Disabled"}),e.jsx(D,{value:"outlet",children:"Outlet"}),e.jsx(D,{value:"light",children:"Light"}),e.jsx(D,{value:"switch",children:"Switch"}),e.jsx(D,{value:"mounted_switch",children:"Mounted Switch"})]})]}),e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"20px"},children:e.jsx(oe,{variant:"contained",color:"primary",onClick:()=>W(!0),children:"Change password"})}),n.shellyBoard&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"20px"},children:e.jsx(oe,{variant:"contained",color:"primary",onClick:()=>R(!0),children:"Configure IP"})})]})})]})}function si({matterbridgeInfo:n}){const{sendMessage:d,getUniqueId:l}=o.useContext(fe),[i,a]=o.useState("Info"),[b,p]=o.useState(!1),[j,t]=o.useState(""),[I,v]=o.useState(""),[M,H]=o.useState(""),[V,T]=o.useState(""),[A,P]=o.useState(""),[c,x]=o.useState(""),f=o.useRef(l());o.useEffect(()=>{n&&(a(["Debug","Info","Notice","Warn","Error","Fatal"][n.matterLoggerLevel]),p(n.matterFileLogger),t(n.matterMdnsInterface||""),v(n.matterIpv4Address||""),H(n.matterIpv6Address||""),T(n.matterPort?n.matterPort.toString():""),P(n.matterDiscriminator?n.matterDiscriminator.toString():""),x(n.matterPasscode?n.matterPasscode.toString():""))},[n]);const R=g=>{r&&console.log("handleChangeMjLoggerLevel called with value:",g.target.value),a(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmjloglevel",value:g.target.value}})},N=g=>{r&&console.log("handleLogOnFileMjChange called with value:",g.target.checked),p(g.target.checked),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmjlogfile",value:g.target.checked}})},S=g=>{r&&console.log("handleChangeMdnsInterface called with value:",g.target.value),t(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmdnsinterface",value:g.target.value}})},q=g=>{r&&console.log("handleChangeIpv4Address called with value:",g.target.value),v(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setipv4address",value:g.target.value}})},W=g=>{r&&console.log("handleChangeIpv6Address called with value:",g.target.value),H(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setipv6address",value:g.target.value}})},m=g=>{r&&console.log("handleChangeMatterPort called with value:",g.target.value),T(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterport",value:g.target.value}})},s=g=>{r&&console.log("handleChangeMatterDiscriminator called with value:",g.target.value),P(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterdiscriminator",value:g.target.value}})},u=g=>{r&&console.log("handleChangemMatterPasscode called with value:",g.target.value),x(g.target.value),d({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterpasscode",value:g.target.value}})};return n?e.jsxs(Me,{style:{width:`${pe}px`,maxWidth:`${pe}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matter settings"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(Y,{sx:{gap:"20px",margin:"0px",padding:"10px",width:`${pe-20}px`,backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"5px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"mjdebug-info",children:"Logger level:"}),e.jsxs(Je,{style:{height:"30px"},labelId:"select-mjlevel",id:"mjdebug-level",value:i,onChange:R,children:[e.jsx(D,{value:"Debug",children:"Debug"}),e.jsx(D,{value:"Info",children:"Info"}),e.jsx(D,{value:"Notice",children:"Notice"}),e.jsx(D,{value:"Warn",children:"Warn"}),e.jsx(D,{value:"Error",children:"Error"}),e.jsx(D,{value:"Fatal",children:"Fatal"})]}),e.jsx(Ve,{style:{padding:"0px",margin:"0px"},control:e.jsx(Ee,{checked:b,onChange:N,name:"logOnFileMj"}),label:"Log on file:",labelPlacement:"start"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Mdns interface:"}),e.jsx(me,{value:j,onChange:S,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Ipv4 address:"}),e.jsx(me,{value:I,onChange:q,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Ipv6 address:"}),e.jsx(me,{value:M,onChange:W,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning port:"}),e.jsx(me,{value:V,onChange:m,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning discriminator:"}),e.jsx(me,{value:A,onChange:s,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning passcode:"}),e.jsx(me,{value:c,onChange:u,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]})]})})]}):null}function ai({matterbridgeInfo:n}){return n?e.jsxs(Me,{style:{width:`${pe}px`,maxWidth:`${pe}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge info"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(Y,{sx:{gap:"10px",margin:"0px",padding:"10px",width:"400px",backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsx(we,{value:n.matterbridgeVersion,label:"Current Version",width:pe}),e.jsx(we,{value:n.matterbridgeLatestVersion,label:"Latest Version",width:pe}),e.jsx(we,{value:n.homeDirectory,label:"Home Directory",width:pe}),e.jsx(we,{value:n.rootDirectory,label:"Root Directory",width:pe}),e.jsx(we,{value:n.matterbridgeDirectory,label:"Matterbridge Storage Directory",width:pe}),e.jsx(we,{value:n.matterbridgePluginDirectory,label:"Matterbridge Plugin Directory",width:pe}),e.jsx(we,{value:n.globalModulesDirectory,label:"Global Module Directory",width:pe})]})})]}):null}function li({systemInfo:n}){return n?e.jsxs(Me,{style:{width:`${pe}px`,maxWidth:`${pe}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"System info"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(Y,{sx:{gap:"10px",margin:"0px",padding:"10px",width:"400px",backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsx(we,{value:n.interfaceName,label:"Interface name",width:pe}),e.jsx(we,{value:n.macAddress,label:"MAC Address",width:pe}),e.jsx(we,{value:n.ipv4Address,label:"IPv4 Address",width:pe}),e.jsx(we,{value:n.ipv6Address,label:"IPv6 Address",width:pe}),e.jsx(we,{value:n.nodeVersion,label:"Node Version",width:pe}),e.jsx(we,{value:n.hostname,label:"Hostname",width:pe}),e.jsx(we,{value:n.user,label:"User",width:pe})]})})]}):null}function we({value:n,label:d,width:l}){return e.jsx(me,{focused:!0,value:n,size:"small",label:d,variant:"standard",sx:{width:l?`${l-20}px`:"400px"},InputProps:{readOnly:!0,sx:{color:"var(--div-text-color)","&:before":{borderBottomColor:"var(--main-label-color)"},"&:after":{borderBottomColor:"var(--main-label-color)"}}},InputLabelProps:{sx:{marginTop:"3px",color:"var(--main-label-color)","&.Mui-focused":{color:"var(--main-label-color)"}}}})}const di=o.memo(ni);function ci(){const{online:n,sendMessage:d,addListener:l,removeListener:i,getUniqueId:a}=o.useContext(fe),{showSnackbarMessage:b}=o.useContext(_e),[p,j]=o.useState(null),[t,I]=o.useState([]),[v,M]=o.useState([]),[H,V]=o.useState(null),[T,A]=o.useState({cpuUsage:0}),[P,c]=o.useState({totalMemory:"",freeMemory:"",heapTotal:"",heapUsed:"",external:"",arrayBuffers:"",rss:""}),[x,f]=o.useState({systemUptime:"",processUptime:""}),R=o.useRef(a());return r&&console.log("Test uniqueId:",R),o.useEffect(()=>{r&&console.log("Test useEffect WebSocketMessage mounting");const N=S=>{if(S.method==="restart_required")r&&console.log("Test received restart_required"),b("Restart required",0);else if(S.method==="refresh_required")r&&console.log(`Test received refresh_required: changed=${S.response.changed} and sending api requests`),b("Refresh required",0),d({id:R.current,method:"/api/settings",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}}),d({id:R.current,method:"/api/plugins",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}}),d({id:R.current,method:"/api/devices",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}});else if(S.method==="memory_update")r&&console.log("Test received memory_update",S),c(S.response);else if(S.method==="cpu_update")r&&console.log("Test received cpu_update",S),A(S.response);else if(S.method==="uptime_update")r&&console.log("Test received uptime_update",S),f(S.response);else if(S.method==="/api/settings"&&S.response)r&&console.log("Test received /api/settings:",S.response),b("Test received /api/settings",0),j(S.response);else if(S.method==="/api/plugins"&&S.response)r&&console.log(`Test received ${S.response.length} plugins:`,S.response),b("Test received /api/plugins",0),I(S.response);else if(S.method==="/api/devices"&&S.response){r&&console.log(`Test received ${S.response.length} devices:`,S.response),b("Test received /api/devices",0),M(S.response);for(const q of S.response)r&&console.log("Test sending /api/clusters for device:",q.pluginName,q.name,q.endpoint),d({id:R.current,method:"/api/clusters",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{plugin:q.pluginName,endpoint:q.endpoint||0}})}else S.method==="/api/clusters"&&S.response&&(r&&console.log(`Test received ${S.response.clusters.length} clusters for device ${S.response.deviceName} endpoint ${S.response.id}:${S.response.number}:`,S),b(`Test received /api/clusters for ${S.response.plugin}::${S.response.deviceName}`,0),V(S.response))};return l(N,R.current),r&&console.log("Test useEffect WebSocketMessage mounted"),()=>{r&&console.log("Test useEffect WebSocketMessage unmounting"),i(N),r&&console.log("Test useEffect WebSocketMessage unmounted")}},[l,i,d,b]),o.useEffect(()=>(r&&console.log("Test useEffect online mounting"),n&&r&&console.log("Test useEffect online received online"),r&&console.log("Test useEffect online mounted"),()=>{r&&console.log("Test useEffect online unmounted")}),[n,d,b]),r&&console.log("Test rendering..."),n?e.jsx("div",{className:"MbfPageDiv",style:{display:"flex",flexDirection:"row",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",width:"100%"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"256px",width:"256px",margin:"10px"}}),e.jsx("p",{children:"Welcome to the Test page of the Matterbridge frontend"})]})}):e.jsx(De,{})}const pi=o.memo(ci);function ui(n,d){r&&console.log("getCssVariable:",n,"defaultValue",d);const l=getComputedStyle(document.body).getPropertyValue(n).trim();return l||console.error("getCssVariable: undefined",l),l||d}function gi(n){return po({palette:{primary:{main:n},action:{disabled:"var(--main-label-color)"},text:{disabled:"var(--main-label-color)"}},typography:{fontFamily:"Roboto, Helvetica, Arial, sans-serif"},components:{MuiDialog:{styleOverrides:{paper:{color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",border:"2px solid var(--div-border-color)",borderRadius:"var(--div-border-radius)",boxShadow:"2px 2px 5px var(--div-shadow-color)"}}},MuiTooltip:{defaultProps:{placement:"top-start",arrow:!0}},MuiButton:{styleOverrides:{root:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)","&:hover":{backgroundColor:"var(--main-button-bg-color)"},"&.Mui-disabled":{color:"var(--main-button-color)",backgroundColor:"var(--main-grey-color)"}},contained:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},outlined:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},text:{color:"var(--main-button-color)"}},defaultProps:{variant:"contained",size:"small"}},MuiIconButton:{styleOverrides:{root:{color:"var(--main-icon-color)","&:hover .MuiSvgIcon-root":{color:"var(--primary-color)"}}}},MuiCheckbox:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-checked":{color:"var(--primary-color)"}}}},MuiTextField:{defaultProps:{size:"small",variant:"outlined",fullWidth:!0}},MuiOutlinedInput:{styleOverrides:{root:{backgroundColor:"var(--div-bg-color)","& .MuiOutlinedInput-notchedOutline":{borderColor:"var(--main-label-color)"},"&:hover .MuiOutlinedInput-notchedOutline":{borderColor:"var(--main-text-color)"},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:"var(--primary-color)"},padding:"0px"},input:{color:"var(--div-text-color)",padding:"4px 8px"}}},MuiInputLabel:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-focused":{color:"var(--primary-color)"}}}},MuiFormLabel:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-focused":{color:"var(--main-label-color)"}}}},MuiFormControl:{styleOverrides:{root:{color:"var(--main-grey-color)"}}},MuiRadio:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-checked":{color:"var(--primary-color)"}}}},MuiSelect:{styleOverrides:{root:{backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)",height:"30px","&:hover":{borderColor:"var(--main-text-color)"},"&.Mui-focused":{borderColor:"var(--primary-color)"}}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:"var(--main-menu-bg-color)",padding:"0px",margin:"0px"},list:{padding:"0px"}}},MuiMenuItem:{styleOverrides:{root:{color:"var(--main-menu-color)",backgroundColor:"var(--main-menu-bg-color)","&:hover":{backgroundColor:"var(--main-menu-hover-color)"},"&.Mui-selected":{color:"var(--main-menu-color)",backgroundColor:"var(--main-menu-bg-color)"},"&.Mui-selected:hover":{backgroundColor:"var(--main-menu-hover-color)"}}}},MuiListItemButton:{styleOverrides:{root:{cursor:"pointer","&:hover":{backgroundColor:"var(--main-bg-color)"}}}},MuiListItemIcon:{styleOverrides:{root:{color:"var(--div-text-color)"}}},MuiListItemText:{styleOverrides:{primary:{fontSize:"16px",fontWeight:"bold",color:"var(--div-text-color)"},secondary:{fontSize:"14px",fontWeight:"normal",color:"var(--div-text-color)"}}}}})}function mi(){const{mobile:n,showSnackbarMessage:d,showConfirmCancelDialog:l}=o.useContext(_e),{online:i,sendMessage:a,logMessage:b,addListener:p,removeListener:j,getUniqueId:t}=o.useContext(fe),[I,v]=o.useState(!1),[M,H]=o.useState(!1),[V,T]=o.useState(!1),[A,P]=o.useState(!1),[c,x]=o.useState(null),f=o.useRef(t()),[R,N]=o.useState(null),[S,q]=o.useState(null),[W,m]=o.useState(null),[s,u]=o.useState(null),[g,F]=o.useState(null),ue=()=>{window.open("https://www.buymeacoffee.com/luligugithub","_blank")},be=()=>{window.open("https://github.com/Luligu/matterbridge/blob/main/README.md","_blank")},ne=()=>{c?.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?window.open("https://github.com/Luligu/matterbridge/blob/dev/CHANGELOG.md","_blank"):window.open("https://github.com/Luligu/matterbridge/blob/main/CHANGELOG.md","_blank")},ye=()=>{window.open("https://discord.gg/QX58CDe6hd","_blank")},Z=()=>{window.open("https://github.com/Luligu/matterbridge","_blank")},ie=()=>{a({id:f.current,sender:"Header",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:"matterbridge",restart:!0}})},$=()=>{a({id:f.current,sender:"Header",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:"matterbridge@dev",restart:!0}})},K=()=>{a({id:f.current,sender:"Header",method:"/api/checkupdates",src:"Frontend",dst:"Matterbridge",params:{}})},L=()=>{r&&console.log("Header: handleShellySystemUpdateClick"),b("Matterbridge","Installing system updates..."),a({id:f.current,sender:"Header",method:"/api/shellysysupdate",src:"Frontend",dst:"Matterbridge",params:{}})},C=()=>{r&&console.log("Header: handleShellyMainUpdateClick"),b("Matterbridge","Installing software updates..."),a({id:f.current,sender:"Header",method:"/api/shellymainupdate",src:"Frontend",dst:"Matterbridge",params:{}})},w=()=>{r&&console.log("Header: handleShellyCreateSystemLog"),a({id:f.current,sender:"Header",method:"/api/shellycreatesystemlog",src:"Frontend",dst:"Matterbridge",params:{}})},k=()=>{r&&console.log("Header: handleShellyDownloadSystemLog"),b("Matterbridge","Downloading Shelly system log..."),d("Downloading Shelly system log...",5),window.location.href="./api/shellydownloadsystemlog"},E=()=>{c?.matterbridgeInformation.restartMode===""?a({id:f.current,sender:"Header",method:"/api/restart",src:"Frontend",dst:"Matterbridge",params:{}}):a({id:f.current,sender:"Header",method:"/api/shutdown",src:"Frontend",dst:"Matterbridge",params:{}})},Q=()=>{a({id:f.current,sender:"Header",method:"/api/shutdown",src:"Frontend",dst:"Matterbridge",params:{}})},ce=()=>{a({id:f.current,sender:"Header",method:"/api/reboot",src:"Frontend",dst:"Matterbridge",params:{}})},le=()=>{a({id:f.current,sender:"Header",method:"/api/softreset",src:"Frontend",dst:"Matterbridge",params:{}})},de=()=>{a({id:f.current,sender:"Header",method:"/api/hardreset",src:"Frontend",dst:"Matterbridge",params:{}})},ge=y=>{N(y.currentTarget)},_=y=>{r&&console.log("Header: handleMenuClose",y),N(null),y==="download-mblog"?(b("Matterbridge","Downloading matterbridge log..."),d("Downloading matterbridge log...",5),window.location.href="./api/download-mblog"):y==="download-mjlog"?(b("Matterbridge","Downloading matter log..."),d("Downloading matter log...",5),window.location.href="./api/download-mjlog"):y==="view-mblog"?(b("Matterbridge","Loading matterbridge log..."),d("Loading matterbridge log...",5),window.open("./api/view-mblog","_blank","noopener,noreferrer")):y==="view-mjlog"?(b("Matterbridge","Loading matter log..."),d("Loading matter log...",5),window.open("./api/view-mjlog","_blank","noopener,noreferrer")):y==="view-diagnostic"?(b("Matterbridge","Loading diagnostic log..."),d("Loading diagnostic log...",5),window.open("./api/view-diagnostic","_blank","noopener,noreferrer")):y==="download-diagnostic"?(b("Matterbridge","Downloading diagnostic log..."),d("Downloading diagnostic log...",5),window.location.href="./api/download-diagnostic"):y==="view-history"?a({id:f.current,sender:"Header",method:"/api/viewhistorypage",src:"Frontend",dst:"Matterbridge",params:{}}):y==="download-history"?a({id:f.current,sender:"Header",method:"/api/downloadhistorypage",src:"Frontend",dst:"Matterbridge",params:{}}):y==="view-shellylog"?(b("Matterbridge","Loading shelly system log..."),d("Loading shelly system log...",5),window.location.href="./api/shellyviewsystemlog"):y==="download-mbstorage"?(b("Matterbridge","Downloading matterbridge storage..."),d("Downloading matterbridge storage...",5),window.location.href="./api/download-mbstorage"):y==="download-pluginstorage"?(b("Matterbridge","Downloading matterbridge plugins storage..."),d("Downloading matterbridge plugins storage...",5),window.location.href="./api/download-pluginstorage"):y==="download-pluginconfig"?(b("Matterbridge","Downloading matterbridge plugins config..."),d("Downloading matterbridge plugins config...",5),window.location.href="./api/download-pluginconfig"):y==="download-mjstorage"?(b("Matterbridge","Downloading matter storage..."),d("Downloading matter storage...",5),window.location.href="./api/download-mjstorage"):y==="download-backup"?(b("Matterbridge","Downloading backup..."),d("Downloading backup...",10),window.location.href="./api/download-backup"):y==="update"?ie():y==="updatedev"?$():y==="updatecheck"?K():y==="shelly-sys-update"?L():y==="shelly-main-update"?C():y==="shelly-create-system-log"?w():y==="shelly-download-system-log"?k():y==="softreset"?le():y==="hardreset"?de():y==="restart"?E():y==="shutdown"?Q():y==="reboot"?ce():y==="create-backup"?a({id:f.current,sender:"Header",method:"/api/create-backup",src:"Frontend",dst:"Matterbridge",params:{}}):y==="unregister"?a({id:f.current,sender:"Header",method:"/api/unregister",src:"Frontend",dst:"Matterbridge",params:{}}):y==="reset"?a({id:f.current,sender:"Header",method:"/api/reset",src:"Frontend",dst:"Matterbridge",params:{}}):y==="factoryreset"&&a({id:f.current,sender:"Header",method:"/api/factoryreset",src:"Frontend",dst:"Matterbridge",params:{}})},B=y=>{r&&console.log("Header: handleMenuCloseCancel:",y),N(null)},h=y=>{q(y.currentTarget)},he=()=>{q(null)},ve=y=>{m(y.currentTarget)},ae=()=>{m(null)},ee=y=>{u(y.currentTarget)},te=()=>{u(null)},Pe=y=>{F(y.currentTarget)},Ne=()=>{F(null)},Xe=()=>{bi(),r&&console.log("Matterbridge logo clicked: debug is now",r)};return o.useEffect(()=>{const y=J=>{r&&console.log("Header received WebSocket Message:",J),J.method==="/api/settings"&&J.id===f.current?(r&&console.log("Header received settings:",J.response),x(J.response),v(J.response.matterbridgeInformation.restartRequired||J.response.matterbridgeInformation.fixedRestartRequired),H(J.response.matterbridgeInformation.fixedRestartRequired),T(J.response.matterbridgeInformation.updateRequired)):J.method==="refresh_required"&&J.response.changed==="settings"?(r&&console.log(`Header received refresh_required: changed=${J.response.changed} and sending /api/settings request`),a({id:f.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):J.method==="restart_required"?(r&&console.log(`Header received restart_required with fixed: ${J.response.fixed}`),v(!0),J.response.fixed===!0&&H(!0)):J.method==="restart_not_required"?(r&&console.log("Header received restart_not_required"),v(!1)):J.method==="update_required"?(r&&console.log("Header received update_required"),J.response.devVersion===!0?P(!0):T(!0),a({id:f.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):J.method==="shelly_sys_update"?(r&&console.log("Header received WS_ID_SHELLY_SYS_UPDATE:"),x(Ce=>Ce?{matterbridgeInformation:{...Ce.matterbridgeInformation,shellySysUpdate:J.response.available},systemInformation:Ce.systemInformation}:null)):J.method==="shelly_main_update"?(r&&console.log("Header received WS_ID_SHELLY_MAIN_UPDATE:"),x(Ce=>Ce?{matterbridgeInformation:{...Ce.matterbridgeInformation,shellyMainUpdate:J.response.available},systemInformation:Ce.systemInformation}:null)):J.method==="/api/viewhistorypage"&&J.id===f.current&&J.success===!0?(r&&console.log("Header received /api/viewhistorypage success"),window.open("./api/viewhistory","_blank","noopener,noreferrer")):J.method==="/api/downloadhistorypage"&&J.id===f.current&&J.success===!0&&(r&&console.log("Header received /api/downloadhistorypage success"),window.location.href="./api/downloadhistory")};return p(y,f.current),r&&console.log(`Header added WebSocket listener id ${f.current}`),()=>{j(y),r&&console.log("Header removed WebSocket listener")}},[p,j,a,d]),o.useEffect(()=>{i&&(r&&console.log("Header sending /api/settings and /api/checkupdates requests"),a({id:f.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),a({id:f.current,sender:"Header",method:"/api/checkupdates",src:"Frontend",dst:"Matterbridge",params:{}}))},[i,a]),r&&console.log("Header rendering... mobile %s",n),!i||!c?null:e.jsxs("div",{className:"header",style:{},children:[e.jsxs("div",{className:"sub-header",children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"30px"},onClick:Xe}),e.jsx("h2",{style:{fontSize:"22px",color:"var(--main-icon-color)",margin:"0px"},children:"Matterbridge"}),e.jsxs("nav",{children:[e.jsx(it,{to:"/",className:"nav-link",children:"Home"}),e.jsx(it,{to:"/devices",className:"nav-link",children:"Devices"}),e.jsx(it,{to:"/log",className:"nav-link",children:"Logs"}),e.jsx(it,{to:"/settings",className:"nav-link",children:"Settings"})]})]}),e.jsxs("div",{className:"sub-header",children:[!c.matterbridgeInformation.readOnly&&e.jsx(O,{title:`Matterbridge v.${c.matterbridgeInformation.matterbridgeVersion}`,children:e.jsxs("span",{className:"status-information",style:{cursor:"default"},children:["v.",c.matterbridgeInformation.matterbridgeVersion.split("-dev-")[0]+(c.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?"@dev":"")]})}),c.matterbridgeInformation.shellyBoard&&e.jsx("img",{src:"Shelly.svg",alt:"Shelly Icon",style:{height:"30px",padding:"0px",margin:"0px",marginRight:"30px"}}),c.matterbridgeInformation.bridgeMode!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Bridge mode",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.bridgeMode})}):null,c.matterbridgeInformation.restartMode!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Restart mode",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.restartMode})}):null,c.matterbridgeInformation.profile&&c.matterbridgeInformation.profile!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Current profile",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.profile})}):null]}),e.jsxs("div",{className:"sub-header",style:{gap:"5px"},children:[c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Matterbridge discord group",children:e.jsx("img",{src:"discord.svg",alt:"Discord Logo",style:{cursor:"pointer",height:"25px"},onClick:ye})}):null,c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Give a star to Matterbridge",children:e.jsx(U,{style:{color:"#FFD700",margin:"0",padding:"0"},onClick:Z,children:e.jsx(uo,{})})}):null,c.matterbridgeInformation.readOnly===!1?e.jsx(O,{title:"Sponsor Matterbridge",children:e.jsx(U,{style:{color:"#b6409c",margin:"0",padding:"0"},onClick:ue,children:e.jsx(Xt,{})})}):null,e.jsx(O,{title:"Matterbridge help",children:e.jsx(U,{style:{color:"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:be,children:e.jsx(Yt,{})})}),e.jsx(O,{title:"Matterbridge changelog",children:e.jsx(U,{style:{color:"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:ne,children:e.jsx(Lt,{})})}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&V&&e.jsx(O,{title:`Update matterbridge to latest version v.${c.matterbridgeInformation.matterbridgeLatestVersion}`,children:e.jsx(U,{style:{color:V?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:ie,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&A&&e.jsx(O,{title:`Update matterbridge to latest dev version v.${c.matterbridgeInformation.matterbridgeDevVersion}`,children:e.jsx(U,{style:{color:A?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:$,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellySysUpdate&&e.jsx(O,{title:"Shelly system update",children:e.jsx(U,{style:{color:"var(--primary-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:L,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellyMainUpdate&&e.jsx(O,{title:"Shelly software update",children:e.jsx(U,{style:{color:"var(--primary-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:C,children:e.jsx(Ie,{})})}),e.jsx(O,{title:"Restart matterbridge",children:e.jsx(U,{style:{color:I||M?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:E,children:e.jsx(vt,{})})}),c.matterbridgeInformation.restartMode===""?e.jsx(O,{title:"Shut down matterbridge",children:e.jsx(U,{style:{color:I||M?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:Q,children:e.jsx(Ae,{})})}):null,e.jsx(O,{title:"Download, backup and more",children:e.jsx(U,{onClick:ge,children:e.jsx(go,{style:{color:"var(--main-icon-color)"}})})}),e.jsxs(Ke,{id:"command-menu",anchorEl:R,keepMounted:!0,open:!!R,onClose:()=>_(""),children:[c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(D,{onClick:()=>_("update"),children:[e.jsx(z,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Install latest stable",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(D,{onClick:()=>_("updatedev"),children:[e.jsx(z,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Install latest dev",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(D,{onClick:()=>_("updatecheck"),children:[e.jsx(z,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Check for updates",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellySysUpdate&&e.jsxs(D,{onClick:()=>_("shelly-sys-update"),children:[e.jsx(z,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Shelly system update",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellyMainUpdate&&e.jsxs(D,{onClick:()=>_("shelly-main-update"),children:[e.jsx(z,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Shelly software update",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>_("restart"),children:[e.jsx(z,{children:e.jsx(vt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Restart",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation.restartMode===""?e.jsxs(D,{onClick:()=>_("shutdown"),children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Shutdown",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}):null,c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{l("Reboot","Are you sure you want to reboot the Shelly board?","reboot",_,B)},children:[e.jsx(z,{children:e.jsx(vt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Reboot...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsx(ct,{}),e.jsxs(D,{onClick:ve,children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"View",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Ke,{id:"sub-menu-view",anchorEl:W,keepMounted:!0,open:!!W,onClose:ae,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(D,{onClick:()=>{_("view-mblog"),ae()},children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("view-mjlog"),ae()},children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matter log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("view-diagnostic"),ae()},children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge diagnostic log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("view-history"),ae()},children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge system history",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{_("view-shellylog"),ae()},children:[e.jsx(z,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(ct,{}),e.jsxs(D,{onClick:ee,children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Download",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Ke,{id:"sub-menu-download",anchorEl:s,keepMounted:!0,open:!!s,onClose:te,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(D,{onClick:()=>{_("download-mbstorage"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-pluginstorage"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge plugins storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-pluginconfig"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge plugins config",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-mblog"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-mjstorage"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matter storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-mjlog"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matter log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-diagnostic"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge diagnostic log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-history"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Matterbridge system history",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{_("shelly-create-system-log"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Create Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{_("shelly-download-system-log"),te()},children:[e.jsx(z,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Download Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(ct,{}),e.jsxs(D,{onClick:h,children:[e.jsx(z,{children:e.jsx(St,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Ke,{id:"sub-menu-backup",anchorEl:S,keepMounted:!0,open:!!S,onClose:he,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(D,{onClick:()=>{_("create-backup"),he()},children:[e.jsx(z,{children:e.jsx(St,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Create backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{_("download-backup"),he()},children:[e.jsx(z,{children:e.jsx(St,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Download backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(ct,{}),e.jsxs(D,{onClick:Pe,children:[e.jsx(z,{children:e.jsx(mo,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Reset",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Ke,{id:"sub-menu-reset",anchorEl:g,keepMounted:!0,open:!!g,onClose:Ne,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(D,{onClick:()=>{Ne(),l("Reset all devices and shutdown","Are you sure you want to unregister all devices? This will temporarily remove all devices from the controller and you may loose the controller configuration.","unregister",_,B)},children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Reset all devices...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(D,{onClick:()=>{Ne(),l("Reset commissioning and shutdown","Are you sure you want to reset the commissioning? You will have to manually remove Matterbridge from the controller.","reset",_,B)},children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Reset commissioning...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),!c.matterbridgeInformation.readOnly&&e.jsxs(D,{onClick:()=>{Ne(),l("Factory reset and shutdown","Are you sure you want to factory reset Matterbridge? You will have to manually remove Matterbridge from the controller.","factoryreset",_,B)},children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Factory reset...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{Ne(),l("Network reset","Are you sure you want to factory reset the network parameters?","softreset",_,B)},children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Reset network...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(D,{onClick:()=>{Ne(),l("Factory reset","Are you sure you want to factory reset Matterbridge? You will have to manually remove Matterbridge from the controller.","hardreset",_,B)},children:[e.jsx(z,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(X,{primary:"Factory reset...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]})]})]})]})}const hi=o.memo(mi),ar=1200,lr=800;let Dt,Pt;function fi(){if(typeof window<"u"){Dt=Math.floor(window.visualViewport?.width??window.innerWidth),Pt=Math.floor(window.visualViewport?.height??window.innerHeight);const n=Dt<ar||Pt<lr;return r&&console.log("Visual viewport width %i height %i mobile %s",Dt,Pt,n),n}return!1}function xi({children:n}){const{mobile:d,setMobile:l}=o.useContext(_e);return o.useEffect(()=>{function i(){l(fi())}return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[l]),r&&console.log("MbfScreen rendering... mobile %s",d),e.jsxs("div",{style:{display:"flex",flexDirection:"column",overflow:"hidden",width:d?`${ar}px`:"calc(100vw - 40px)",height:d?`${lr}px`:"calc(100vh - 40px)",margin:"0px",padding:"20px",gap:"20px"},children:[e.jsx(hi,{}),e.jsx("div",{style:{display:"flex",flexDirection:"row",width:"100%",height:"calc(100% - 60px)",margin:"0px",padding:"0px",gap:"20px"},children:n})]})}let r=!1;const bi=()=>{r=!r},vi=!1;function yi({setLoggedIn:n}){const[d,l]=o.useState(""),[i,a]=o.useState(""),b={display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",backgroundColor:"var(--main-bg-color)"},p={display:"flex",flexDirection:"column",maxWidth:"400px",margin:"0 auto",padding:"20px",gap:"20px",border:"1px solid var(--div-border-color)",borderRadius:"var(--div-border-radius)",boxShadow:"2px 2px 5px var(--div-shadow-color)",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},j={margin:"10px 0",padding:"3px 3px",fontSize:"14px",width:"230px",border:"1px solid var(--main-label-color)",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},t=async v=>{try{const M=await fetch("./api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:v})});if(M.ok){const{valid:H}=await M.json();H?n(!0):v!==""&&a("Incorrect password!")}else console.error("Failed to log in:",M.statusText)}catch(M){console.error("Failed to log in:",M)}},I=v=>{v.preventDefault(),t(d)};return t(""),e.jsx("div",{style:b,children:e.jsxs("form",{onSubmit:I,style:p,children:[e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"64px",width:"64px"}}),e.jsx("h3",{style:{color:"var(--div-text-color)"},children:"Welcome to Matterbridge"})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:"20px"},children:[e.jsx("input",{type:"text",name:"username",autoComplete:"username",style:{display:"none"},tabIndex:-1}),e.jsx("input",{type:"password",value:d,onChange:v=>l(v.target.value),style:j,placeholder:"password",autoComplete:"current-password"}),e.jsx("button",{type:"submit",style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",borderColor:"var(--div-bg-color)"},children:"Log in"})]}),e.jsx("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",margin:0,height:"30px"},children:i&&e.jsx("p",{style:{color:"red"},children:i})})]})})}function ji(){const[n,d]=o.useState(!1),l=localStorage.getItem("frontendTheme")||"dark";r&&console.log('Setting frontend theme "%s"',l),document.body.setAttribute("frontend-theme",l);const i=ui("--primary-color","#1976d2");r&&console.log('Primary color from CSS "%s"',i);const a=gi(i),b=window.location.pathname.includes("/matterbridge/")?"/matterbridge":window.location.href.includes("/api/hassio_ingress/")?window.location.pathname:"/";return r&&(console.log("Loading App..."),console.log(`- with href = "${window.location.href}"`),console.log(`- pathname = "${window.location.pathname}"`),console.log(`- baseName = "${b}"`)),n?e.jsx(ho,{theme:a,children:e.jsx(kr,{dense:!0,maxSnack:10,preventDuplicate:!0,anchorOrigin:{vertical:"bottom",horizontal:"right"},children:e.jsx(Yo,{children:e.jsx(Xo,{children:e.jsx(vr,{basename:b,children:e.jsx(xi,{children:e.jsxs(yr,{children:[e.jsx(ze,{path:"/",element:e.jsx(Ln,{})}),e.jsx(ze,{path:"/devices",element:e.jsx(Xn,{})}),e.jsx(ze,{path:"/log",element:e.jsx(ti,{})}),e.jsx(ze,{path:"/settings",element:e.jsx(di,{})}),e.jsx(ze,{path:"/test",element:e.jsx(pi,{})}),e.jsx(ze,{path:"*",element:e.jsx(jr,{to:"/"})})]})})})})})})}):e.jsx(yi,{setLoggedIn:d})}wr.createRoot(document.getElementById("root")).render(e.jsx(Cr.StrictMode,{children:e.jsx(ji,{})}));
|
|
1
|
+
import{B as e,y as r,S as st,U as yr,V as jr,X as ze,Y as wr,Z as Cr,I as Sr}from"./vendor_node_modules.js";import{u as kr,S as Mr}from"./vendor_notistack.js";import{D as Le,a as $e,b as We,B as ie,c as Oe,d as X,A as Ir,I as Q,C as Dr,e as Pr,T as V,f as me,M as Nr,g as Je,h as P,i as ke,F as Lr,j as vt,k as $r,l as Ve,m as Ee,n as se,K as Ht,o as Ot,p as Lt,L as at,q as tt,r as lt,s as B,W as ot,t as dt,H as ct,u as ee,V as Vt,v as Et,w as Wr,E as Tr,Q as Yt,R as yt,S as Fr,x as Rr,U as Hr,P as Or,y as Xt,z as $t,G as Ie,J as er,N as tr,O as jt,X as rr,Y as Vr,Z as Er,_ as _r,$ as Ar,a0 as _t,a1 as zr,a2 as qr,a3 as Ur,a4 as Br,a5 as Qr,a6 as Gr,a7 as Kr,a8 as At,a9 as Jr,aa as Zr,ab as Yr,ac as Xr,ad as eo,ae as to,af as ro,ag as oo,ah as no,ai as io,aj as so,ak as ao,al as lo,am as co,an as po,ao as zt,ap as Ze,aq as or,ar as je,as as nr,at as wt,au as He,av as uo,aw as go,ax as Ae,ay as mo,az as pt,aA as qe,aB as kt,aC as ho,aD as fo}from"./vendor_mui.js";import{I as oe,m as xo,a as qt,b as bo,c as vo,d as Ut,e as yo,f as jo,g as wo,h as Co,i as So,j as ko,k as Mo,l as Io,n as Do,o as Po,p as No,q as Lo,r as Bt,s as $o,t as Wo,u as To,v as Fo,w as Ro,x as Ho,y as Oo,z as Vo,A as Qt,B as Eo,C as _o}from"./vendor_mdi.js";import{Q as Ao}from"./vendor_qrcode.js";import{F as zo,v as qo,e as Uo,a as Bo,g as Qo,b as Go,c as Ko,d as Mt,A as Jo}from"./vendor_rjsf.js";import"./vendor_lodash.js";import"./vendor_emotion.js";(function(){const d=document.createElement("link").relList;if(d&&d.supports&&d.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const x of a)if(x.type==="childList")for(const p of x.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&i(p)}).observe(document,{childList:!0,subtree:!0});function l(a){const x={};return a.integrity&&(x.integrity=a.integrity),a.referrerPolicy&&(x.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?x.credentials="include":a.crossOrigin==="anonymous"?x.credentials="omit":x.credentials="same-origin",x}function i(a){if(a.ep)return;a.ep=!0;const x=l(a);fetch(a.href,x)}})();function Zo({open:n,title:d,message:l,onConfirm:i,onCancel:a}){const x=j=>{o&&console.log("Confirmed"),j.preventDefault(),i()},p=j=>{o&&console.log("Canceled"),j.preventDefault(),a()};return e.jsxs(Le,{open:n,children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:d})]})}),e.jsxs(We,{children:[e.jsx("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",margin:"0",marginBottom:"20px",maxHeight:"350px",maxWidth:"350px"},children:e.jsx("p",{style:{flex:1,margin:"0"},children:l})}),e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-around"},children:[e.jsx(ie,{onClick:x,variant:"contained",color:"primary",size:"small",children:"Confirm"}),e.jsx(ie,{onClick:p,variant:"contained",color:"primary",size:"small",children:"Cancel"})]})]})]})}const Yo=({open:n,output:d,title:l,_command:i,_packageName:a,onInstall:x,onClose:p})=>{const j=r.useRef(null);return r.useEffect(()=>{o&&console.log(`InstallProgressDialog output effect mounted, scrolling to bottom: ${j.current}`),setTimeout(()=>{o&&console.log("Scrolling to bottom:",j.current),j.current?.scrollIntoView({behavior:"smooth"})},0)},[d]),e.jsxs(Le,{open:n,onClose:(t,I)=>{I==="backdropClick"||I==="escapeKeyDown"||p()},slotProps:{paper:{sx:{width:"70vw",maxWidth:"70vw",height:"70vw",maxHeight:"70vh",overflow:"hidden"}}},children:[e.jsx($e,{children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:l})]})}),e.jsxs(We,{dividers:!0,style:{overflow:"hidden",display:"flex",flexDirection:"column",height:400,paddingBottom:0},children:[e.jsx("label",{style:{display:"block",marginBottom:"10px",fontSize:"16px",fontWeight:"bold",color:"var(--primary-color)"},children:"Process log"}),e.jsxs("ul",{style:{width:"100%",height:"100%",fontFamily:"monospace",fontSize:"14px",padding:"10px",margin:0,marginBottom:"10px",color:"var(--div-text-color)",background:"var(--div-bg-color)",overflow:"auto",listStyle:"none",boxSizing:"border-box",borderRadius:4,border:"4px solid var(--primary-color)",whiteSpace:"pre-wrap",display:"block"},children:[d.split(`
|
|
2
|
+
`).map((t,I)=>e.jsx("li",{style:{padding:0,margin:0,wordBreak:"break-all"},children:t},I)),e.jsx("li",{ref:j,style:{padding:0,margin:0}})]})]}),e.jsxs(Oe,{sx:{justifyContent:"center"},children:[x&&e.jsx(ie,{variant:"contained",onClick:x,children:"Install"}),e.jsx(ie,{onClick:p,children:"Close"})]})]})},ut=[],_e=r.createContext(null);function Xo({children:n}){const[d,l]=r.useState(!1),[i,a]=r.useState(null),{enqueueSnackbar:x,closeSnackbar:p}=kr(),j=r.useCallback(S=>{o&&console.log(`UiProvider closeSnackbarMessage: message ${S}`);const w=ut.findIndex(k=>k.message===S);w!==-1&&(p(ut[w].key),ut.splice(w,1),o&&console.log(`UiProvider closeSnackbarMessage: message ${S} removed from persistMessages`))},[p]),t=r.useCallback((S,w,k)=>{o&&console.log(`UiProvider showSnackbarMessage: message ${S} timeout ${w}`);const _=x(S,{variant:"default",autoHideDuration:w==null||w>0?(w??5)*1e3:null,persist:w===0,content:K=>e.jsx(X,{sx:{margin:"0",padding:"0",width:"300px",marginRight:"30px"},children:e.jsx(Ir,{severity:k??"info",variant:"filled",sx:{color:"#fff",fontWeight:"normal",width:"100%",cursor:"pointer",padding:"0px 10px"},onClick:()=>p(K),action:e.jsx(Q,{size:"small",onClick:()=>p(K),sx:{color:"#fff"},children:e.jsx(Dr,{fontSize:"small"})}),children:S},K)},K)});w===0&&(o&&console.log(`UiProvider showSnackbarMessage: message ${S} timeout ${w} - persist key ${_}`),ut.push({message:S,key:_}))},[x,p]),[I,v]=r.useState(!1),[M,O]=r.useState(""),[E,T]=r.useState(""),[U,N]=r.useState(""),c=r.useRef(null),f=r.useRef(null),h=()=>{o&&console.log(`UiProvider handle confirm action ${U}`),v(!1),c.current&&c.current(U)},H=()=>{o&&console.log(`UiProvider handle cancel action ${U}`),v(!1),f.current&&f.current(U)},D=r.useCallback((S,w,k,_,K)=>{o&&console.log(`UiProvider showConfirmCancelDialog for command ${k}`),O(S),T(w),N(k),c.current=_,f.current=K,v(!0)},[]),[C,q]=r.useState(!1),[L,g]=r.useState(""),[s,u]=r.useState(""),[b,F]=r.useState(""),[ce,xe]=r.useState(""),ne=r.useCallback((S,w,k)=>{o&&console.log(`UiProvider show install progress for package ${S}`),g(S),u(w),F(k),q(!0)},[]),be=r.useCallback(S=>{o&&console.log(`UiProvider addInstallProgress: output ${S}`),xe(w=>w+S+`
|
|
3
|
+
`)},[]),R=r.useCallback(()=>{o&&console.log(`UiProvider exitInstallProgressSuccess: package ${b}`)},[b]),z=r.useCallback(()=>{o&&console.log(`UiProvider exitInstallProgressError: package ${b}`)},[b]),W=r.useCallback(()=>{o&&console.log("UiProvider hide install progress"),q(!1)},[]),Z=()=>{o&&console.log("UiProvider handle install close action"),q(!1),F(""),xe("")},$=r.useMemo(()=>({mobile:d,setMobile:l,currentPage:i,setCurrentPage:a,showSnackbarMessage:t,closeSnackbarMessage:j,closeSnackbar:p,showConfirmCancelDialog:D,showInstallProgress:ne,exitInstallProgressSuccess:R,exitInstallProgressError:z,hideInstallProgress:W,addInstallProgress:be}),[d,i,l,a,t,j,p,D,ne,R,z,W,be]);return e.jsxs(_e.Provider,{value:$,children:[e.jsx(Zo,{open:I,title:M,message:E,onConfirm:h,onCancel:H}),e.jsx(Yo,{open:C,title:L,_command:s,_packageName:b,output:ce,onClose:Z}),n]})}const ir=r.createContext(null),fe=r.createContext(null);function en({children:n}){const[d,l]=r.useState(localStorage.getItem("logFilterLevel")??"info"),[i,a]=r.useState(localStorage.getItem("logFilterSearch")??"*"),[x,p]=r.useState([]),[j,t]=r.useState(1e3),[I,v]=r.useState(!0),[M,O]=r.useState(!1),{showSnackbarMessage:E,closeSnackbarMessage:T,closeSnackbar:U,showInstallProgress:N,hideInstallProgress:c,exitInstallProgressSuccess:f,exitInstallProgressError:h,addInstallProgress:H}=r.useContext(_e),D=r.useRef([]),C=r.useRef(null),q=r.useRef(1),L=r.useRef(Math.floor(Math.random()*999e3)+1e3),g=r.useRef(null),s=r.useRef(null),u=r.useRef(null),b=r.useRef(d),F=r.useRef(i),ce=r.useRef(0),xe=r.useRef(null),ne=r.useMemo(()=>window.location.href.replace(/^http/,"ws"),[]),be=r.useMemo(()=>window.location.href.includes("api/hassio_ingress"),[]),R=100,z=60,W=50,Z=300,$=10;r.useEffect(()=>(o&&console.log("WebSocket messages started counter interval"),xe.current=setInterval(()=>{ce.current>0&&(o&&console.log(`WebSocket messages received in the last ${$} seconds: ${ce.current*(60/$)} messages/minute`),ce.current=0)},$*1e3),()=>{o&&console.log("WebSocket messages stopped counter interval"),xe.current&&clearInterval(xe.current),xe.current=null}),[]),r.useEffect(()=>{b.current=d},[d]),r.useEffect(()=>{F.current=i},[i]);const S=r.useCallback(()=>Math.floor(Math.random()*999e3)+1e3,[]),w=r.useCallback(G=>{if(C.current&&C.current.readyState===WebSocket.OPEN)try{o&&console.log(`WebSocket sending message with id ${G.id}:`,G),G.id===void 0&&(G.id=L.current);const m=JSON.stringify(G);C.current.send(m),o&&console.log("WebSocket sent message:",G)}catch(m){o&&console.error(`WebSocket error sending message: ${m}`)}else o&&console.error("WebSocket message not sent, WebSocket not connected:",G)},[]),k=r.useCallback((G,m)=>{p(he=>[...he,{level:G,time:"",name:"",message:m}])},[]),_=r.useCallback((G,m)=>{l(G),a(m),k("WebSocket",`Filtering by log level "${G}" and log search "${m}"`)},[k]),K=r.useCallback((G,m)=>{o&&console.log(`WebSocket addListener id ${m}:`,G),(m==null||isNaN(m)||m===0)&&console.error("WebSocket addListener called without id, listener not added:",G),D.current=[...D.current,{listener:G,id:m}],o&&console.log("WebSocket addListener total listeners:",D.current.length)},[]),pe=r.useCallback(G=>{o&&console.log("WebSocket removeListener:",G),D.current=D.current.filter(m=>m.listener!==G),o&&console.log("WebSocket removeListener total listeners:",D.current.length)},[]),le=r.useCallback(()=>{ne===""||ne===null||ne===void 0||(k("WebSocket",`Connecting to WebSocket: ${ne}`),C.current=new WebSocket(ne),C.current.onmessage=G=>{M||O(!0),ce.current+=1;try{const m=JSON.parse(G.data);if(m.id===void 0||m.src===void 0||m.dst===void 0){o&&console.error("WebSocket undefined message id/src/dst:",m);return}if(m.src!=="Matterbridge"||m.dst!=="Frontend"){o&&console.error("WebSocket invalid message src/dst:",m);return}if(m.error){o&&console.error("WebSocket error message response:",m);return}if(m.id===L.current&&m.method==="pong"&&m.response==="pong"){o&&console.log(`WebSocket pong response message id ${m.id}:`,m),s.current&&clearTimeout(s.current),s.current=null;return}else if(m.method==="snackbar"&&m.response&&m.response.message){o&&console.log(`WebSocket message id ${m.id} method ${m.method}:`,m),E(m.response.message,m.response.timeout,m.response.severity);return}else if(m.method==="close_snackbar"&&m.response&&m.response.message){o&&console.log(`WebSocket message id ${m.id} method ${m.method}:`,m),T(m.response.message);return}else if(m.method==="log"){if(!m.response||!m.response.level||!m.response.time||!m.response.name||!m.response.message||(m.response.level==="spawn"&&(m.response.name==="Matterbridge:spawn-init"?N(m.response.message,"",""):m.response.name==="Matterbridge:spawn-exit-success"?f():m.response.name==="Matterbridge:spawn-exit-error"?h():H(m.response.message+`
|
|
4
|
+
`)),["debug","info","notice","warn","error","fatal"].includes(m.response.level)&&(b.current==="info"&&m.response.level==="debug"||b.current==="notice"&&(m.response.level==="debug"||m.response.level==="info")||b.current==="warn"&&(m.response.level==="debug"||m.response.level==="info"||m.response.level==="notice")||b.current==="error"&&(m.response.level==="debug"||m.response.level==="info"||m.response.level==="notice"||m.response.level==="warn")||b.current==="fatal"&&(m.response.level==="debug"||m.response.level==="info"||m.response.level==="notice"||m.response.level==="warn"||m.response.level==="error")))||F.current!=="*"&&F.current!==""&&!m.response.message.toLowerCase().includes(F.current.toLowerCase())&&!m.response.name.toLowerCase().includes(F.current.toLowerCase())||m.response.name==="Commissioning"&&m.response.message.includes("is uncommissioned"))return;p(ye=>{const ae=[...ye,{level:m.response.level,time:m.response.time,name:m.response.name,message:m.response.message}];return ae.length>j*2?ae.slice(j):ae})}else{if(o&&console.log(`WebSocket received message id ${m.id} method ${m.method}:`,m),m.id===0)D.current.forEach(he=>he.listener(m));else{const he=D.current.find(ye=>ye.id===m.id);he?he.listener(m):console.warn(`WebSocket no listener found for message id ${m.id}:`,m)}return}}catch(m){console.error(`WebSocket error parsing message: ${m}`,m instanceof Error?m.stack:null)}},C.current.onopen=()=>{o&&console.log(`WebSocket: Connected to WebSocket: ${ne}`),k("WebSocket",`Connected to WebSocket: ${ne}`),O(!0),U(),q.current=1,u.current=setTimeout(()=>{g.current=setInterval(()=>{w({id:L.current,method:"ping",src:"Frontend",dst:"Matterbridge",params:{}}),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{o&&console.error(`WebSocketUse: No pong response received from WebSocket: ${ne}`),k("WebSocket",`No pong response received from WebSocket: ${ne}`),O(!1)},1e3*W)},1e3*z)},1e3*Z)},C.current.onclose=()=>{o&&console.error(`WebSocket: Disconnected from WebSocket ${be?"with Ingress":""}: ${ne}`),k("WebSocket",`Disconnected from WebSocket: ${ne}`),O(!1),U(),c(),u.current&&clearTimeout(u.current),s.current&&clearTimeout(s.current),g.current&&clearInterval(g.current),k("WebSocket",`Reconnecting (attempt ${q.current} of ${R}) to WebSocket${be?" (Ingress)":""}: ${ne}`),be?setTimeout(de,5e3):q.current===1?de():q.current<R?setTimeout(de,1e3*q.current):k("WebSocket",`Reconnect attempts exceeded limit of ${R} retries, refresh the page to reconnect to: ${ne}`),q.current=q.current+1},C.current.onerror=G=>{o&&console.error(`WebSocket: WebSocket error connecting to ${ne}:`,G),k("WebSocket",`WebSocket error connecting to ${ne}`)})},[ne]),de=r.useCallback(()=>{o&&console.log(`WebSocket attemptReconnect ${q.current}/${R} to:`,ne),le()},[le]);r.useEffect(()=>(le(),()=>{C.current&&C.current.readyState===WebSocket.OPEN&&C.current.close()}),[le]);const ge=r.useMemo(()=>({messages:x,maxMessages:j,autoScroll:I,setMessages:p,setLogFilters:_,setMaxMessages:t,setAutoScroll:v}),[x,p,_]),A=r.useMemo(()=>({maxMessages:j,autoScroll:I,logFilterLevel:d,logFilterSearch:i,setMessages:p,setLogFilters:_,setMaxMessages:t,setAutoScroll:v,online:M,retry:q.current,getUniqueId:S,addListener:K,removeListener:pe,sendMessage:w,logMessage:k}),[j,I,p,_,t,v,M,q.current,K,pe,w,k]);return e.jsx(ir.Provider,{value:ge,children:e.jsx(fe.Provider,{value:A,children:n})})}function tn(n){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 296.2 296.2",...n,children:[e.jsxs("defs",{children:[e.jsxs("linearGradient",{id:"lg1",x1:"16.6",y1:"16.6",x2:"279.6",y2:"279.6",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#00b48d"}),e.jsx("stop",{offset:".1",stopColor:"#3faa77"}),e.jsx("stop",{offset:".3",stopColor:"#234148"}),e.jsx("stop",{offset:".7",stopColor:"#203b44"}),e.jsx("stop",{offset:".9",stopColor:"#ad2e6e"}),e.jsx("stop",{offset:"1",stopColor:"#c81b74"})]}),e.jsxs("linearGradient",{id:"lg2",x1:"31.1",y1:"31.1",x2:"265.1",y2:"265.1",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#00b48d"}),e.jsx("stop",{offset:".2",stopColor:"#285251"}),e.jsx("stop",{offset:".4",stopColor:"#234148"}),e.jsx("stop",{offset:".8",stopColor:"#203b44"}),e.jsx("stop",{offset:".9",stopColor:"#a8316c"}),e.jsx("stop",{offset:"1",stopColor:"#c81b74"})]}),e.jsxs("linearGradient",{id:"lg3",x1:"116.2",y1:"143.9",x2:"139.8",y2:"143.9",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#8bc751"}),e.jsx("stop",{offset:"1",stopColor:"#0db14b"})]}),e.jsx("linearGradient",{id:"lg4",x1:"136.1",y1:"100.8",x2:"159.6",y2:"100.8",xlinkHref:"#lg3"}),e.jsx("linearGradient",{id:"lg5",x1:"155.3",y1:"143.9",x2:"178.9",y2:"143.9",xlinkHref:"#lg3"}),e.jsxs("linearGradient",{id:"lg6",x1:"46.8",y1:"25.7",x2:"89.6",y2:"74.8",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{offset:"0",stopColor:"#b1d34a"}),e.jsx("stop",{offset:"1",stopColor:"#50b848"})]})]}),e.jsx("rect",{width:"296.2",height:"296.2",rx:"56.7",ry:"56.7",style:{fill:"url(#lg1)"}}),e.jsx("rect",{x:"16.3",y:"16.3",width:"263.6",height:"263.6",rx:"50.5",ry:"50.5",style:{fill:"url(#lg2)"}}),e.jsx("circle",{cx:"128",cy:"143.9",r:"11.8",style:{fill:"url(#lg3)"}}),e.jsx("circle",{cx:"147.8",cy:"100.8",r:"11.8",style:{fill:"url(#lg4)"}}),e.jsx("path",{d:"m244.6 114.5.4-.5L160 33a17 17 0 0 0-24.7-.5l-86.4 83.3a15 15 0 0 0 9.2 26.9h19.3v-4.7l-13.7-12.7v-.1l83.7-80.8 84.2 81-13.9 12.8v4.5h19.5a15 15 0 0 0 7.4-28.1Z",style:{fill:"url(#lg3)"}}),e.jsx("circle",{cx:"167.1",cy:"143.9",r:"11.8",style:{fill:"url(#lg5)"}}),e.jsx("path",{fill:"#fff",d:"M219 89.3V35.5a10.5 10.5 0 1 0-21 0v33.7l21 20Z"}),e.jsx("path",{d:"M91.4 73.3H83a37 37 0 0 0-14.5-28.4L65 50.2c.1 0 12.6 9 11.7 25.4-5.3-.4-11.2-1.9-16.3-5.3-11.8-7.8-16-23.7-11.9-46 8.7 1.5 34 7 43 22.8 4.1 7.3 4.1 16.1 0 26.2Z",style:{fill:"url(#lg6)"}}),e.jsx("path",{d:"M65.9 80a49.6 49.6 0 0 0 17.8 2.2l16.6-16c1.6-8.3.5-15.7-3.3-22.4C84.6 22 47.8 17.5 46.2 17.4l-3-.4-.6 3c-3.8 18.4-5.9 50.6 23.2 60ZM48.4 24.4c8.7 1.5 34 7 43 22.8 4.1 7.3 4.1 16.1 0 26.2H83a37 37 0 0 0-14.5-28.4l-3.7 5.3c.1 0 12.6 9 11.7 25.4-5.3-.4-11.2-1.9-16.3-5.3-11.9-7.8-16-23.7-11.9-46Z",fill:"#1e5857"}),e.jsx("path",{fill:"#fff",d:"M250.5 90.5a17.4 17.4 0 1 1 0-34.8 17.4 17.4 0 0 1 0 34.8Zm0-22.7a5.4 5.4 0 0 0 0 10.7 5.3 5.3 0 0 0 0-10.7ZM258.8 148.2a15.9 15.9 0 0 0-9.6 28.5c-.8 4.2-5.4 4.6-5.4 4.6h-26v-43l13.6-13-1.8-2-82.2-79-81.2 78.3-2.5 2.6 13.7 13v42.9H53a21.5 21.5 0 1 0 11.7 15h12.6v18.8c0 7.8 6.4 14.1 14.1 14.1h29.3v14.8H64a10.6 10.6 0 0 0-17.7 8 10.6 10.6 0 0 0 17.6 8h157.6a16.3 16.3 0 1 0 0-16h-84.8V229h66.8c7.8 0 14.2-6.3 14.2-14.1v-19.2h27.6c14.3 0 17.8-12.8 18.5-16.6a15.9 15.9 0 0 0-5-30.9ZM43.7 210.8a10.3 10.3 0 1 1 0-20.6 10.3 10.3 0 0 1 0 20.6Zm192 36a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm-77-34.8h-22v-34h22v34Zm8.4-79.8c2.7 0 5.2 1 7.2 2.5v-10.4L188 137s2.6 1.3 4.6 1.3h6.7v68c0 3.2-2.6 5.7-5.7 5.7h-19v-34h1.4a7.5 7.5 0 0 0 0-15H120a7.5 7.5 0 0 0 0 15h.7v34h-19.3a5.7 5.7 0 0 1-5.7-5.6v-68.1h6.7c2 0 4.6-1.3 4.6-1.3l13.7-12.7v10.4a11.7 11.7 0 0 1 16 1.6v-13a14.9 14.9 0 0 0-25-10.8s-.1.2-.1.2l-.5.5-6.9 7H92.5l55-53.2 55.1 53.2h-11.8l-7-7c0-.2-.2-.3-.4-.5l-.2-.2a14.8 14.8 0 0 0-25 10.9v12.9c2.2-2.5 5.3-4.1 8.9-4.1Zm91.7 36.7a4.9 4.9 0 1 1 0-9.7 4.9 4.9 0 0 1 0 9.7Z"})]})}function De(){const{retry:n}=r.useContext(fe),d=()=>{window.location.reload()};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",width:"100vw",height:"100vh",justifyContent:"center",alignItems:"center",fontSize:"20px",color:"var(--main-text-color)",backgroundColor:"var(--main-bg-color)"},children:[e.jsx(tn,{style:{height:"128px",width:"128px",margin:"10px",marginBottom:"20px"}}),n<100?e.jsxs(e.Fragment,{children:[e.jsx(Pr,{style:{color:"var(--primary-color)"}}),e.jsx("div",{style:{marginTop:"20px",color:"var(--primary-color)",textAlign:"center"},children:e.jsxs("span",{children:["Reconnecting to Matterbridge ","(attempt "+n+")","..."]})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{marginTop:"20px",color:"var(--primary-color)",textAlign:"center"},children:[e.jsx("span",{children:"Unable to connect to Matterbridge after multiple attempts."}),e.jsx("br",{}),e.jsx("span",{children:"Please check your network connection."}),e.jsx("br",{})]}),e.jsx(ie,{variant:"contained",color:"primary",onClick:d,style:{marginTop:"20px"},children:"Refresh the Page"})]})]})}function rn({value:n,maxChars:d}){let l=n;if(n.length>d&&d>3){const i=d-3,a=n.substring(0,Math.ceil(i/2)),x=n.substring(n.length-Math.floor(i/2),n.length);l=`${a} … ${x}`}return n!==l?e.jsx(V,{title:n,placement:"top",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[0,12]}}]}},children:e.jsx("span",{children:l})}):e.jsx("span",{children:l})}function Me({children:n,style:d}){const l={display:"flex",flexDirection:"column",flex:"0 0 auto",width:"100%",overflow:"hidden",margin:"0px",padding:"0px",gap:"0px",backgroundColor:"var(--div-bg-color)",boxShadow:"5px 5px 10px var(--div-shadow-color)",border:"1px solid var(--table-border-color)",borderRadius:"var(--div-border-radius)",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function Ye({children:n,style:d}){const l={display:"flex",flexDirection:"row",justifyContent:"space-between",width:"100%",height:"30px",borderBottom:"1px solid var(--table-border-color)",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",margin:"0px",padding:"0px",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function Xe({children:n,style:d}){const l={color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",fontSize:"16px",fontWeight:"bold",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function gt({children:n,style:d}){const l={display:"flex",flexDirection:"row",justifyContent:"space-between",width:"100%",height:"30px",color:"var(--footer-text-color)",backgroundColor:"var(--footer-bg-color)",margin:"0px",padding:"0px",boxSizing:"border-box"};return e.jsx("div",{style:{...l,...d},children:n})}function mt({children:n,style:d}){const l={color:"var(--footer-text-color)",backgroundColor:"var(--footer-bg-color)",fontSize:"14px",fontWeight:"bold",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function rt({children:n,style:d}){const l={color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",fontSize:"14px",fontWeight:"normal",margin:"0px",padding:"5px 10px"};return e.jsx("div",{style:{...l,...d},children:n})}function nt({children:n,style:d,onClose:l}){const i={display:"flex",flexDirection:"row",margin:"0px",padding:"0px",paddingRight:"10px",gap:"10px"};return e.jsxs("div",{style:{...i,...d},children:[n,yi]})}function on({systemInfo:n,compact:d}){const{addListener:l,removeListener:i,getUniqueId:a,sendMessage:x}=r.useContext(fe),[p,j]=r.useState(n),t=r.useRef(a());if(o&&console.log("SystemInfoTable loading with systemInfo:",p,"compact:",d),n&&d&&p.totalMemory&&p.freeMemory){const N=p.totalMemory,c=p.freeMemory;p.freeMemory=`${c} / ${N}`,p.totalMemory=""}if(n&&d&&p.heapTotal&&p.heapUsed){const N=p.heapTotal,c=p.heapUsed;p.heapUsed=`${c} / ${N}`,p.heapTotal=""}if(n&&d&&p.osRelease&&p.osType){const N=p.osType,c=p.osRelease;p.osType=`${N} (${c})`,p.osRelease=""}if(n&&d&&p.osArch&&p.osPlatform){const N=p.osPlatform,c=p.osArch;p.osPlatform=`${N} (${c})`,p.osArch=""}const I=(N,c,f,h,H)=>{j(D=>({...D,totalMemory:N,freeMemory:c,heapTotal:f,heapUsed:h,rss:H}))},v=N=>{j(c=>({...c,cpuUsage:N.toFixed(2)+" %"}))},M=N=>{j(c=>({...c,processCpuUsage:N.toFixed(2)+" %"}))},O=(N,c)=>{j(f=>({...f,systemUptime:N,processUptime:c}))},E=()=>{o&&console.log("SystemInfoTable handleViewHistory clicked"),x({id:t.current,sender:"Header",method:"/api/viewhistorypage",src:"Frontend",dst:"Matterbridge",params:{}})};r.useEffect(()=>{const N=c=>{o&&console.log("SystemInfoTable received WebSocket Message:",c),c.method==="memory_update"&&c.response&&c.response.totalMemory&&c.response.freeMemory&&c.response.heapTotal&&c.response.heapUsed&&c.response.rss?(o&&console.log("SystemInfoTable received memory_update",c),I(c.response.totalMemory,c.response.freeMemory,c.response.heapTotal,c.response.heapUsed,c.response.rss)):c.method==="cpu_update"&&c.response&&c.response.cpuUsage?(o&&console.log("SystemInfoTable received cpu_update",c),v(c.response.cpuUsage),M(c.response.processCpuUsage)):c.method==="uptime_update"&&c.response&&c.response.systemUptime&&c.response.processUptime?(o&&console.log("SystemInfoTable received uptime_update",c),O(c.response.systemUptime,c.response.processUptime)):c.method==="/api/viewhistorypage"&&c.id===t.current&&c.success===!0&&(o&&console.log("SystemInfoTable received /api/viewhistorypage success"),window.open("./api/viewhistory","_blank","noopener,noreferrer"))};return l(N,t.current),o&&console.log(`SystemInfoTable added WebSocket listener id ${t.current}`),()=>{i(N),o&&console.log("SystemInfoTable removed WebSocket listener")}},[l,i]);const[T,U]=r.useState(!1);return!p||T?null:(o&&console.log("SystemInfoTable rendering..."),e.jsxs(Me,{style:{flex:"0 1 auto",width:"302px",minWidth:"302px"},children:[e.jsxs(Ye,{children:[e.jsx(Xe,{children:"System Information"}),e.jsx(nt,{onClose:()=>U(!0),children:e.jsx(Q,{size:"small",sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},onClick:E,children:e.jsx(V,{title:"Open the cpu and memory usage page",arrow:!0,children:e.jsx(oe,{path:xo,size:"22px"})})})})]}),e.jsx("div",{className:"MbfWindowDivTable",children:e.jsx("table",{style:{border:"none",borderCollapse:"collapse"},children:e.jsx("tbody",{style:{border:"none",borderCollapse:"collapse"},children:Object.entries(p).filter(([N,c])=>c!==void 0&&c!=="").map(([N,c],f)=>e.jsxs("tr",{className:f%2===0?"table-content-even":"table-content-odd",style:{border:"none",borderCollapse:"collapse"},children:[e.jsx("td",{style:{border:"none",borderCollapse:"collapse"},children:N.replace("interfaceName","Interface name").replace("macAddress","Mac address").replace("ipv4Address","IPv4 address").replace("ipv6Address","IPv6 address").replace("nodeVersion","Node version").replace("hostname","Hostname").replace("user","User").replace("osType","Os").replace("osPlatform","Platform").replace("freeMemory","Memory").replace("systemUptime","System uptime").replace("processUptime","Process uptime").replace("cpuUsage","Host CPU").replace("processCpuUsage","Process CPU").replace("rss","Rss").replace("heapUsed","Heap")}),e.jsx("td",{style:{border:"none",borderCollapse:"collapse"},children:e.jsx(rn,{value:typeof c!="string"?c.toString():c,maxChars:24})})]},N))})})})]}))}const nn=r.memo(on),Gt={margin:"0px",padding:"0px",color:"var(--div-text-color)",transition:"color 0.2s ease","& svg":{display:"block"},"& svg path":{fill:"var(--div-text-color)",transition:"fill 0.2s ease"},"&:hover":{color:"var(--primary-color)"},"&:hover svg path":{fill:"var(--primary-color)"},"&:focus-visible":{outline:"2px solid var(--primary-color)",outlineOffset:"2px"}},sn=n=>{if(!n)return"";const d=n.toString().replace(/[^0-9]/g,"");if(d.length<5)return d;const l=d.slice(0,4),i=d.slice(4,7),a=d.slice(7,11);return[l,i,a].filter(Boolean).join("-")};function an({id:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:x}=r.useContext(fe),[p,j]=r.useState(null),t=r.useRef(null),I=r.useRef(null),v=r.useRef(x()),{showConfirmCancelDialog:M}=r.useContext(_e);o&&console.log(`QRDiv loading with id = "${n}" storeId = "${t.current}" timeout = ${I.current} and matter:`,p),r.useEffect(()=>{o&&console.log(`QRDiv id effect "${n}"`),t.current=n,I.current&&clearTimeout(I.current),I.current=null,n?(o&&console.log(`QRDiv id effect sending data request for storeId "${n}"`),l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:n,server:!0}})):(o&&console.log("QRDiv id effect setting matter to null"),j(null))},[n,l]),r.useEffect(()=>{const c=f=>{o&&console.log("QRDiv received WebSocket Message:",f),f.method==="refresh_required"&&f.response.changed==="matter"&&f.response.matter&&(o&&console.log(`QRDiv received refresh_required: changed=${f.response.changed} for storeId "${f.response.matter.id}":`,f.response.matter),t.current===f.response.matter.id&&(o&&console.log(`QRDiv received refresh_required/matter: setting matter data for storeId "${f.response.matter.id}":`,f.response.matter),I.current&&clearTimeout(I.current),f.response.matter.advertising&&f.response.matter.advertiseTime&&f.response.matter.advertiseTime+9e5<=Date.now()&&(f.response.matter.advertising=!1),j(f.response.matter),f.response.matter.advertising&&(o&&console.log(`QRDiv setting matter advertise timeout for storeId "${f.response.matter.id}":`,f.response.matter.advertiseTime+9e5-Date.now()),I.current=setTimeout(()=>{I.current&&clearTimeout(I.current),o&&console.log(`QRDiv clearing advertising state for storeId "${t.current}" after 15 minutes`),j(h=>h&&{...h,advertising:!1})},f.response.matter.advertiseTime+9e5-Date.now()))))};return i(c,v.current),o&&console.log("QRDiv webSocket effect mounted"),()=>{a(c),I.current&&clearTimeout(I.current),I.current=null,o&&console.log("QRDiv webSocket effect unmounted")}},[i,a]);const O=()=>{o&&console.log(`QRDiv sent matter startCommission for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,startCommission:!0}})},E=()=>{o&&console.log(`QRDiv sent matter stopCommission for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,stopCommission:!0}})},T=()=>{o&&console.log(`QRDiv sent matter advertise for node "${p?.id}"`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,advertise:!0}})},U=c=>{o&&console.log(`QRDiv sent matter removeFabric for node "${p?.id}" and fabricIndex ${c}`),p&&l({id:v.current,sender:"QRDiv",method:"/api/matter",src:"Frontend",dst:"Matterbridge",params:{id:p.id,removeFabric:c}})},N=async()=>{if(!p||!p.manualPairingCode)return;const c=p.manualPairingCode.toString();try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(c);else{const f=document.createElement("textarea");f.value=c,f.style.position="fixed",f.style.opacity="0",document.body.appendChild(f),f.focus(),f.select(),document.execCommand("copy"),document.body.removeChild(f)}o&&console.log("Manual pairing code copied to clipboard")}catch(f){console.error("Failed to copy manual pairing code",f)}};return!p||!d?(o&&console.log("QRDiv rendering undefined state"),null):p.online?p.advertising&&p.qrPairingCode&&p.manualPairingCode?(o&&console.log("QRDiv rendering advertising state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsxs(Ye,{children:[e.jsx(Xe,{children:"QR pairing code"}),e.jsxs(nt,{children:[e.jsx(Q,{"aria-label":"send advertising",size:"small",onClick:T,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(V,{title:"Send again the mDNS advertisement",arrow:!0,children:e.jsx(oe,{path:qt,size:"22px"})})}),e.jsx(Q,{"aria-label":"stop pairing",size:"small",onClick:E,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(V,{title:"Turn off pairing",arrow:!0,children:e.jsx(oe,{path:bo,size:"22px"})})})]})]}),e.jsx(rt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(Ao,{value:p.qrPairingCode,size:256,level:"M",fgColor:"var(--div-text-color)",bgColor:"var(--div-bg-color)",style:{margin:"20px"}}),e.jsxs(gt,{style:{justifyContent:"space-between"},children:[e.jsxs(mt,{style:{fontWeight:"normal",color:"var(--div-text-color)"},children:["Manual pairing code: ",sn(p.manualPairingCode)]}),e.jsx(nt,{children:e.jsx(V,{title:"Copy manual pairing code",arrow:!0,children:e.jsx(Q,{"aria-label":"copy manual pairing code",size:"small",onClick:N,sx:Gt,children:e.jsx(oe,{path:vo,size:.85})})})})]})]})):p.commissioned&&p.fabricInformations&&p.sessionInformations?(o&&console.log("QRDiv rendering commissioned state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px",overflow:"hidden"},children:[e.jsxs(Ye,{children:[e.jsx(Xe,{children:"Paired fabrics"}),e.jsxs(nt,{children:[e.jsx(Q,{"aria-label":"send advertising",size:"small",onClick:T,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(V,{title:"Send again the mDNS advertisement",arrow:!0,children:e.jsx(oe,{path:qt,size:"22px"})})}),e.jsx(Q,{"aria-label":"start pairing",size:"small",onClick:O,sx:{color:"var(--header-text-color)",margin:"0px",padding:"0px"},children:e.jsx(V,{title:"Turn on pairing",arrow:!0,children:e.jsx(oe,{path:Ut,size:"22px"})})})]})]}),e.jsx(rt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx("div",{className:"MbfWindowBodyColumn",style:{paddingTop:"0px"},children:p.fabricInformations.map((c,f)=>e.jsxs("div",{style:{margin:"0px",padding:"10px",gap:"0px",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",textAlign:"left",fontSize:"14px"},children:[e.jsxs("div",{style:{marginLeft:"20px",marginBottom:"10px",display:"flex",flexDirection:"row",justifyContent:"space-between",gap:"20px",alignItems:"center"},children:[e.jsxs("p",{className:"status-blue",style:{margin:"0px",padding:"3px 10px",width:"200px",fontSize:"14px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},children:["Fabric: ",c.fabricIndex]}),e.jsx(V,{title:"Remove the fabric. You will also need to remove it from the controller.",arrow:!0,children:e.jsx(Q,{"aria-label":"remove the fabric",size:"small",onClick:()=>M("Remove fabric","Are you sure you want to remove this fabric? You will also need to remove it from the controller.","RemoveFabric",()=>U(c.fabricIndex),()=>{}),sx:{...Gt,padding:"2px"},children:e.jsx(oe,{path:yo,size:1})})})]}),e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Vendor: ",c.rootVendorId," ",c.rootVendorName]}),c.label!==""&&e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Label: ",c.label]}),e.jsxs("p",{style:{margin:"0px 20px 0px 20px",color:"var(--div-text-color)"},children:["Sessions: ",p.sessionInformations?p.sessionInformations.filter(h=>h.fabric?.fabricIndex===c.fabricIndex&&h.isPeerActive===!0).length:"0"," ","subscriptions: ",p.sessionInformations?p.sessionInformations.filter(h=>h.fabric?.fabricIndex===c.fabricIndex&&h.isPeerActive===!0&&h.numberOfActiveSubscriptions>0).length:"0"]})]},f))}),e.jsx(gt,{style:{justifyContent:"center"},children:e.jsxs(mt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]})):!p.commissioned&&!p.advertising?(o&&console.log("QRDiv rendering not commissioned and not advertising state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsx(Ye,{children:e.jsx(Xe,{children:"QR pairing code"})}),e.jsx(rt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(ie,{onClick:O,endIcon:e.jsx(oe,{path:Ut,size:1}),style:{margin:"20px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:"Turn on pairing"}),e.jsx(gt,{style:{justifyContent:"center"},children:e.jsxs(mt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]})):(o&&console.log("QRDiv rendering unknown state"),null):(o&&console.log("QRDiv rendering offline state"),e.jsxs(Me,{style:{alignItems:"center",minWidth:"302px"},children:[e.jsx(Ye,{style:{height:"30px",justifyContent:"space-between"},children:e.jsx(Xe,{children:"Server node"})}),e.jsx(rt,{style:{maxWidth:"280px",fontWeight:"bold",color:"var(--secondary-color)"},children:t.current}),e.jsx(rt,{style:{fontWeight:"bold"},children:"Server offline"}),e.jsx(gt,{style:{justifyContent:"center"},children:e.jsxs(mt,{style:{fontWeight:"normal"},children:["Serial number: ",p.serialNumber]})})]}))}const ln=r.memo(an);function dn(){const{logMessage:n,sendMessage:d,getUniqueId:l}=r.useContext(fe),[i,a]=r.useState("matterbridge-"),[x,p]=r.useState(!1),[j,t]=r.useState(null),I=r.useRef(l()),v=L=>{L.preventDefault(),p(!0)},M=()=>{p(!1)},O=L=>{L.preventDefault(),p(!1);const g=L.dataTransfer.files[0];if(g){n("Plugins",`Installing package ${g.name}. Please wait...`);const s=new FormData;s.append("file",g),s.append("filename",g.name),fetch("./api/uploadpackage",{method:"POST",body:s}).then(u=>u.text()).then(u=>{n("Plugins",`Server response: ${u}`)}).catch(u=>{console.error("Error uploading plugin file:",u),n("Plugins",`Error installing package ${u}`)})}},E=L=>{const g=L.target.files&&L.target.files[0];if(g){n("Plugins",`Uploading package ${g.name}`);const s=new FormData;s.append("file",g),s.append("filename",g.name),fetch("./api/uploadpackage",{method:"POST",body:s}).then(u=>u.text()).then(u=>{n("Plugins",`Server response: ${u}`)}).catch(u=>{console.error("Error uploading plugin file:",u),n("Plugins",`Error uploading package ${u}`)})}},T=()=>{d({id:I.current,sender:"InstallPlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:i,restart:!1}})},U=()=>{document.getElementById("file-upload")?.click()},N=()=>{d({id:I.current,sender:"InstallPlugins",method:"/api/addplugin",src:"Frontend",dst:"Matterbridge",params:{pluginNameOrPath:i}})},c=L=>{L.preventDefault(),d({id:I.current,sender:"InstallPlugins",method:"/api/uninstall",src:"Frontend",dst:"Matterbridge",params:{packageName:i}})},f=L=>{L.preventDefault(),console.log("Right-clicked Upload button")},h=L=>{L.preventDefault(),console.log("Right-clicked Add button")},H=L=>{t(L.currentTarget)},D=L=>{L!==""&&a(L),t(null)},[C,q]=r.useState(!1);return o&&console.log("HomeInstallAddPlugins rendering..."),C?null:e.jsxs(Me,{children:[e.jsxs(Ye,{children:[e.jsx(Xe,{children:"Install plugins"}),e.jsx(nt,{onClose:()=>q(!0)})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"row",flex:"1 1 auto",alignItems:"center",justifyContent:"space-between",margin:"0px",padding:"10px",gap:"20px"},onDragOver:v,onDragLeave:M,onDrop:O,children:[e.jsx(me,{value:i,onChange:L=>{a(L.target.value)},size:"small",id:"plugin-name",label:"Plugin name or plugin path",variant:"outlined",fullWidth:!0}),e.jsx(Q,{onClick:H,children:e.jsx(Nr,{})}),e.jsxs(Je,{id:"simple-menu",anchorEl:j,keepMounted:!0,open:!!j,onClose:()=>D(""),children:[e.jsx(P,{onClick:()=>D("matterbridge-zigbee2mqtt"),children:"matterbridge-zigbee2mqtt"}),e.jsx(P,{onClick:()=>D("matterbridge-somfy-tahoma"),children:"matterbridge-somfy-tahoma"}),e.jsx(P,{onClick:()=>D("matterbridge-shelly"),children:"matterbridge-shelly"}),e.jsx(P,{onClick:()=>D("matterbridge-hass"),children:"matterbridge-hass"}),e.jsx(P,{onClick:()=>D("matterbridge-webhooks"),children:"matterbridge-webhooks"}),e.jsx(P,{onClick:()=>D("matterbridge-bthome"),children:"matterbridge-bthome"}),e.jsx(P,{onClick:()=>D("matterbridge-test"),children:"matterbridge-test"}),e.jsx(P,{onClick:()=>D("matterbridge-example-accessory-platform"),children:"matterbridge-example-accessory-platform"}),e.jsx(P,{onClick:()=>D("matterbridge-example-dynamic-platform"),children:"matterbridge-example-dynamic-platform"}),e.jsx(P,{onClick:()=>D("matterbridge-eve-door"),children:"matterbridge-eve-door"}),e.jsx(P,{onClick:()=>D("matterbridge-eve-motion"),children:"matterbridge-eve-motion"}),e.jsx(P,{onClick:()=>D("matterbridge-eve-energy"),children:"matterbridge-eve-energy"}),e.jsx(P,{onClick:()=>D("matterbridge-eve-weather"),children:"matterbridge-eve-weather"}),e.jsx(P,{onClick:()=>D("matterbridge-eve-room"),children:"matterbridge-eve-room"})]}),e.jsx(V,{title:"Install or update a plugin from npm",children:e.jsxs(ie,{onClick:T,onContextMenu:c,endIcon:e.jsx(ke,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Install"]})}),e.jsx(V,{title:"Upload and install a plugin from a tarball",children:e.jsxs(ie,{onClick:U,onContextMenu:f,endIcon:e.jsx(Lr,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Upload"]})}),e.jsx(V,{title:"Add an installed plugin",children:e.jsxs(ie,{onClick:N,onContextMenu:h,endIcon:e.jsx(vt,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px",minWidth:"90px"},children:[" ","Add"]})}),e.jsx("input",{id:"file-upload",type:"file",accept:".tgz",style:{display:"none"},onChange:E})]})]})}const cn=r.memo(dn);function Ue({status:n,enabledText:d="Enabled",disabledText:l=void 0,tooltipText:i=void 0,onClick:a}){if(n===void 0)return null;{const x=e.jsx("div",{className:n?"status-enabled":"status-disabled",style:{cursor:"default"},onClick:a,children:n?d:l??d});return i!==void 0?e.jsx(V,{title:i,children:x}):x}}function pn(n,d,l){const i=n?.[l],a=d?.[l];return i==null&&a==null?0:i==null?-1:a==null?1:typeof i=="boolean"&&typeof a=="boolean"?i===a?0:i?1:-1:typeof i=="number"&&typeof a=="number"?i-a:String(i).localeCompare(String(a))}function un({name:n,title:d,columns:l,rows:i,getRowKey:a,footerLeft:x,footerRight:p,onRowClick:j}){const t=r.useRef(new WeakMap),I=r.useRef(1),v=g=>{if(typeof a=="string"&&g&&g[a]!=null)return g[a];if(typeof a=="function"){const b=a(g);if(b!=null)return b}const s=l?.[0]?.id;if(s&&g&&g[s]!=null)return g[s];console.warn(`MbfTable(${n}): using fallback stable row key; consider providing getRowKey prop for better React performance`);let u=t.current.get(g);return u||(u=`rk_${I.current++}`,t.current.set(g,u)),u},[M,O]=r.useState(localStorage.getItem(`${n}_table_order_by`)||null),[E,T]=r.useState(localStorage.getItem(`${n}_table_order`)||null),[U,N]=r.useState(!1),[c,f]=r.useState(()=>{try{const g=localStorage.getItem(`${n}_column_visibility`);if(g)return JSON.parse(g)}catch{}return{}}),h=r.useMemo(()=>{const g={};for(const s of l)s.hidden||(g[s.id]=s.required?!0:c[s.id]!==!1);return g},[l,c]),H=r.useMemo(()=>{if(!M||!E)return i;const g=l.find(u=>u.id===M);if(!g||g.noSort)return i;const s=i.map((u,b)=>({el:u,index:b}));return s.sort((u,b)=>{let F;return typeof g.comparator=="function"?F=g.comparator(u.el,b.el):F=pn(u.el,b.el,M),F!==0?E==="asc"?F:-F:u.index-b.index}),s.map(u=>u.el)},[i,M,E,l]),D=g=>{if(M!==g||!M){O(g),T("asc"),localStorage.setItem(`${n}_table_order_by`,g),localStorage.setItem(`${n}_table_order`,"asc");return}if(E==="asc"){T("desc"),localStorage.setItem(`${n}_table_order`,"desc");return}O(null),T(null),localStorage.removeItem(`${n}_table_order_by`),localStorage.removeItem(`${n}_table_order`)},C=()=>{N(!U)},q=g=>{f(s=>{const u=l.find(ce=>ce.id===g);if(u&&u.required)return s;const b=h[g]!==!1,F={...s};b?F[g]=!1:delete F[g];try{localStorage.setItem(`${n}_column_visibility`,JSON.stringify(F))}catch{}return F})},L=()=>{f({});try{localStorage.removeItem(`${n}_column_visibility`)}catch{}N(!1)};return o&&console.log(`Rendering table ${n}${M&&E?` ordered by ${M}:${E}`:""}`),e.jsxs("div",{style:{display:"flex",flexDirection:"column",margin:"0",padding:"0",gap:"0",width:"100%",flex:"1 1 auto",height:"100%",minHeight:0,overflow:"hidden"},children:[e.jsxs(Le,{open:U,onClose:(g,s)=>{s==="backdropClick"||s==="escapeKeyDown"||C()},disableEscapeKeyDown:!0,disableRestoreFocus:!0,children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:`Configure ${n} columns`})]})}),e.jsx(We,{children:e.jsx($r,{children:l.filter(g=>!g.hidden).map(g=>e.jsx(Ve,{control:e.jsx(Ee,{disabled:!!g.required,checked:g.required?!0:h[g.id]!==!1,onChange:()=>q(g.id)}),label:g.label},g.id))})}),e.jsxs(Oe,{children:[e.jsx(ie,{onClick:L,children:"Reset"}),e.jsx(ie,{variant:"contained",onClick:g=>{if(g?.currentTarget&&typeof g.currentTarget.blur=="function")try{g.currentTarget.blur()}catch{}const s=document.activeElement;if(s&&s instanceof HTMLElement&&typeof s.blur=="function")try{s.blur()}catch{}C()},children:"Close"})]})]}),e.jsxs("div",{className:"MbfWindowHeader",style:{height:"30px",minHeight:"30px",justifyContent:"space-between",borderBottom:"none"},children:[e.jsx("p",{className:"MbfWindowHeaderText",children:n}),d&&e.jsx("p",{className:"MbfWindowHeaderText",children:d}),e.jsx("div",{className:"MbfWindowHeaderFooterIcons",children:e.jsx(Q,{onClick:g=>{if(g?.currentTarget?.blur)try{g.currentTarget.blur()}catch{}C()},"aria-label":"Configure Columns",style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},children:e.jsx(V,{title:`Configure ${n} columns`,children:e.jsx(oe,{path:jo,size:"20px",color:"var(--header-text-color)"})})})})]}),e.jsx("div",{style:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,width:"100%",overflow:"auto",margin:"0px",padding:"0px",gap:"0"},children:e.jsxs("table",{"aria-label":`${n} table`,style:{width:"100%",borderCollapse:"collapse"},children:[e.jsx("thead",{style:{position:"sticky",top:0,zIndex:10,border:"none",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color"},children:e.jsx("tr",{style:{height:"30px",minHeight:"30px"},children:l.map(g=>{if(g.hidden||!g.required&&h[g.id]===!1)return null;const s=!g.noSort,u=s&&M===g.id&&!!E;return e.jsxs("th",{onClick:s?()=>D(g.id):void 0,style:{margin:"0",padding:"5px 10px",position:"sticky",top:0,minWidth:g.minWidth,maxWidth:g.maxWidth,textAlign:g.align||"left",cursor:s?"pointer":"default",border:"none",color:"var(--header-text-color)",backgroundColor:"var(--header-bg-color)",whiteSpace:g.maxWidth?"nowrap":void 0,overflow:g.maxWidth?"hidden":void 0,textOverflow:g.maxWidth?"ellipsis":void 0},"aria-sort":s?u?E==="asc"?"ascending":"descending":"none":void 0,children:[g.label,u&&e.jsxs("span",{style:{marginLeft:6},children:[E==="asc"&&e.jsx(oe,{path:wo,size:"15px"}),E==="desc"&&e.jsx(oe,{path:Co,size:"15px"})]})]},g.id)})})}),e.jsx("tbody",{children:H.map((g,s)=>{const u=v(g);return e.jsx("tr",{className:s%2===0?"table-content-even":"table-content-odd",onClick:j?b=>j(g,u,b):void 0,style:{height:"30px",minHeight:"30px",border:"none",borderCollapse:"collapse",cursor:j?"pointer":void 0},children:l.map(b=>{if(b.hidden||!b.required&&h[b.id]===!1)return null;const F=g[b.id];return e.jsx("td",{style:{border:"none",borderCollapse:"collapse",textAlign:b.align||"left",padding:"5px 10px",margin:"0",maxWidth:b.maxWidth,whiteSpace:b.maxWidth?"nowrap":void 0,overflow:b.maxWidth?"hidden":void 0,textOverflow:b.maxWidth?"ellipsis":void 0},children:typeof b.render=="function"?b.render(F,u,g,b):typeof F=="boolean"?e.jsx(Ee,{checked:F,disabled:!0,size:"small",sx:{m:0,p:0,color:"var(--table-text-color)","&.Mui-disabled":{color:"var(--table-text-color)",opacity:.7}}}):b.format&&typeof F=="number"?b.format(F):F!=null?String(F):null},b.id)})},u)})})]})}),(x||p)&&e.jsxs("div",{className:"MbfWindowFooter",style:{height:"30px",minHeight:"30px",justifyContent:"space-between",border:"none"},children:[e.jsx("p",{className:"MbfWindowFooterText",style:{fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)"},children:x}),e.jsx("p",{className:"MbfWindowFooterText",style:{fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)"},children:p})]})]})}function gn(n){return r.memo(n)}const Ct=gn(un);function Kt(n){return n.id!==0&&n.src==="Matterbridge"&&n.dst==="Frontend"}const Be={fontSize:"16px",fontWeight:"bold",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},Qe={fontSize:"12px",fontWeight:"normal",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},mn={fontSize:"14px",fontWeight:"normal",color:"var(--secondary-color)",backgroundColor:"var(--div-bg-color)"},hn={fontSize:"16px",fontWeight:"bold",backgroundColor:"var(--div-bg-color)"},Fe={padding:"0px",margin:"0px"},fn="5px 10px 5px 10px",ht={},ve={},ft={},xt={};let Ge=[],It=[];const xn=({open:n,onClose:d,plugin:l})=>{const{sendMessage:i,addListener:a,removeListener:x,getUniqueId:p}=r.useContext(fe),j=r.useRef(p()),[t,I]=r.useState(l.configJson),[v,M]=r.useState(null),[O,E]=r.useState({"ui:submitButtonOptions":{submitText:"Confirm"},"ui:globalOptions":{orderable:!0}}),[T,U]=r.useState("");let N={};r.useEffect(()=>{const S=w=>{w.src==="Matterbridge"&&w.dst==="Frontend"&&(Kt(w)&&w.id===j.current&&w.method==="/api/select/devices"&&w.response&&(o&&console.log(`ConfigPluginDialog (id: ${w.id}) received ${w.response.length} /api/select/devices:`,w.response),Ge=w.response),Kt(w)&&w.id===j.current&&w.method==="/api/select/entities"&&w.response&&(o&&console.log(`ConfigPluginDialog (id: ${w.id}) received ${w.response.length} /api/select/entities:`,w.response),It=w.response))};return a(S,j.current),o&&console.log("ConfigPluginDialog added WebSocket listener id:",j.current),t&&v&&v.properties&&(Object.keys(v.properties).forEach(w=>{Object.keys(v.properties[w]).forEach(k=>{k.startsWith("ui:")&&(O[w]={},O[w][k]=v.properties[w][k],delete v.properties[w][k])})}),E(O)),l.name&&l.configJson&&l.schemaJson&&(I(l.configJson),M(l.schemaJson),i({id:j.current,sender:"ConfigPlugin",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name}}),i({id:j.current,sender:"ConfigPlugin",method:"/api/select/entities",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name}}),o&&console.log('HomePlugins sent "/api/select/devices" and "/api/select/entities" for plugin:',l.name)),()=>{x(S),o&&console.log("ConfigPluginDialog removed WebSocket listener")}},[a,t,l,x,v,i,O]);const c=(S,w)=>{N=S.formData},f=S=>{o&&console.log("ConfigPluginDialog handleSaveChanges:",S.formData),I(S.formData),l.configJson=S.formData,l.restartRequired=!0,i({id:j.current,sender:"ConfigPlugin",method:"/api/savepluginconfig",src:"Frontend",dst:"Matterbridge",params:{pluginName:S.formData.name,formData:S.formData}}),d()};function h(S){const{id:w,label:k,onKeyChange:_,onDropPropertyClick:K,disabled:pe,schema:le,children:de,registry:ge,readonly:A,required:G}=S,{templates:m}=ge,{RemoveButton:he}=m.ButtonTemplates;if(!(Jo in le))return e.jsx(X,{sx:{display:"flex",flexDirection:"column",flexGrow:1,padding:0,margin:0,border:"none"},children:de});const ae=({target:te})=>_(te&&te.value);return e.jsxs(X,{sx:{display:"flex",flexDirection:"row",flexGrow:1,padding:0,margin:0,border:"none"},children:[e.jsx(me,{id:`${w}-key`,name:`${w}-key`,required:G,disabled:pe||A,defaultValue:k,onBlur:A?void 0:ae,type:"text",variant:"outlined",sx:{width:"250px",minWidth:"250px",maxWidth:"250px",marginRight:"20px"}}),e.jsx(X,{sx:{flex:1},children:de}),e.jsx(he,{disabled:pe||A,onClick:K(k),registry:ge})]})}function H(S){const{children:w,description:k,displayLabel:_,errors:K,help:pe,hidden:le,registry:de,uiSchema:ge}=S,A=Go(ge),G=Ko("WrapIfAdditionalTemplate",de,A);return le?e.jsx("div",{style:{display:"none"},children:w}):e.jsx(X,{sx:{display:"flex",flexDirection:"column",flexGrow:1,padding:0,margin:0,border:"none"},children:e.jsxs(G,{...S,children:[_===!0&&k,w,K,pe]})})}function D(S){const{description:w}=S;return w?e.jsx(se,{sx:Qe,children:w}):null}function C(S){const{required:w,title:k}=S;return k?e.jsx(X,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:e.jsxs(se,{sx:Be,children:["Title ",k," ",w&&e.jsx("mark",{children:"***"})]})}):null}function q(S){const{help:w}=S;return w?e.jsx(X,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:e.jsx(se,{sx:mn,children:w})}):null}function L(S){const{errors:w}=S;return w?e.jsxs(X,{sx:{padding:"10px",margin:"10px",border:"1px solid grey"},children:[e.jsx(se,{color:"error",sx:hn,children:"Please fix the following errors:"}),e.jsx(tt,{children:w.map((k,_)=>e.jsxs(Wr,{children:[e.jsx(B,{children:e.jsx(Tr,{color:"error"})}),e.jsx(ee,{primary:k.stack})]},_))})]}):null}function g(S){const{errors:w}=S;return w?e.jsx(X,{sx:{padding:"0px",margin:"0px",marginTop:"5px"},children:w.map((k,_)=>e.jsxs(se,{color:"error",variant:"body2",sx:{marginLeft:1},children:["This field ",k]},_))}):null}function s(S){const{id:w,name:k,_schema:_,_uiSchema:K,value:pe,options:le,label:de,type:ge,placeholder:A,required:G,disabled:m,readonly:he,autofocus:ye,onChange:ae,onChangeOverride:te,onBlur:re,onFocus:Pe,_rawErrors:Ne,_hideError:et,_registry:y,_formContext:Y}=S,Ce=({target:{value:Se}})=>ae(Se===""?le.emptyValue:Se),Re=({target:Se})=>re(w,Se&&Se.value),it=({target:Se})=>Pe(w,Se&&Se.value);return e.jsx(X,{sx:{padding:"0px",margin:"0px"},children:e.jsx(me,{id:w,name:w,label:A&&A!==""?de:void 0,variant:"outlined",placeholder:A&&A!==""?A:de,required:G,disabled:m||he,autoFocus:ye,value:pe||pe===0?pe:"",type:ge,autoComplete:ge==="password"?"current-password":k,onChange:te||Ce,onBlur:Re,onFocus:it,fullWidth:!0})})}function u(S){return console.log("ArrayFieldTitleTemplate:",S),null}function b(S){return console.log("ArrayFieldDescriptionTemplate:",S),null}function F(S){return console.log("ArrayFieldItemTemplate:",S),null}function ce(S){const{canAdd:w,onAddClick:k,schema:_,title:K}=S,[pe,le]=r.useState(!1),[de,ge]=r.useState(!1),[A,G]=r.useState(!1),[m,he]=r.useState(""),ye=y=>{he(y.target.value)},ae=()=>{o&&console.log("ArrayFieldTemplate: handleDialogDeviceToggle filter:",m,"selectDevices:",Ge),le(!pe)},te=()=>{o&&console.log("ArrayFieldTemplate: handleDialogEntityToggle filter:",m,"selectEntities:",It),ge(!de)},re=()=>{o&&console.log("ArrayFieldTemplate: handleDialogDeviceEntityToggle filter:",m,"selectDevices:",Ge),G(!A)},Pe=y=>{le(!1),_.selectFrom==="serial"?_.items.default=y.serial:_.selectFrom==="name"&&(_.items.default=y.name),k()},Ne=y=>{ge(!1),_.selectEntityFrom==="name"?_.items.default=y.name:_.selectEntityFrom==="description"&&(_.items.default=y.description),k()},et=y=>{G(!1),_.selectDeviceEntityFrom==="name"?_.items.default=y.name:_.selectDeviceEntityFrom==="description"&&(_.items.default=y.description),k()};return e.jsxs(X,{sx:{margin:"0px",padding:"5px 10px 5px 10px",border:"1px solid grey"},children:[K&&e.jsxs(X,{sx:{margin:"0px",padding:"0px",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[K&&e.jsx(se,{sx:Be,children:K}),w&&e.jsxs(X,{sx:{margin:"0px",padding:"0px",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[_.selectFrom&&e.jsx(V,{title:"Add a device from the list",children:e.jsx(Q,{onClick:ae,size:"small",color:"primary",sx:Fe,children:e.jsx(at,{})})}),_.selectEntityFrom&&e.jsx(V,{title:"Add an entity from the list",children:e.jsx(Q,{onClick:te,size:"small",color:"primary",sx:Fe,children:e.jsx(at,{})})}),_.selectDeviceEntityFrom&&e.jsx(V,{title:"Add a device entity from the list",children:e.jsx(Q,{onClick:re,size:"small",color:"primary",sx:Fe,children:e.jsx(at,{})})}),e.jsx(V,{title:"Add a new item",children:e.jsx(Q,{onClick:k,size:"small",color:"primary",sx:Fe,children:e.jsx(vt,{})})})]})]}),_.description&&e.jsx(se,{sx:Qe,children:_.description}),S.items.map(y=>e.jsxs(X,{sx:{margin:"2px 0px",padding:"0px",display:"flex",alignItems:"center"},children:[e.jsx(X,{sx:{flexGrow:1,marginRight:"10px"},children:y.children}),e.jsx(Q,{disabled:!y.hasMoveUp,onClick:y.onReorderClick(y.index,y.index-1),size:"small",color:"primary",sx:Fe,children:e.jsx(Ot,{})}),e.jsx(Q,{disabled:!y.hasMoveDown,onClick:y.onReorderClick(y.index,y.index+1),size:"small",color:"primary",sx:Fe,children:e.jsx(Ht,{})}),e.jsx(Q,{onClick:y.onDropIndexClick(y.index),size:"small",color:"primary",sx:Fe,children:e.jsx(Lt,{})})]},y.index)),e.jsxs(Le,{open:pe,onClose:ae,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select a device"}),e.jsxs(We,{children:[e.jsxs(X,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:m,onChange:ye,placeholder:"Enter serial or name"})]}),e.jsx(tt,{dense:!0,children:Ge.filter(y=>y.serial.toLowerCase().includes(m.toLowerCase())||y.name.toLowerCase().includes(m.toLowerCase())).map((y,Y)=>e.jsxs(lt,{onClick:()=>Pe(y),sx:ht,children:[y.icon==="wifi"&&e.jsx(B,{children:e.jsx(ot,{style:ve})}),y.icon==="ble"&&e.jsx(B,{children:e.jsx(dt,{style:ve})}),y.icon==="hub"&&e.jsx(B,{children:e.jsx(ct,{style:ve})}),e.jsx(ee,{primary:y.name,secondary:y.serial,primaryTypographyProps:{style:ft},secondaryTypographyProps:{style:xt}})]},Y))})]}),e.jsx(Oe,{children:e.jsx(ie,{onClick:ae,children:"Close"})})]}),e.jsxs(Le,{open:de,onClose:te,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select an entity"}),e.jsxs(We,{children:[e.jsxs(X,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:m,onChange:ye,placeholder:"Enter name or description"})]}),e.jsx(tt,{dense:!0,children:It.filter(y=>y.name.toLowerCase().includes(m.toLowerCase())||y.description.toLowerCase().includes(m.toLowerCase())).map((y,Y)=>e.jsxs(lt,{onClick:()=>Ne(y),sx:ht,children:[y.icon==="wifi"&&e.jsx(B,{children:e.jsx(ot,{style:ve})}),y.icon==="ble"&&e.jsx(B,{children:e.jsx(dt,{style:ve})}),y.icon==="hub"&&e.jsx(B,{children:e.jsx(ct,{style:ve})}),y.icon==="component"&&e.jsx(B,{children:e.jsx(Vt,{style:ve})}),y.icon==="matter"&&e.jsx(B,{children:e.jsx(Et,{style:ve})}),e.jsx(ee,{primary:y.name,secondary:y.description,primaryTypographyProps:{style:ft},secondaryTypographyProps:{style:xt}})]},Y))})]}),e.jsx(Oe,{children:e.jsx(ie,{onClick:te,children:"Close"})})]}),e.jsxs(Le,{open:A,onClose:re,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsxs($e,{children:["Select an entity for ",K]}),e.jsx(We,{children:e.jsx(tt,{dense:!0,children:Ge.filter(y=>y.serial===K||y.name===K).map(y=>y.entities?.map((Y,Ce)=>e.jsxs(lt,{onClick:()=>et(Y),sx:ht,children:[Y.icon==="wifi"&&e.jsx(B,{children:e.jsx(ot,{style:ve})}),Y.icon==="ble"&&e.jsx(B,{children:e.jsx(dt,{style:ve})}),Y.icon==="hub"&&e.jsx(B,{children:e.jsx(ct,{style:ve})}),Y.icon==="component"&&e.jsx(B,{children:e.jsx(Vt,{style:ve})}),Y.icon==="matter"&&e.jsx(B,{children:e.jsx(Et,{style:ve})}),e.jsx(ee,{primary:Y.name,secondary:Y.description,primaryTypographyProps:{style:ft},secondaryTypographyProps:{style:xt}})]},Ce)))})}),e.jsx(Oe,{children:e.jsx(ie,{onClick:re,children:"Close"})})]})]})}function xe(S){const{onAddClick:w,schema:k,properties:_,title:K,description:pe}=S,[le,de]=r.useState(!1),[ge,A]=r.useState(""),G=te=>{A(te.target.value)},m=()=>{de(!le)},he=te=>{o&&console.log(`ObjectFieldTemplate: handleSelectValue value "${te.serial}" for schema "${k.selectFrom}"`),de(!1);let re="";k.selectFrom==="serial"?re=te.serial:k.selectFrom==="name"&&(re=te.name),U(re),o&&console.log(`ObjectFieldTemplate: handleSelectValue newkey "${re}"`),w(k)()},ye=()=>{w(k)()},ae=!k.additionalProperties;return o&&console.log(`ObjectFieldTemplate: isRoot ${ae} newkey "${T}"`),!ae&&T!==""&&(o&&console.log("ObjectFieldTemplate: newkey",T,"properties",_),_.forEach(te=>{if(te.name==="newKey"&&te.content.key==="newKey"&&te.content.props.name==="newKey"&&te.content.props.onKeyChange&&T!==""){o&&console.log("ObjectFieldTemplate: newkey onKeyChange",T);const re=T;U(""),te.content.props.onKeyChange(re)}})),e.jsxs(X,{sx:{margin:"0px",padding:ae?"10px":"5px 10px 0px 10px",border:ae?"none":"1px solid grey"},children:[k.title&&ae&&e.jsx(X,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px",marginBottom:"10px"},children:e.jsx(se,{sx:Be,children:k.title})}),K&&!ae&&e.jsxs(X,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px"},children:[e.jsx(se,{sx:Be,children:K}),e.jsxs(X,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0px",margin:"0px"},children:[k.selectFrom&&e.jsx(V,{title:"Add a device from the list",children:e.jsx(Q,{onClick:m,size:"small",color:"primary",sx:Fe,children:e.jsx(at,{})})}),e.jsx(V,{title:"Add a new item",children:e.jsx(Q,{onClick:ye,size:"small",color:"primary",sx:Fe,children:e.jsx(vt,{})})})]})]}),k.description&&e.jsx(X,{sx:{padding:"0px",margin:"0px",marginBottom:"10px"},children:e.jsx(se,{sx:Qe,children:k.description})}),_.map(({content:te,name:re,hidden:Pe})=>!Pe&&e.jsxs(X,{sx:{margin:"0px",marginBottom:"10px",padding:["object","array","boolean"].includes(k.properties[re].type)?"0px":fn,border:["object","array","boolean"].includes(k.properties[re].type)?"none":"1px solid grey"},children:[!["object","array","boolean"].includes(k.properties[re].type)&&e.jsx(se,{sx:Be,children:re}),e.jsx(X,{sx:{flexGrow:1,padding:"0px",margin:"0px"},children:te})]},re)),e.jsxs(Le,{open:le,onClose:m,PaperProps:{sx:{maxHeight:"50vh",maxWidth:"50vw",overflow:"auto"}},children:[e.jsx($e,{children:"Select a device"}),e.jsxs(We,{children:[e.jsxs(X,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[e.jsx(se,{variant:"subtitle1",sx:{whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{fullWidth:!0,variant:"outlined",value:ge,onChange:G,placeholder:"Enter serial or name"})]}),e.jsx(tt,{dense:!0,children:Ge.filter(te=>te.serial.toLowerCase().includes(ge.toLowerCase())||te.name.toLowerCase().includes(ge.toLowerCase())).map((te,re)=>e.jsxs(lt,{onClick:()=>he(te),sx:ht,children:[te.icon==="wifi"&&e.jsx(B,{children:e.jsx(ot,{style:ve})}),te.icon==="ble"&&e.jsx(B,{children:e.jsx(dt,{style:ve})}),te.icon==="hub"&&e.jsx(B,{children:e.jsx(ct,{style:ve})}),e.jsx(ee,{primary:te.name,secondary:te.serial,primaryTypographyProps:{style:ft},secondaryTypographyProps:{style:xt}})]},re))})]}),e.jsx(Oe,{children:e.jsx(ie,{onClick:m,children:"Close"})})]})]})}function ne(S){const{uiSchema:w}=S,{submitText:k,norender:_}=Qo(w);return _?null:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",margin:"10px",padding:"0px",gap:"20px"},children:[e.jsx(ie,{type:"submit",variant:"contained",color:"primary",children:k}),e.jsx(ie,{variant:"contained",color:"primary",onClick:d,children:"Cancel"})]})}function be(S){const{className:w,disabled:k,onClick:_,registry:K,style:pe,uiSchema:le,...de}=S;return e.jsx(V,{title:"Remove the item",children:e.jsx(Q,{disabled:k,size:"small",color:"primary",onClick:_,children:e.jsx(Lt,{})})})}function R(S){const{className:w,disabled:k,onClick:_,registry:K,uiSchema:pe,...le}=S;return e.jsx(V,{title:"Add an item",children:e.jsx(Q,{size:"small",color:"primary",onClick:_,children:e.jsx(vt,{})})})}function z(S){const{disabled:w,onClick:k,registry:_,style:K,uiSchema:pe,...le}=S;return e.jsx(V,{title:"Move up the item",children:e.jsx(Q,{size:"small",color:"primary",onClick:k,children:e.jsx(Ot,{})})})}function W(S){const{disabled:w,onClick:k,registry:_,style:K,uiSchema:pe,...le}=S;return e.jsx(V,{title:"Move down the item",children:e.jsx(Q,{size:"small",color:"primary",onClick:k,children:e.jsx(Ht,{})})})}function Z(S){const{id:w,name:k,value:_,schema:K,readonly:pe,onChange:le}=S,[de,ge]=r.useState(),A=m=>{o&&console.log(`CheckboxWidget ${k} onChangeField:`,m),ge(m&&m!==""?m:void 0)},G=()=>{o&&console.log(`CheckboxWidget onClick plugin="${l.name}" action="${k}" value="${de}"`),i({id:j.current,sender:"ConfigPlugin",method:"/api/action",src:"Frontend",dst:"Matterbridge",params:{plugin:l.name,action:k,value:de,formData:N,id:w}}),K.buttonClose===!0?d():K.buttonSave===!0&&f({formData:t})};return K.buttonText&&K.description?e.jsxs(X,{sx:{margin:"0px",padding:"10px",border:"1px solid grey",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx(se,{sx:Qe,children:K.description}),e.jsx(ie,{variant:"contained",color:"primary",onClick:()=>G(),children:K.buttonText})]}):K.buttonField&&K.description?e.jsxs(X,{sx:{margin:"0px",padding:"10px",gap:"20px",border:"1px solid grey",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx(se,{sx:Qe,children:K.description}),e.jsx(me,{id:k+"-input",name:k,label:K.textLabel,placeholder:K.textPlaceholder,onChange:m=>A(m.target.value),sx:{width:"250px",minWidth:"250px",maxWidth:"250px"}}),e.jsx(ie,{id:k+"-button",variant:"contained",color:"primary",disabled:de===void 0,onClick:()=>G(),children:K.buttonField})]}):e.jsxs(X,{sx:{margin:"0px",padding:"5px 10px",border:"1px solid grey"},children:[k&&e.jsxs(X,{sx:{margin:"0px",padding:"0px",gap:"10px",display:"flex",justifyContent:"flex-start",alignItems:"center"},children:[e.jsx(se,{sx:Be,children:k}),e.jsx(Ee,{checked:_,readOnly:pe,onChange:()=>le(!_),sx:{padding:"0px",margin:"0px"}})]}),K.description&&e.jsx(se,{sx:Qe,children:K.description})]})}function $({schema:S,id:w,name:k,options:_,label:K,hideLabel:pe,required:le,disabled:de,placeholder:ge,readonly:A,value:G,multiple:m,autofocus:he,onChange:ye,onBlur:ae,onFocus:te,errorSchema:re,rawErrors:Pe=[],registry:Ne,uiSchema:et,hideError:y,formContext:Y,...Ce}){const{enumOptions:Re,enumDisabled:it,emptyValue:Se}=_;m=typeof m>"u"?!1:!!m;const Wt=m?[]:"",Tt=typeof G>"u"||m&&G.length<1||!m&&G===Wt,cr=({target:{value:Te}})=>ye(Mt(Te,Re,Se)),pr=({target:Te})=>ae(w,Mt(Te&&Te.value,Re,Se)),ur=({target:Te})=>te(w,Mt(Te&&Te.value,Re,Se)),Ft=Uo(G,Re,m),{InputLabelProps:gr,SelectProps:mr,autocomplete:hr,...fr}=Ce,xr=!m&&S.default===void 0;return e.jsxs(me,{id:w,name:w,value:!Tt&&typeof Ft<"u"?Ft:Wt,required:le,disabled:de||A,autoFocus:he,autoComplete:hr,placeholder:ge,error:Pe.length>0,onChange:cr,onBlur:pr,onFocus:ur,...fr,select:!0,InputLabelProps:{...gr,shrink:!Tt},SelectProps:{...mr,multiple:m},"aria-describedby":Bo(w),children:[xr&&e.jsx(P,{value:"",children:ge}),Array.isArray(Re)&&Re.map(({value:Te,label:br},Rt)=>{const vr=Array.isArray(it)&&it.indexOf(Te)!==-1;return e.jsx(P,{value:String(Rt),disabled:vr,children:br},Rt)})]})}return o&&console.log("ConfigPluginDialog rendering..."),!n||!v||!t?null:e.jsxs(Le,{open:n,onClose:d,slotProps:{paper:{sx:{maxWidth:"800px"}}},children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h3",{children:"Matterbridge plugin configuration"})]})}),e.jsx(We,{style:{padding:"0px",margin:"0px",width:"800px",height:"600px",overflow:"auto"},children:e.jsx(zo,{schema:v,formData:t,uiSchema:O,validator:qo,templates:{FieldTemplate:H,BaseInputTemplate:s,TitleFieldTemplate:C,DescriptionFieldTemplate:D,FieldHelpTemplate:q,FieldErrorTemplate:g,ErrorListTemplate:L,WrapIfAdditionalTemplate:h,ArrayFieldTitleTemplate:u,ArrayFieldDescriptionTemplate:b,ArrayFieldItemTemplate:F,ArrayFieldTemplate:ce,ObjectFieldTemplate:xe,ButtonTemplates:{SubmitButton:ne,RemoveButton:be,AddButton:R,MoveUpButton:z,MoveDownButton:W}},widgets:{CheckboxWidget:Z,SelectWidget:$},onChange:c,onSubmit:f})})]})};function sr(n){if(o&&console.log(`getQRColor (id: ${n?.id}) received matter:`,n??"undefined"),n===void 0||!n.online||!n.qrPairingCode&&!n.manualPairingCode&&!n.fabricInformations&&!n.sessionInformations)return"red";if(n.commissioned===!1&&n.qrPairingCode&&n.manualPairingCode)return"var(--primary-color)";let d=0,l=0;for(const i of n.sessionInformations??[])i.fabric&&i.isPeerActive===!0&&d++,i.numberOfActiveSubscriptions>0&&(l+=i.numberOfActiveSubscriptions);return n.commissioned===!0&&n.fabricInformations&&n.sessionInformations&&(d===0||l===0)?"var(--secondary-color)":"var(--div-text-color)"}function bn({storeId:n,setStoreId:d}){const{online:l,sendMessage:i,addListener:a,removeListener:x,getUniqueId:p}=r.useContext(fe),{showConfirmCancelDialog:j}=r.useContext(_e),t=r.useRef(p()),[I,v]=r.useState(null),[M,O]=r.useState(null),[E,T]=r.useState([]),U=[{label:"Name",id:"name",required:!0,render:(W,Z,$,S)=>e.jsx(V,{title:`Plugin path ${$.path}`,children:e.jsx("span",{style:{cursor:"pointer"},onClick:()=>g($),children:$.name})})},{label:"Description",id:"description",render:(W,Z,$,S)=>e.jsx(V,{title:"Open the plugin homepage",children:e.jsx("span",{style:{cursor:"pointer"},onClick:()=>g($),children:$.description})})},{label:"Version",id:"version",render:(W,Z,$,S)=>e.jsx(e.Fragment,{children:e.jsx(V,{title:`Plugin v.${$.version}`,children:e.jsx("span",{children:$.version.split("-dev-")[0]+($.version.includes("-dev-")?"@dev":"")})})})},{label:"Author",id:"author",render:(W,Z,$,S)=>e.jsx(e.Fragment,{children:$.author?$.author.replace("https://github.com/",""):"Unknown"})},{label:"Type",id:"type",render:(W,Z,$,S)=>e.jsx(e.Fragment,{children:$.type?$.type.replace("Platform",""):"Unknown"})},{label:"Devices",id:"registeredDevices"},{label:"Actions",id:"actions",required:!0,noSort:!0,render:(W,Z,$,S)=>e.jsxs("div",{style:{margin:"0px",padding:"0px",gap:"4px",display:"flex",flexDirection:"row"},children:[M&&M.bridgeMode==="childbridge"&&!$.error&&$.enabled&&e.jsx(V,{title:"Shows the QRCode or the fabrics",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0",padding:"0",width:"19px",height:"19px",color:sr($.matter)},onClick:()=>{$.matter?.id&&d($.matter?.id)},size:"small",children:e.jsx(Yt,{})})}),M&&M.bridgeMode==="childbridge"&&!$.error&&$.enabled&&e.jsx(V,{title:"Restart the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0",padding:"0",width:"19px",height:"19px"},onClick:()=>q($),size:"small",children:e.jsx(yt,{})})}),e.jsx(V,{title:"Plugin config",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{disabled:$.restartRequired===!0,style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>be($),size:"small",children:e.jsx(Fr,{})})}),M&&!M.readOnly&&e.jsx(V,{title:"Remove the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>{c("Remove plugin","Are you sure? This will also remove all devices and configuration from the controller.","remove",$)},size:"small",children:e.jsx(Rr,{})})}),$.enabled?e.jsx(V,{title:"Disable the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>{c("Disable plugin","Are you sure? This will also remove all devices and configuration from the controller.","disable",$)},size:"small",children:e.jsx(Hr,{})})}):e.jsx(e.Fragment,{}),$.enabled?e.jsx(e.Fragment,{}):e.jsx(V,{title:"Enable the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0px",padding:"0px",width:"19px",height:"19px"},onClick:()=>L($),size:"small",children:e.jsx(Or,{})})}),e.jsx(V,{title:"Open the plugin help",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>u($),size:"small",children:e.jsx(Xt,{})})}),e.jsx(V,{title:"Open the plugin version history",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>b($),size:"small",children:e.jsx($t,{})})}),$.latestVersion!==void 0&&$.latestVersion!==$.version&&M&&!M.readOnly&&e.jsx(V,{title:"Update the plugin to the latest version",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{color:"var(--primary-color)",margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>H($),size:"small",children:e.jsx(Ie,{})})}),$.version.includes("-dev-")&&$.devVersion!==void 0&&$.devVersion!==$.version&&M&&!M.readOnly&&e.jsx(V,{title:"Update the plugin to the latest dev version",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{color:"var(--primary-color)",margin:"0px 2px",padding:"0px",width:"19px",height:"19px"},onClick:()=>D($),size:"small",children:e.jsx(Ie,{})})}),M&&!M.readOnly&&e.jsx(V,{title:"Sponsor the plugin",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{style:{margin:"0",padding:"0",width:"19px",height:"19px",color:"#b6409c"},onClick:()=>s($),size:"small",children:e.jsx(er,{})})})]})},{label:"Status",id:"status",required:!0,noSort:!0,render:(W,Z,$,S)=>e.jsx("div",{style:{display:"flex",flexDirection:"row",flex:"1 1 auto",margin:"0",padding:"0",gap:"5px",width:"auto",maxWidth:"max-content"},children:$.error?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:!1,enabledText:"Error",disabledText:"Error",tooltipText:"The plugin is in error state. Check the log!"})}):e.jsx(e.Fragment,{children:$.enabled===!1?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:$.enabled,enabledText:"Enabled",disabledText:"Disabled",tooltipText:"Whether the plugin is enable or disabled"})}):e.jsx(e.Fragment,{children:$.loaded&&$.started&&$.configured?e.jsx(e.Fragment,{children:e.jsx(Ue,{status:$.loaded,enabledText:"Running",tooltipText:"Whether the plugin is running"})}):e.jsxs(e.Fragment,{children:[e.jsx(Ue,{status:$.loaded,enabledText:"Loaded",tooltipText:"Whether the plugin has been loaded"}),e.jsx(Ue,{status:$.started,enabledText:"Started",tooltipText:"Whether the plugin started"}),e.jsx(Ue,{status:$.configured,enabledText:"Configured",tooltipText:"Whether the plugin has been configured"})]})})})})}];r.useEffect(()=>{const W=Z=>{o&&console.log("HomePlugins received WebSocket Message:",Z),Z.method==="refresh_required"&&Z.response.changed==="plugins"?(o&&console.log(`HomePlugins received refresh_required: changed=${Z.response.changed} and sending /api/plugins request`),i({id:t.current,sender:"HomePlugins",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})):Z.method==="refresh_required"&&Z.response.changed==="matter"?(o&&console.log(`HomePlugins received refresh_required: changed=${Z.response.changed} and setting matter id ${Z.response.matter?.id}`),T($=>{const S=$.findIndex(k=>k.matter?.id===Z.response.matter?.id);if(S<0)return o&&console.log(`HomePlugins received refresh_required: changed=${Z.response.changed} and matter id ${Z.response.matter?.id} not found`),$;o&&console.log(`HomePlugins received refresh_required: changed=${Z.response.changed} set matter id ${Z.response.matter?.id}`);const w=[...$];return w[S]={...w[S],matter:Z.response.matter},w})):Z.method==="refresh_required"&&Z.response.changed==="settings"&&(o&&console.log(`HomePlugins received refresh_required: changed=${Z.response.changed} and sending /api/settings request`),i({id:t.current,sender:"HomePlugins",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})),Z.id===t.current&&Z.method==="/api/settings"?(o&&console.log(`HomePlugins (id: ${Z.id}) received settings:`,Z.response),v(Z.response.systemInformation),O(Z.response.matterbridgeInformation)):Z.id===t.current&&Z.method==="/api/plugins"&&(o&&console.log(`HomePlugins (id: ${Z.id}) received ${Z.response.length} plugins:`,Z.response),T(Z.response))};return a(W,t.current),o&&console.log("HomePlugins added WebSocket listener id:",t.current),()=>{x(W),o&&console.log("HomePlugins removed WebSocket listener")}},[a,x,i]),r.useEffect(()=>{l&&(o&&console.log("HomePlugins sending api requests"),i({id:t.current,sender:"HomePlugins",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),i({id:t.current,sender:"HomePlugins",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[l,i]);const N=r.useRef(null),c=(W,Z,$,S)=>{o&&console.log(`handleActionWithConfirmCancel ${$} ${S.name}`),N.current=S,j(W,Z,$,f,h)},f=W=>{o&&console.log(`handleConfirm action confirmed ${W} ${N.current?.name}`),W==="remove"&&N.current?C(N.current):W==="disable"&&N.current&&L(N.current),N.current=null},h=W=>{o&&console.log(`handleCancel action canceled ${W} ${N.current?.name}`),N.current=null},H=W=>{o&&console.log("handleUpdatePlugin plugin:",W.name),i({id:t.current,sender:"HomePlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:W.name,restart:!1}})},D=W=>{o&&console.log("handleUpdateDevPlugin plugin:",W.name),i({id:t.current,sender:"HomePlugins",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:W.name+"@dev",restart:!1}})},C=W=>{o&&console.log("handleRemovePlugin plugin:",W.name),i({id:t.current,sender:"HomePlugins",method:"/api/removeplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:W.name}})},q=W=>{o&&console.log("handleRestartPlugin plugin:",W.name),i({id:t.current,sender:"HomePlugins",method:"/api/restartplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:W.name}})},L=W=>{o&&console.log("handleEnableDisablePlugin plugin:",W.name,"enabled:",W.enabled),W.enabled===!0?(W.enabled=!1,i({id:t.current,sender:"HomePlugins",method:"/api/disableplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:W.name}})):(W.enabled=!0,i({id:t.current,sender:"HomePlugins",method:"/api/enableplugin",src:"Frontend",dst:"Matterbridge",params:{pluginName:W.name}}))},g=W=>{o&&console.log(`handleHomepagePlugin plugin: ${W.name} homepage: ${W.homepage}`),W.homepage&&window.open(W.homepage,"_blank")},s=W=>{o&&console.log("handleSponsorPlugin plugin:",W.name,"funding:",W.funding),W.funding&&window.open(W.funding,"_blank")},u=W=>{o&&console.log("handleHelpPlugin plugin:",W.name,"help:",W.help),W.help&&window.open(W.help,"_blank")},b=W=>{o&&console.log("handleChangelogPlugin plugin:",W.name,"changelog:",W.changelog),W.changelog&&window.open(W.changelog,"_blank")},[F,ce]=r.useState(),[xe,ne]=r.useState(!1),be=W=>{o&&console.log("handleConfigPlugin plugin:",W.name),i({id:t.current,sender:"HomePlugins",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:W.name}}),i({id:t.current,sender:"HomePlugins",method:"/api/select/entities",src:"Frontend",dst:"Matterbridge",params:{plugin:W.name}}),ce(W),R()},R=()=>{ne(!0)},z=()=>{ne(!1)};return o&&console.log("HomePlugins rendering..."),l?e.jsxs("div",{className:"MbfWindowDiv",style:{margin:"0",padding:"0",gap:"0",width:"100%",flex:"0 0 auto",overflow:"hidden"},children:[F&&e.jsx(xn,{open:xe,onClose:z,plugin:F}),e.jsx(Ct,{name:"Plugins",columns:U,rows:E,footerRight:"",footerLeft:""})]}):e.jsx(De,{})}const vn=r.memo(bn),yn=n=>`${n.pluginName}::${n.serial}`;function jn({storeId:n,setStoreId:d}){const{online:l,sendMessage:i,addListener:a,removeListener:x,getUniqueId:p}=r.useContext(fe),[j,t]=r.useState(!1),[I,v]=r.useState(!0),[M,O]=r.useState(null),[E,T]=r.useState([]),[U,N]=r.useState([]),[c,f]=r.useState([]),[h,H]=r.useState([]),D=r.useRef(p()),C=[{label:"Plugin",id:"pluginName"},{label:"Name",id:"name",required:!0},{label:"Serial",id:"serial"},{label:"Availability",id:"availability",render:(g,s,u,b)=>u.reachable===!0?"Online":u.reachable===!1?e.jsx("span",{style:{color:"red"},children:"Offline"}):"",comparator:(g,s)=>{const u=g.reachable===!0?1:g.reachable===!1?0:-1,b=s.reachable===!0?1:s.reachable===!1?0:-1;return u-b}},{label:"Power",id:"powerSource",render:(g,s,u,b)=>u.powerSource==="ac"||u.powerSource==="dc"?e.jsx(tr,{fontSize:"small",sx:{color:"var(--primary-color)"}}):u.powerSource==="ok"?e.jsx(jt,{fontSize:"small",sx:{color:"green"}}):u.powerSource==="warning"?e.jsx(jt,{fontSize:"small",sx:{color:"yellow"}}):u.powerSource==="critical"?e.jsx(jt,{fontSize:"small",sx:{color:"red"}}):e.jsx("span",{})},{label:"Url",id:"configUrl"},{label:"Actions",id:"selected",required:!0,render:(g,s,u,b)=>e.jsxs("div",{style:{display:"flex",flexDirection:"row"},children:[u.matter!==void 0?e.jsx(V,{title:"Show the QRCode or the fabrics",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{onClick:()=>d(n===u.matter?.id?M?.matterbridgeInformation.bridgeMode==="bridge"?"Matterbridge":null:u.matter?.id||null),"aria-label":"Show the QRCode",sx:{margin:0,padding:0,color:sr(u.matter)},children:e.jsx(Yt,{fontSize:"small"})})}):e.jsx("div",{style:{width:"20px",height:"20px"}}),u.configUrl?e.jsx(V,{title:"Open the configuration page",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Q,{onClick:()=>window.open(u.configUrl,"_blank"),"aria-label":"Open config url",sx:{margin:0,padding:0},children:e.jsx(rr,{fontSize:"small"})})}):e.jsx("div",{style:{width:"20px",height:"20px"}}),u.selected!==void 0?e.jsx(V,{title:"Select/unselect the device",slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[30,15]}}]}},children:e.jsx(Ee,{checked:u.selected,onChange:F=>L(F,u),sx:{margin:"0",marginLeft:"8px",padding:"0"},size:"small"})}):e.jsx("div",{style:{width:"20px",height:"20px"}})]})}],q=r.useCallback(g=>{g.selected=void 0;const s=E.find(F=>F.name===g.pluginName);if(!s)return console.error(`HomeDevices isSelected: plugin ${g.pluginName} not found for device ${g.name} `),g.selected;const u=s.schemaJson?.properties?.whiteList?.selectFrom;let b=s.configJson.postfix;return b===""&&(b=void 0),s.hasWhiteList===!0&&s.hasBlackList===!0&&u&&(g.selected=!0,u==="serial"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&s.configJson.whiteList.includes(b?g.serial.replace("-"+b,""):g.serial)&&(g.selected=!0),u==="serial"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&!s.configJson.whiteList.includes(b?g.serial.replace("-"+b,""):g.serial)&&(g.selected=!1),u==="serial"&&s.configJson.blackList&&s.configJson.blackList.length>0&&s.configJson.blackList.includes(b?g.serial.replace("-"+b,""):g.serial)&&(g.selected=!1),u==="name"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&s.configJson.whiteList.includes(g.name)&&(g.selected=!0),u==="name"&&s.configJson.whiteList&&s.configJson.whiteList.length>0&&!s.configJson.whiteList.includes(g.name)&&(g.selected=!1),u==="name"&&s.configJson.blackList&&s.configJson.blackList.length>0&&s.configJson.blackList.includes(g.name)&&(g.selected=!1)),g.selected},[E]);r.useEffect(()=>{const g=s=>{if(o&&console.log("HomeDevices received WebSocket Message:",s),s.method==="refresh_required"&&s.response.changed!=="matter"?(o&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and sending /api/plugins request`),i({id:D.current,sender:"HomeDevices",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})):s.method==="refresh_required"&&s.response.changed==="matter"?(o&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and setting matter id ${s.response.matter?.id}`),H(u=>{const b=u.findIndex(ce=>ce.name.replaceAll(" ","")===s.response.matter?.id);if(b<0)return o&&console.debug(`HomeDevices: matter id ${s.response.matter?.id} not found`),u;const F=[...u];return F[b]={...F[b],matter:s.response.matter},o&&console.log(`HomeDevices received refresh_required: changed=${s.response.changed} and set matter id ${s.response.matter?.id}`),F})):s.method==="restart_required"?(o&&console.log("HomeDevices received restart_required"),t(!0)):s.method==="restart_not_required"?(o&&console.log("HomeDevices received restart_not_required"),t(!1)):s.method==="state_update"&&s.response.plugin&&s.response.serialNumber&&s.response.cluster.includes("BasicInformation")&&s.response.attribute==="reachable"&&(o&&console.log(`HomeDevices updating device reachability for plugin ${s.response.plugin} serial ${s.response.serialNumber} value ${s.response.value}`),N(u=>{const b=u.findIndex(F=>F.pluginName===s.response.plugin&&F.serial===s.response.serialNumber);return b<0?(o&&console.warn(`HomeDevices: device to update not found for plugin ${s.response.plugin} serial ${s.response.serialNumber}`),u):(u[b]={...u[b],reachable:s.response.value},[...u])})),s.id===D.current&&s.method==="/api/settings")o&&console.log(`HomeDevices (id: ${s.id}) received settings:`,s.response),O(s.response),t(s.response.matterbridgeInformation.restartRequired||s.response.matterbridgeInformation.fixedRestartRequired);else if(s.id===D.current&&s.method==="/api/plugins"){if(o&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} plugins:`,s.response),s.response){let u=!0;for(const b of s.response)b.enabled===!0&&(b.loaded!==!0||b.started!==!0||b.error===!0)&&(u=!1);if(!u)return;o&&console.log("HomeDevices reset plugins, devices and selectDevices"),v(!1),T(s.response),N([]),f([]),i({id:D.current,sender:"HomeDevices",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}}),o&&console.log("HomeDevices sent /api/devices");for(const b of s.response)b.enabled===!0&&b.loaded===!0&&b.started===!0&&b.error!==!0&&(i({id:D.current,sender:"HomeDevices",method:"/api/select/devices",src:"Frontend",dst:"Matterbridge",params:{plugin:b.name}}),o&&console.log(`HomeDevices sent /api/select/devices for plugin: ${b.name}`))}}else if(s.id===D.current&&s.method==="/api/devices"){if(o&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} devices:`,s.response),s.response){for(const u of s.response)u.selected=q(u);N(s.response)}}else s.id===D.current&&s.method==="/api/select/devices"&&(o&&console.log(`HomeDevices (id: ${s.id}) received ${s.response?.length} selectDevices for plugin ${s.response&&s.response.length>0?s.response[0].pluginName:"without select devices"}:`,s.response),s.response&&s.response.length>0&&f(u=>{const b=u.filter(ce=>ce.pluginName!==s.response[0].pluginName),F=s.response.map(ce=>({...ce,selected:q(ce)}));return[...b,...F]}))};return a(g,D.current),o&&console.log(`HomeDevices added WebSocket listener id ${D.current}`),()=>{x(g),o&&console.log("HomeDevices removed WebSocket listener")}},[E,a,x,i,q]),r.useEffect(()=>{if(U.length===0&&c.length===0){H([]);return}o&&console.log(`HomeDevices mixing devices (${U.length}) and selectDevices (${c.length})`);const g=[];for(const s of U)g.push(s);for(const s of c)U.find(u=>u.pluginName===s.pluginName&&u.serial.includes(s.serial))||g.push(s);g.length>0&&(H(g),o&&console.log(`HomeDevices mixed ${g.length} devices and selectDevices`))},[E,U,c,H]),r.useEffect(()=>{l&&(o&&console.log("HomeDevices sending /api/settings and /api/plugins requests"),i({id:D.current,sender:"HomeDevices",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),i({id:D.current,sender:"HomeDevices",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[l,i]);const L=(g,s)=>{o&&console.log(`handleCheckboxChange: checkbox changed to ${g.target.checked} for device ${s.name} serial ${s.serial}`),U.findIndex(u=>u.pluginName===s.pluginName&&u.serial===s.serial)<0?(o&&console.warn(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in devices, trying in mixedDevices`),H(u=>{const b=u.findIndex(F=>F.pluginName===s.pluginName&&F.serial===s.serial);return b<0?(console.error(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in mixedDevices`),u):(u[b]={...u[b],selected:g.target.checked},[...u])})):N(u=>{const b=u.findIndex(F=>F.pluginName===s.pluginName&&F.serial===s.serial);return b<0?(console.error(`handleCheckboxChange: device ${s.name} serial ${s.serial} not found in devices`),u):(u[b]={...u[b],selected:g.target.checked},[...u])}),g.target.checked?i({id:D.current,sender:"HomeDevices",method:"/api/command",src:"Frontend",dst:"Matterbridge",params:{command:"selectdevice",plugin:s.pluginName,serial:s.serial,name:s.name}}):i({id:D.current,sender:"HomeDevices",method:"/api/command",src:"Frontend",dst:"Matterbridge",params:{command:"unselectdevice",plugin:s.pluginName,serial:s.serial,name:s.name}})};return o&&console.log("HomeDevices rendering..."),l?e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0",padding:"0",gap:"0",width:"100%",flex:"1 1 auto",overflow:"hidden"},children:e.jsx(Ct,{name:"Devices",getRowKey:yn,rows:h,columns:C,footerLeft:I?"Waiting for the plugins to fully load...":`Registered devices: ${U.length.toString()}/${h.length.toString()}`,footerRight:j?"Restart required":""})}):e.jsx(De,{})}const wn=r.memo(jn);function St({children:n,style:d,name:l}){const{setCurrentPage:i}=r.useContext(_e);i(l),o&&console.log(`MbfPage: current page set to ${l}`);const a={display:"flex",flexDirection:"column",width:"100%",height:"100%",margin:"0px",padding:"0px",gap:"20px"};return e.jsx("div",{style:{...a,...d},children:n})}const Cn=()=>"ontouchstart"in window||typeof window.DocumentTouch<"u"&&document instanceof window.DocumentTouch?(o&&console.log("WebSocketLogs detectTouchscreen = true"),!0):(o&&console.log("WebSocketLogs detectTouchscreen = false"),!1);function Sn(){const{messages:n,autoScroll:d}=r.useContext(ir),[l,i]=r.useState(!1),a=r.useRef(null),x=r.useMemo(()=>Cn(),[]),p=v=>i(!0),j=v=>i(!1);r.useEffect(()=>{o&&console.log(`WebSocketLogs autoScroll: ${d} isHovering: ${l}`),d&&!l&&!x&&a.current?.scrollIntoView({behavior:"smooth"})},[n,l,d,x]);const t=v=>{switch(v.toLowerCase()){case"debug":return"gray";case"info":return"#267fb7";case"notice":return"green";case"warn":return"#e9db18";case"error":return"red";case"fatal":return"#ff0000";case"spawn":return"#ff00d0";default:return"#5c0e91"}},I=v=>{switch(v.toLowerCase()){case"warn":return"black";default:return"white"}};return e.jsx("div",{style:{margin:"0px",padding:"0px"},children:e.jsxs("ul",{style:{margin:"0px",padding:"0px"},onMouseEnter:p,onMouseLeave:j,children:[n.map((v,M)=>e.jsxs("li",{style:{wordWrap:"break-word",maxHeight:"200px",overflow:"hidden"},children:[e.jsx("span",{style:{marginRight:"5px",padding:"1px 5px",backgroundColor:t(v.level),color:I(v.level),fontSize:"12px",borderRadius:"3px",textAlign:"center"},children:v.level}),v.time&&e.jsx("span",{style:{marginRight:"3px",color:"#505050"},children:"["+v.time+"]"}),v.name&&e.jsx("span",{style:{marginRight:"3px",color:"#09516d"},children:"["+v.name+"]"}),e.jsx("span",{style:{color:"var(--main-log-color)"},children:v.message})]},M)),e.jsx("div",{ref:a})]})})}const ar=r.memo(Sn);function kn(){const{logFilterLevel:n,logFilterSearch:d,autoScroll:l,online:i}=r.useContext(fe);return o&&console.log("HomeLogs rendering..."),i?e.jsxs("div",{className:"MbfWindowDiv",style:{flex:"1 1 auto",width:"100%",overflow:"hidden"},children:[e.jsxs("div",{className:"MbfWindowHeader",style:{height:"30px",minHeight:"30px",justifyContent:"space-between"},children:[e.jsx("p",{className:"MbfWindowHeaderText",children:"Logs"}),e.jsx("div",{className:"MbfWindowHeaderText",style:{display:"flex",justifyContent:"space-between"},children:e.jsxs("span",{style:{fontWeight:"normal",fontSize:"12px",marginTop:"2px"},children:['Filter: logger level "',n,'" and search "',d,'" Scroll: ',l?"auto":"manual"]})})]}),e.jsx("div",{style:{flex:"1 1 auto",margin:"0px",padding:"10px",overflow:"auto"},children:e.jsx(ar,{})})]}):e.jsx(De,{})}const Mn=r.memo(kn);function In(){const{online:n}=r.useContext(fe);return o&&console.log("HomeBrowserRefresh rendering..."),n?e.jsxs(Me,{children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Frontend Update"})}),e.jsxs("div",{className:"MbfWindowBody",style:{flexDirection:"row",justifyContent:"space-between"},children:[e.jsx("h4",{style:{margin:0},children:"The frontend has been updated. You are viewing an outdated web UI. Please refresh the page now."}),e.jsx("div",{children:e.jsx(ie,{onClick:()=>window.location.reload(),endIcon:e.jsx(Vr,{}),style:{marginLeft:"10px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Refresh"})})]})]}):e.jsx(De,{})}const Dn=r.memo(In);function Pn({changelog:n}){const{online:d}=r.useContext(fe);return o&&console.log("HomeShowChangelog rendering..."),d?e.jsxs(Me,{children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge Update"})}),e.jsxs("div",{className:"MbfWindowBody",style:{flexDirection:"row",justifyContent:"space-between"},children:[e.jsx("h4",{style:{margin:0},children:"Matterbridge has been updated."}),e.jsxs("div",{children:[e.jsx(ie,{onClick:()=>window.open(n,"_blank"),endIcon:e.jsx($t,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Changelog"}),e.jsx(ie,{onClick:()=>window.location.reload(),endIcon:e.jsx(Er,{}),style:{marginLeft:"10px",color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Close"})]})]})]}):e.jsx(De,{})}const Nn=r.memo(Pn);function Ln(){const[n,d]=r.useState(null),[l,i]=r.useState(null),[a,x]=r.useState([]),[p]=r.useState(localStorage.getItem("homePagePlugins")!=="false"),[j,t]=r.useState(localStorage.getItem("homePageMode")??"devices"),[I,v]=r.useState(""),[M,O]=r.useState(!1),[E,T]=r.useState(!1),[U,N]=r.useState(null),{addListener:c,removeListener:f,online:h,sendMessage:H,getUniqueId:D}=r.useContext(fe),C=r.useRef(D());return r.useEffect(()=>{const q=L=>{o&&console.log("Home received WebSocket Message:",L),L.method==="refresh_required"&&L.response.changed==="settings"&&(o&&console.log(`Home received refresh_required: changed=${L.response.changed} and sending /api/settings request`),N(null),x([]),H({id:C.current,sender:"Home",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),H({id:C.current,sender:"Home",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}})),L.method==="/api/settings"&&L.id===C.current&&(o&&console.log("Home received settings:",L.response),d(L.response.systemInformation),i(L.response.matterbridgeInformation),L.response.matterbridgeInformation.matterbridgeVersion&&v(`https://github.com/Luligu/matterbridge/blob/${L.response.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?"dev":"main"}/CHANGELOG.md`),localStorage.getItem("frontendVersion")===null&&L.response.matterbridgeInformation.frontendVersion?localStorage.setItem("frontendVersion",L.response.matterbridgeInformation.frontendVersion):L.response.matterbridgeInformation.frontendVersion!==localStorage.getItem("frontendVersion")&&L.response.matterbridgeInformation.frontendVersion&&(localStorage.setItem("frontendVersion",L.response.matterbridgeInformation.frontendVersion),T(!0)),localStorage.getItem("matterbridgeVersion")===null?localStorage.setItem("matterbridgeVersion",L.response.matterbridgeInformation.matterbridgeVersion):L.response.matterbridgeInformation.matterbridgeVersion!==localStorage.getItem("matterbridgeVersion")&&(localStorage.setItem("matterbridgeVersion",L.response.matterbridgeInformation.matterbridgeVersion),O(!0)),L.response.matterbridgeInformation.shellyBoard&&(localStorage.getItem("homePageMode")||(localStorage.setItem("homePageMode","devices"),t("devices")))),L.method==="/api/plugins"&&L.id===C.current&&(o&&console.log("Home received plugins:",L.response),x(L.response))};return c(q,C.current),o&&console.log(`Home added WebSocket listener id ${C.current}`),()=>{f(q),o&&console.log("Home removed WebSocket listener")}},[c,f,H]),r.useEffect(()=>{if(o&&console.log(`Home storeId effect with storeId ${U}`),l?.bridgeMode==="bridge"&&!U&&(o&&console.log("Home storeId effect set storeId to Matterbridge"),N("Matterbridge")),l?.bridgeMode==="childbridge"&&!U&&a){for(const q of a)if(q.matter?.id){o&&console.log(`Home storeId effect set storeId to ${q.matter.id}`),N(q.matter.id);break}}},[l,a,U]),r.useEffect(()=>{h&&(o&&console.log("Home online effect, sending /api/settings and /api/plugins requests"),H({id:C.current,sender:"Home",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),H({id:C.current,sender:"Home",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}))},[h,H]),o&&console.log("Home rendering..."),!h||!n||!l?e.jsx(De,{}):e.jsxs(St,{name:"Home",style:{flexDirection:"row"},children:[e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"302px",minWidth:"302px",gap:"20px"},children:[e.jsx(ln,{id:U}),e.jsx(nn,{systemInfo:n,compact:!0})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"100%",gap:"20px"},children:[E&&e.jsx(Dn,{}),M&&e.jsx(Nn,{changelog:I}),p&&!l.readOnly&&e.jsx(cn,{}),p&&e.jsx(vn,{storeId:U,setStoreId:N}),j==="devices"&&e.jsx(wn,{storeId:U,setStoreId:N}),j==="logs"&&e.jsx(Mn,{})]})]})}const $n=r.memo(Ln),bt=!1,Jt={display:"flex",gap:"2px",justifyContent:"space-evenly",width:"100%",height:"40px"},Wn={margin:"0",padding:"0",fontSize:"36px",fontWeight:"medium",color:"var(--primary-color)"},Tn={margin:"0",padding:"0",fontSize:"20px",fontWeight:"medium",color:"var(--div-text-color)",textAlign:"center"},Zt={margin:"0",padding:"0",paddingBottom:"2px",fontSize:"16px",fontWeight:"medium",color:"var(--div-text-color)",textAlign:"center"},Fn={display:"flex",gap:"2px",justifyContent:"center",width:"100%",height:"18px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},Rn={margin:"0",padding:"0",fontSize:"12px",fontWeight:"normal",color:"var(--div-text-color)"},Hn={display:"flex",justifyContent:"center",width:"100%",height:"52px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},On={margin:"0",padding:"0",fontSize:"14px",fontWeight:"bold",color:"var(--div-text-color)"},Vn={display:"flex",gap:"4px",justifyContent:"center",width:"100%",height:"15px",margin:"0",padding:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal"},Dt={margin:"0",padding:"0px 4px",borderRadius:"5px",textAlign:"center",fontSize:"12px",fontWeight:"normal",color:"var(--secondary-color)"},En=[256,257,268,269],_n=[266,267],An=[259,260,261,271,272],zn=[256,257,268,269,266,267,259,260,261,272];function J({icon:n,iconColor:d,cluster:l,value:i,unit:a,prefix:x}){return o&&console.log(`Render cluster "${l.clusterName}.${l.attributeName}" value(${typeof i}-${isNaN(i)}) "${i}" unit "${a}"`),x=x??!1,e.jsxs(X,{sx:Jt,children:[n&&r.cloneElement(n,{key:`${l.clusterId}-${l.attributeId}-icon`,sx:{...Wn,color:d??"var(--primary-color)"}}),e.jsxs(X,{sx:{...Jt,gap:"4px",alignContent:"center",alignItems:"end",justifyContent:"center"},children:[a&&x===!0&&e.jsx(se,{sx:Zt,children:a},`${l.clusterId}-${l.attributeId}-unit`),e.jsx(se,{sx:Tn,children:i==null||typeof i=="number"&&isNaN(i)||i==="NaN"?"---":i},`${l.clusterId}-${l.attributeId}-value`),a&&x===!1&&e.jsx(se,{sx:Zt,children:a},`${l.clusterId}-${l.attributeId}-unit`)]},`${l.clusterId}-${l.attributeId}-valueunitbox`)]},`${l.clusterId}-${l.attributeId}-box`)}function qn({device:n,endpoint:d,id:l,deviceType:i,clusters:a}){const x=["Unknown","Good","Fair","Moderate","Poor","VeryPoor","Ext.Poor"];let p="";o&&console.log(`Device "${n.name}" endpoint "${d}" id "${l}" deviceType "0x${i.toString(16).padStart(4,"0")}" clusters (${a?.length})`);const j=a.find(t=>t.clusterName==="Descriptor"&&t.attributeName==="tagList")?.attributeLocalValue;if(j){let t="";j.map(I=>{I.label&&(t+=I.label+" ")}),p=t.trim()}if(i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="batVoltage").map(t=>p=`${t.attributeLocalValue} mV`),zn.includes(i)&&a.filter(t=>t.clusterName==="LevelControl"&&t.attributeName==="currentLevel").map(t=>p=`Level ${t.attributeValue}`),i===514&&a.filter(t=>t.clusterName==="WindowCovering"&&t.attributeName==="currentPositionLiftPercent100ths").map(t=>p=`Position ${t.attributeLocalValue/100}%`),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="occupiedHeatingSetpoint").map(t=>p=`Heat ${t.attributeLocalValue/100}°C `),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="occupiedCoolingSetpoint").map(t=>p=p+`Cool ${t.attributeLocalValue/100}°C`),i===118&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="coState").map(t=>p=`${t.attributeLocalValue===0?"No CO detected":"CO alarm!"}`),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="voltage").map(t=>p=`${t.attributeLocalValue/1e3} V, `),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="activeCurrent").map(t=>p=p+`${t.attributeLocalValue/1e3} A, `),i===1296&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="activePower").map(t=>p=p+`${t.attributeLocalValue/1e3} W`),i===39){const t=a.find(v=>v.clusterName==="ModeSelect"&&v.attributeName==="currentMode")?.attributeLocalValue;p=a.find(v=>v.clusterName==="ModeSelect"&&v.attributeName==="supportedModes")?.attributeLocalValue?.find(v=>v.mode===t)?.label||"Unknown"}if(i===116){const t=a.find(v=>v.clusterName==="RvcRunMode"&&v.attributeName==="currentMode")?.attributeLocalValue;p=a.find(v=>v.clusterName==="RvcRunMode"&&v.attributeName==="supportedModes")?.attributeLocalValue?.find(v=>v.mode===t)?.label||"Unknown"}return e.jsxs("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"5px",width:"150px",height:"150px",borderColor:"var(--div-bg-color)",borderRadius:"5px",justifyContent:"space-between"},children:[i===19&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(J,{icon:t.attributeLocalValue===!0?e.jsx(ot,{}):e.jsx(_r,{}),iconColor:t.attributeLocalValue===!0?"green":"red",cluster:t,value:t.attributeLocalValue===!0?"Online":"Offline"})),i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="batPercentRemaining").map(t=>e.jsx(J,{icon:e.jsx(jt,{}),cluster:t,value:t.attributeLocalValue/2,unit:"%"})),i===17&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="wiredCurrentType").map(t=>e.jsx(J,{icon:e.jsx(tr,{}),cluster:t,value:t.attributeLocalValue===0?"AC":"DC"})),i===1293&&a.filter(t=>t.clusterName==="DeviceEnergyManagement"&&t.attributeName==="esaState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:So,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Offline":"Online"})),En.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(J,{icon:e.jsx(Ar,{}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),_n.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:ko,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),An.includes(i)&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Mo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),i===115&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Io,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===124&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Do,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===117&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Po,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===123&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(J,{icon:e.jsx(_t,{}),cluster:t,value:"Oven"})),i===112&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(J,{icon:e.jsx(zr,{}),cluster:t,value:"Fridge"})),i===113&&a.filter(t=>t.clusterName==="TemperatureControl"&&t.attributeName==="selectedTemperatureLevel").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:No,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===121&&a.filter(t=>t.clusterName==="OperationalState"&&t.attributeName==="operationalState").map(t=>e.jsx(J,{icon:e.jsx(_t,{}),cluster:t,value:t.attributeLocalValue===0?"Normal":"Error"})),i===122&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="fanMode").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Lo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===120&&a.filter(t=>t.clusterName==="BridgedDeviceBasicInformation"&&t.attributeName==="reachable").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Bt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Cooktop"})),i===119&&a.filter(t=>t.clusterName==="TemperatureControl"&&t.attributeName==="selectedTemperatureLevel").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Bt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue,unit:"mode",prefix:!0})),i===514&&a.filter(t=>t.clusterName==="WindowCovering"&&t.attributeName==="currentPositionLiftPercent100ths").map(t=>e.jsx(J,{icon:e.jsx(qr,{}),cluster:t,value:t.attributeLocalValue/100,unit:"%"})),i===769&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="localTemperature").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:$o,size:"40px",color:"var(--primary-color)"}),cluster:t,value:(t.attributeLocalValue??0)/100,unit:"°C"})),i===10&&a.filter(t=>t.clusterName==="DoorLock"&&t.attributeName==="lockState").map(t=>e.jsx(J,{icon:t.attributeValue==="1"?e.jsx(Ur,{}):e.jsx(Br,{}),cluster:t,value:t.attributeValue==="1"?"Locked":"Unlocked"})),i===43&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="percentCurrent").map(t=>e.jsx(J,{icon:e.jsx(Qr,{}),cluster:t,value:t.attributeValue,unit:"%"})),i===15&&a.filter(t=>t.clusterName==="Switch"&&t.attributeName==="currentPosition").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Wo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeValue,unit:"pos",prefix:!0})),i===39&&a.filter(t=>t.clusterName==="ModeSelect"&&t.attributeName==="currentMode").map(t=>e.jsx(J,{icon:e.jsx(Gr,{}),cluster:t,value:t.attributeValue,unit:"Mode",prefix:!0})),i===771&&a.filter(t=>t.clusterName==="OnOff"&&t.attributeName==="onOff").map(t=>e.jsx(J,{icon:e.jsx(Kr,{}),cluster:t,value:t.attributeLocalValue===!0?"On":"Off"})),i===45&&a.filter(t=>t.clusterName==="FanControl"&&t.attributeName==="percentCurrent").map(t=>e.jsx(J,{icon:e.jsx(At,{}),cluster:t,value:t.attributeValue,unit:"%"})),i===114&&a.filter(t=>t.clusterName==="Thermostat"&&t.attributeName==="localTemperature").map(t=>e.jsx(J,{icon:e.jsx(At,{}),cluster:t,value:(t.attributeLocalValue??0)/100,unit:"°C"})),i===67&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(J,{icon:e.jsx(Jr,{}),cluster:t,value:t.attributeLocalValue===!0?"Leak":"No leak"})),i===65&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(J,{icon:e.jsx(Zr,{}),cluster:t,value:t.attributeLocalValue===!0?"Freeze":"No freeze"})),i===68&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(J,{icon:e.jsx(Yr,{}),cluster:t,value:t.attributeLocalValue===!0?"Rain":"No rain"})),i===116&&a.filter(t=>t.clusterName==="RvcRunMode"&&t.attributeName==="currentMode").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:To,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeValue,unit:"Run mode",prefix:!0})),i===1292&&a.filter(t=>t.clusterName==="EnergyEvse"&&t.attributeName==="state").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Fo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"Free":"In use"})),i===1295&&a.filter(t=>t.clusterName==="WaterHeaterManagement"&&t.attributeName==="tankPercentage").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Ro,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Tank "+(t.attributeLocalValue??0)+"%"})),i===777&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="featureMap").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Ho,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"HeatPump"})),i===23&&a.filter(t=>t.clusterName==="PowerSource"&&t.attributeName==="featureMap").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Oo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Solar"})),i===24&&a.filter(t=>t.clusterName==="ElectricalPowerMeasurement"&&t.attributeName==="featureMap").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Vo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:"Inverter"})),i===118&&a.find(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="featureMap"&&t.attributeLocalValue.smokeAlarm===!0)&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="smokeState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Qt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"No smoke":"Smoke!"})),i===118&&a.find(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="featureMap"&&t.attributeLocalValue.smokeAlarm===!1)&&a.filter(t=>t.clusterName==="SmokeCoAlarm"&&t.attributeName==="coState").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Qt,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue===0?"No Co":"Co!"})),i===66&&a.filter(t=>t.clusterName==="ValveConfigurationAndControl"&&t.attributeName==="currentState").map(t=>e.jsx(J,{icon:e.jsx(Xr,{}),cluster:t,value:t.attributeLocalValue===0?"Closed":"Opened"})),i===44&&a.filter(t=>t.clusterName==="AirQuality"&&t.attributeName==="airQuality").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:Eo,size:"40px",color:"var(--primary-color)"}),cluster:t,value:x[t.attributeLocalValue??0]})),i===770&&a.filter(t=>t.clusterName==="TemperatureMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(J,{icon:e.jsx(eo,{}),cluster:t,value:t.attributeLocalValue/100,unit:"°C"})),i===775&&a.filter(t=>t.clusterName==="RelativeHumidityMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(J,{icon:e.jsx(oe,{path:_o,size:"40px",color:"var(--primary-color)"}),cluster:t,value:t.attributeLocalValue/100,unit:"%"})),i===774&&a.filter(t=>t.clusterName==="FlowMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(J,{icon:e.jsx(to,{}),cluster:t,value:t.attributeLocalValue,unit:"l/h"})),i===773&&a.filter(t=>t.clusterName==="PressureMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(J,{icon:e.jsx(ro,{}),cluster:t,value:t.attributeLocalValue,unit:"hPa"})),i===21&&a.filter(t=>t.clusterName==="BooleanState"&&t.attributeName==="stateValue").map(t=>e.jsx(J,{icon:t.attributeValue==="true"?e.jsx(oo,{}):e.jsx(no,{}),cluster:t,value:t.attributeValue==="true"?"Closed":"Opened"})),i===263&&a.filter(t=>t.clusterName==="OccupancySensing"&&t.attributeName==="occupancy").map(t=>e.jsx(J,{icon:t.attributeValue==="{ occupied: true }"?e.jsx(io,{}):e.jsx(so,{}),cluster:t,value:t.attributeValue==="{ occupied: true }"?"Occupied":"Unocc."})),i===262&&a.filter(t=>t.clusterName==="IlluminanceMeasurement"&&t.attributeName==="measuredValue").map(t=>e.jsx(J,{icon:e.jsx(ao,{}),cluster:t,value:Math.round(Math.pow(10,t.attributeLocalValue/1e4)),unit:"lx"})),i===1296&&a.filter(t=>t.clusterName==="ElectricalEnergyMeasurement"&&t.attributeName==="cumulativeEnergyImported").map(t=>e.jsx(J,{icon:e.jsx(lo,{}),cluster:t,value:Math.round(t.attributeLocalValue?.energy/1e6),unit:"kwh"})),e.jsx(X,{sx:Fn,children:e.jsx(se,{sx:Rn,children:p})}),e.jsx(X,{sx:Hn,children:e.jsx(se,{sx:On,children:n.name})}),e.jsxs(X,{sx:Vn,children:[o&&e.jsx(se,{sx:Dt,children:d}),e.jsx(se,{sx:Dt,children:l}),o&&e.jsxs(se,{sx:Dt,children:["0x",i.toString(16).padStart(4,"0")]})]})]})}function Un({filter:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:x}=r.useContext(fe),[p,j]=r.useState([]),[t,I]=r.useState({}),[v,M]=r.useState({}),[O,E]=r.useState({}),T=r.useRef(x()),U=r.useCallback(f=>{(o||bt)&&console.log(`DevicesIcons received state_update "${f.response.cluster}.${f.response.attribute}" for "${f.response.id}:${f.response.number}": "${f.response.value}"`,f.response);const h=p.find(D=>D.pluginName===f.response.plugin&&D.serial===f.response.serialNumber);if(!h){(o||bt)&&console.warn(`DevicesIcons updater device of plugin "${f.response.plugin}" serial "${f.response.serialNumber}" number "${f.response.number}" id "${f.response.id}" not found in devices(${p.length})`);return}const H=O[h.serial]?.find(D=>D.endpoint===f.response.number.toString()&&D.clusterName===f.response.cluster&&D.attributeName===f.response.attribute);if(!H){(o||bt)&&console.warn(`DevicesIcons updater device "${h.name}" serial "${h.serial}" cluster "${f.response.cluster}" attribute "${f.response.attribute}" not found in clusters(${O[h.serial]?.length})`);return}H.attributeValue=String(f.response.value),H.attributeLocalValue=f.response.value,E({...O}),(o||bt)&&console.log(`DevicesIcons updated "${H.clusterName}.${H.attributeName}" for device "${h.name}" serial "${h.serial}" to "${H.attributeValue}"`)},[O,p]),N=r.useCallback(f=>{if(o&&console.log(`DevicesIcons received for device "${f.response.deviceName}" serial "${f.response.serialNumber}" deviceTypes (${f.response.deviceTypes.length}) "${f.response.deviceTypes.join(",")}" clusters (${f.response.clusters.length}):`,f.response),f.response.clusters.length===0)return;const h=f.response.serialNumber;t[h]=[],v[h]=f.response.deviceTypes,O[h]=[];for(const H of f.response.clusters)t[h].find(D=>D.endpoint===H.endpoint)||t[h].push({endpoint:H.endpoint,id:H.id,deviceTypes:H.deviceTypes}),!["FixedLabel","Identify","Groups","PowerTopology"].includes(H.clusterName)&&O[h].push(H);I({...t}),M({...v}),E({...O}),o&&console.log(`DevicesIcons endpoints for "${h}":`,t[h]),o&&console.log(`DevicesIcons deviceTypes for "${h}":`,v[h]),o&&console.log(`DevicesIcons clusters for "${h}":`,O[h])},[O,v,t]);r.useEffect(()=>{const f=h=>{if(o&&console.log("DevicesIcons received WebSocket Message:",h),h.method==="refresh_required")o&&console.log(`DevicesIcons received refresh_required: changed=${h.response.changed} and sending api requests`),l({id:T.current,sender:"DevicesIcons",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}});else if(h.method==="state_update"&&h.response)U(h);else if(h.method==="/api/devices"&&h.response){o&&console.log(`DevicesIcons received ${h.response.length} devices:`,h.response),j(h.response),I({}),M({}),E({});for(const H of h.response)o&&console.log("DevicesIcons sending /api/clusters"),l({id:T.current,sender:"DevicesIcons",method:"/api/clusters",src:"Frontend",dst:"Matterbridge",params:{plugin:H.pluginName,endpoint:H.endpoint||0}})}else h.method==="/api/clusters"&&h.response&&N(h)};return i(f,T.current),o&&console.log("DevicesIcons WebSocket effect mounted"),()=>{a(f),o&&console.log("DevicesIcons WebSocket effect unmounted")}},[p]),r.useEffect(()=>(o&&console.log("DevicesIcons useEffect online mounting"),d&&(o&&console.log("DevicesIcons useEffect online sending api requests"),l({id:T.current,sender:"DevicesIcons",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}})),o&&console.log("DevicesIcons useEffect online mounted"),()=>{o&&console.log("DevicesIcons useEffect online unmounted")}),[d,l]);const c=r.memo(qn);return o&&console.log("DevicesIcons rendering..."),e.jsx("div",{style:{display:"flex",flexWrap:"wrap",paddingBottom:"5px",gap:"20px",width:"100%",overflow:"auto"},children:p.filter(f=>f.name.toLowerCase().includes(n)||f.serial.toLowerCase().includes(n)).map(f=>t[f.serial]&&t[f.serial].map(h=>h.deviceTypes.map(H=>e.jsx(c,{device:f,endpoint:h.endpoint,id:h.id,deviceType:H,clusters:O[f.serial].filter(D=>D.endpoint===h.endpoint)},`${f.pluginName}-${f.uniqueId}-${h.endpoint}-${h.id}-${H.toString()}`))))})}const Bn=r.memo(Un),Qn=[{label:"Plugin name",id:"pluginName",required:!0},{label:"Device type",id:"type"},{label:"Endpoint",id:"endpoint",align:"right"},{label:"Name",id:"name",required:!0},{label:"Serial number",id:"serial"},{label:"Unique ID",id:"uniqueId"},{label:"Url",id:"configUrl"},{label:"Config",id:"configButton",noSort:!0,render:(n,d,l,i)=>l.configUrl?e.jsx(Q,{onClick:()=>window.open(l.configUrl,"_blank"),"aria-label":"Open Config",sx:{margin:0,padding:0},children:e.jsx(rr,{fontSize:"small"})}):null},{label:"Cluster",id:"cluster"}],Gn=[{label:"Endpoint",id:"endpoint",required:!0},{label:"Id",id:"id"},{label:"Device Types",id:"deviceTypes",render:(n,d,l,i)=>Array.isArray(n)?e.jsx(e.Fragment,{children:n.map(a=>`0x${a.toString(16).padStart(4,"0")}`).join(", ")}):e.jsx(e.Fragment,{children:n})},{label:"Cluster Name",id:"clusterName",required:!0},{label:"Cluster ID",id:"clusterId"},{label:"Attribute Name",id:"attributeName",required:!0},{label:"Attribute ID",id:"attributeId"},{label:"Attribute Value",id:"attributeValue",required:!0,render:(n,d,l,i)=>e.jsx(V,{title:String(n),componentsProps:{tooltip:{sx:{fontSize:"14px",fontWeight:"normal",color:"#ffffff",backgroundColor:"var(--primary-color)"}}},children:e.jsx("div",{style:{maxWidth:"500px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:String(n)})})}],Kn=n=>`${n.pluginName}::${n.uniqueId}`,Jn=n=>`${n.endpoint}::${n.clusterName}::${n.attributeName}`;function Zn({filter:n}){const{online:d,sendMessage:l,addListener:i,removeListener:a,getUniqueId:x}=r.useContext(fe),[p,j]=r.useState([]),[t,I]=r.useState(p),[v,M]=r.useState([]),[O,E]=r.useState(0),[T,U]=r.useState(null),[N,c]=r.useState(null),[f,h]=r.useState(null),[H,D]=r.useState(null),C=r.useRef(x()),q=r.useRef(t),L=r.useCallback(s=>{o&&console.log(`DevicesTable received state_update "${s.response.cluster}.${s.response.attribute}" for "${s.response.id}:${s.response.number}": "${s.response.value}"`,s.response);const u=q.current.find(b=>b.pluginName===s.response.plugin&&b.uniqueId===s.response.uniqueId);if(!u){o&&console.warn(`DevicesTable updater device of plugin "${s.response.plugin}" serial "${s.response.serialNumber}" not found in filteredDevicesRef.current`);return}if(T&&N&&u.pluginName===T&&u.uniqueId===H&&s.response.number.toString()===N){const b=v.find(F=>F.endpoint===s.response.number.toString()&&F.clusterName===s.response.cluster&&F.attributeName===s.response.attribute);if(!b){o&&console.warn(`DevicesTable updater cluster ${s.response.cluster}.${s.response.attribute} for device "${u.name}" serial "${u.serial}" not found in clusters`);return}b.attributeValue=typeof s.response.value=="object"?JSON.stringify(s.response.value,void 0,1).replaceAll('"',""):String(s.response.value),b.attributeLocalValue=s.response.value,M([...v]),o&&console.log(`DevicesTable updated attribute ${b.clusterName}.${b.attributeName} for device "${u.name}" serial "${u.serial}" to "${b.attributeValue}"`)}},[v,N,T,H]);r.useEffect(()=>{const s=u=>{if(o&&console.log("DevicesTable received WebSocket Message:",u),u.method==="refresh_required"&&u.response.changed==="devices")o&&console.log(`DevicesTable received refresh_required: changed=${u.response.changed} and sending /api/devices request`),l({id:C.current,sender:"DevicesTable",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}});else if(u.method==="state_update"&&u.response)L(u);else if(u.method==="/api/devices")o&&console.log(`DevicesTable received ${u.response.length} devices:`,u.response),j(u.response);else if(u.method==="/api/clusters"){o&&console.log(`DevicesTable received ${u.response.clusters.length} clusters for plugin ${u.response.plugin}:`,u.response),M(u.response.clusters);const b={};for(const F of u.response.clusters)o&&console.log("Cluster:",F.endpoint),b[F.endpoint]?b[F.endpoint]++:b[F.endpoint]=1;E(Object.keys(b).length)}};return i(s,C.current),o&&console.log("DevicesTable added WebSocket listener"),()=>{a(s),o&&console.log("DevicesTable removed WebSocket listener")}},[l,i,a,L]),r.useEffect(()=>{d&&(o&&console.log("DevicesTable sending api requests with id ",C.current),l({id:C.current,sender:"DevicesTable",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),l({id:C.current,sender:"DevicesTable",method:"/api/plugins",src:"Frontend",dst:"Matterbridge",params:{}}),l({id:C.current,sender:"DevicesTable",method:"/api/devices",src:"Frontend",dst:"Matterbridge",params:{}}))},[d,l]),r.useEffect(()=>{T&&N&&(o&&console.log("DevicesTable sending /api/clusters"),l({id:C.current,sender:"DevicesTable",method:"/api/clusters",src:"Frontend",dst:"Matterbridge",params:{plugin:T,endpoint:Number(N)}}))},[T,N,l]),r.useEffect(()=>{if(n===""){I(p),q.current=p;return}const s=p.filter(u=>u.name.toLowerCase().includes(n)||u.serial.toLowerCase().includes(n));I(s),q.current=s},[p,n]);const g=s=>{if(s.uniqueId===H){D(null),U(null),c(null),h(null);return}D(s.uniqueId),U(s.pluginName),c(s.endpoint?s.endpoint.toString():null),h(s.name)};return o&&console.log("DevicesTable rendering..."),d?e.jsxs("div",{style:{display:"flex",flexDirection:"column",margin:"0px",padding:"0px",gap:"20px",width:"100%",overflow:"hidden"},children:[e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"0px",gap:"0px",width:"100%",maxHeight:`${T&&N?"30%":"100%"}`,flex:"1 1 auto",overflow:"hidden"},children:e.jsx(Ct,{name:"Registered devices",getRowKey:Kn,onRowClick:g,rows:t,columns:Qn,footerLeft:`Total devices: ${t.length.toString()}`})}),T&&N&&e.jsx("div",{className:"MbfWindowDiv",style:{margin:"0px",padding:"0px",gap:"0px",width:"100%",height:"70%",maxHeight:"70%",flex:"1 1 auto",overflow:"hidden"},children:e.jsx(Ct,{name:"Clusters",title:f||"",getRowKey:Jn,rows:v,columns:Gn,footerLeft:`Total child endpoints: ${O-1}`})})]}):e.jsx(De,{})}const Yn=r.memo(Zn);function Xn(){const{online:n}=r.useContext(fe),[d,l]=r.useState(""),[i,a]=r.useState("icon");r.useEffect(()=>{const j=localStorage.getItem("devicesFilter");j&&l(j)},[]),r.useEffect(()=>{const j=localStorage.getItem("devicesViewMode");j&&a(j)},[]);const x=j=>{l(j.target.value.toLowerCase()),localStorage.setItem("devicesFilter",j.target.value.toLowerCase())},p=j=>{a(j),localStorage.setItem("devicesViewMode",j)};return o&&console.log("Devices rendering..."),n?e.jsxs(St,{name:"Devices",children:[e.jsxs("div",{className:"MbfWindowBodyRow",style:{justifyContent:"space-between",padding:0,gap:"20px",width:"100%",height:"45px",minHeight:"45px",maxHeight:"45px"},children:[e.jsxs(X,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px"},children:[e.jsx(se,{sx:{fontSize:"16px",fontWeight:"normal",color:"var(--div-text-color)",marginLeft:"5px",whiteSpace:"nowrap"},children:"Filter by:"}),e.jsx(me,{variant:"outlined",value:d,onChange:x,placeholder:"Enter the device name or serial number",sx:{width:"320px"},InputProps:{style:{backgroundColor:"var(--main-bg-color)"}}})]}),e.jsxs(X,{sx:{display:"flex",flexDirection:"row",alignItems:"center",gap:"10px"},children:[e.jsx(se,{sx:{fontSize:"16px",fontWeight:"normal",color:"var(--div-text-color)",marginLeft:"5px",whiteSpace:"nowrap"},children:"View mode:"}),e.jsx(Q,{onClick:()=>p("table"),"aria-label":"Table View",disabled:i==="table",children:e.jsx(V,{title:"Table View",children:e.jsx(co,{style:{color:i==="table"?"var(--main-icon-color)":"var(--primary-color)"}})})}),e.jsx(Q,{onClick:()=>p("icon"),"aria-label":"Icon View",disabled:i==="icon",children:e.jsx(V,{title:"Icon View (beta)",children:e.jsx(po,{style:{color:i==="icon"?"var(--main-icon-color)":"var(--primary-color)"}})})})]})]}),i==="table"&&e.jsx(Yn,{filter:d}),i==="icon"&&e.jsx(Bn,{filter:d})]}):e.jsx(De,{})}const ei=r.memo(Xn);function ti(){const[n,d]=r.useState(localStorage.getItem("logFilterLevel")??"info"),[l,i]=r.useState(localStorage.getItem("logFilterSearch")??"*"),[a,x]=r.useState(localStorage.getItem("logAutoScroll")!=="false"),{setMessages:p,setLogFilters:j,online:t,setAutoScroll:I}=r.useContext(fe),v=T=>{d(T.target.value),j(T.target.value,l),localStorage.setItem("logFilterLevel",T.target.value),o&&console.log("handleChangeLevel called with value:",T.target.value)},M=T=>{i(T.target.value),j(n,T.target.value),localStorage.setItem("logFilterSearch",T.target.value),o&&console.log("handleChangeSearch called with value:",T.target.value)},O=T=>{x(T.target.checked),I(T.target.checked),localStorage.setItem("logAutoScroll",T.target.value?"true":"false"),o&&console.log("handleAutoScrollChange called with value:",T.target.checked)},E=()=>{o&&console.log("handleClearLogsClick called"),p([])};return o&&console.log("Logs rendering..."),t?e.jsxs(St,{name:"Logs",children:[e.jsxs("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",margin:"0px",padding:"0px",gap:"10px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(zt,{id:"select-level",style:{color:"var(--div-text-color)"},children:"Filter log by level:"}),e.jsxs(Ze,{style:{height:"30px",backgroundColor:"var(--main-bg-color)"},labelId:"select-level",id:"debug-level",value:n,onChange:v,children:[e.jsx(P,{value:"debug",children:"Debug"}),e.jsx(P,{value:"info",children:"Info"}),e.jsx(P,{value:"notice",children:"Notice"}),e.jsx(P,{value:"warn",children:"Warn"}),e.jsx(P,{value:"error",children:"Error"}),e.jsx(P,{value:"fatal",children:"Fatal"})]}),e.jsx(zt,{id:"search",style:{color:"var(--div-text-color)"},children:"Filter log by text:"}),e.jsx(me,{style:{width:"300px"},size:"small",id:"logsearch",variant:"outlined",value:l,onChange:M,InputProps:{style:{height:"30px",padding:"0 0px",backgroundColor:"var(--main-bg-color)"}}}),e.jsx(Ve,{control:e.jsx(Ee,{checked:a,onChange:O}),label:"Auto scroll",style:{color:"var(--div-text-color)"}})]}),e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:e.jsx(V,{title:"Clear the logs",children:e.jsx(ie,{onClick:E,endIcon:e.jsx(Lt,{}),style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",height:"30px"},children:"Clear"})})})]}),e.jsx("div",{style:{flex:"1",overflow:"auto",margin:"0px",padding:"0px"},children:e.jsx(ar,{})})]}):e.jsx(De,{})}const ri=r.memo(ti),oi=({open:n,ip:d,onClose:l,onSave:i})=>{const a=d?d.split(".").slice(0,3).join(".")+".1":"",[x,p]=r.useState("dhcp"),[j,t]=r.useState({ip:d??"",subnet:"255.255.255.0",gateway:a,dns:a}),I=O=>E=>{t({...j,[O]:E.target.value})},v=()=>{l()},M=()=>{i({type:x,...j}),l()};return e.jsxs(Le,{open:n,onClose:(O,E)=>{E==="backdropClick"||E==="escapeKeyDown"||l()},maxWidth:"sm",style:{maxWidth:"550px",margin:"auto"},children:[e.jsx($e,{gap:"20px",children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:"Network Configuration"})]})}),e.jsxs(We,{dividers:!0,children:[e.jsxs(or,{component:"fieldset",fullWidth:!0,children:[e.jsx(je,{component:"legend",children:"Select IP Configuration"}),e.jsxs(nr,{row:!0,value:x,onChange:O=>p(O.target.value),children:[e.jsx(Ve,{value:"dhcp",control:e.jsx(wt,{}),label:"DHCP"}),e.jsx(Ve,{value:"static",control:e.jsx(wt,{}),label:"Static"})]})]}),x==="static"&&e.jsxs(He,{container:!0,spacing:2,sx:{mt:2},children:[e.jsx(He,{size:6,children:e.jsx(me,{label:"IP Address",fullWidth:!0,value:j.ip,onChange:I("ip")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"Subnet Mask",fullWidth:!0,value:j.subnet,onChange:I("subnet")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"Gateway",fullWidth:!0,value:j.gateway,onChange:I("gateway")})}),e.jsx(He,{size:6,children:e.jsx(me,{label:"DNS Server",fullWidth:!0,value:j.dns,onChange:I("dns")})})]})]}),e.jsxs(Oe,{children:[e.jsx(ie,{onClick:v,children:"Cancel"}),e.jsx(ie,{variant:"contained",onClick:M,children:"Save"})]})]})},ni=({open:n,onClose:d,onSave:l})=>{const[i,a]=r.useState(""),[x,p]=r.useState(""),j=E=>{a(E.target.value)},t=E=>{p(E.target.value)},I=i.length>0&&i===x,v=()=>{d()},M=()=>{I&&(l(i),d())},O=()=>{l(""),d()};return e.jsxs(Le,{open:n,onClose:(E,T)=>{T==="backdropClick"||T==="escapeKeyDown"||d()},maxWidth:"sm",style:{maxWidth:"500px",margin:"auto"},disableEscapeKeyDown:!0,children:[e.jsx($e,{children:e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"32px",width:"32px"}}),e.jsx("h4",{style:{margin:0},children:"Change Password"})]})}),e.jsx(We,{dividers:!0,children:e.jsx(or,{component:"fieldset",fullWidth:!0,sx:{margin:0,padding:0,gap:"20px"},children:e.jsxs(He,{container:!0,spacing:2,sx:{mt:2},children:[e.jsx(He,{size:12,children:e.jsx(me,{type:"password",autoComplete:"new-password",label:"New Password",size:"small",variant:"outlined",fullWidth:!0,value:i,onChange:j})}),e.jsx(He,{size:12,children:e.jsx(me,{type:"password",autoComplete:"new-password",label:"Confirm Password",size:"small",variant:"outlined",fullWidth:!0,value:x,onChange:t,error:x!==""&&i!==x,helperText:x!==""&&i!==x?"Passwords do not match":""})})]})})}),e.jsxs(Oe,{children:[e.jsx(ie,{onClick:v,children:"Cancel"}),e.jsx(ie,{variant:"contained",onClick:M,disabled:!I,children:"Change"}),e.jsx(ie,{variant:"contained",onClick:O,children:"Reset"})]})]})};function Ke(n=1e3){let d=null;const l=(i=>{d!==null&&window.clearTimeout(d),d=window.setTimeout(()=>{i(),d=null},n)});return l.cancel=()=>{d!==null&&(window.clearTimeout(d),d=null)},l}const ue=500;function ii(){const{online:n,addListener:d,removeListener:l,sendMessage:i,getUniqueId:a}=r.useContext(fe),[x,p]=r.useState(null),[j,t]=r.useState(null),I=r.useRef(a());return r.useEffect(()=>{const v=M=>{o&&console.log("Settings received WebSocket Message:",M),M.method==="refresh_required"&&M.response.changed==="settings"?(o&&console.log(`Settings received refresh_required: changed=${M.response.changed} and sending /api/settings request`),i({id:I.current,sender:"Settings",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):M.method==="/api/settings"&&(o&&console.log("Settings received /api/settings:",M.response),p(M.response.matterbridgeInformation),t(M.response.systemInformation))};return d(v,I.current),o&&console.log("Settings added WebSocket listener"),()=>{l(v),o&&console.log("Settings removed WebSocket listener")}},[d,l,i]),r.useEffect(()=>{n&&(o&&console.log("Settings received online"),i({id:I.current,sender:"Settings",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}))},[n,i]),o&&console.log("Settings rendering..."),!n||!x||!j?e.jsx(De,{}):e.jsx(St,{name:"Settings",children:e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"20px",width:"100%"},children:[e.jsx(si,{matterbridgeInfo:x,systemInfo:j}),e.jsx(ai,{matterbridgeInfo:x}),e.jsx(li,{matterbridgeInfo:x}),e.jsx(di,{systemInfo:j})]})})}function si({matterbridgeInfo:n,systemInfo:d}){const{sendMessage:l,getUniqueId:i}=r.useContext(fe),[a,x]=r.useState("bridge"),[p,j]=r.useState("Info"),[t,I]=r.useState(!1),[v,M]=r.useState("dark"),[O,E]=r.useState(localStorage.getItem("homePagePlugins")!=="false"),[T,U]=r.useState(localStorage.getItem("homePageMode")??"devices"),[N,c]=r.useState(localStorage.getItem("virtualMode")??"outlet"),f=r.useRef(i()),[h,H]=r.useState(!1),D=()=>H(!1),C=R=>{o&&console.log("handleSaveNetConfig called with config:",R),l({id:f.current,sender:"Settings",method:"/api/shellynetconfig",src:"Frontend",dst:"Matterbridge",params:R})},[q,L]=r.useState(!1),g=()=>L(!1),s=R=>{o&&console.log("handleSaveChangePassword called with password:",R),l({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setpassword",value:R}})};r.useEffect(()=>{n&&(x(n.bridgeMode==="bridge"?"bridge":"childbridge"),j(n.loggerLevel.charAt(0).toUpperCase()+n.loggerLevel.slice(1)),I(n.fileLogger),c(n.virtualMode))},[n]),r.useEffect(()=>{const R=localStorage.getItem("frontendTheme");R&&M(R)},[]);const u=R=>{o&&console.log("handleChangeBridgeMode called with value:",R.target.value),x(R.target.value),l({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setbridgemode",value:R.target.value}})},b=R=>{o&&console.log("handleChangeMbLoggerLevel called with value:",R.target.value),j(R.target.value),l({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmbloglevel",value:R.target.value}})},F=R=>{o&&console.log("handleLogOnFileMbChange called with value:",R.target.checked),I(R.target.checked),l({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmblogfile",value:R.target.checked}})},ce=R=>{const z=R.target.value;o&&console.log("handleChangeTheme called with value:",z),M(z),localStorage.setItem("frontendTheme",z),document.body.setAttribute("frontend-theme",z)},xe=R=>{const z=R.target.checked;o&&console.log("handleChangeHomePagePlugins called with value:",z),E(z),localStorage.setItem("homePagePlugins",z?"true":"false")},ne=R=>{const z=R.target.value;o&&console.log("handleChangeHomePageMode called with value:",z),U(z),localStorage.setItem("homePageMode",z)},be=R=>{const z=R.target.value;o&&console.log("handleChangeVirtualMode called with value:",z),c(z),localStorage.setItem("virtualMode",z),l({id:f.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setvirtualmode",value:z}})};return!n||!d?null:e.jsxs(Me,{style:{width:`${ue}px`,maxWidth:`${ue}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge settings"})}),e.jsx(oi,{open:h,ip:d.ipv4Address,onClose:D,onSave:C}),e.jsx(ni,{open:q,onClose:g,onSave:s}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(X,{sx:{gap:"10px",margin:"0px",padding:"10px",width:`${ue-20}px`,backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"matterbridgeInfo-mode",children:"Matterbridge mode:"}),e.jsxs(nr,{row:!0,name:"mode-buttons-group",value:a,onChange:u,children:[e.jsx(Ve,{value:"bridge",control:e.jsx(wt,{}),label:"Bridge",disabled:n.readOnly===!0}),e.jsx(Ve,{value:"childbridge",control:e.jsx(wt,{}),label:"Childbridge",disabled:n.readOnly===!0})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"mblogger-level-label",children:"Logger level:"}),e.jsxs(Ze,{style:{height:"30px"},labelId:"mblogger-level-label",id:"mblogger-level",value:p,onChange:b,children:[e.jsx(P,{value:"Debug",children:"Debug"}),e.jsx(P,{value:"Info",children:"Info"}),e.jsx(P,{value:"Notice",children:"Notice"}),e.jsx(P,{value:"Warn",children:"Warn"}),e.jsx(P,{value:"Error",children:"Error"}),e.jsx(P,{value:"Fatal",children:"Fatal"})]}),e.jsx(Ve,{style:{padding:"0px",margin:"0px"},control:e.jsx(Ee,{checked:t,onChange:F,name:"logOnFileMb"}),label:"Log on file:",labelPlacement:"start"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-theme-label",children:"Frontend theme:"}),e.jsxs(Ze,{style:{height:"30px"},labelId:"frontend-theme-label",id:"frontend-theme",value:v,onChange:ce,children:[e.jsx(P,{value:"classic",children:"Classic"}),e.jsx(P,{value:"light",children:"Light"}),e.jsx(P,{value:"dark",children:"Dark"})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-home-plugin-label",children:"Home page plugins:"}),e.jsx(Ee,{checked:O,onChange:xe,name:"showPlugins"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"5px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-home-label",children:"Home page bottom panel:"}),e.jsxs(Ze,{style:{height:"30px"},labelId:"frontend-home-label",id:"frontend-home",value:T,onChange:ne,children:[e.jsx(P,{value:"logs",children:"Logs"}),e.jsx(P,{value:"devices",children:"Devices"})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"10px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"frontend-virtual-label",children:"Virtual devices:"}),e.jsxs(Ze,{style:{height:"30px"},labelId:"frontend-virtual-label",id:"frontend-virtual",value:N,onChange:be,children:[e.jsx(P,{value:"disabled",children:"Disabled"}),e.jsx(P,{value:"outlet",children:"Outlet"}),e.jsx(P,{value:"light",children:"Light"}),e.jsx(P,{value:"switch",children:"Switch"}),e.jsx(P,{value:"mounted_switch",children:"Mounted Switch"})]})]}),e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"20px"},children:e.jsx(ie,{variant:"contained",color:"primary",onClick:()=>L(!0),children:"Change password"})}),n.shellyBoard&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"15px",marginTop:"20px"},children:e.jsx(ie,{variant:"contained",color:"primary",onClick:()=>H(!0),children:"Configure IP"})})]})})]})}function ai({matterbridgeInfo:n}){const{sendMessage:d,getUniqueId:l}=r.useContext(fe),[i,a]=r.useState("Info"),[x,p]=r.useState(!1),[j,t]=r.useState(""),[I,v]=r.useState(""),[M,O]=r.useState(""),[E,T]=r.useState(""),[U,N]=r.useState(""),[c,f]=r.useState(""),h=r.useRef(l()),H=r.useMemo(()=>Ke(1e3),[]),D=r.useMemo(()=>Ke(1e3),[]),C=r.useMemo(()=>Ke(1e3),[]),q=r.useMemo(()=>Ke(1e3),[]),L=r.useMemo(()=>Ke(1e3),[]),g=r.useMemo(()=>Ke(1e3),[]);r.useEffect(()=>{n&&(a(["Debug","Info","Notice","Warn","Error","Fatal"][n.matterLoggerLevel]),p(n.matterFileLogger),t(n.matterMdnsInterface||""),v(n.matterIpv4Address||""),O(n.matterIpv6Address||""),T(n.matterPort?n.matterPort.toString():""),N(n.matterDiscriminator?n.matterDiscriminator.toString():""),f(n.matterPasscode?n.matterPasscode.toString():""))},[n]),r.useEffect(()=>()=>H.cancel(),[H]),r.useEffect(()=>()=>D.cancel(),[D]),r.useEffect(()=>()=>C.cancel(),[C]),r.useEffect(()=>()=>q.cancel(),[q]),r.useEffect(()=>()=>L.cancel(),[L]),r.useEffect(()=>()=>g.cancel(),[g]);const s=R=>{o&&console.log("handleChangeMjLoggerLevel called with value:",R.target.value),a(R.target.value),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmjloglevel",value:R.target.value}})},u=R=>{o&&console.log("handleLogOnFileMjChange called with value:",R.target.checked),p(R.target.checked),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmjlogfile",value:R.target.checked}})},b=R=>{o&&console.log("handleChangeMdnsInterface called with value:",R.target.value);const z=R.target.value;t(z),H(()=>{o&&console.log("debounced sendMessage setmdnsinterface with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmdnsinterface",value:z}})})},F=R=>{o&&console.log("handleChangeIpv4Address called with value:",R.target.value);const z=R.target.value;v(z),D(()=>{o&&console.log("debounced sendMessage setipv4address with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setipv4address",value:z}})})},ce=R=>{o&&console.log("handleChangeIpv6Address called with value:",R.target.value);const z=R.target.value;O(z),C(()=>{o&&console.log("debounced sendMessage setipv6address with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setipv6address",value:z}})})},xe=R=>{o&&console.log("handleChangeMatterPort called with value:",R.target.value);const z=R.target.value;T(z),q(()=>{o&&console.log("debounced sendMessage setmatterport with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterport",value:z}})})},ne=R=>{o&&console.log("handleChangeMatterDiscriminator called with value:",R.target.value);const z=R.target.value;N(z),L(()=>{o&&console.log("debounced sendMessage setmatterdiscriminator with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterdiscriminator",value:z}})})},be=R=>{o&&console.log("handleChangemMatterPasscode called with value:",R.target.value);const z=R.target.value;f(z),g(()=>{o&&console.log("debounced sendMessage setmatterpasscode with value:",z),d({id:h.current,sender:"Settings",method:"/api/config",src:"Frontend",dst:"Matterbridge",params:{name:"setmatterpasscode",value:z}})})};return n?e.jsxs(Me,{style:{width:`${ue}px`,maxWidth:`${ue}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matter settings"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(X,{sx:{gap:"20px",margin:"0px",padding:"10px",width:`${ue-20}px`,backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"5px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px"},id:"mjdebug-info",children:"Logger level:"}),e.jsxs(Ze,{style:{height:"30px"},labelId:"select-mjlevel",id:"mjdebug-level",value:i,onChange:s,children:[e.jsx(P,{value:"Debug",children:"Debug"}),e.jsx(P,{value:"Info",children:"Info"}),e.jsx(P,{value:"Notice",children:"Notice"}),e.jsx(P,{value:"Warn",children:"Warn"}),e.jsx(P,{value:"Error",children:"Error"}),e.jsx(P,{value:"Fatal",children:"Fatal"})]}),e.jsx(Ve,{style:{padding:"0px",margin:"0px"},control:e.jsx(Ee,{checked:x,onChange:u,name:"logOnFileMj"}),label:"Log on file:",labelPlacement:"start"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Mdns interface:"}),e.jsx(me,{value:j,onChange:b,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Ipv4 address:"}),e.jsx(me,{value:I,onChange:F,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Ipv6 address:"}),e.jsx(me,{value:M,onChange:ce,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning port:"}),e.jsx(me,{value:E,onChange:xe,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning discriminator:"}),e.jsx(me,{value:U,onChange:ne,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"10px",gap:"15px"},children:[e.jsx(je,{style:{padding:"0px",margin:"0px",textWrap:"nowrap"},children:"Commissioning passcode:"}),e.jsx(me,{value:c,onChange:be,size:"small",variant:"outlined",style:{height:"30px",flexGrow:1},InputProps:{readOnly:n.readOnly===!0,style:{height:"30px",padding:"0"}}})]})]})})]}):null}function li({matterbridgeInfo:n}){return n?e.jsxs(Me,{style:{width:`${ue}px`,maxWidth:`${ue}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"Matterbridge info"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(X,{sx:{gap:"10px",margin:"0px",padding:"10px",width:"400px",backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsx(we,{value:n.matterbridgeVersion,label:"Current Version",width:ue}),e.jsx(we,{value:n.matterbridgeLatestVersion,label:"Latest Version",width:ue}),e.jsx(we,{value:n.homeDirectory,label:"Home Directory",width:ue}),e.jsx(we,{value:n.rootDirectory,label:"Root Directory",width:ue}),e.jsx(we,{value:n.matterbridgeDirectory,label:"Matterbridge Storage Directory",width:ue}),e.jsx(we,{value:n.matterbridgePluginDirectory,label:"Matterbridge Plugin Directory",width:ue}),e.jsx(we,{value:n.globalModulesDirectory,label:"Global Module Directory",width:ue})]})})]}):null}function di({systemInfo:n}){return n?e.jsxs(Me,{style:{width:`${ue}px`,maxWidth:`${ue}px`},children:[e.jsx("div",{className:"MbfWindowHeader",children:e.jsx("p",{className:"MbfWindowHeaderText",children:"System info"})}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"0 0 auto"},children:e.jsxs(X,{sx:{gap:"10px",margin:"0px",padding:"10px",width:"400px",backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)"},children:[e.jsx(we,{value:n.interfaceName,label:"Interface name",width:ue}),e.jsx(we,{value:n.macAddress,label:"MAC Address",width:ue}),e.jsx(we,{value:n.ipv4Address,label:"IPv4 Address",width:ue}),e.jsx(we,{value:n.ipv6Address,label:"IPv6 Address",width:ue}),e.jsx(we,{value:n.nodeVersion,label:"Node Version",width:ue}),e.jsx(we,{value:n.hostname,label:"Hostname",width:ue}),e.jsx(we,{value:n.user,label:"User",width:ue})]})})]}):null}function we({value:n,label:d,width:l}){return e.jsx(me,{focused:!0,value:n,size:"small",label:d,variant:"standard",sx:{width:l?`${l-20}px`:"400px"},InputProps:{readOnly:!0,sx:{color:"var(--div-text-color)","&:before":{borderBottomColor:"var(--main-label-color)"},"&:after":{borderBottomColor:"var(--main-label-color)"}}},InputLabelProps:{sx:{marginTop:"3px",color:"var(--main-label-color)","&.Mui-focused":{color:"var(--main-label-color)"}}}})}const ci=r.memo(ii);function pi(){const{online:n,sendMessage:d,addListener:l,removeListener:i,getUniqueId:a}=r.useContext(fe),{showSnackbarMessage:x}=r.useContext(_e),[p,j]=r.useState(null),[t,I]=r.useState([]),[v,M]=r.useState([]),[O,E]=r.useState(null),[T,U]=r.useState({cpuUsage:0}),[N,c]=r.useState({totalMemory:"",freeMemory:"",heapTotal:"",heapUsed:"",external:"",arrayBuffers:"",rss:""}),[f,h]=r.useState({systemUptime:"",processUptime:""}),H=r.useRef(a());return o&&console.log("Test uniqueId:",H),r.useEffect(()=>{o&&console.log("Test useEffect WebSocketMessage mounting");const D=C=>{if(C.method==="restart_required")o&&console.log("Test received restart_required"),x("Restart required",0);else if(C.method==="refresh_required")o&&console.log(`Test received refresh_required: changed=${C.response.changed} and sending api requests`),x("Refresh required",0),d({id:H.current,method:"/api/settings",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}}),d({id:H.current,method:"/api/plugins",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}}),d({id:H.current,method:"/api/devices",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{}});else if(C.method==="memory_update")o&&console.log("Test received memory_update",C),c(C.response);else if(C.method==="cpu_update")o&&console.log("Test received cpu_update",C),U(C.response);else if(C.method==="uptime_update")o&&console.log("Test received uptime_update",C),h(C.response);else if(C.method==="/api/settings"&&C.response)o&&console.log("Test received /api/settings:",C.response),x("Test received /api/settings",0),j(C.response);else if(C.method==="/api/plugins"&&C.response)o&&console.log(`Test received ${C.response.length} plugins:`,C.response),x("Test received /api/plugins",0),I(C.response);else if(C.method==="/api/devices"&&C.response){o&&console.log(`Test received ${C.response.length} devices:`,C.response),x("Test received /api/devices",0),M(C.response);for(const q of C.response)o&&console.log("Test sending /api/clusters for device:",q.pluginName,q.name,q.endpoint),d({id:H.current,method:"/api/clusters",sender:"Test",src:"Frontend",dst:"Matterbridge",params:{plugin:q.pluginName,endpoint:q.endpoint||0}})}else C.method==="/api/clusters"&&C.response&&(o&&console.log(`Test received ${C.response.clusters.length} clusters for device ${C.response.deviceName} endpoint ${C.response.id}:${C.response.number}:`,C),x(`Test received /api/clusters for ${C.response.plugin}::${C.response.deviceName}`,0),E(C.response))};return l(D,H.current),o&&console.log("Test useEffect WebSocketMessage mounted"),()=>{o&&console.log("Test useEffect WebSocketMessage unmounting"),i(D),o&&console.log("Test useEffect WebSocketMessage unmounted")}},[l,i,d,x]),r.useEffect(()=>(o&&console.log("Test useEffect online mounting"),n&&o&&console.log("Test useEffect online received online"),o&&console.log("Test useEffect online mounted"),()=>{o&&console.log("Test useEffect online unmounted")}),[n,d,x]),o&&console.log("Test rendering..."),n?e.jsx("div",{className:"MbfPageDiv",style:{display:"flex",flexDirection:"row",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",width:"100%"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"256px",width:"256px",margin:"10px"}}),e.jsx("p",{children:"Welcome to the Test page of the Matterbridge frontend"})]})}):e.jsx(De,{})}const ui=r.memo(pi);function gi(n,d){o&&console.log("getCssVariable:",n,"defaultValue",d);const l=getComputedStyle(document.body).getPropertyValue(n).trim();return l||console.error("getCssVariable: undefined",l),l||d}function mi(n){return uo({palette:{primary:{main:n},action:{disabled:"var(--main-label-color)"},text:{disabled:"var(--main-label-color)"}},typography:{fontFamily:"Roboto, Helvetica, Arial, sans-serif"},components:{MuiDialog:{styleOverrides:{paper:{color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)",border:"2px solid var(--div-border-color)",borderRadius:"var(--div-border-radius)",boxShadow:"2px 2px 5px var(--div-shadow-color)"}}},MuiTooltip:{defaultProps:{placement:"top-start",arrow:!0}},MuiButton:{styleOverrides:{root:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)","&:hover":{backgroundColor:"var(--main-button-bg-color)"},"&.Mui-disabled":{color:"var(--main-button-color)",backgroundColor:"var(--main-grey-color)"}},contained:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},outlined:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)"},text:{color:"var(--main-button-color)"}},defaultProps:{variant:"contained",size:"small"}},MuiIconButton:{styleOverrides:{root:{color:"var(--main-icon-color)","&:hover .MuiSvgIcon-root":{color:"var(--primary-color)"}}}},MuiCheckbox:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-checked":{color:"var(--primary-color)"}}}},MuiTextField:{defaultProps:{size:"small",variant:"outlined",fullWidth:!0}},MuiOutlinedInput:{styleOverrides:{root:{backgroundColor:"var(--div-bg-color)","& .MuiOutlinedInput-notchedOutline":{borderColor:"var(--main-label-color)"},"&:hover .MuiOutlinedInput-notchedOutline":{borderColor:"var(--main-text-color)"},"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:"var(--primary-color)"},padding:"0px"},input:{color:"var(--div-text-color)",padding:"4px 8px"}}},MuiInputLabel:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-focused":{color:"var(--primary-color)"}}}},MuiFormLabel:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-focused":{color:"var(--main-label-color)"}}}},MuiFormControl:{styleOverrides:{root:{color:"var(--main-grey-color)"}}},MuiRadio:{styleOverrides:{root:{color:"var(--main-label-color)","&.Mui-checked":{color:"var(--primary-color)"}}}},MuiSelect:{styleOverrides:{root:{backgroundColor:"var(--div-bg-color)",color:"var(--div-text-color)",height:"30px","&:hover":{borderColor:"var(--main-text-color)"},"&.Mui-focused":{borderColor:"var(--primary-color)"}}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:"var(--main-menu-bg-color)",padding:"0px",margin:"0px"},list:{padding:"0px"}}},MuiMenuItem:{styleOverrides:{root:{color:"var(--main-menu-color)",backgroundColor:"var(--main-menu-bg-color)","&:hover":{backgroundColor:"var(--main-menu-hover-color)"},"&.Mui-selected":{color:"var(--main-menu-color)",backgroundColor:"var(--main-menu-bg-color)"},"&.Mui-selected:hover":{backgroundColor:"var(--main-menu-hover-color)"}}}},MuiListItemButton:{styleOverrides:{root:{cursor:"pointer","&:hover":{backgroundColor:"var(--main-bg-color)"}}}},MuiListItemIcon:{styleOverrides:{root:{color:"var(--div-text-color)"}}},MuiListItemText:{styleOverrides:{primary:{fontSize:"16px",fontWeight:"bold",color:"var(--div-text-color)"},secondary:{fontSize:"14px",fontWeight:"normal",color:"var(--div-text-color)"}}}}})}function hi(){const{mobile:n,showSnackbarMessage:d,showConfirmCancelDialog:l}=r.useContext(_e),{online:i,sendMessage:a,logMessage:x,addListener:p,removeListener:j,getUniqueId:t}=r.useContext(fe),[I,v]=r.useState(!1),[M,O]=r.useState(!1),[E,T]=r.useState(!1),[U,N]=r.useState(!1),[c,f]=r.useState(null),h=r.useRef(t()),[H,D]=r.useState(null),[C,q]=r.useState(null),[L,g]=r.useState(null),[s,u]=r.useState(null),[b,F]=r.useState(null),ce=()=>{window.open("https://www.buymeacoffee.com/luligugithub","_blank")},xe=()=>{window.open("https://github.com/Luligu/matterbridge/blob/main/README.md","_blank")},ne=()=>{c?.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?window.open("https://github.com/Luligu/matterbridge/blob/dev/CHANGELOG.md","_blank"):window.open("https://github.com/Luligu/matterbridge/blob/main/CHANGELOG.md","_blank")},be=()=>{window.open("https://discord.gg/QX58CDe6hd","_blank")},R=()=>{window.open("https://github.com/Luligu/matterbridge","_blank")},z=()=>{a({id:h.current,sender:"Header",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:"matterbridge",restart:!0}})},W=()=>{a({id:h.current,sender:"Header",method:"/api/install",src:"Frontend",dst:"Matterbridge",params:{packageName:"matterbridge@dev",restart:!0}})},Z=()=>{a({id:h.current,sender:"Header",method:"/api/checkupdates",src:"Frontend",dst:"Matterbridge",params:{}})},$=()=>{o&&console.log("Header: handleShellySystemUpdateClick"),x("Matterbridge","Installing system updates..."),a({id:h.current,sender:"Header",method:"/api/shellysysupdate",src:"Frontend",dst:"Matterbridge",params:{}})},S=()=>{o&&console.log("Header: handleShellyMainUpdateClick"),x("Matterbridge","Installing software updates..."),a({id:h.current,sender:"Header",method:"/api/shellymainupdate",src:"Frontend",dst:"Matterbridge",params:{}})},w=()=>{o&&console.log("Header: handleShellyCreateSystemLog"),a({id:h.current,sender:"Header",method:"/api/shellycreatesystemlog",src:"Frontend",dst:"Matterbridge",params:{}})},k=()=>{o&&console.log("Header: handleShellyDownloadSystemLog"),x("Matterbridge","Downloading Shelly system log..."),d("Downloading Shelly system log...",5),window.location.href="./api/shellydownloadsystemlog"},_=()=>{c?.matterbridgeInformation.restartMode===""?a({id:h.current,sender:"Header",method:"/api/restart",src:"Frontend",dst:"Matterbridge",params:{}}):a({id:h.current,sender:"Header",method:"/api/shutdown",src:"Frontend",dst:"Matterbridge",params:{}})},K=()=>{a({id:h.current,sender:"Header",method:"/api/shutdown",src:"Frontend",dst:"Matterbridge",params:{}})},pe=()=>{a({id:h.current,sender:"Header",method:"/api/reboot",src:"Frontend",dst:"Matterbridge",params:{}})},le=()=>{a({id:h.current,sender:"Header",method:"/api/softreset",src:"Frontend",dst:"Matterbridge",params:{}})},de=()=>{a({id:h.current,sender:"Header",method:"/api/hardreset",src:"Frontend",dst:"Matterbridge",params:{}})},ge=y=>{D(y.currentTarget)},A=y=>{o&&console.log("Header: handleMenuClose",y),D(null),y==="download-mblog"?(x("Matterbridge","Downloading matterbridge log..."),d("Downloading matterbridge log...",5),window.location.href="./api/download-mblog"):y==="download-mjlog"?(x("Matterbridge","Downloading matter log..."),d("Downloading matter log...",5),window.location.href="./api/download-mjlog"):y==="view-mblog"?(x("Matterbridge","Loading matterbridge log..."),d("Loading matterbridge log...",5),window.open("./api/view-mblog","_blank","noopener,noreferrer")):y==="view-mjlog"?(x("Matterbridge","Loading matter log..."),d("Loading matter log...",5),window.open("./api/view-mjlog","_blank","noopener,noreferrer")):y==="view-diagnostic"?(x("Matterbridge","Loading diagnostic log..."),d("Loading diagnostic log...",5),window.open("./api/view-diagnostic","_blank","noopener,noreferrer")):y==="download-diagnostic"?(x("Matterbridge","Downloading diagnostic log..."),d("Downloading diagnostic log...",5),window.location.href="./api/download-diagnostic"):y==="view-history"?a({id:h.current,sender:"Header",method:"/api/viewhistorypage",src:"Frontend",dst:"Matterbridge",params:{}}):y==="download-history"?a({id:h.current,sender:"Header",method:"/api/downloadhistorypage",src:"Frontend",dst:"Matterbridge",params:{}}):y==="view-shellylog"?(x("Matterbridge","Loading shelly system log..."),d("Loading shelly system log...",5),window.location.href="./api/shellyviewsystemlog"):y==="download-mbstorage"?(x("Matterbridge","Downloading matterbridge storage..."),d("Downloading matterbridge storage...",5),window.location.href="./api/download-mbstorage"):y==="download-pluginstorage"?(x("Matterbridge","Downloading matterbridge plugins storage..."),d("Downloading matterbridge plugins storage...",5),window.location.href="./api/download-pluginstorage"):y==="download-pluginconfig"?(x("Matterbridge","Downloading matterbridge plugins config..."),d("Downloading matterbridge plugins config...",5),window.location.href="./api/download-pluginconfig"):y==="download-mjstorage"?(x("Matterbridge","Downloading matter storage..."),d("Downloading matter storage...",5),window.location.href="./api/download-mjstorage"):y==="download-backup"?(x("Matterbridge","Downloading backup..."),d("Downloading backup...",10),window.location.href="./api/download-backup"):y==="update"?z():y==="updatedev"?W():y==="updatecheck"?Z():y==="shelly-sys-update"?$():y==="shelly-main-update"?S():y==="shelly-create-system-log"?w():y==="shelly-download-system-log"?k():y==="softreset"?le():y==="hardreset"?de():y==="restart"?_():y==="shutdown"?K():y==="reboot"?pe():y==="create-backup"?a({id:h.current,sender:"Header",method:"/api/create-backup",src:"Frontend",dst:"Matterbridge",params:{}}):y==="unregister"?a({id:h.current,sender:"Header",method:"/api/unregister",src:"Frontend",dst:"Matterbridge",params:{}}):y==="reset"?a({id:h.current,sender:"Header",method:"/api/reset",src:"Frontend",dst:"Matterbridge",params:{}}):y==="factoryreset"&&a({id:h.current,sender:"Header",method:"/api/factoryreset",src:"Frontend",dst:"Matterbridge",params:{}})},G=y=>{o&&console.log("Header: handleMenuCloseCancel:",y),D(null)},m=y=>{q(y.currentTarget)},he=()=>{q(null)},ye=y=>{g(y.currentTarget)},ae=()=>{g(null)},te=y=>{u(y.currentTarget)},re=()=>{u(null)},Pe=y=>{F(y.currentTarget)},Ne=()=>{F(null)},et=()=>{vi(),o&&console.log("Matterbridge logo clicked: debug is now",o)};return r.useEffect(()=>{const y=Y=>{o&&console.log("Header received WebSocket Message:",Y),Y.method==="/api/settings"&&Y.id===h.current?(o&&console.log("Header received settings:",Y.response),f(Y.response),v(Y.response.matterbridgeInformation.restartRequired||Y.response.matterbridgeInformation.fixedRestartRequired),O(Y.response.matterbridgeInformation.fixedRestartRequired),T(Y.response.matterbridgeInformation.updateRequired)):Y.method==="refresh_required"&&Y.response.changed==="settings"?(o&&console.log(`Header received refresh_required: changed=${Y.response.changed} and sending /api/settings request`),a({id:h.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):Y.method==="restart_required"?(o&&console.log(`Header received restart_required with fixed: ${Y.response.fixed}`),v(!0),Y.response.fixed===!0&&O(!0)):Y.method==="restart_not_required"?(o&&console.log("Header received restart_not_required"),v(!1)):Y.method==="update_required"?(o&&console.log("Header received update_required"),Y.response.devVersion===!0?N(!0):T(!0),a({id:h.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}})):Y.method==="shelly_sys_update"?(o&&console.log("Header received WS_ID_SHELLY_SYS_UPDATE:"),f(Ce=>Ce?{matterbridgeInformation:{...Ce.matterbridgeInformation,shellySysUpdate:Y.response.available},systemInformation:Ce.systemInformation}:null)):Y.method==="shelly_main_update"?(o&&console.log("Header received WS_ID_SHELLY_MAIN_UPDATE:"),f(Ce=>Ce?{matterbridgeInformation:{...Ce.matterbridgeInformation,shellyMainUpdate:Y.response.available},systemInformation:Ce.systemInformation}:null)):Y.method==="/api/viewhistorypage"&&Y.id===h.current&&Y.success===!0?(o&&console.log("Header received /api/viewhistorypage success"),window.open("./api/viewhistory","_blank","noopener,noreferrer")):Y.method==="/api/downloadhistorypage"&&Y.id===h.current&&Y.success===!0&&(o&&console.log("Header received /api/downloadhistorypage success"),window.location.href="./api/downloadhistory")};return p(y,h.current),o&&console.log(`Header added WebSocket listener id ${h.current}`),()=>{j(y),o&&console.log("Header removed WebSocket listener")}},[p,j,a,d]),r.useEffect(()=>{i&&(o&&console.log("Header sending /api/settings and /api/checkupdates requests"),a({id:h.current,sender:"Header",method:"/api/settings",src:"Frontend",dst:"Matterbridge",params:{}}),a({id:h.current,sender:"Header",method:"/api/checkupdates",src:"Frontend",dst:"Matterbridge",params:{}}))},[i,a]),o&&console.log("Header rendering... mobile %s",n),!i||!c?null:e.jsxs("div",{className:"header",style:{},children:[e.jsxs("div",{className:"sub-header",children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"30px"},onClick:et}),e.jsx("h2",{style:{fontSize:"22px",color:"var(--main-icon-color)",margin:"0px"},children:"Matterbridge"}),e.jsxs("nav",{children:[e.jsx(st,{to:"/",className:"nav-link",children:"Home"}),e.jsx(st,{to:"/devices",className:"nav-link",children:"Devices"}),e.jsx(st,{to:"/log",className:"nav-link",children:"Logs"}),e.jsx(st,{to:"/settings",className:"nav-link",children:"Settings"})]})]}),e.jsxs("div",{className:"sub-header",children:[!c.matterbridgeInformation.readOnly&&e.jsx(V,{title:`Matterbridge v.${c.matterbridgeInformation.matterbridgeVersion}`,children:e.jsxs("span",{className:"status-information",style:{cursor:"default"},children:["v.",c.matterbridgeInformation.matterbridgeVersion.split("-dev-")[0]+(c.matterbridgeInformation.matterbridgeVersion.includes("-dev-")?"@dev":"")]})}),c.matterbridgeInformation.shellyBoard&&e.jsx("img",{src:"Shelly.svg",alt:"Shelly Icon",style:{height:"30px",padding:"0px",margin:"0px",marginRight:"30px"}}),c.matterbridgeInformation.bridgeMode!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Bridge mode",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.bridgeMode})}):null,c.matterbridgeInformation.restartMode!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Restart mode",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.restartMode})}):null,c.matterbridgeInformation.profile&&c.matterbridgeInformation.profile!==""&&c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Current profile",children:e.jsx("span",{className:"status-information",style:{cursor:"default"},children:c.matterbridgeInformation.profile})}):null]}),e.jsxs("div",{className:"sub-header",style:{gap:"5px"},children:[c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Matterbridge discord group",children:e.jsx("img",{src:"discord.svg",alt:"Discord Logo",style:{cursor:"pointer",height:"25px"},onClick:be})}):null,c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Give a star to Matterbridge",children:e.jsx(Q,{style:{color:"#FFD700",margin:"0",padding:"0"},onClick:R,children:e.jsx(go,{})})}):null,c.matterbridgeInformation.readOnly===!1?e.jsx(V,{title:"Sponsor Matterbridge",children:e.jsx(Q,{style:{color:"#b6409c",margin:"0",padding:"0"},onClick:ce,children:e.jsx(er,{})})}):null,e.jsx(V,{title:"Matterbridge help",children:e.jsx(Q,{style:{color:"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:xe,children:e.jsx(Xt,{})})}),e.jsx(V,{title:"Matterbridge changelog",children:e.jsx(Q,{style:{color:"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:ne,children:e.jsx($t,{})})}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&E&&e.jsx(V,{title:`Update matterbridge to latest version v.${c.matterbridgeInformation.matterbridgeLatestVersion}`,children:e.jsx(Q,{style:{color:E?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:z,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&U&&e.jsx(V,{title:`Update matterbridge to latest dev version v.${c.matterbridgeInformation.matterbridgeDevVersion}`,children:e.jsx(Q,{style:{color:U?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0"},onClick:W,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellySysUpdate&&e.jsx(V,{title:"Shelly system update",children:e.jsx(Q,{style:{color:"var(--primary-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:$,children:e.jsx(Ie,{})})}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellyMainUpdate&&e.jsx(V,{title:"Shelly software update",children:e.jsx(Q,{style:{color:"var(--primary-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:S,children:e.jsx(Ie,{})})}),e.jsx(V,{title:"Restart matterbridge",children:e.jsx(Q,{style:{color:I||M?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:_,children:e.jsx(yt,{})})}),c.matterbridgeInformation.restartMode===""?e.jsx(V,{title:"Shut down matterbridge",children:e.jsx(Q,{style:{color:I||M?"var(--primary-color)":"var(--main-icon-color)",margin:"0",marginLeft:"5px",padding:"0px"},onClick:K,children:e.jsx(Ae,{})})}):null,e.jsx(V,{title:"Download, backup and more",children:e.jsx(Q,{onClick:ge,children:e.jsx(mo,{style:{color:"var(--main-icon-color)"}})})}),e.jsxs(Je,{id:"command-menu",anchorEl:H,keepMounted:!0,open:!!H,onClose:()=>A(""),children:[c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(P,{onClick:()=>A("update"),children:[e.jsx(B,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Install latest stable",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(P,{onClick:()=>A("updatedev"),children:[e.jsx(B,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Install latest dev",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&!c.matterbridgeInformation.readOnly&&e.jsxs(P,{onClick:()=>A("updatecheck"),children:[e.jsx(B,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Check for updates",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellySysUpdate&&e.jsxs(P,{onClick:()=>A("shelly-sys-update"),children:[e.jsx(B,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Shelly system update",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&c.matterbridgeInformation.shellyMainUpdate&&e.jsxs(P,{onClick:()=>A("shelly-main-update"),children:[e.jsx(B,{children:e.jsx(Ie,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Shelly software update",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>A("restart"),children:[e.jsx(B,{children:e.jsx(yt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Restart",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation.restartMode===""?e.jsxs(P,{onClick:()=>A("shutdown"),children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Shutdown",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}):null,c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{l("Reboot","Are you sure you want to reboot the Shelly board?","reboot",A,G)},children:[e.jsx(B,{children:e.jsx(yt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Reboot...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsx(pt,{}),e.jsxs(P,{onClick:ye,children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"View",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Je,{id:"sub-menu-view",anchorEl:L,keepMounted:!0,open:!!L,onClose:ae,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(P,{onClick:()=>{A("view-mblog"),ae()},children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("view-mjlog"),ae()},children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matter log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("view-diagnostic"),ae()},children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge diagnostic log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("view-history"),ae()},children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge system history",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{A("view-shellylog"),ae()},children:[e.jsx(B,{children:e.jsx(qe,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(pt,{}),e.jsxs(P,{onClick:te,children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Download",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Je,{id:"sub-menu-download",anchorEl:s,keepMounted:!0,open:!!s,onClose:re,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(P,{onClick:()=>{A("download-mbstorage"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-pluginstorage"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge plugins storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-pluginconfig"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge plugins config",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-mblog"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-mjstorage"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matter storage",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-mjlog"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matter log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-diagnostic"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge diagnostic log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-history"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Matterbridge system history",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{A("shelly-create-system-log"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Create Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{A("shelly-download-system-log"),re()},children:[e.jsx(B,{children:e.jsx(ke,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Download Shelly system log",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(pt,{}),e.jsxs(P,{onClick:m,children:[e.jsx(B,{children:e.jsx(kt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Je,{id:"sub-menu-backup",anchorEl:C,keepMounted:!0,open:!!C,onClose:he,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(P,{onClick:()=>{A("create-backup"),he()},children:[e.jsx(B,{children:e.jsx(kt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Create backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{A("download-backup"),he()},children:[e.jsx(B,{children:e.jsx(kt,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Download backup",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]}),e.jsx(pt,{}),e.jsxs(P,{onClick:Pe,children:[e.jsx(B,{children:e.jsx(ho,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Reset",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(Je,{id:"sub-menu-reset",anchorEl:b,keepMounted:!0,open:!!b,onClose:Ne,sx:{"& .MuiPaper-root":{backgroundColor:"#e2e2e2"}},children:[e.jsxs(P,{onClick:()=>{Ne(),l("Reset all devices and shutdown","Are you sure you want to unregister all devices? This will temporarily remove all devices from the controller and you may loose the controller configuration.","unregister",A,G)},children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Reset all devices...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),e.jsxs(P,{onClick:()=>{Ne(),l("Reset commissioning and shutdown","Are you sure you want to reset the commissioning? You will have to manually remove Matterbridge from the controller.","reset",A,G)},children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Reset commissioning...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),!c.matterbridgeInformation.readOnly&&e.jsxs(P,{onClick:()=>{Ne(),l("Factory reset and shutdown","Are you sure you want to factory reset Matterbridge? You will have to manually remove Matterbridge from the controller.","factoryreset",A,G)},children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Factory reset...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{Ne(),l("Network reset","Are you sure you want to factory reset the network parameters?","softreset",A,G)},children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Reset network...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]}),c.matterbridgeInformation&&c.matterbridgeInformation.shellyBoard&&e.jsxs(P,{onClick:()=>{Ne(),l("Factory reset","Are you sure you want to factory reset Matterbridge? You will have to manually remove Matterbridge from the controller.","hardreset",A,G)},children:[e.jsx(B,{children:e.jsx(Ae,{style:{color:"var(--main-icon-color)"}})}),e.jsx(ee,{primary:"Factory reset...",primaryTypographyProps:{style:{fontWeight:"normal",color:"var(--main-icon-color)"}}})]})]})]})]})]})}const fi=r.memo(hi),lr=1200,dr=800;let Pt,Nt;function xi(){if(typeof window<"u"){Pt=Math.floor(window.visualViewport?.width??window.innerWidth),Nt=Math.floor(window.visualViewport?.height??window.innerHeight);const n=Pt<lr||Nt<dr;return o&&console.log("Visual viewport width %i height %i mobile %s",Pt,Nt,n),n}return!1}function bi({children:n}){const{mobile:d,setMobile:l}=r.useContext(_e);return r.useEffect(()=>{function i(){l(xi())}return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[l]),o&&console.log("MbfScreen rendering... mobile %s",d),e.jsxs("div",{style:{display:"flex",flexDirection:"column",overflow:"hidden",width:d?`${lr}px`:"calc(100vw - 40px)",height:d?`${dr}px`:"calc(100vh - 40px)",margin:"0px",padding:"20px",gap:"20px"},children:[e.jsx(fi,{}),e.jsx("div",{style:{display:"flex",flexDirection:"row",width:"100%",height:"calc(100% - 60px)",margin:"0px",padding:"0px",gap:"20px"},children:n})]})}let o=!1;const vi=()=>{o=!o},yi=!1;function ji({setLoggedIn:n}){const[d,l]=r.useState(""),[i,a]=r.useState(""),x={display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",backgroundColor:"var(--main-bg-color)"},p={display:"flex",flexDirection:"column",maxWidth:"400px",margin:"0 auto",padding:"20px",gap:"20px",border:"1px solid var(--div-border-color)",borderRadius:"var(--div-border-radius)",boxShadow:"2px 2px 5px var(--div-shadow-color)",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},j={margin:"10px 0",padding:"3px 3px",fontSize:"14px",width:"230px",border:"1px solid var(--main-label-color)",color:"var(--div-text-color)",backgroundColor:"var(--div-bg-color)"},t=async v=>{try{const M=await fetch("./api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:v})});if(M.ok){const{valid:O}=await M.json();O?n(!0):v!==""&&a("Incorrect password!")}else console.error("Failed to log in:",M.statusText)}catch(M){console.error("Failed to log in:",M)}},I=v=>{v.preventDefault(),t(d)};return t(""),e.jsx("div",{style:x,children:e.jsxs("form",{onSubmit:I,style:p,children:[e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"20px"},children:[e.jsx("img",{src:"matterbridge.svg",alt:"Matterbridge Logo",style:{height:"64px",width:"64px"}}),e.jsx("h3",{style:{color:"var(--div-text-color)"},children:"Welcome to Matterbridge"})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:"20px"},children:[e.jsx("input",{type:"text",name:"username",autoComplete:"username",style:{display:"none"},tabIndex:-1}),e.jsx("input",{type:"password",value:d,onChange:v=>l(v.target.value),style:j,placeholder:"password",autoComplete:"current-password"}),e.jsx("button",{type:"submit",style:{color:"var(--main-button-color)",backgroundColor:"var(--main-button-bg-color)",borderColor:"var(--div-bg-color)"},children:"Log in"})]}),e.jsx("div",{style:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",margin:0,height:"30px"},children:i&&e.jsx("p",{style:{color:"red"},children:i})})]})})}function wi(){const[n,d]=r.useState(!1),l=localStorage.getItem("frontendTheme")||"dark";o&&console.log('Setting frontend theme "%s"',l),document.body.setAttribute("frontend-theme",l);const i=gi("--primary-color","#1976d2");o&&console.log('Primary color from CSS "%s"',i);const a=mi(i),x=window.location.pathname.includes("/matterbridge/")?"/matterbridge":window.location.href.includes("/api/hassio_ingress/")?window.location.pathname:"/";return o&&(console.log("Loading App..."),console.log(`- with href = "${window.location.href}"`),console.log(`- pathname = "${window.location.pathname}"`),console.log(`- baseName = "${x}"`)),n?e.jsx(fo,{theme:a,children:e.jsx(Mr,{dense:!0,maxSnack:10,preventDuplicate:!0,anchorOrigin:{vertical:"bottom",horizontal:"right"},children:e.jsx(Xo,{children:e.jsx(en,{children:e.jsx(yr,{basename:x,children:e.jsx(bi,{children:e.jsxs(jr,{children:[e.jsx(ze,{path:"/",element:e.jsx($n,{})}),e.jsx(ze,{path:"/devices",element:e.jsx(ei,{})}),e.jsx(ze,{path:"/log",element:e.jsx(ri,{})}),e.jsx(ze,{path:"/settings",element:e.jsx(ci,{})}),e.jsx(ze,{path:"/test",element:e.jsx(ui,{})}),e.jsx(ze,{path:"*",element:e.jsx(wr,{to:"/"})})]})})})})})})}):e.jsx(ji,{setLoggedIn:d})}Cr.createRoot(document.getElementById("root")).render(e.jsx(Sr.StrictMode,{children:e.jsx(wi,{})}));
|