zigbee2mqtt-frontend 0.9.5 → 0.9.7
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 +24 -0
- package/dist/assets/{Availability-ae56805a.js → Availability-96232f4b.js} +1 -1
- package/dist/assets/Availability-96232f4b.js.br +0 -0
- package/dist/assets/{CodeEditor-9087c631.js → CodeEditor-78989ae9.js} +1 -1
- package/dist/assets/CodeEditor-78989ae9.js.br +0 -0
- package/dist/assets/ConnectedDevicePage-c0c5cfad.js +1 -0
- package/dist/assets/ConnectedDevicePage-c0c5cfad.js.br +0 -0
- package/dist/assets/{ConnectedMap-f57e5285.js → ConnectedMap-bf8ed39f.js} +1 -1
- package/dist/assets/ConnectedMap-bf8ed39f.js.br +0 -0
- package/dist/assets/{Dashboard-8d81960a.js → Dashboard-398bc9c2.js} +1 -1
- package/dist/assets/Dashboard-398bc9c2.js.br +0 -0
- package/dist/assets/{DashboardDevice-8a3e1fbd.js → DashboardDevice-ea8916fd.js} +1 -1
- package/dist/assets/DashboardDevice-ea8916fd.js.br +0 -0
- package/dist/assets/{DashboardFeatureWrapper-911dd2bf.js → DashboardFeatureWrapper-aa91c947.js} +1 -1
- package/dist/assets/DashboardFeatureWrapper-aa91c947.js.br +0 -0
- package/dist/assets/{DeviceImage-1f4eb445.js → DeviceImage-718ed8c8.js} +1 -1
- package/dist/assets/DeviceImage-718ed8c8.js.br +0 -0
- package/dist/assets/{GroupPage-84bc36a5.js → GroupPage-a85d4fe2.js} +1 -1
- package/dist/assets/GroupPage-a85d4fe2.js.br +0 -0
- package/dist/assets/{ReactTableCom-620133da.js → ReactTableCom-7debd434.js} +1 -1
- package/dist/assets/ReactTableCom-7debd434.js.br +0 -0
- package/dist/assets/{RecallRemove-c2510492.js → RecallRemove-d5b08d93.js} +1 -1
- package/dist/assets/RecallRemove-d5b08d93.js.br +0 -0
- package/dist/assets/{_baseSet-986ce580.js → _baseSet-20d71a92.js} +1 -1
- package/dist/assets/{_getAllKeysIn-f43f2444.js → _getAllKeysIn-70541aa1.js} +1 -1
- package/dist/assets/{bootstrap-5.esm-c0b92c02.js → bootstrap-5.esm-261b20a4.js} +1 -1
- package/dist/assets/bootstrap-5.esm-261b20a4.js.br +0 -0
- package/dist/assets/{index-dd362945.js → index-32f687fb.js} +1 -1
- package/dist/assets/index-32f687fb.js.br +0 -0
- package/dist/assets/{index-bb99dd37.js → index-42f456b7.js} +6 -6
- package/dist/assets/index-42f456b7.js.br +0 -0
- package/dist/assets/{index-9f3e2a2f.js → index-4552832e.js} +1 -1
- package/dist/assets/{index-d227e305.js → index-4b58c6b5.js} +2 -2
- package/dist/assets/index-4b58c6b5.js.br +0 -0
- package/dist/assets/index-58d5690c.js +1 -0
- package/dist/assets/index-58d5690c.js.br +0 -0
- package/dist/assets/{index-5b210506.js → index-83200062.js} +1 -1
- package/dist/assets/index-83200062.js.br +0 -0
- package/dist/assets/{index-e11ba6f2.js → index-8d2bdc2f.js} +1 -1
- package/dist/assets/index-8d2bdc2f.js.br +0 -0
- package/dist/assets/index-9185e1e0.js +1 -0
- package/dist/assets/index-9185e1e0.js.br +0 -0
- package/dist/assets/{index-3cb164ae.js → index-acd2c5ee.js} +1 -1
- package/dist/assets/index-acd2c5ee.js.br +0 -0
- package/dist/assets/{index-a7b8cd7a.js → index-ec7a75a6.js} +1 -1
- package/dist/assets/index-ec7a75a6.js.br +0 -0
- package/dist/assets/{intersection-b36e1ce9.js → intersection-a6e91bad.js} +1 -1
- package/dist/assets/intersection-a6e91bad.js.br +0 -0
- package/dist/assets/{isEqual-5a5af836.js → isEqual-aeb5c258.js} +1 -1
- package/dist/assets/{jszip.min-6c8df7db.js → jszip.min-8dbb8ab5.js} +1 -1
- package/dist/assets/jszip.min-8dbb8ab5.js.br +0 -0
- package/dist/assets/{persist-fedbbe50.js → persist-df9114c1.js} +1 -1
- package/dist/assets/persist-df9114c1.js.br +0 -0
- package/dist/assets/{rjsf-translation-fields-a633de14.js → rjsf-translation-fields-1116f7f9.js} +1 -1
- package/dist/assets/{spinner-b1baf7a5.js → spinner-0f97041b.js} +1 -1
- package/dist/assets/{vendor-links-996ad5d1.js → vendor-links-d48b9c68.js} +1 -1
- package/dist/assets/vendor-links-d48b9c68.js.br +0 -0
- package/dist/index.html +1 -1
- package/dist/index.html.br +0 -0
- package/package.json +1 -1
- package/dist/assets/Availability-ae56805a.js.br +0 -0
- package/dist/assets/CodeEditor-9087c631.js.br +0 -0
- package/dist/assets/ConnectedDevicePage-d20f1560.js +0 -1
- package/dist/assets/ConnectedDevicePage-d20f1560.js.br +0 -0
- package/dist/assets/ConnectedMap-f57e5285.js.br +0 -0
- package/dist/assets/Dashboard-8d81960a.js.br +0 -0
- package/dist/assets/DashboardDevice-8a3e1fbd.js.br +0 -0
- package/dist/assets/DashboardFeatureWrapper-911dd2bf.js.br +0 -0
- package/dist/assets/DeviceImage-1f4eb445.js.br +0 -0
- package/dist/assets/GroupPage-84bc36a5.js.br +0 -0
- package/dist/assets/ReactTableCom-620133da.js.br +0 -0
- package/dist/assets/RecallRemove-c2510492.js.br +0 -0
- package/dist/assets/bootstrap-5.esm-c0b92c02.js.br +0 -0
- package/dist/assets/index-3cb164ae.js.br +0 -0
- package/dist/assets/index-5b210506.js.br +0 -0
- package/dist/assets/index-7bf82366.js +0 -1
- package/dist/assets/index-7bf82366.js.br +0 -0
- package/dist/assets/index-a7b8cd7a.js.br +0 -0
- package/dist/assets/index-bb99dd37.js.br +0 -0
- package/dist/assets/index-d227e305.js.br +0 -0
- package/dist/assets/index-dd362945.js.br +0 -0
- package/dist/assets/index-e11ba6f2.js.br +0 -0
- package/dist/assets/index-f4e850ab.js +0 -1
- package/dist/assets/index-f4e850ab.js.br +0 -0
- package/dist/assets/intersection-b36e1ce9.js.br +0 -0
- package/dist/assets/jszip.min-6c8df7db.js.br +0 -0
- package/dist/assets/persist-fedbbe50.js.br +0 -0
- package/dist/assets/vendor-links-996ad5d1.js.br +0 -0
@@ -1 +1 @@
|
|
1
|
-
import{u as m,j as r,r as f,E as u}from"./index-
|
1
|
+
import{u as m,j as r,r as f,E as u}from"./index-42f456b7.js";const p=o=>{const e="[/| |:]",n=new RegExp(e,"g");return o.replace(n,"_")},b=o=>{const{t:e}=m("zigbee"),{device:n}=o;if(n.supported&&n.definition){const t=`https://www.zigbee2mqtt.io/supported-devices/#v=${encodeURIComponent(n.definition.vendor)}`;return r.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:t,children:n.definition.vendor})}return r.jsx(f.Fragment,{children:e("unsupported")})},g=o=>{var s,a,l,d,c;const{device:e,anchor:n}=o;let t=e.model_id,i=u;if(e.supported&&e.definition){const h=[encodeURIComponent((a=(s=e.definition)==null?void 0:s.vendor)==null?void 0:a.toLowerCase()),encodeURIComponent((d=(l=e.definition)==null?void 0:l.model)==null?void 0:d.toLowerCase())].join("-");i=`https://www.zigbee2mqtt.io/devices/${encodeURIComponent(p((c=e.definition)==null?void 0:c.model))}.html#${encodeURIComponent(p(n||h))}`,t=e.definition.model}return r.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:i,children:t})},v=o=>{var i,s,a,l;const{device:e}=o;let n="";const t=e.software_build_id;switch((i=e==null?void 0:e.definition)==null?void 0:i.vendor){case"IKEA":n="https://ww8.ikea.com/ikeahomesmart/releasenotes/releasenotes.html";break;case"Inovelli":n="https://help.inovelli.com/en/articles/8503774-what-is-the-latest-firmware-version-for-your-device#h_b74c1e7dc6";break;case"Philips":n=`https://www.philips-hue.com/en-us/support/release-notes/${(s=e.definition)!=null&&s.exposes.find(d=>d.type==="light")?"lamps":"accessories"}`;break;case"Ubisys":n=`https://www.ubisys.de/en/support/firmware/change-logs-${(l=(a=e.definition)==null?void 0:a.model)==null?void 0:l.replace(/[-]/g,"").toLowerCase()}/`;break}return n!=""?r.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:n,children:t}):r.jsx(r.Fragment,{children:t})};export{g as M,v as O,b as V};
|
Binary file
|
package/dist/index.html
CHANGED
package/dist/index.html.br
CHANGED
Binary file
|
package/package.json
CHANGED
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{w as C,r as f,j as e,D as y,N as H,e as ee,u as N,M as se,f as te,h as ne,k as ie,B as j,c as S,a as A,i as D,C as F,b as re,E as z,d as oe,G as V,m as E,p as ae,H as ce,x as le,_ as de,R as W,A as ue,z as me,n as he}from"./index-bb99dd37.js";import{F as pe,a as ge,b as ve,w as xe,T as fe}from"./bootstrap-5.esm-c0b92c02.js";import{D as be,a as je,A as Ne}from"./Availability-ae56805a.js";import{D as _e}from"./DeviceImage-1f4eb445.js";import{V as Ce,M as Se}from"./vendor-links-996ad5d1.js";import{L as Ae,D as K,P as Ie}from"./index-7bf82366.js";import{E as O,D as we,A as Re,R as Ee}from"./RecallRemove-c2510492.js";import{F as ke,a as q,T as Pe}from"./DashboardFeatureWrapper-911dd2bf.js";import{T as ye,D as Oe}from"./rjsf-translation-fields-a633de14.js";import{L as Be,A as Me}from"./index-5b210506.js";import"./_getAllKeysIn-f43f2444.js";import"./isEqual-5a5af836.js";import"./intersection-b36e1ce9.js";import"./index-9f3e2a2f.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./_baseSet-986ce580.js";const J={"device-pic":"_device-pic_iu1xf_1","small-nav":"_small-nav_iu1xf_5"};function $e(s){const{allDevices:t,currentDevice:n,tab:r="info",t:i}=s,[o,a]=f.useState(""),c=Object.values(t).filter(d=>d.friendly_name.toLowerCase().includes(o.toLowerCase())&&d.ieee_address!==n.ieee_address);return e.jsx("h1",{className:"h3",children:e.jsxs(y,{children:[e.jsxs(y.Toggle,{"aria-label":i("select_a_device"),variant:"",size:"lg",children:[n.friendly_name," "]}),e.jsxs(y.Menu,{children:[e.jsx(pe.Control,{autoFocus:!0,className:"mx-3 my-2 w-auto",placeholder:i("type_to_filter"),onChange:d=>a(d.target.value),value:o}),e.jsx(Ue,{devices:c,currentDevice:n,tab:r,setSearchTerm:a})]})]})})}const Le=C("devicePage")($e);function Ue({devices:s,currentDevice:t,tab:n,setSearchTerm:r}){return e.jsx(e.Fragment,{children:Object.values(s).map(i=>e.jsx(y.Item,{active:t.ieee_address===i.ieee_address,href:`#/device/${i.ieee_address}/${n}`,onClick:()=>r(""),children:i.friendly_name},i.ieee_address))})}const De=s=>[{translationKey:"about",url:`/device/${s}/info`},{translationKey:"exposes",url:`/device/${s}/exposes`},{translationKey:"bind",url:`/device/${s}/bind`},{translationKey:"reporting",url:`/device/${s}/reporting`},{translationKey:"settings",url:`/device/${s}/settings`},{translationKey:"settings_specific",url:`/device/${s}/settings-specific`},{translationKey:"state",url:`/device/${s}/state`},{translationKey:"clusters",url:`/device/${s}/clusters`},{translationKey:"scene",url:`/device/${s}/scene`},{translationKey:"dev_console",url:`/device/${s}/dev-console`}],Fe=H.create(s=>{const t=ee(),{device:n,setDeviceDescription:r}=s,[i,o]=f.useState(n.description),{t:a}=N(["zigbee","common"]),c=async()=>{await r(n.friendly_name,i),t.remove()};return e.jsxs(se,{isOpen:t.visible,children:[e.jsxs(te,{children:[e.jsx("h3",{children:a("update_description")}),e.jsx("small",{children:n.friendly_name})]}),e.jsx(ne,{children:e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:a("description")}),e.jsx("textarea",{rows:3,onChange:d=>o(d.target.value),className:"form-control",value:i})]})})})}),e.jsxs(ie,{children:[e.jsx("button",{type:"button",className:"btn btn-secondary",onClick:t.remove,children:a("common:close")}),e.jsx("button",{type:"button",className:"btn btn-primary",onClick:c,children:a("zigbee:save_description")})]})]})}),Ke=s=>{const{device:t,setDeviceDescription:n}=s,{t:r}=N(["zigbee","common"]);return e.jsx(j,{className:"btn btn-link btn-sm d-md-inline-block mx-1",onClick:()=>H.show(Fe,{device:t,setDeviceDescription:n}),title:r("edit_description"),children:e.jsx("i",{className:"fa fa-edit"})})},Ge=/\[(.*?)]\((.*?)\)/;class Te extends f.Component{render(){var x,p;const{device:t,deviceStates:n,bridgeInfo:r,availability:i,t:o}=this.props,{configureDevice:a,renameDevice:c,removeDevice:d,setDeviceDescription:u,interviewDevice:h}=this.props,m=!!((p=(x=r.config)==null?void 0:x.homeassistant)!=null&&p.enabled),g=n[t.friendly_name]??{},v=[{translationKey:"friendly_name",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("strong",{children:l.friendly_name}),e.jsx(je,{device:l,renameDevice:c,homeassistantEnabled:m,style:"link"})]})},{translationKey:"zigbee:description",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("pre",{style:{display:"inline"},children:l.description}),e.jsx(Ke,{device:l,setDeviceDescription:u,style:"link"})]})},{translationKey:"last_seen",render:(l,b,I)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ae,{lastSeenType:I.config.advanced.last_seen,state:b})})},{translationKey:"avaliability:avaliability",render:(l,b,I,w)=>{var P,U;const{config:_}=I,L=!!((P=_.availability)!=null&&P.enabled),B=((U=_.devices[l.ieee_address])==null?void 0:U.availability)!==!1;return e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ne,{availability:w,disabled:D(l,_),availabilityFeatureEnabled:L,availabilityEnabledForDevice:B})})}},{key:"type",translationKey:"device_type"},{key:"model_id",translationKey:"zigbee_model"},{key:"manufacturer",translationKey:"zigbee_manufacturer"},{key:"definition.description",translationKey:"description",if:"supported",render:l=>{var w,_;const b=Ge.exec((w=l.definition)==null?void 0:w.description);let I=e.jsx("span",{children:(_=l.definition)==null?void 0:_.description});if(b){const[L,B,P]=b;I=e.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:P,children:B})}return e.jsx("dd",{className:"col-12 col-md-7",children:I})}},{render:(l,b,I,w,_)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsxs("p",{className:re("mb-0","font-weight-bold",{"text-danger":!l.supported,"text-success":l.supported}),children:[e.jsx(K,{name:"supported",value:l.supported}),!l.supported&&e.jsxs(e.Fragment,{children:[" ",e.jsxs("a",{target:"_blank",rel:"noopener noreferrer",href:z,children:["(",_("how_to_add_support"),")"]})]})]})}),translationKey:"support_status"},{key:"ieee_address",translationKey:"ieee_address"},{key:"network_address",translationKey:"network_address",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("abbr",{title:o("network_address_hex"),children:oe(l.network_address)})," / ",e.jsx("abbr",{title:o("network_address_dec"),children:l.network_address})]})},{key:"date_code",translationKey:"firmware_build_date",if:"date_code"},{key:"software_build_id",translationKey:"firmware_version",if:"software_build_id"},{key:"definition.vendor",translationKey:"manufacturer",if:"supported",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ce,{device:l})})},{key:"definition.model",translationKey:"model",if:"supported",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Se,{device:l})})},{translationKey:"power",render:(l,b)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ie,{showLevel:!0,device:l,deviceState:b})})},{translationKey:"interview_completed",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(K,{name:"interview_completed",value:l.interview_completed})})}];return e.jsxs(f.Fragment,{children:[e.jsx("div",{className:"d-flex justify-content-center",children:e.jsx(_e,{className:`card-img-top w-auto ${J["device-pic"]}`,device:t,deviceStatus:g,disabled:D(t,r.config)})}),e.jsx("dl",{className:"row",children:v.filter(l=>l.if===void 0||F(t,l.if,!1)).map(l=>e.jsxs(f.Fragment,{children:[e.jsx("dt",{className:"col-12 col-md-5",children:o(l.translationKey)}),l.render?l.render(t,g,r,i[t.friendly_name]??"offline",o):e.jsx("dd",{className:"col-12 col-md-7",children:F(t,l.key)})]},l.translationKey))}),e.jsx(be,{device:t,state:g,homeassistantEnabled:m,configureDevice:a,renameDevice:c,removeDevice:d,setDeviceDescription:u,interviewDevice:h})]})}}const He=["deviceStates","bridgeInfo","availability"],ze=C("zigbee")(S(He,A)(Te)),Ve=ze,M={genPowerCfg:"PowerCfg",genScenes:"Scenes",genOnOff:"OnOff",genLevelCtrl:"LevelCtrl",lightingColorCtrl:"LColorCtrl",closuresWindowCovering:"Closures",genMultistateInput:"MultistateInput",genGroups:"Groups",genOta:"Ota",touchlink:"Touchlink",genIdentify:"Identify",msTemperatureMeasurement:"Temperature",msIlluminanceMeasurement:"Illuminance",msRelativeHumidity:"Humidity",msPressureMeasurement:"Pressure",msSoilMoisture:"Soil Moisture"};var k=(s=>(s[s.MULTIPLE=0]="MULTIPLE",s[s.SINGLE=1]="SINGLE",s))(k||{});function Y(s){return s.length>0&&typeof s[0]!="string"}function We(s){const[t]=f.useState(V(5)),{clusters:n=[],onChange:r,label:i,value:o,disabled:a}=s;let c=[];const d=u=>{const{checked:h,name:m}=u.target;let g=[...o];h?g.push(m):g=g.filter(v=>v!==m),r(g)};return Y(n)?console.warn("Not implemented"):c=[...n].sort((u,h)=>u.toString().localeCompare(h.toString())).map(u=>e.jsxs("div",{className:"form-check form-check-inline",children:[e.jsx("input",{className:"form-check-input",type:"checkbox",checked:o.includes(u),name:u,id:`${t}_${u}`,value:u,onChange:d,disabled:a}),e.jsx("label",{className:"form-check-label",htmlFor:`${t}_${u}`,title:u,children:M[u]??u})]},u)),e.jsxs("div",{className:"form-group",children:[i&&e.jsx("label",{className:"form-label",children:i}),e.jsx("div",{className:"form-control border-0",children:c})]})}function qe(s){const[t]=f.useState(V(5)),{clusters:n=[],onChange:r,value:i,label:o,disabled:a,...c}=s,{t:d}=N(["zigbee","common"]),u=[e.jsx("option",{hidden:!0,children:d("select_cluster")},"hidden")],h=m=>{r(m.target.value)};return Y(n)?n.forEach(m=>{const g=m.clusters.map(v=>e.jsx("option",{value:v,children:M[v]??v},v));g.length===0&&g.push(e.jsx("option",{disabled:!0,children:d("none")},"none")),u.push(e.jsx("optgroup",{label:d(m.name),children:g},m.name))}):n.forEach(m=>{u.push(e.jsx("option",{value:m,children:M[m]??m},m))}),e.jsxs("div",{className:"form-group",children:[o&&e.jsx("label",{htmlFor:t,className:"form-label",children:o}),e.jsx("select",{id:t,value:i,className:"form-select",onChange:h,disabled:a,...c,children:u})]})}function $(s){const{pickerType:t,onChange:n,clusters:r,value:i,label:o,disabled:a,...c}=s;return t===k.MULTIPLE?e.jsx(We,{onChange:n,clusters:r,value:i,disabled:a,label:o,...c}):e.jsx(qe,{onChange:n,clusters:r,value:i,disabled:a,label:o,...c})}const Je=(s,t,n)=>{var r;return s.target.type==="group"?n.find(i=>i.id===s.target.id):t[(r=s.target)==null?void 0:r.ieee_address]};class Ye extends f.Component{constructor(){super(...arguments),this.state={stateRule:{}},this.setSourceEp=t=>{const{stateRule:n}=this.state;n.source.endpoint=t,this.setState({stateRule:n})},this.setDestination=(t,n)=>{const{stateRule:r}=this.state;if(n==="device"){const i=E(t);r.target.ieee_address=t.ieee_address,r.target.type="endpoint",r.target.endpoint=i[0],delete r.target.id}else n==="group"&&(r.target.id=t.id,r.target.type="group",delete r.target.ieee_address);r.clusters=[],this.setState({stateRule:r})},this.setDestinationEp=t=>{const{stateRule:n}=this.state;n.target.endpoint=t,n.clusters=[],this.setState({stateRule:n})},this.setClusters=t=>{const{stateRule:n}=this.state;n.clusters=t,this.setState({stateRule:n})},this.onBindOrUnBindClick=t=>{const{onUnBind:n,onBind:r}=this.props,i=this.getBidingParams();t=="Bind"?r(i):n(i)}}static getDerivedStateFromProps(t,n){const{rule:r}=t;return{stateRule:r}}getBidingParams(){var c;const{device:t,groups:n,devices:r}=this.props,{stateRule:i}=this.state;let o="",a;if(i.target.type==="group")o=n.find(u=>u.id===i.target.id).friendly_name;else if(i.target.type==="endpoint"){const d=r[(c=i.target)==null?void 0:c.ieee_address];o=d.friendly_name,d.type!=="Coordinator"&&(a=i.target.endpoint)}return{from:t.friendly_name,from_endpoint:i.source.endpoint,to:o,to_endpoint:a,clusters:i.clusters}}isValidRule(){const{stateRule:t}=this.state;let n;return t.target.type=="endpoint"?n=t.source.endpoint&&t.target.ieee_address&&t.target.endpoint&&t.clusters.length>0:t.target.type=="group"&&(n=t.source.endpoint&&t.target.id&&t.clusters.length>0),!!n}render(){const{devices:t,groups:n,device:r,t:i}=this.props,{stateRule:o}=this.state,a=E(r),c=Je(o,t,n),d=E(c),u=new Set(o.clusters),h=r.endpoints[o.source.endpoint],m=o.target.type==="endpoint"&&o.target.endpoint?c==null?void 0:c.endpoints[o.target.endpoint]:void 0,g=o.target.type==="group"||(c==null?void 0:c.type)=="Coordinator";if(h&&(m||g))for(const v of[...h.clusters.input,...h.clusters.output]){const x=h.clusters.input.includes(v)&&(m==null?void 0:m.clusters.output.includes(v)),p=h.clusters.output.includes(v)&&(m==null?void 0:m.clusters.input.includes(v));(x||p||g)&&u.add(v)}return e.jsxs("div",{className:"row pb-2 border-bottom",children:[e.jsx("div",{className:"col-md-2",children:e.jsx(O,{label:i("source_endpoint"),disabled:!o.isNew,values:a,value:o.source.endpoint,onChange:this.setSourceEp})}),e.jsx("div",{className:"col-md-2",children:e.jsx(we,{label:i("destination"),disabled:!o.isNew,value:o.target.ieee_address||o.target.id,devices:t,groups:n,onChange:this.setDestination})}),e.jsx("div",{className:"col-md-2",children:o.target.type==="endpoint"?e.jsx(O,{label:i("destination_endpoint"),disabled:!o.isNew,values:d,value:o.target.endpoint,onChange:this.setDestinationEp}):null}),e.jsx("div",{className:"col-md-4",children:e.jsx($,{label:i("clusters"),pickerType:k.MULTIPLE,clusters:Array.from(u),value:o.clusters,onChange:this.setClusters})}),e.jsx("div",{className:"col-md-2",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:"Actions"}),e.jsx("div",{className:"form-control border-0",children:e.jsxs("div",{className:"btn-group btn-group-sm",children:[e.jsxs(j,{item:"Bind",disabled:!this.isValidRule(),title:i("bind"),className:"btn btn-primary",onClick:this.onBindOrUnBindClick,children:[i("bind")," ",e.jsx("i",{className:"fa fa-heart"})]}),e.jsxs(j,{item:"Unbind",disabled:!o.isNew&&!this.isValidRule(),title:i("unbind"),className:"btn btn-danger",onClick:this.onBindOrUnBindClick,children:[e.jsx("i",{className:"fa fa-heart-broken"})," ",i("unbind")]})]})})]})})]})}}const Qe=C(["common","zigbee"])(Ye),Xe=s=>`${s.source.endpoint}-${s.isNew}${s.source.ieee_address}-${s.target.id}-${s.target.ieee_address}-${s.clusters.join("-")}`,Ze=s=>{const t={};return Object.entries(s.endpoints).forEach(([n,r])=>{r.bindings.forEach(i=>{let o=i.target.id??`${i.target.ieee_address}-${i.target.endpoint}`;o=`${o}-${n}`,t[o]?t[o].clusters.push(i.cluster):t[o]={source:{ieee_address:s.ieee_address,endpoint:n},target:i.target,clusters:[i.cluster]}})}),Object.values(t)};function es(s){const{device:t,devices:n,groups:r,removeBind:i,addBind:o}=s,[a]=f.useState({isNew:Date.now(),target:{},source:{ieee_address:t.ieee_address,endpoint:""},clusters:[]}),c=f.useMemo(()=>Ze(t),[t]);return e.jsx("div",{className:"container-fluid",children:[...c,a].map((d,u)=>e.jsx(Qe,{rule:d,groups:r,onUnBind:i,onBind:o,device:t,idx:u,devices:n},Xe(d)))})}const ss=["devices","groups"],ts=S(ss,A)(es),ns=ts;var is=ge,rs=ve,os=rs(function(s,t,n){is(s,t,n)}),as=os;const Q=ae(as);function X(s){const{cluster:t,device:n,onChange:r,label:i,value:o,clusters:a,...c}=s,{bridgeDefinitions:d}=ce.getState(),{t:u}=N("zigbee"),h=x=>{const{value:p}=x.target,b=m(t)[p];b&&r(p,b)},m=x=>{const p=a??d;if(p.hasOwnProperty("clusters")&&p.clusters.hasOwnProperty(x)){const l=p.clusters[x];if(l&&Object.keys(l).length!==0)return l.attributes}else if(p.hasOwnProperty("custom_clusters")&&p.custom_clusters.hasOwnProperty(n.ieee_address)&&p.custom_clusters[n.ieee_address].hasOwnProperty(x)){const l=p.custom_clusters[n.ieee_address][x];if(l&&Object.keys(l).length!==0)return l.attributes}return[]},g=Object.keys(m(t));o!==void 0&&!g.includes(o)&&g.push(o);const v=g.map(x=>e.jsx("option",{value:x,children:x},x));return v.unshift(e.jsx("option",{hidden:!0,children:u("select_attribute")},"none")),e.jsxs("div",{className:"form-group",children:[i&&e.jsx("label",{className:"form-label",children:i}),e.jsx("select",{disabled:g.length===0,className:"form-control",onChange:h,value:o,...c,children:v})]})}const cs=(s,t,n)=>{let r=[],i=[];n&&!i.includes(n)&&i.push(n);const o=s.endpoints[t];return o&&(i=i.concat(o.clusters.output),r=[...o.clusters.input],r=r.filter(a=>!i.includes(a))),[{name:"available",clusters:i},{name:"possible",clusters:r}]},ls=["maximum_report_interval","minimum_report_interval","reportable_change","endpoint","cluster","attribute"],ds=s=>ls.every(t=>s[t]!==void 0&&s[t]!=="");function G(s){const{onChange:t,label:n,value:r,name:i}=s;return e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label text-nowrap",children:n}),e.jsx("input",{onChange:t,value:r,required:!0,type:"number",name:i,className:"form-control"})]})}class us extends f.Component{constructor(){super(...arguments),this.state={stateRule:{}},this.setSourceEp=t=>{const{stateRule:n}=this.state;n.endpoint=t,this.setState({stateRule:n})},this.setCluster=t=>{const{stateRule:n}=this.state;n.cluster=t,this.setState({stateRule:n})},this.setAttribute=t=>{const{stateRule:n}=this.state;n.attribute=t,this.setState({stateRule:n})},this.changeHandlerNumber=t=>{const{stateRule:n}=this.state,{name:r,valueAsNumber:i}=t.target;Number.isNaN(i)||(n[r]=i),this.setState({stateRule:n})},this.applyRule=()=>{const{onApply:t}=this.props,{stateRule:n}=this.state;t(n)},this.disableRule=()=>{const{onApply:t}=this.props,{stateRule:n}=this.state;t({...n,maximum_report_interval:65535})}}static getDerivedStateFromProps(t,n){const{rule:r}=t,{stateRule:i}=n;return{stateRule:Q({},r,i)}}render(){const{rule:t,device:n,t:r}=this.props,{stateRule:i}=this.state,o=E(n);return e.jsxs("div",{className:"row pb-2 border-bottom",children:[e.jsx("div",{className:"col-md-2",children:e.jsx(O,{label:r("endpoint"),disabled:!t.isNew,values:o,value:i.endpoint,onChange:this.setSourceEp})}),e.jsx("div",{className:"col-md-2",children:e.jsx($,{label:r("cluster"),disabled:!i.endpoint,pickerType:k.SINGLE,clusters:cs(n,i.endpoint,i.cluster),value:i.cluster,onChange:this.setCluster})}),e.jsx("div",{className:"col-md-2",children:e.jsx(X,{label:r("attribute"),disabled:!i.cluster,value:i.attribute,cluster:i.cluster,device:n,onChange:this.setAttribute})}),e.jsx("div",{className:"col-md-2",children:e.jsx(G,{onChange:this.changeHandlerNumber,value:i.minimum_report_interval,name:"minimum_report_interval",label:r("min_rep_interval")})}),e.jsx("div",{className:"col-md-1",children:e.jsx(G,{onChange:this.changeHandlerNumber,value:i.maximum_report_interval,name:"maximum_report_interval",label:r("max_rep_interval")})}),e.jsx("div",{className:"col-md-1",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label text-nowrap",children:r("min_rep_change")}),e.jsx("input",{onChange:this.changeHandlerNumber,value:i.reportable_change,required:!0,type:"number",name:"reportable_change",className:"form-control"})]})}),e.jsx("div",{className:"col-md-2",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:r("actions")}),e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"btn-group",role:"group","aria-label":"Basic example",children:[e.jsx(j,{disabled:!ds(i),className:"btn btn-primary",onClick:this.applyRule,children:r("common:apply")}),i.isNew?null:e.jsx(j,{prompt:!0,className:"btn btn-danger",onClick:this.disableRule,children:r("common:disable")})]})})]})})]})}}const ms=C(["zigbee","common"])(us),hs=s=>{const t=[];return Object.entries(s.endpoints).forEach(([n,r])=>{r.configured_reportings.forEach(i=>{t.push({...i,endpoint:n})})}),t},ps=s=>`${s.isNew}${s.endpoint}${s.cluster}-${s.attribute}`;function gs(s){const{configureReport:t,device:n}=s,[r]=f.useState({isNew:Date.now(),reportable_change:0,minimum_report_interval:60,maximum_report_interval:3600,endpoint:"",cluster:"",attribute:""}),i=a=>{const{cluster:c,endpoint:d,attribute:u,minimum_report_interval:h,maximum_report_interval:m,reportable_change:g}=a;t(n.friendly_name,d,{cluster:c,attribute:u,minimum_report_interval:h,maximum_report_interval:m,reportable_change:g})},o=f.useMemo(()=>hs(n),[n]);return e.jsx("div",{className:"container-fluid",children:[...o,r].map(a=>e.jsx(ms,{rule:a,device:n,onApply:i},ps(a)))})}const vs=["devices","groups"],xs=S(vs,A)(gs),fs=xs;function bs(s){const{device:t,deviceStates:n}=s,r=n[t.friendly_name]??{};return e.jsx("pre",{children:JSON.stringify(r,null,4)})}const js=["deviceStates"],Ns=S(js,A)(bs),_s=Ns;function Cs(s){var c,d;const{device:t,deviceStates:n,setDeviceState:r,getDeviceState:i}=s,{t:o}=N(["exposes"]),a=n[t.friendly_name]??{};return(d=(c=t.definition)==null?void 0:c.exposes)!=null&&d.length?e.jsx(ke,{feature:{features:t.definition.exposes,type:"composite"},device:t,deviceState:a,onChange:async(u,h)=>{await r(t.friendly_name,h)},onRead:async(u,h)=>{await i(t.friendly_name,h)},parentFeatures:[],featureWrapperClass:q}):o("empty_exposes_definition")}const Ss=["deviceStates"],As=S(Ss,A)(Cs),Is=As,ws="_tree_k0evw_1",Rs={tree:ws},T=s=>{const{label:t,clusters:n}=s;return n.length?e.jsxs("li",{children:[e.jsx("span",{children:t}),e.jsx("ul",{children:n.map(r=>e.jsx("li",{children:e.jsx("span",{children:r})},r))})]}):null};function Es(s){const{t}=N("zigbee"),{device:n}=s;return e.jsx("dl",{className:`${Rs.tree} row`,children:e.jsx("ul",{children:e.jsxs("li",{children:[e.jsx("span",{children:n.ieee_address}),e.jsx("ul",{children:Object.entries(n.endpoints).map(([r,i])=>e.jsxs("li",{children:[e.jsxs("span",{children:[t("endpoint")," ",e.jsx("strong",{children:r})]}),e.jsxs("ul",{children:[e.jsx(T,{label:t("output_clusters"),clusters:i.clusters.output}),e.jsx(T,{label:t("input_clusters"),clusters:i.clusters.input})]})]},r))})]})})})}const ks=xe(fe),Ps=s=>{const{docsUrl:t}=s,{t:n}=N("common");return e.jsx("div",{className:"card alert alert-info",role:"alert",children:e.jsxs("div",{className:"card-body",children:[e.jsx("i",{className:"fa-solid fa-circle-info fa-2xl me-2"}),e.jsx("a",{href:t,target:"_blank",rel:"noreferrer",className:"alert-link align-middle",children:n("read_the_docs_info")})]})})},ys={"ui:order":["friendly_name","disabled","retain","retention","qos","filtered_attributes","*"]};class Os extends f.Component{constructor(){super(...arguments),this.state={newSetting:{key:"",value:"",type:""},updatedDeviceConfig:{}},this.formData=void 0,this.updateConfig=async t=>{const{formData:n}=t,{data:r}=this.getSchemaAndConfig(),{setDeviceOptions:i,device:o}=this.props,a=le(r,n);await i(o.ieee_address,a),this.setState({updatedDeviceConfig:{}})}}getGenericDeviceSettingsSchema(){var n;const{bridgeInfo:{config_schema:t={}}}=this.props;return((n=t.definitions)==null?void 0:n.device)??{properties:{}}}getDeviceConfig(){const{bridgeInfo:{config:t},device:n}=this.props,{updatedDeviceConfig:r}=this.state;return Q({},t==null?void 0:t.device_options,t==null?void 0:t.devices[n.ieee_address],r)}getSchemaAndConfig(){const t=this.getGenericDeviceSettingsSchema(),n=this.getDeviceConfig();return{schema:t,data:n,uiSchema:ys}}render(){const{schema:t,data:n,uiSchema:r}=this.getSchemaAndConfig();return this.formData||(this.formData=n),e.jsxs(e.Fragment,{children:[e.jsx(Ps,{docsUrl:"https://www.zigbee2mqtt.io/guide/configuration/devices-groups.html#common-device-options"}),e.jsx(ks,{schema:t,formData:this.formData,onChange:i=>this.formData=i.formData,onSubmit:this.updateConfig,uiSchema:r,fields:{TitleField:ye,DescriptionField:Oe}})]})}}function Bs(s){const{sceneStore:t,sceneRecall:n,sceneRemove:r,sceneRemoveAll:i,setDeviceState:o,device:a,deviceState:c}=s;return e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-12 col-sm-6 col-xxl-6 d-flex",children:e.jsx("div",{className:"card flex-fill",children:e.jsx("div",{className:"card-body py-4",children:e.jsx(Re,{sceneStore:t,target:a,deviceState:c,setDeviceState:o})})})}),e.jsx("div",{className:"col-12 col-sm-6 col-xxl-6 d-flex",children:e.jsx("div",{className:"card flex-fill",children:e.jsx("div",{className:"card-body py-4",children:e.jsx(Ee,{sceneStore:t,sceneRecall:n,sceneRemove:r,sceneRemoveAll:i,target:a,deviceState:c})})})})]})}const Ms=[],$s=S(Ms,A)(Bs),Ls=$s;function Us(s){var a,c;const{device:t,bridgeInfo:{config:n},setDeviceOptions:r}=s,{t:i}=N(["exposes"]),o=n.devices[t.ieee_address]??{};return(c=(a=t.definition)==null?void 0:a.options)!=null&&c.length?e.jsx(Pe,{showEndpointLabels:!0,feature:{features:t.definition.options},type:"composite",device:t,deviceState:o,onChange:async(d,u)=>{await r(t.ieee_address,u)},featureWrapperClass:q}):i("empty_exposes_definition")}const Ds=["bridgeInfo"],Fs=S(Ds,A)(Us),Ks=Fs;function Z(s){const{logs:t,filterFn:n}=s,r=t.filter(n),i=r.length>0?r[r.length-1]:null,o=[];return i&&o.push(e.jsx(Be,{log:i,search:"",logLevel:Me},"log")),e.jsx(e.Fragment,{children:o})}const Gs=s=>{const{executeCommand:t,device:n,logs:r}=s,{t:i}=N("zigbee"),[o,a]=f.useState(1),[c,d]=f.useState(""),[u,h]=f.useState(""),[m,g]=f.useState(JSON.stringify({},null,2)),v=()=>{let l=!0;try{JSON.parse(m)}catch{l=!1}return l&&!isNaN(parseInt(c))&&!isNaN(parseInt(u))},x=()=>{t(n.friendly_name,o,parseInt(c),parseInt(u),JSON.parse(m))},p=l=>l.message.startsWith("Invoked ");return e.jsxs("div",{children:[e.jsxs("div",{className:"row mb-3",children:[e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:i("endpoint")}),e.jsx("input",{type:"number",min:"1",max:"255",value:o,onChange:l=>a(l.target.valueAsNumber),className:"form-control"})]})}),e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("cluster")}),e.jsx("input",{type:"text",value:c,placeholder:"example: 0x0001, 1, 123",onChange:l=>d(l.target.value),className:"form-control"})]})}),e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("command")}),e.jsx("input",{type:"text",value:u,placeholder:"example: 0x0001, 1, 123",onChange:l=>h(l.target.value),className:"form-control"})]})})]}),e.jsx("div",{className:"row mb-3 ",children:e.jsx("div",{className:"col-9 col-sm-9",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("payload")}),e.jsx("textarea",{rows:3,value:m,onChange:l=>g(l.target.value),className:"form-control"})]})})}),e.jsx("div",{className:"row",children:e.jsx("div",{className:"btn-group col col-3",children:e.jsx("button",{onClick:x,disabled:!v(),type:"button",className:"btn btn-success",children:i("execute")})})}),e.jsx("div",{className:"row",children:e.jsx(Z,{logs:r,filterFn:p})})]})},Ts=f.lazy(()=>de(()=>import("./CodeEditor-9087c631.js"),["./CodeEditor-9087c631.js","./index-bb99dd37.js","./index-0f5e7faa.css","./extends-98964cd2.js"],import.meta.url));class Hs extends W.Component{constructor(){super(...arguments),this.onGenerateExternalDefinitionClick=()=>{const{generateExternalDefinition:t,device:n}=this.props;t(n.ieee_address)}}render(){const{t,generatedExternalDefinitions:n,device:r,theme:i}=this.props,o=n[r.ieee_address];return o?e.jsxs(e.Fragment,{children:[t("generated_external_definition")," (",e.jsx("a",{href:z,target:"_blank",rel:"noreferrer",children:t("documentation")}),")",e.jsx(Ts,{value:o,theme:i})]}):e.jsx(j,{className:"btn btn-primary",onClick:this.onGenerateExternalDefinitionClick,children:t("generate_external_definition")})}}const zs=C(["devConsole","common"])(Hs);var R=(s=>(s[s.NO_DATA=0]="NO_DATA",s[s.DATA8=8]="DATA8",s[s.DATA16=9]="DATA16",s[s.DATA24=10]="DATA24",s[s.DATA32=11]="DATA32",s[s.DATA40=12]="DATA40",s[s.DATA48=13]="DATA48",s[s.DATA56=14]="DATA56",s[s.DATA64=15]="DATA64",s[s.BOOLEAN=16]="BOOLEAN",s[s.BITMAP8=24]="BITMAP8",s[s.BITMAP16=25]="BITMAP16",s[s.BITMAP24=26]="BITMAP24",s[s.BITMAP32=27]="BITMAP32",s[s.BITMAP40=28]="BITMAP40",s[s.BITMAP48=29]="BITMAP48",s[s.BITMAP56=30]="BITMAP56",s[s.BITMAP64=31]="BITMAP64",s[s.UINT8=32]="UINT8",s[s.UINT16=33]="UINT16",s[s.UINT24=34]="UINT24",s[s.UINT32=35]="UINT32",s[s.UINT40=36]="UINT40",s[s.UINT48=37]="UINT48",s[s.UINT56=38]="UINT56",s[s.UINT64=39]="UINT64",s[s.INT8=40]="INT8",s[s.INT16=41]="INT16",s[s.INT24=42]="INT24",s[s.INT32=43]="INT32",s[s.INT40=44]="INT40",s[s.INT48=45]="INT48",s[s.INT56=46]="INT56",s[s.INT64=47]="INT64",s[s.ENUM8=48]="ENUM8",s[s.ENUM16=49]="ENUM16",s[s.SEMI_PREC=56]="SEMI_PREC",s[s.SINGLE_PREC=57]="SINGLE_PREC",s[s.DOUBLE_PREC=58]="DOUBLE_PREC",s[s.OCTET_STR=65]="OCTET_STR",s[s.CHAR_STR=66]="CHAR_STR",s[s.LONG_OCTET_STR=67]="LONG_OCTET_STR",s[s.LONG_CHAR_STR=68]="LONG_CHAR_STR",s[s.ARRAY=72]="ARRAY",s[s.STRUCT=76]="STRUCT",s[s.SET=80]="SET",s[s.BAG=81]="BAG",s[s.TOD=224]="TOD",s[s.DATE=225]="DATE",s[s.UTC=226]="UTC",s[s.CLUSTER_ID=232]="CLUSTER_ID",s[s.ATTR_ID=233]="ATTR_ID",s[s.BAC_OID=234]="BAC_OID",s[s.IEEE_ADDR=240]="IEEE_ADDR",s[s.SEC_KEY=241]="SEC_KEY",s[s.UNKNOWN=255]="UNKNOWN",s))(R||{});const Vs=["Read result of","Publish 'set' 'read' to","Publish 'set' 'write' to","Wrote "];class Ws extends W.Component{constructor(t){super(t),this.onEndpointChange=o=>{this.setState({attributes:[],cluster:"",endpoint:o})},this.onClusterChange=o=>{this.setState({attributes:[],cluster:o})},this.onAttributeSelect=(o,a)=>{const{attributes:c}=this.state;if(!c.find(d=>d.attribute===o)){const d=c.concat([{attribute:o,definition:a}]);this.setState({attributes:d})}},this.onAttributeDelete=o=>{const{attributes:a}=this.state,c=a.filter(d=>d.attribute!==o);this.setState({attributes:c})},this.onReadClick=()=>{const{readDeviceAttributes:o,device:a}=this.props,{cluster:c,attributes:d,endpoint:u}=this.state;o(a.friendly_name,u,c,d.map(h=>h.attribute),{})},this.onWriteClick=()=>{const{writeDeviceAttributes:o,device:a}=this.props,{cluster:c,attributes:d,endpoint:u}=this.state;o(a.friendly_name,u,c,d,{})},this.onAttributeValueChange=(o,a)=>{const{attributes:c}=this.state,d=[...c],u=d.find(h=>h.attribute===o);u&&(u.value=a),this.setState({attributes:d})};const{device:n,clusters:r}=t,i=Object.keys(n.endpoints)[0];this.state={endpoint:i,cluster:"",attributes:[]}}renderSelectedAttribute(){const{attributes:t}=this.state;return t.map(({attribute:n,value:r="",definition:i})=>e.jsx("div",{className:"row mb-1",children:e.jsx("div",{className:"col-3",children:e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-6",children:n}),e.jsx("div",{className:"col-3",children:e.jsx(qs,{value:r,attribute:n,definition:i,onChange:this.onAttributeValueChange,"data-testid":"attribute-value-input"})}),e.jsx("div",{className:"col-2",children:e.jsx(j,{className:"btn btn-danger btn-sm",item:n,"data-testid":"remove-attribute",onClick:this.onAttributeDelete,children:e.jsx("i",{className:"fas fa-trash"})})})]})})},n))}render(){const{cluster:t,attributes:n,endpoint:r}=this.state,i=n.length===0,o=t==="",{t:a,device:c,clusters:d}=this.props,u=E(c),h=m=>Vs.some(g=>m.message.startsWith(g));return r?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 row",children:[e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx(O,{"data-testid":"endpoint-picker",label:a("zigbee:endpoint"),values:u,value:r,onChange:this.onEndpointChange})}),e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx($,{"data-testid":"cluster-picker",label:a("cluster"),pickerType:k.SINGLE,clusters:c.endpoints[r].clusters.input,value:t,onChange:this.onClusterChange})}),e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx(X,{"data-testid":"attribute-picker",label:a("attribute"),value:"",cluster:t,device:c,clusters:d,onChange:this.onAttributeSelect})})]}),e.jsx("div",{className:"mb-3 row","data-testid":"selected-attribute",children:this.renderSelectedAttribute()}),e.jsx("div",{className:"mb-3 row",children:e.jsxs("div",{className:"btn-group col col-3",role:"group",children:[e.jsx(j,{disabled:i||o,className:"btn btn-success me-2","data-testid":"read-attribute",onClick:this.onReadClick,children:a("read")}),e.jsx(j,{disabled:i||o,className:"btn btn-danger","data-testid":"write-attribute",onClick:this.onWriteClick,children:a("write")})]})}),e.jsx(Z,{logs:this.props.logs,filterFn:h})]}):e.jsx(e.Fragment,{children:"No endpoints"})}}function qs(s){const{value:t,onChange:n,attribute:r,definition:i,...o}=s,c={[R.CHAR_STR]:"string",[R.LONG_CHAR_STR]:"string",[R.OCTET_STR]:"string",[R.LONG_OCTET_STR]:"string"}[i.type]??"number",d=u=>{const h=c==="number"?u.target.valueAsNumber:u.target.value;n(r,h)};return e.jsx("input",{className:"form-control",type:c,value:t,onChange:d,...o})}const Js=C(["devConsole","common"])(Ws);class Ys extends f.Component{render(){return e.jsxs("div",{children:[e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(zs,{theme:this.props.theme,device:this.props.device,generateExternalDefinition:this.props.generateExternalDefinition,generatedExternalDefinitions:this.props.generatedExternalDefinitions})})}),e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(Js,{theme:this.props.theme,device:this.props.device,logs:this.props.logs,i18n:this.props.i18n,readDeviceAttributes:this.props.readDeviceAttributes,writeDeviceAttributes:this.props.writeDeviceAttributes})})}),e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(Gs,{device:this.props.device,logs:this.props.logs,executeCommand:this.props.executeCommand})})})]})}}const Qs=C(["devConsole","common"])(Ys);function Xs(s){const{match:t,devices:n,logs:r}=s,{readDeviceAttributes:i,writeDeviceAttributes:o,setDeviceOptions:a,executeCommand:c,generateExternalDefinition:d,bridgeInfo:u,deviceStates:h,generatedExternalDefinitions:m,theme:g}=s,{tab:v,dev:x}=t.params,p=n[x],l=h[p.friendly_name]??{};switch(v){case"info":return e.jsx(Ve,{device:p});case"bind":return e.jsx(ns,{device:p});case"state":return e.jsx(_s,{device:p});case"exposes":return e.jsx(Is,{device:p});case"clusters":return e.jsx(Es,{device:p});case"reporting":return e.jsx(fs,{device:p});case"settings":return e.jsx(Os,{device:p,setDeviceOptions:a,bridgeInfo:u});case"settings-specific":return e.jsx(Ks,{device:p,setDeviceOptions:a,bridgeInfo:u});case"dev-console":return e.jsx(Qs,{device:p,logs:r,readDeviceAttributes:i,writeDeviceAttributes:o,generateExternalDefinition:d,generatedExternalDefinitions:m,executeCommand:c,theme:g});case"scene":return e.jsx(Ls,{device:p,deviceState:l});default:return e.jsx(ue,{to:`/device/${x}/info`})}}function Zs(s){const{devices:t,match:n,t:r}=s,{dev:i,tab:o}=n.params,a=t[i];if(!a)return e.jsx("div",{className:"h-100 d-flex justify-content-center align-items-center",children:r("unknown_device")});const c=De(i);return e.jsxs(e.Fragment,{children:[e.jsx(Le,{allDevices:t,currentDevice:a,tab:o}),e.jsxs("div",{className:"tab",children:[e.jsx("ul",{className:"nav nav-tabs",children:c.map(d=>e.jsx("li",{className:"nav-item",children:e.jsx(me,{activeClassName:"active",className:`nav-link ${J["small-nav"]}`,to:d.url,children:r(d.translationKey)})},d.translationKey))}),e.jsx("div",{className:"tab-content",children:e.jsx("div",{className:"tab-pane fade show active",children:e.jsx(Xs,{...s})})})]})]})}const vt=C("devicePage")(S(["devices","deviceStates","logs","bridgeInfo","generatedExternalDefinitions","theme"],A)(he(Zs)));export{vt as ConnectedDevicePage};
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{aJ as d,u as p,j as t,b as g,l as h,v as w,r as j}from"./index-bb99dd37.js";import{p as y}from"./powerSourceTypeToTranslationKey-452dac81.js";var m=[60,60,24,7,365/7/12,12];function x(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}function _(e,a){var s=e<0?1:0;e=Math.abs(e);for(var r=e,n=0;e>=m[n]&&n<m.length;n++)e/=m[n];return e=Math.floor(e),n*=2,e>(n===0?9:1)&&(n+=1),a(e,n,r)[s].replace("%s",e.toString())}function N(e,a){var s=a?x(a):new Date;return(+s-+x(e))/1e3}var k=function(e,a,s){var r=N(e,s&&s.relativeDate);return _(r,d(a))};function D(e){const{value:a,name:s}=e,{t:r}=p("values"),n={contact:new Map([[!0,r("closed")],[!1,r("open")]]),occupancy:new Map([[!0,r("occupied")],[!1,r("clear")]]),water_leak:new Map([[!0,t.jsx("span",{className:g("text-danger","animation-blinking"),children:r("leaking")},"Leaking")],[!1,r("clear")]]),tamper:new Map([[!0,t.jsx("span",{className:g("text-danger","animation-blinking"),children:r("tampered")},"tampered")],[!1,r("clear")]]),supported:new Map([[!0,r("supported")],[!1,r("not_supported")]]),_default:new Map([[!0,r("true")],[!1,r("false")]])},i=n[s]||n._default;return t.jsx(t.Fragment,{children:i.get(a)})}function L(e){const{t:a}=p("values"),{value:s}=e;switch(typeof s){case"boolean":return t.jsx(D,{...e});case"undefined":return t.jsx(t.Fragment,{children:"N/A"});case"object":return t.jsx(t.Fragment,{children:s===null?a("null"):JSON.stringify(s)});case"string":return t.jsx(t.Fragment,{children:s===""?t.jsx("small",{className:"text-muted",children:a("empty_string")}):s});default:return t.jsx(t.Fragment,{children:JSON.stringify(s)})}}function q(e){const{i18n:a}=p(),{state:s,lastSeenType:r}=e,n=h(s,r);return n?t.jsx("span",{title:w(n),children:k(n,a.language)}):t.jsx(t.Fragment,{children:"N/A"})}const M="_plug_1sba2_1",$={plug:M},F=({device:e,deviceState:a,showLevel:s,...r})=>{const{t:n}=p("zigbee");let i;switch(e!==void 0&&(i=e.power_source),i){case"Battery":let b=n(y(i)),u="",l="fa-question",o,f,c;if(a!==void 0&&((a==null?void 0:a.battery)!==void 0&&(o=a.battery),(a==null?void 0:a.battery_state)!==void 0&&(f=a.battery_state),(a==null?void 0:a.battery_low)!==void 0&&(c=a.battery_low)),o!==void 0)if(u=o+"%",o>=85)l="fa-battery-full";else if(o>=65)l="fa-battery-three-quarters";else if(o>=40)l="fa-battery-half";else if(o>=20)l="fa-battery-quarter";else if(o>=10)l="fa-battery-empty animation-blinking";else return t.jsxs("span",{className:"animation-blinking text-danger",role:"alert",children:[o,"%"]});else if(f!==void 0)switch(u=f,f){case"high":l="fa-battery-full";break;case"medium":l="fa-battery-half";break;case"low":l="fa-battery-empty animation-blinking";break}else c!==void 0&&(u=c?"LOW":"OK",l=c?"fa-battery-empty":"fa-battery-full");return c===!0&&(l+=" animation-blinking text-danger"),u!==""&&(b+=", "+n("power_level")+`: ${u}`),t.jsxs(j.Fragment,{children:[s?t.jsxs("span",{className:"pe-2",children:[n("battery")," ",u]}):null,t.jsx("i",{className:`fa ${l}`,title:b,...r})]});case"Mains (single phase)":case"DC Source":return t.jsx("i",{className:`fa fa-plug ${$.plug}`,title:n(y(i)),...r});default:return t.jsx("i",{className:"fa fa-question",title:i,...r})}},A=F;export{L as D,q as L,A as P};
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{u as j,l as w,j as a,r as x,L as C,g as h,d as g,c as k,a as S,w as E,R as H,i as L}from"./index-bb99dd37.js";import{V as T,M as F}from"./vendor-links-996ad5d1.js";import{L as A,D as q,P as M}from"./index-7bf82366.js";import{i as N,A as P,D as I}from"./Availability-ae56805a.js";import{T as R}from"./ReactTableCom-620133da.js";import{D as V}from"./DeviceImage-1f4eb445.js";import{D as B}from"./DEVICES_GLOBAL_NAME-6620c611.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./persist-fedbbe50.js";import"./index-9f3e2a2f.js";const $={"action-column":"_action-column_1729o_1","device-pic":"_device-pic_1729o_8","device-image":"_device-image_1729o_14"};function z(l){const{data:t,lastSeenType:o,availabilityFeatureEnabled:r,homeassistantEnabled:d,setDeviceDescription:f}=l,{renameDevice:c,removeDevice:m,configureDevice:v,interviewDevice:b}=l,{t:s}=j(["zigbee","common","avaliability"]),u=o!=="disable"?[{id:"last_seen",Header:s("last_seen"),accessor:({state:e})=>{var i;return(i=w(e,o))==null?void 0:i.getTime()},Cell:({row:{original:{state:e}}})=>a.jsx(A,{state:e,lastSeenType:o})}]:[],y=t.some(e=>e.availabilityEnabledForDevice||r&&e.availabilityEnabledForDevice!==!1)?[{id:"availability",Header:s("avaliability:avaliability"),accessor:({availabilityState:e})=>N(e)?e:e.state,Cell:({row:{original:{availabilityState:e,availabilityEnabledForDevice:i,disabled:n}}})=>a.jsx(P,{disabled:n,availability:e,availabilityEnabledForDevice:i,availabilityFeatureEnabled:r})}]:[],_=x.useMemo(()=>[{id:"pic",Header:s("pic"),Cell:({row:{original:{device:e,state:i,disabled:n}}})=>a.jsx(V,{className:$["device-image"],device:e,deviceStatus:i,disabled:n}),accessor:e=>e,disableSortBy:!0},{id:"friendly_name",Header:s("friendly_name"),accessor:({device:e})=>[e.friendly_name,e.description].join(" "),Cell:({row:{original:{device:e}}})=>a.jsxs(a.Fragment,{children:[a.jsx(C,{to:h(e.ieee_address),children:e.friendly_name}),a.jsx("small",{className:"d-block",children:e.description})]})},{id:"ieee_address",Header:s("ieee_address"),accessor:({device:e})=>[e.ieee_address,g(e.network_address,4)].join(" "),Cell:({row:{original:{device:e}}})=>a.jsxs(a.Fragment,{children:[a.jsx("div",{children:e.ieee_address}),a.jsx("div",{children:a.jsxs("abbr",{title:`${s("network_address_hex")} (${s("network_address_dec")}: ${e.network_address})`,children:["(",g(e.network_address,4),")"]})})]})},{id:"manufacturer",Header:s("manufacturer"),accessor:({device:e})=>{var i;return[(i=e.definition)==null?void 0:i.vendor,e.manufacturer].join(" ")},Cell:({row:{original:{device:e}}})=>a.jsx(T,{device:e})},{id:"model",Header:s("model"),accessor:({device:e})=>{var i;return[(i=e.definition)==null?void 0:i.model,e.model_id].join(" ")},Cell:({row:{original:{device:e}}})=>a.jsx(F,{device:e})},{id:"lqi",Header:s("lqi"),accessor:({state:e})=>e.linkquality,Cell:({row:{original:{state:e}}})=>a.jsx(q,{value:e.linkquality,name:"linkquality"})},...u,...y,{id:"power",Header:s("power"),accessor:({state:e,device:i})=>{var n;return[e.battery,(n=i.definition)==null?void 0:n.power].join(" ")},Cell:({row:{original:{state:e,device:i}}})=>a.jsx(M,{device:i,deviceState:e})},{id:"controls",Header:"",Cell:({row:{original:{device:e,state:i}}})=>a.jsx(I,{device:e,state:i,homeassistantEnabled:d,renameDevice:c,removeDevice:m,configureDevice:v,setDeviceDescription:f,interviewDevice:b}),disableSortBy:!0}],[u,y,s,d,c,m,v,b]);return a.jsx("div",{className:"card",children:a.jsx("div",{className:"table-responsive",children:a.jsx(R,{id:B,columns:_,data:t})})})}function G(l){var _,e;const{devices:t,deviceStates:o,bridgeInfo:{config:r},availability:d}=l,{renameDevice:f,removeDevice:c,configureDevice:m,setDeviceDescription:v,interviewDevice:b}=l,s=!!((_=r.availability)!=null&&_.enabled),u=!!((e=r==null?void 0:r.homeassistant)!=null&&e.enabled),p=()=>Object.values(t).filter(i=>i.type!=="Coordinator").map(i=>{var D;const n=o[i.friendly_name]??{};return{id:i.friendly_name,disabled:L(i,r),device:i,state:n,availabilityState:d[i.friendly_name]??"offline",availabilityEnabledForDevice:((D=r.devices[i.ieee_address])==null?void 0:D.availability)!==!1}}),y=H.useMemo(()=>p(),[t,o]);return a.jsx(z,{data:y,lastSeenType:r.advanced.last_seen,availabilityFeatureEnabled:s,homeassistantEnabled:u,renameDevice:f,removeDevice:c,configureDevice:m,setDeviceDescription:v,interviewDevice:b})}const O=["devices","deviceStates","bridgeInfo","availability"],ae=k(O,S)(E(["zigbee","common"])(G));export{ae as ConnectedZigbeePage};
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|