zigbee2mqtt-frontend 0.9.13 → 0.9.15

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/assets/{Availability-25859ae3.js → Availability-27a9e984.js} +1 -1
  3. package/dist/assets/Availability-27a9e984.js.br +0 -0
  4. package/dist/assets/{CodeEditor-4b5824e3.js → CodeEditor-19541677.js} +1 -1
  5. package/dist/assets/CodeEditor-19541677.js.br +0 -0
  6. package/dist/assets/ConnectedDevicePage-d12cb4b5.js +1 -0
  7. package/dist/assets/ConnectedDevicePage-d12cb4b5.js.br +0 -0
  8. package/dist/assets/{ConnectedMap-dc1d60ec.js → ConnectedMap-c6957606.js} +1 -1
  9. package/dist/assets/ConnectedMap-c6957606.js.br +0 -0
  10. package/dist/assets/{Dashboard-dee87bdc.js → Dashboard-81633817.js} +1 -1
  11. package/dist/assets/Dashboard-81633817.js.br +0 -0
  12. package/dist/assets/{DashboardDevice-8176b25c.js → DashboardDevice-6176b89d.js} +1 -1
  13. package/dist/assets/DashboardDevice-6176b89d.js.br +0 -0
  14. package/dist/assets/DashboardFeatureWrapper-2c52b401.js +1 -0
  15. package/dist/assets/DashboardFeatureWrapper-2c52b401.js.br +0 -0
  16. package/dist/assets/{DeviceImage-f74d9d0a.js → DeviceImage-8af0c725.js} +1 -1
  17. package/dist/assets/DeviceImage-8af0c725.js.br +0 -0
  18. package/dist/assets/{GroupPage-3ee20068.js → GroupPage-951a5630.js} +1 -1
  19. package/dist/assets/GroupPage-951a5630.js.br +0 -0
  20. package/dist/assets/{ReactTableCom-3dd97a7f.js → ReactTableCom-746678c0.js} +1 -1
  21. package/dist/assets/ReactTableCom-746678c0.js.br +0 -0
  22. package/dist/assets/{RecallRemove-b1c0e672.js → RecallRemove-619559aa.js} +1 -1
  23. package/dist/assets/RecallRemove-619559aa.js.br +0 -0
  24. package/dist/assets/{_baseSet-96dfcc76.js → _baseSet-9002fa74.js} +1 -1
  25. package/dist/assets/{_getAllKeysIn-f543c301.js → _getAllKeysIn-075aa3b7.js} +1 -1
  26. package/dist/assets/{bootstrap-5.esm-99a5aee4.js → bootstrap-5.esm-b44553aa.js} +1 -1
  27. package/dist/assets/bootstrap-5.esm-b44553aa.js.br +0 -0
  28. package/dist/assets/{index-3d88a8ca.js → index-27a0b27c.js} +1 -1
  29. package/dist/assets/index-27a0b27c.js.br +0 -0
  30. package/dist/assets/{index-d618bf8b.js → index-358cb91e.js} +1 -1
  31. package/dist/assets/index-358cb91e.js.br +0 -0
  32. package/dist/assets/{index-898d1ef3.js → index-43c75072.js} +1 -1
  33. package/dist/assets/index-43c75072.js.br +0 -0
  34. package/dist/assets/{index-a087efad.js → index-4fd00f82.js} +2 -2
  35. package/dist/assets/index-4fd00f82.js.br +0 -0
  36. package/dist/assets/{index-731ec1e3.js → index-740871bb.js} +47 -39
  37. package/dist/assets/index-740871bb.js.br +0 -0
  38. package/dist/assets/{index-bd78bd89.js → index-84643428.js} +1 -1
  39. package/dist/assets/index-84643428.js.br +0 -0
  40. package/dist/assets/{index-8abc2b77.js → index-a05670f0.js} +1 -1
  41. package/dist/assets/index-a05670f0.js.br +0 -0
  42. package/dist/assets/{index-14e79f06.js → index-aba26eab.js} +1 -1
  43. package/dist/assets/index-aba26eab.js.br +0 -0
  44. package/dist/assets/{index-b6b836d5.js → index-c1aa690d.js} +1 -1
  45. package/dist/assets/index-e7f8a633.js +1 -0
  46. package/dist/assets/index-e7f8a633.js.br +0 -0
  47. package/dist/assets/{intersection-a497b485.js → intersection-2e249378.js} +1 -1
  48. package/dist/assets/intersection-2e249378.js.br +0 -0
  49. package/dist/assets/{isEqual-726be554.js → isEqual-7f908bc1.js} +1 -1
  50. package/dist/assets/{jszip.min-e202d4ae.js → jszip.min-5ef36280.js} +1 -1
  51. package/dist/assets/jszip.min-5ef36280.js.br +0 -0
  52. package/dist/assets/{persist-df5c7828.js → persist-f9b22bcb.js} +1 -1
  53. package/dist/assets/persist-f9b22bcb.js.br +0 -0
  54. package/dist/assets/{rjsf-translation-fields-1f424d71.js → rjsf-translation-fields-f7052e67.js} +1 -1
  55. package/dist/assets/{spinner-fecb4e80.js → spinner-cb9a3a0e.js} +1 -1
  56. package/dist/assets/vendor-links-35809150.js +1 -0
  57. package/dist/assets/vendor-links-35809150.js.br +0 -0
  58. package/dist/index.html +1 -1
  59. package/dist/index.html.br +0 -0
  60. package/package.json +1 -1
  61. package/dist/assets/Availability-25859ae3.js.br +0 -0
  62. package/dist/assets/CodeEditor-4b5824e3.js.br +0 -0
  63. package/dist/assets/ConnectedDevicePage-05c40ea5.js +0 -1
  64. package/dist/assets/ConnectedDevicePage-05c40ea5.js.br +0 -0
  65. package/dist/assets/ConnectedMap-dc1d60ec.js.br +0 -0
  66. package/dist/assets/Dashboard-dee87bdc.js.br +0 -0
  67. package/dist/assets/DashboardDevice-8176b25c.js.br +0 -0
  68. package/dist/assets/DashboardFeatureWrapper-4f80a91e.js +0 -1
  69. package/dist/assets/DashboardFeatureWrapper-4f80a91e.js.br +0 -0
  70. package/dist/assets/DeviceImage-f74d9d0a.js.br +0 -0
  71. package/dist/assets/GroupPage-3ee20068.js.br +0 -0
  72. package/dist/assets/ReactTableCom-3dd97a7f.js.br +0 -0
  73. package/dist/assets/RecallRemove-b1c0e672.js.br +0 -0
  74. package/dist/assets/bootstrap-5.esm-99a5aee4.js.br +0 -0
  75. package/dist/assets/index-14e79f06.js.br +0 -0
  76. package/dist/assets/index-3d88a8ca.js.br +0 -0
  77. package/dist/assets/index-53308045.js +0 -1
  78. package/dist/assets/index-53308045.js.br +0 -0
  79. package/dist/assets/index-731ec1e3.js.br +0 -0
  80. package/dist/assets/index-898d1ef3.js.br +0 -0
  81. package/dist/assets/index-8abc2b77.js.br +0 -0
  82. package/dist/assets/index-a087efad.js.br +0 -0
  83. package/dist/assets/index-bd78bd89.js.br +0 -0
  84. package/dist/assets/index-d618bf8b.js.br +0 -0
  85. package/dist/assets/intersection-a497b485.js.br +0 -0
  86. package/dist/assets/jszip.min-e202d4ae.js.br +0 -0
  87. package/dist/assets/persist-df5c7828.js.br +0 -0
  88. package/dist/assets/vendor-links-6dfec9d6.js +0 -1
  89. package/dist/assets/vendor-links-6dfec9d6.js.br +0 -0
@@ -1 +0,0 @@
1
- import{w as C,r as f,j as e,E as y,N as H,e as ee,u as N,M as se,k as te,m as ne,n as ie,B as j,c as S,a as A,i as D,G as F,b as re,H as z,d as oe,I as V,o as E,v as ae,J as ce,z as le,_ as de,R as W,D as ue,C as me,p as he}from"./index-731ec1e3.js";import{F as pe,a as ve,b as ge,w as xe,T as fe}from"./bootstrap-5.esm-99a5aee4.js";import{D as be,a as je,A as Ne}from"./Availability-25859ae3.js";import{D as _e}from"./DeviceImage-f74d9d0a.js";import{V as Ce,M as Se}from"./vendor-links-6dfec9d6.js";import{L as Ae,D as K,P as Ie}from"./index-3d88a8ca.js";import{E as O,D as we,A as Re,R as Ee}from"./RecallRemove-b1c0e672.js";import{F as ke,a as q,T as Pe}from"./DashboardFeatureWrapper-4f80a91e.js";import{T as ye,D as Oe}from"./rjsf-translation-fields-1f424d71.js";import{L as Be,A as Me}from"./index-898d1ef3.js";import"./_getAllKeysIn-f543c301.js";import"./isEqual-726be554.js";import"./intersection-a497b485.js";import"./index-b6b836d5.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./_baseSet-96dfcc76.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,v;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=!!((v=(x=r.config)==null?void 0:x.homeassistant)!=null&&v.enabled),p=n[t.friendly_name]??{},g=[{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?void 0:P.enabled,B=(U=_.devices[l.ieee_address])==null?void 0:U.availability;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_state",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(K,{name:"interview_state",value:l.interview_state.toLowerCase().replace("_"," ").replace(/^./,b=>b.toUpperCase())})})}];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:p,disabled:D(t,r.config)})}),e.jsx("dl",{className:"row",children:g.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,p,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:p,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 p=[...o];h?p.push(m):p=p.filter(g=>g!==m),r(p)};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 p=m.clusters.map(g=>e.jsx("option",{value:g,children:M[g]??g},g));p.length===0&&p.push(e.jsx("option",{disabled:!0,children:d("none")},"none")),u.push(e.jsx("optgroup",{label:d(m.name),children:p},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,p=o.target.type==="group"||(c==null?void 0:c.type)=="Coordinator";if(h&&(m||p))for(const g of[...h.clusters.input,...h.clusters.output]){const x=h.clusters.input.includes(g)&&(m==null?void 0:m.clusters.output.includes(g)),v=h.clusters.output.includes(g)&&(m==null?void 0:m.clusters.input.includes(g));(x||v||p)&&u.add(g)}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=ve,rs=ge,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:v}=x.target,b=m(t)[v];b&&r(v,b)},m=x=>{const v=a??d;if(v.hasOwnProperty("clusters")&&v.clusters.hasOwnProperty(x)){const l=v.clusters[x];if(l&&Object.keys(l).length!==0)return l.attributes}else if(v.hasOwnProperty("custom_clusters")&&v.custom_clusters.hasOwnProperty(n.ieee_address)&&v.custom_clusters[n.ieee_address].hasOwnProperty(x)){const l=v.custom_clusters[n.ieee_address][x];if(l&&Object.keys(l).length!==0)return l.attributes}return[]},p=Object.keys(m(t));o!==void 0&&!p.includes(o)&&p.push(o);const g=p.map(x=>e.jsx("option",{value:x,children:x},x));return g.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:p.length===0,className:"form-control",onChange:h,value:o,...c,children:g})]})}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 vs(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:p}=a;t(n.friendly_name,d,{cluster:c,attribute:u,minimum_report_interval:h,maximum_report_interval:m,reportable_change:p})},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 gs=["devices","groups"],xs=S(gs,A)(vs),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,p]=f.useState(JSON.stringify({},null,2)),g=()=>{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))},v=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=>p(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:!g(),type:"button",className:"btn btn-success",children:i("execute")})})}),e.jsx("div",{className:"row",children:e.jsx(Z,{logs:r,filterFn:v})})]})},Ts=f.lazy(()=>de(()=>import("./CodeEditor-4b5824e3.js"),["./CodeEditor-4b5824e3.js","./index-731ec1e3.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(){var m,p;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=g=>Vs.some(x=>g.message.startsWith(x));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:((p=(m=c.endpoints)==null?void 0:m[r])==null?void 0:p.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:p}=s,{tab:g,dev:x}=t.params,v=n[x],l=h[v.friendly_name]??{};switch(g){case"info":return e.jsx(Ve,{device:v});case"bind":return e.jsx(ns,{device:v});case"state":return e.jsx(_s,{device:v});case"exposes":return e.jsx(Is,{device:v});case"clusters":return e.jsx(Es,{device:v});case"reporting":return e.jsx(fs,{device:v});case"settings":return e.jsx(Os,{device:v,setDeviceOptions:a,bridgeInfo:u});case"settings-specific":return e.jsx(Ks,{device:v,setDeviceOptions:a,bridgeInfo:u});case"dev-console":return e.jsx(Qs,{device:v,logs:r,readDeviceAttributes:i,writeDeviceAttributes:o,generateExternalDefinition:d,generatedExternalDefinitions:m,executeCommand:c,theme:p});case"scene":return e.jsx(Ls,{device:v,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 gt=C("devicePage")(S(["devices","deviceStates","logs","bridgeInfo","generatedExternalDefinitions","theme"],A)(he(Zs)));export{gt as ConnectedDevicePage};
@@ -1 +0,0 @@
1
- import{v as B,aJ as Ne,aa as $e,j as c,B as v,r as x,b as y,aK as Ae,u as ee,w as V,R as q,Q as U}from"./index-731ec1e3.js";import{F as b}from"./DeviceImage-f74d9d0a.js";import{D as G}from"./index-3d88a8ca.js";import{i as Me}from"./isEqual-726be554.js";function Oe(e){return e.type==="binary"}function te(e){return e.type==="list"}function Te(e){return e.type==="numeric"}function Le(e){return e.type==="text"}function We(e){return e.type==="enum"}function Ue(e){return e.type==="light"}function ze(e){return e.type==="switch"}function Ie(e){return e.type==="cover"}function Pe(e){return e.type==="lock"}function De(e){return e.type==="fan"}function O(e){return e.type==="composite"&&e.name!=="color_xy"&&e.name!=="color_hs"}function ne(e){return e.type==="composite"&&(e.name==="color_xy"||e.name==="color_hs")}function Be(e){return e.type==="climate"}function Ve(e){return te(e)&&e.name==="gradient"&&e.length_min!==void 0&&e.length_max!==void 0}var qe=$e,Ge=Ne,Je=Object.prototype,Ze=Je.hasOwnProperty,He=Ge(function(e,t,n){Ze.call(e,n)?e[n].push(t):qe(e,n,[t])}),Ke=He;const Ye=B(Ke),J=e=>{const{value:t,onClick:n,name:r}=e;return c.jsx(v,{className:"btn btn-link",item:t,onClick:n,children:c.jsx(G,{value:t,name:r})})},Qe=e=>{const{onChange:t,value:n,valueOn:r,valueOff:s,minimal:a,name:o}=e,i=f=>t(f.target.checked?r:s),l=n!=null,u=!a||a&&!l;return c.jsxs("div",{children:[u&&c.jsx(J,{value:s,name:o,onClick:t}),l?c.jsx("div",{className:"form-check form-switch form-check-inline align-middle me-0",children:c.jsx("input",{className:"form-check-input",type:"checkbox",checked:n===r,onChange:i})}):c.jsx("i",{className:"fa fa-question",title:"Current value unknown"}),u&&c.jsx(J,{value:r,name:o,onClick:t})]})},Xe=Qe,A=e=>{const{feature:{property:t,unit:n,name:r},deviceState:s}=e;return c.jsxs("div",{children:[t&&c.jsx("strong",{children:c.jsx(G,{value:s[t],name:r})}),n?c.jsx("small",{className:"text-muted ms-1",children:n}):null]})},M=({feature:{access:e}})=>c.jsxs("div",{className:"alert alert-warning p-0",role:"alert",children:["Unknown access ",JSON.stringify(e,null,4)]}),et=e=>{const{feature:{access:t=b.ACCESS_WRITE,endpoint:n,name:r,property:s,value_off:a,value_on:o},deviceState:i,onChange:l,minimal:u}=e;return t&b.ACCESS_WRITE?c.jsx(Xe,{onChange:f=>l(n,{[s]:f}),value:i[s],valueOn:o,valueOff:a,minimal:u,name:r}):t&b.ACCESS_STATE?c.jsx(A,{...e}):c.jsx(M,{...e})},tt=et,nt=e=>c.jsx(F,{type:"climate",...e}),rt=nt,st={position:[0,25,50,75,100].map(e=>({value:e,name:e+""})),tilt:[0,25,50,75,100].map(e=>({value:e,name:e+""}))},at=e=>c.jsx(F,{type:"cover",...e,stepsConfiguration:st}),ot=at;var ct={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};const $=ct,re={};for(const e of Object.keys($))re[$[e]]=e;const d={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};var se=d;for(const e of Object.keys(d)){if(!("channels"in d[e]))throw new Error("missing channels property: "+e);if(!("labels"in d[e]))throw new Error("missing channel labels property: "+e);if(d[e].labels.length!==d[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:t,labels:n}=d[e];delete d[e].channels,delete d[e].labels,Object.defineProperty(d[e],"channels",{value:t}),Object.defineProperty(d[e],"labels",{value:n})}d.rgb.hsl=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,s=Math.min(t,n,r),a=Math.max(t,n,r),o=a-s;let i,l;a===s?i=0:t===a?i=(n-r)/o:n===a?i=2+(r-t)/o:r===a&&(i=4+(t-n)/o),i=Math.min(i*60,360),i<0&&(i+=360);const u=(s+a)/2;return a===s?l=0:u<=.5?l=o/(a+s):l=o/(2-a-s),[i,l*100,u*100]};d.rgb.hsv=function(e){let t,n,r,s,a;const o=e[0]/255,i=e[1]/255,l=e[2]/255,u=Math.max(o,i,l),f=u-Math.min(o,i,l),h=function(m){return(u-m)/6/f+1/2};return f===0?(s=0,a=0):(a=f/u,t=h(o),n=h(i),r=h(l),o===u?s=r-n:i===u?s=1/3+t-r:l===u&&(s=2/3+n-t),s<0?s+=1:s>1&&(s-=1)),[s*360,a*100,u*100]};d.rgb.hwb=function(e){const t=e[0],n=e[1];let r=e[2];const s=d.rgb.hsl(e)[0],a=1/255*Math.min(t,Math.min(n,r));return r=1-1/255*Math.max(t,Math.max(n,r)),[s,a*100,r*100]};d.rgb.cmyk=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,s=Math.min(1-t,1-n,1-r),a=(1-t-s)/(1-s)||0,o=(1-n-s)/(1-s)||0,i=(1-r-s)/(1-s)||0;return[a*100,o*100,i*100,s*100]};function it(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}d.rgb.keyword=function(e){const t=re[e];if(t)return t;let n=1/0,r;for(const s of Object.keys($)){const a=$[s],o=it(e,a);o<n&&(n=o,r=s)}return r};d.keyword.rgb=function(e){return $[e]};d.rgb.xyz=function(e){let t=e[0]/255,n=e[1]/255,r=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92;const s=t*.4124+n*.3576+r*.1805,a=t*.2126+n*.7152+r*.0722,o=t*.0193+n*.1192+r*.9505;return[s*100,a*100,o*100]};d.rgb.lab=function(e){const t=d.rgb.xyz(e);let n=t[0],r=t[1],s=t[2];n/=95.047,r/=100,s/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;const a=116*r-16,o=500*(n-r),i=200*(r-s);return[a,o,i]};d.hsl.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;let s,a,o;if(n===0)return o=r*255,[o,o,o];r<.5?s=r*(1+n):s=r+n-r*n;const i=2*r-s,l=[0,0,0];for(let u=0;u<3;u++)a=t+1/3*-(u-1),a<0&&a++,a>1&&a--,6*a<1?o=i+(s-i)*6*a:2*a<1?o=s:3*a<2?o=i+(s-i)*(2/3-a)*6:o=i,l[u]=o*255;return l};d.hsl.hsv=function(e){const t=e[0];let n=e[1]/100,r=e[2]/100,s=n;const a=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,s*=a<=1?a:2-a;const o=(r+n)/2,i=r===0?2*s/(a+s):2*n/(r+n);return[t,i*100,o*100]};d.hsv.rgb=function(e){const t=e[0]/60,n=e[1]/100;let r=e[2]/100;const s=Math.floor(t)%6,a=t-Math.floor(t),o=255*r*(1-n),i=255*r*(1-n*a),l=255*r*(1-n*(1-a));switch(r*=255,s){case 0:return[r,l,o];case 1:return[i,r,o];case 2:return[o,r,l];case 3:return[o,i,r];case 4:return[l,o,r];case 5:return[r,o,i]}};d.hsv.hsl=function(e){const t=e[0],n=e[1]/100,r=e[2]/100,s=Math.max(r,.01);let a,o;o=(2-n)*r;const i=(2-n)*s;return a=n*s,a/=i<=1?i:2-i,a=a||0,o/=2,[t,a*100,o*100]};d.hwb.rgb=function(e){const t=e[0]/360;let n=e[1]/100,r=e[2]/100;const s=n+r;let a;s>1&&(n/=s,r/=s);const o=Math.floor(6*t),i=1-r;a=6*t-o,o&1&&(a=1-a);const l=n+a*(i-n);let u,f,h;switch(o){default:case 6:case 0:u=i,f=l,h=n;break;case 1:u=l,f=i,h=n;break;case 2:u=n,f=i,h=l;break;case 3:u=n,f=l,h=i;break;case 4:u=l,f=n,h=i;break;case 5:u=i,f=n,h=l;break}return[u*255,f*255,h*255]};d.cmyk.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100,s=e[3]/100,a=1-Math.min(1,t*(1-s)+s),o=1-Math.min(1,n*(1-s)+s),i=1-Math.min(1,r*(1-s)+s);return[a*255,o*255,i*255]};d.xyz.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100;let s,a,o;return s=t*3.2406+n*-1.5372+r*-.4986,a=t*-.9689+n*1.8758+r*.0415,o=t*.0557+n*-.204+r*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),a=Math.min(Math.max(0,a),1),o=Math.min(Math.max(0,o),1),[s*255,a*255,o*255]};d.xyz.lab=function(e){let t=e[0],n=e[1],r=e[2];t/=95.047,n/=100,r/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;const s=116*n-16,a=500*(t-n),o=200*(n-r);return[s,a,o]};d.lab.xyz=function(e){const t=e[0],n=e[1],r=e[2];let s,a,o;a=(t+16)/116,s=n/500+a,o=a-r/200;const i=a**3,l=s**3,u=o**3;return a=i>.008856?i:(a-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=u>.008856?u:(o-16/116)/7.787,s*=95.047,a*=100,o*=108.883,[s,a,o]};d.lab.lch=function(e){const t=e[0],n=e[1],r=e[2];let s;s=Math.atan2(r,n)*360/2/Math.PI,s<0&&(s+=360);const o=Math.sqrt(n*n+r*r);return[t,o,s]};d.lch.lab=function(e){const t=e[0],n=e[1],s=e[2]/360*2*Math.PI,a=n*Math.cos(s),o=n*Math.sin(s);return[t,a,o]};d.rgb.ansi16=function(e,t=null){const[n,r,s]=e;let a=t===null?d.rgb.hsv(e)[2]:t;if(a=Math.round(a/50),a===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return a===2&&(o+=60),o};d.hsv.ansi16=function(e){return d.rgb.ansi16(d.hsv.rgb(e),e[2])};d.rgb.ansi256=function(e){const t=e[0],n=e[1],r=e[2];return t===n&&n===r?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)};d.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const n=(~~(e>50)+1)*.5,r=(t&1)*n*255,s=(t>>1&1)*n*255,a=(t>>2&1)*n*255;return[r,s,a]};d.ansi256.rgb=function(e){if(e>=232){const a=(e-232)*10+8;return[a,a,a]}e-=16;let t;const n=Math.floor(e/36)/5*255,r=Math.floor((t=e%36)/6)/5*255,s=t%6/5*255;return[n,r,s]};d.rgb.hex=function(e){const n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(n.length)+n};d.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let n=t[0];t[0].length===3&&(n=n.split("").map(i=>i+i).join(""));const r=parseInt(n,16),s=r>>16&255,a=r>>8&255,o=r&255;return[s,a,o]};d.rgb.hcg=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,s=Math.max(Math.max(t,n),r),a=Math.min(Math.min(t,n),r),o=s-a;let i,l;return o<1?i=a/(1-o):i=0,o<=0?l=0:s===t?l=(n-r)/o%6:s===n?l=2+(r-t)/o:l=4+(t-n)/o,l/=6,l%=1,[l*360,o*100,i*100]};d.hsl.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=n<.5?2*t*n:2*t*(1-n);let s=0;return r<1&&(s=(n-.5*r)/(1-r)),[e[0],r*100,s*100]};d.hsv.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=t*n;let s=0;return r<1&&(s=(n-r)/(1-r)),[e[0],r*100,s*100]};d.hcg.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;if(n===0)return[r*255,r*255,r*255];const s=[0,0,0],a=t%1*6,o=a%1,i=1-o;let l=0;switch(Math.floor(a)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=i,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=i,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=i}return l=(1-n)*r,[(n*s[0]+l)*255,(n*s[1]+l)*255,(n*s[2]+l)*255]};d.hcg.hsv=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);let s=0;return r>0&&(s=t/r),[e[0],s*100,r*100]};d.hcg.hsl=function(e){const t=e[1]/100,r=e[2]/100*(1-t)+.5*t;let s=0;return r>0&&r<.5?s=t/(2*r):r>=.5&&r<1&&(s=t/(2*(1-r))),[e[0],s*100,r*100]};d.hcg.hwb=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);return[e[0],(r-t)*100,(1-r)*100]};d.hwb.hcg=function(e){const t=e[1]/100,r=1-e[2]/100,s=r-t;let a=0;return s<1&&(a=(r-s)/(1-s)),[e[0],s*100,a*100]};d.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};d.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};d.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};d.gray.hsl=function(e){return[0,0,e[0]]};d.gray.hsv=d.gray.hsl;d.gray.hwb=function(e){return[0,100,e[0]]};d.gray.cmyk=function(e){return[0,0,0,e[0]]};d.gray.lab=function(e){return[e[0],0,0]};d.gray.hex=function(e){const t=Math.round(e[0]/100*255)&255,r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(r.length)+r};d.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};const W=se;function lt(){const e={},t=Object.keys(W);for(let n=t.length,r=0;r<n;r++)e[t[r]]={distance:-1,parent:null};return e}function ut(e){const t=lt(),n=[e];for(t[e].distance=0;n.length;){const r=n.pop(),s=Object.keys(W[r]);for(let a=s.length,o=0;o<a;o++){const i=s[o],l=t[i];l.distance===-1&&(l.distance=t[r].distance+1,l.parent=r,n.unshift(i))}}return t}function ft(e,t){return function(n){return t(e(n))}}function dt(e,t){const n=[t[e].parent,e];let r=W[t[e].parent][e],s=t[e].parent;for(;t[s].parent;)n.unshift(t[s].parent),r=ft(W[t[s].parent][s],r),s=t[s].parent;return r.conversion=n,r}var ht=function(e){const t=ut(e),n={},r=Object.keys(t);for(let s=r.length,a=0;a<s;a++){const o=r[a];t[o].parent!==null&&(n[o]=dt(o,t))}return n};const I=se,mt=ht,R={},pt=Object.keys(I);function gt(e){const t=function(...n){const r=n[0];return r==null?r:(r.length>1&&(n=r),e(n))};return"conversion"in e&&(t.conversion=e.conversion),t}function xt(e){const t=function(...n){const r=n[0];if(r==null)return r;r.length>1&&(n=r);const s=e(n);if(typeof s=="object")for(let a=s.length,o=0;o<a;o++)s[o]=Math.round(s[o]);return s};return"conversion"in e&&(t.conversion=e.conversion),t}pt.forEach(e=>{R[e]={},Object.defineProperty(R[e],"channels",{value:I[e].channels}),Object.defineProperty(R[e],"labels",{value:I[e].labels});const t=mt(e);Object.keys(t).forEach(r=>{const s=t[r];R[e][r]=xt(s),R[e][r].raw=gt(s)})});var T=R;const Z=(e,t)=>{switch(t){case"color_xy":{const{x:a=0,y:o=0}=e,i=1-a-o,l=1,u=l/o*a,f=l/o*i;return"#"+T.xyz.hex([u*100,l*100,f*100])}case"color_hs":{const{hue:a=0,saturation:o=0}=e;return"#"+T.hsv.hex([a,o,100])}case"color_rgb":const{r:n,g:r,b:s}=e;return"#"+T.rgb.hex([n,r,s]);default:return"#FFFFFF"}},bt=["#FFFFFF","#FDF4DC","#F4FDFF"],vt=["#FF0018","#FFA52C","#FFFF41","#008018","#0000F9","#86007D"];function ae(e){const{onChange:t,value:n={},format:r,steps:s=[vt,bt],minimal:a,...o}=e,[i,l]=x.useState(Z(n,r));return x.useEffect(()=>{l(Z(n,r))},[n,r]),c.jsxs(c.Fragment,{children:[!a&&s.map(u=>c.jsx("div",{className:"btn-group me-2 float-start border",children:u.map(f=>c.jsx(v,{className:"btn",style:{backgroundColor:f},item:f,title:f,onClick:h=>t({hex:h}),children:"   "},f))},JSON.stringify(u))),c.jsx("input",{type:"color",className:"form-control form-control-color",value:i,style:{minWidth:40},onChange:u=>{u.target.value.toLowerCase()!==i.toLowerCase()&&t({hex:u.target.value})},...o})]})}const yt=e=>{var o;const{deviceState:t,feature:n,onChange:r,minimal:s}=e,a={};for(const i of n.features)a[i.name]=((o=t[n.property])==null?void 0:o[i.property])??0;return c.jsx(ae,{onChange:i=>r(n.endpoint,{color:i}),value:a,format:n.name,minimal:s})},Ct=yt;function j(e){return e===null||["number","string","undefined"].includes(typeof e)}const jt=e=>{const{onChange:t,values:n,value:r,minimal:s}=e;if(s){const a=o=>{const i=n.find(l=>j(l)?l==o.target.value:l.value==o.target.value);t(i)};return c.jsxs("select",{className:"form-control",onChange:a,value:j(r)?r:r.value,children:[c.jsx("option",{hidden:!0,children:"----"},"hided"),n.map(o=>c.jsx("option",{value:j(o)?o:o.value,children:j(o)?o:o.name},j(o)?o:o.name))]})}return c.jsx("div",{className:"btn-group me-2",children:n.map(a=>c.jsx(v,{className:y("btn btn-outline-secondary",{active:j(a)?a===r:a.value===(j(r)?r:r.value)}),onClick:o=>t(o),item:j(a)?a:a.value,title:j(a)?a:a.description,children:j(a)?c.jsx(G,{value:a,name:""}):a.name},j(a)?a:a.name))})},oe=jt,kt=4,wt=e=>{const{onChange:t,feature:{access:n=b.ACCESS_WRITE,values:r,endpoint:s,property:a},deviceState:o,minimal:i}=e,l=r.length>kt;return n&b.ACCESS_WRITE?c.jsx(oe,{onChange:u=>t(s,{[a]:u}),values:r,value:o[a],minimal:i||l}):n&b.ACCESS_STATE?c.jsx(A,{...e}):c.jsx(M,{...e})},St=wt,_t={brightness:[0,25,50,75,100].map(e=>({value:Ae(e,[0,100],[0,255]),name:e+"%"})),color_temp:[1e3,2e3,3e3,4e3,5e3,6500].map(e=>({value:1e6/e,name:e+"K"}))},Ft=e=>c.jsx(F,{type:"light",...e,stepsConfiguration:_t}),Et=Ft,Rt=e=>c.jsx(F,{type:"lock",...e}),Nt=Rt,$t=e=>{const{onChange:t,value:n,valueStep:r,min:s,max:a,unit:o,steps:i,minimal:l,...u}=e,[f,h]=x.useState(n);x.useEffect(()=>{h(n)},[n]);const m=s!==void 0&&a!==void 0;return c.jsxs("div",{className:"input-group align-items-center",children:[!l&&i?c.jsx(oe,{values:i,onChange:t,value:f}):null,m?c.jsx("input",{min:s,max:a,step:r,type:"range",className:"form-range form-control border-0",value:f,onChange:p=>h(p.target.valueAsNumber),onTouchEnd:()=>t(f),onMouseUp:()=>t(f),...u}):null,(!l||!m)&&c.jsx("input",{type:"number",className:y("form-control",{"ms-1":m}),value:f,step:r,onChange:p=>h(p.target.valueAsNumber),onBlur:()=>t(f),onMouseUp:()=>t(f),min:s,max:a,...u,style:m?{maxWidth:"100px"}:{}}),!l&&o?c.jsx("span",{className:"input-group-text",style:{minWidth:"66px"},children:o}):null]})},ce=$t,At=e=>{const{feature:{presets:t,access:n=b.ACCESS_WRITE,endpoint:r,property:s,unit:a,value_max:o,value_min:i,value_step:l},deviceState:u,steps:f,onChange:h,minimal:m}=e;return n&b.ACCESS_WRITE?c.jsx(ce,{onChange:p=>h(r,{[s]:p}),value:u[s]??"",min:i,max:o,step:l,steps:t&&t.length?t:f,unit:a,minimal:m}):n&b.ACCESS_STATE?c.jsx(A,{...e}):c.jsx(M,{...e})},Mt=At,Ot=e=>{const{onChange:t,value:n,unit:r,...s}=e,[a,o]=x.useState(n);return x.useEffect(()=>{o(n)},[n]),c.jsxs(x.Fragment,{children:[c.jsx("input",{type:"text",className:"form-control",value:a,onChange:i=>o(i.target.value),onBlur:()=>t(a),...s}),r?c.jsx("span",{className:"input-group-text",style:{minWidth:"66px"},children:r}):null]})},Tt=Ot,Lt=e=>{const{feature:{access:t=b.ACCESS_WRITE,endpoint:n,property:r},deviceState:s,onChange:a}=e;return t&b.ACCESS_WRITE?c.jsx(Tt,{onChange:o=>a(n,{[r]:o}),value:s[r]??""}):t&b.ACCESS_STATE?c.jsx(A,{...e}):c.jsx(M,{...e})},Wt=Lt,Ut=e=>c.jsx(F,{type:"switch",...e}),zt=Ut,It=e=>c.jsx(F,{type:"fan",...e}),Pt=It,Dt=e=>{const{onChange:t,value:n,minimal:r,...s}=e,[a,o]=x.useState(n);x.useEffect(()=>{o(n)},[n]);const i=h=>{o(h),t(h)},l=(h,m)=>{const p=[...a];p[m]=h,i(p)},u=h=>()=>{const m=[...a];m.splice(h,1),i(m)},f=()=>i([...a,0]);return a.length===0?c.jsx("div",{className:"mt-3 mb-3 row",children:c.jsx(v,{className:"btn btn-success col-1 me-2",onClick:f,children:"+"})}):c.jsx("div",{children:a.map((h,m)=>{const p=a.length-1===m;return c.jsxs("div",{className:"mt-3 mb-3 row",children:[c.jsx("div",{className:"col-10",children:c.jsx(ce,{onChange:k=>l(k,m),value:h,minimal:r,...s})}),c.jsxs("div",{className:"btn-group col-2",role:"group",children:[c.jsx(v,{className:"btn btn-danger me-2",onClick:u(m),children:"-"}),c.jsx(v,{className:`btn btn-success ${p?"":"invisible"}`,onClick:f,children:"+"})]})]},m)})})},Bt=Dt,Vt=e=>{var f;const{t}=ee(["featureDescriptions"]),{children:n,feature:r,onRead:s}=e,a=ne(r),o=r.property&&r.access&b.ACCESS_READ||a,i=(f=e.parentFeatures)==null?void 0:f[e.parentFeatures.length-1];let l=r.label;i!=null&&i.label&&r.name==="state"&&!["light","switch"].includes(i.type)&&(l=`${i.label} ${r.label.charAt(0).toLowerCase()}${r.label.slice(1)}`);const u=c.jsx("div",{className:"col-12 col-md-3",children:c.jsxs("label",{className:"col-form-label w-100",children:[c.jsxs("div",{className:"d-flex justify-content-between",children:[c.jsx("strong",{title:JSON.stringify(r),children:l}),o?c.jsx(v,{item:r,onClick:h=>{s(r.endpoint,{[h.property]:""})},className:"btn btn-primary btn-sm",children:c.jsx("i",{className:"fa fa-sync"})}):null]}),r.description?c.jsx("small",{className:"d-block text-muted",children:t(r.description)}):null]})});return c.jsxs("div",{className:"row border-bottom py-1 w-100 align-items-center",children:[(o||r.label)&&u,c.jsx("div",{className:"col-12 col-md-9",children:n})]})},qt=e=>{const{onChange:t,value:n,feature:r,parentFeatures:s,...a}=e,[o,i]=x.useState(n);x.useEffect(()=>{i(n)},[n]);const l=m=>{i(m),t(m)},u=(m,p)=>{const k=[...o];typeof m=="object"&&(m={...o[p],...m}),k[p]=m,l(k)},f=m=>()=>{const p=[...o];p.splice(m,1),l(p)},h=()=>i([...o,{}]);return o.length===0?c.jsx("div",{className:"mt-3 mb-3 row",children:c.jsx(v,{className:"btn btn-success col-1 me-2",onClick:h,children:"+"})}):c.jsx("div",{children:o.map((m,p)=>{const k=o.length-1===p;return c.jsxs("div",{className:"mt-3 mb-3 row",children:[c.jsx("div",{className:"col-10",children:c.jsx(L,{feature:r,device:{},deviceState:m,onChange:(w,_)=>{u(_,p)},onRead:(w,_)=>{},featureWrapperClass:Vt,parentFeatures:s})}),c.jsx("div",{className:"col-2",children:c.jsxs("div",{className:"btn-group",role:"group",children:[c.jsx(v,{className:"btn btn-danger me-2",onClick:f(p),children:"-"}),c.jsx(v,{className:`btn btn-success ${k?"":"invisible"}`,onClick:h,children:"+"})]})})]},p)})})},Gt=qt;class Jt extends x.Component{constructor(t){super(t),this.onChange=o=>{const{endpoint:i,property:l}=this.props.feature;this.setState({value:o}),this.isListRoot()||this.props.onChange(i,l?{[l]:o}:o)},this.onApply=()=>{const{value:o}=this.state,{endpoint:i,property:l}=this.props.feature;this.props.onChange(i,l?{[l]:o}:o)},this.isListRoot=()=>{const{parentFeatures:o}=this.props;return o!==void 0&&(o.length===1||o.length===2&&![void 0,"composite","list"].includes(o[1].type))};const{deviceState:n,feature:r}=this.props,{property:s}=r,a=s?n[s]??[]:[];this.state={value:a}}render(){const{feature:t,minimal:n,parentFeatures:r,t:s}=this.props,{access:a=b.ACCESS_WRITE,item_type:o}=t;if(a&b.ACCESS_WRITE){if(o=="number")return c.jsx(Bt,{onChange:this.onChange,value:this.state.value,minimal:n});{const i=[c.jsx(Gt,{feature:o,parentFeatures:[...r,t],onChange:this.onChange,value:this.state.value},"1")];return this.isListRoot()&&i.push(c.jsx("div",{children:c.jsx(v,{className:y("btn btn-primary float-end",{"btn-sm":n}),onClick:this.onApply,children:s("common:apply")})},"2")),i}}else return a&b.ACCESS_STATE?c.jsx(A,{...this.props}):c.jsx(M,{...this.props})}}const Zt=V(["list","common"])(q.memo(Jt)),H=e=>{e=e.replace("#","");const t=parseInt(e,16),n=t>>16&255,r=t>>8&255,s=t&255;return{r:n,g:r,b:s}},Ht=e=>{const{r:t,g:n,b:r}=e;return"#"+T.rgb.hex([t,n,r])};function Kt(e){const{t:n,minimal:r,onChange:s,feature:{endpoint:a,length_min:o,length_max:i},deviceState:l}=e,[u,f]=x.useState(Array(5).fill({x:0,y:0})),h=(g,C)=>{const E=[...u];E[g]=H(C),f(E)},m=()=>{const g=[...u];g.push({r:255,g:255,b:255}),f(g)},p=g=>{const C=[...u];C.splice(g,1),f(C)};x.useEffect(()=>{const{gradient:g}=l;g&&g.length>0&&f(g.map(H))},[l]);const[k,w]=x.useState(!1),[_,S]=x.useState(!1);return x.useEffect(()=>{w(u.length<i),S(u.length>o)},[u,o,i]),c.jsxs("div",{className:"d-flex flex-column gap-1",children:[u.map((g,C)=>c.jsxs("div",{className:"d-flex gap-2",children:[c.jsx(ae,{onChange:E=>{h(C,E.hex)},value:g,format:"color_rgb"}),_&&c.jsx(v,{className:"btn btn-danger me-2",onClick:()=>p(C),children:"-"})]},C)),k&&c.jsx(v,{className:"btn btn-success me-2",onClick:m,children:"+"}),c.jsx("div",{children:c.jsx(v,{className:y("btn btn-primary float-end",{"btn-sm":r}),onClick:()=>s(a,{gradient:u.map(Ht)}),children:n("common:apply")})}),","]})}const Yt=V(["gradient","common"])(q.memo(Kt)),L=e=>{const{feature:t,device:n,deviceState:r,stepsConfiguration:s,onRead:a,onChange:o,featureWrapperClass:i,minimal:l,parentFeatures:u}=e,f={key:JSON.stringify(t),device:n,deviceState:r,onChange:o,onRead:a,featureWrapperClass:i,minimal:l,parentFeatures:u},h={key:JSON.stringify(t),feature:t,onRead:a,deviceState:r,parentFeatures:u};if(Oe(t))return c.jsx(i,{...h,children:c.jsx(tt,{feature:t,...f})});if(Te(t))return c.jsx(i,{...h,children:c.jsx(Mt,{feature:t,...f,steps:s==null?void 0:s[t.name]})});if(Ve(t))return c.jsx(i,{...h,children:c.jsx(Yt,{feature:t,...f})});if(te(t))return c.jsx(i,{...h,children:c.jsx(Zt,{feature:t,...f})});if(Le(t))return c.jsx(i,{...h,children:c.jsx(Wt,{feature:t,...f})});if(We(t))return c.jsx(i,{...h,children:c.jsx(St,{feature:t,...f})});if(Ue(t))return c.jsx(Et,{feature:t,...f});if(ze(t))return c.jsx(zt,{feature:t,...f});if(Ie(t))return c.jsx(ot,{feature:t,...f});if(Pe(t))return c.jsx(Nt,{feature:t,...f});if(ne(t))return c.jsx(i,{...h,children:c.jsx(Ct,{feature:t,...f})});if(Be(t))return c.jsx(rt,{feature:t,...f});if(De(t))return c.jsx(Pt,{feature:t,...f});if(O(t)){const m=u&&t.property?r[t.property]:r;return c.jsx(i,{...h,children:c.jsx(F,{type:"composite",feature:t,...f,deviceState:m})})}return c.jsx(i,{...h,children:c.jsx("pre",{children:JSON.stringify(t,null,4)})})};class Qt extends x.Component{constructor(){super(...arguments),this.state={},this.onChange=(t,n)=>{const{onChange:r,feature:s}=this.props;this.setState({...this.state,...n}),this.isCompositeRoot()||(O(s)?r(t,s.property?{[s.property]:{...this.state,...n}}:n):r(t,n))},this.isCompositeRoot=()=>{const{parentFeatures:t}=this.props;return O(this.props.feature)&&t!==void 0&&(t.length===1||t.length===2&&![void 0,"composite","list"].includes(t[1].type))},this.onCompositeFeatureApply=()=>{const{deviceState:t,onChange:n,feature:{endpoint:r,property:s}}=this.props,{state:a}=this,o={...t,...a};n(r,s?{[s]:o}:o)},this.onRead=(t,n)=>{const{onRead:r,feature:s}=this.props;O(s)?r&&r(t,s.property?{[s.property]:n}:n):r&&r(t,n)}}render(){const t="MAGIC_NO_ENDPOINT",{t:n,showEndpointLabels:r=!1,feature:s,device:a,deviceState:o,onRead:i,onChange:l,featureWrapperClass:u,minimal:f}=this.props,{features:h=[]}=s,m=this.props.parentFeatures??[],{state:p}=this,k=!f;let w=[];const _={...o,...p};if(k){const S=Ye(h,g=>g.endpoint??t);S[t]&&(w.push(...S[t].map(g=>c.jsx(L,{feature:g,parentFeatures:[...m,s],device:a,deviceState:_,onChange:this.onChange,onRead:this.onRead,featureWrapperClass:u,minimal:f},JSON.stringify(g)))),delete S[t]);for(const g in S){const C=S[g],E=C.length==1;w.push(c.jsxs("div",{children:[r?`Endpoint: ${g}`:null,c.jsx("div",{className:E?"":"ps-4",children:C.map(z=>c.jsx(L,{feature:z,parentFeatures:m,device:a,deviceState:_,onChange:this.onChange,onRead:this.onRead,featureWrapperClass:u,minimal:f},z.name+z.endpoint))})]},g))}}else{const S=h.map(g=>c.jsx(L,{feature:g,parentFeatures:m,device:a,deviceState:_,onChange:this.onChange,onRead:this.onRead,featureWrapperClass:u,minimal:f},JSON.stringify(g)));w=w.concat(S)}return this.isCompositeRoot()&&w.push(c.jsx("div",{children:c.jsx(v,{className:y("btn btn-primary float-end",{"btn-sm":f}),onClick:this.onCompositeFeatureApply,children:n("common:apply")})},s.name+"apply")),w}}function Xt(e,t){return["deviceState","device","feature"].every(r=>Me(e[r],t[r]))}const F=V(["composite","common"])(q.memo(Qt,Xt));function en(e,t,n){var r=-1,s=e.length;t<0&&(t=-t>s?0:s+t),n=n>s?s:n,n<0&&(n+=s),s=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(s);++r<s;)a[r]=e[r+t];return a}var tn=en,nn=tn;function rn(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:nn(e,t,n)}var sn=rn,an="\\ud800-\\udfff",on="\\u0300-\\u036f",cn="\\ufe20-\\ufe2f",ln="\\u20d0-\\u20ff",un=on+cn+ln,fn="\\ufe0e\\ufe0f",dn="\\u200d",hn=RegExp("["+dn+an+un+fn+"]");function mn(e){return hn.test(e)}var ie=mn;function pn(e){return e.split("")}var gn=pn,le="\\ud800-\\udfff",xn="\\u0300-\\u036f",bn="\\ufe20-\\ufe2f",vn="\\u20d0-\\u20ff",yn=xn+bn+vn,Cn="\\ufe0e\\ufe0f",jn="["+le+"]",P="["+yn+"]",D="\\ud83c[\\udffb-\\udfff]",kn="(?:"+P+"|"+D+")",ue="[^"+le+"]",fe="(?:\\ud83c[\\udde6-\\uddff]){2}",de="[\\ud800-\\udbff][\\udc00-\\udfff]",wn="\\u200d",he=kn+"?",me="["+Cn+"]?",Sn="(?:"+wn+"(?:"+[ue,fe,de].join("|")+")"+me+he+")*",_n=me+he+Sn,Fn="(?:"+[ue+P+"?",P,fe,de,jn].join("|")+")",En=RegExp(D+"(?="+D+")|"+Fn+_n,"g");function Rn(e){return e.match(En)||[]}var Nn=Rn,$n=gn,An=ie,Mn=Nn;function On(e){return An(e)?Mn(e):$n(e)}var Tn=On,Ln=sn,Wn=ie,Un=Tn,zn=U;function In(e){return function(t){t=zn(t);var n=Wn(t)?Un(t):void 0,r=n?n[0]:t.charAt(0),s=n?Ln(n,1).join(""):t.slice(1);return r[e]()+s}}var Pn=In,Dn=Pn,Bn=Dn("toUpperCase"),pe=Bn,Vn=U,qn=pe;function Gn(e){return qn(Vn(e).toLowerCase())}var Jn=Gn;function Zn(e,t,n,r){var s=-1,a=e==null?0:e.length;for(r&&a&&(n=e[++s]);++s<a;)n=t(n,e[s],s,e);return n}var Hn=Zn;function Kn(e){return function(t){return e==null?void 0:e[t]}}var Yn=Kn,Qn=Yn,Xn={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},er=Qn(Xn),tr=er,nr=tr,rr=U,sr=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ar="\\u0300-\\u036f",or="\\ufe20-\\ufe2f",cr="\\u20d0-\\u20ff",ir=ar+or+cr,lr="["+ir+"]",ur=RegExp(lr,"g");function fr(e){return e=rr(e),e&&e.replace(sr,nr).replace(ur,"")}var dr=fr,hr=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;function mr(e){return e.match(hr)||[]}var pr=mr,gr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function xr(e){return gr.test(e)}var br=xr,ge="\\ud800-\\udfff",vr="\\u0300-\\u036f",yr="\\ufe20-\\ufe2f",Cr="\\u20d0-\\u20ff",jr=vr+yr+Cr,xe="\\u2700-\\u27bf",be="a-z\\xdf-\\xf6\\xf8-\\xff",kr="\\xac\\xb1\\xd7\\xf7",wr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Sr="\\u2000-\\u206f",_r=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ve="A-Z\\xc0-\\xd6\\xd8-\\xde",Fr="\\ufe0e\\ufe0f",ye=kr+wr+Sr+_r,Ce="['’]",K="["+ye+"]",Er="["+jr+"]",je="\\d+",Rr="["+xe+"]",ke="["+be+"]",we="[^"+ge+ye+je+xe+be+ve+"]",Nr="\\ud83c[\\udffb-\\udfff]",$r="(?:"+Er+"|"+Nr+")",Ar="[^"+ge+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",_e="[\\ud800-\\udbff][\\udc00-\\udfff]",N="["+ve+"]",Mr="\\u200d",Y="(?:"+ke+"|"+we+")",Or="(?:"+N+"|"+we+")",Q="(?:"+Ce+"(?:d|ll|m|re|s|t|ve))?",X="(?:"+Ce+"(?:D|LL|M|RE|S|T|VE))?",Fe=$r+"?",Ee="["+Fr+"]?",Tr="(?:"+Mr+"(?:"+[Ar,Se,_e].join("|")+")"+Ee+Fe+")*",Lr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Wr="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ur=Ee+Fe+Tr,zr="(?:"+[Rr,Se,_e].join("|")+")"+Ur,Ir=RegExp([N+"?"+ke+"+"+Q+"(?="+[K,N,"$"].join("|")+")",Or+"+"+X+"(?="+[K,N+Y,"$"].join("|")+")",N+"?"+Y+"+"+Q,N+"+"+X,Wr,Lr,je,zr].join("|"),"g");function Pr(e){return e.match(Ir)||[]}var Dr=Pr,Br=pr,Vr=br,qr=U,Gr=Dr;function Jr(e,t,n){return e=qr(e),t=n?void 0:t,t===void 0?Vr(e)?Gr(e):Br(e):e.match(t)||[]}var Zr=Jr,Hr=Hn,Kr=dr,Yr=Zr,Qr="['’]",Xr=RegExp(Qr,"g");function es(e){return function(t){return Hr(Yr(Kr(t).replace(Xr,"")),e,"")}}var Re=es,ts=Jn,ns=Re,rs=ns(function(e,t,n){return t=t.toLowerCase(),e+(n?ts(t):t)}),ss=rs;const as=B(ss);var os=Re,cs=pe,is=os(function(e,t,n){return e+(n?" ":"")+cs(t)}),ls=is;const us=B(ls),fs=e=>{let t="fa-thermometer-empty";return e>=30?t="fa-thermometer-full":e>=25?t="fa-thermometer-three-quarters":e>=20?t="fa-thermometer-half":e>=15&&(t="fa-thermometer-quarter"),t},ds={humidity:["text-info","fa-tint"],illuminance:["fa-sun"],pressure:["fa-cloud-download-alt"],co2:["fa-atom","text-warning"],voltage:["fa-bolt","text-success"],state:["fa-star-half-alt"],brightness:["fa-sun"],occupancy:["fa-walking"],presence:["fa-person-rays"],current:["fa-copyright","text-warning"],power:["fa-power-off","text-success"],energy:["fa-plug","text-info"],frequency:["fa-wave-square"],tamper:["fa-exclamation-circle","text-danger"],smoke:["fa-smoking","text-danger"],radiation_dose_per_hour:["fa-radiation","text-danger"],radioactive_events_per_minute:["fa-radiation-alt","text-warning"],power_factor:["fa-industry","text-danger"],mode:["fa-user-cog","text-warning"],sound:["fa-volume-up","text-info"],position:["fa-percent","text-info"],alarm:["fa-exclamation-triangle","text-danger"],color_xy:["fa-palette"],color_hs:["fa-palette"],color_temp:["fa-sliders-h"],illuminance_lux:["fa-sun"],soil_moisture:["fa-fill-drip"],water_leak:["fa-water"],week:["fa-calendar-week"],workdays_schedule:["fa-calendar-day","text-info"],holidays_schedule:["fa-calendar-day","text-danger"],away_mode:["fa-plane","text-info"],vibration:["fa-water fa-rotate-270"],power_outage_count:["fa-plug-circle-xmark"],action:["fa-a"],angle_x:["fa-x"],angle_y:["fa-y"],angle_z:["fa-z"],side:["fa-cube"],humidity_alarm:["fa-triangle-exclamation"],temperature_alarm:["fa-triangle-exclamation"],approach_distance:["fa-arrows-left-right-to-line","text-warning"],distance:["fa-arrows-left-right-to-line","text-warning"],trigger_count:["fa-turn-up fa-flip-horizontal","text-info"],level_config:["fa-gear"],station:["fa-warehouse"],test:["fa-check","text-success"]},hs=(e,t)=>{let n=[];switch(e){case"device_temperature":case"temperature":case"local_temperature":n.push(y("text-danger",fs(t)));break;case"contact":n.push(y({"fa-door-closed text-muted":t,"fa-door-open text-primary":!t}));break;case"occupancy":n.push(y({"text-warning":t}));break;case"presence":n.push(y({"text-warning":t}));break;case"tamper":n.push(y({"fa-beat-fade":t}));break;case"water_leak":n.push(y({"fa-beat-fade text-primary":t}));break;case"vibration":n.push(y({"fa-shake fa-rotate-270 text-primary":t}));break}return n=[...n,...ds[e]??[]],n.length||n.push("invisible"),y(n)},bs=e=>{const{children:t,feature:n,deviceState:r={}}=e,s=hs(n.name,r[n.property]),{t:a}=ee(["featureNames"]),o=n.name==="state"?n.property:n.name,i=us(as(o));return c.jsxs("div",{className:"d-flex align-items-center",children:[s&&c.jsx("div",{className:"me-1",children:c.jsx("i",{className:`fa fa-fw ${s}`})}),c.jsxs("div",{className:"flex-shrink-1 flex-grow-1",children:[a(o,{defaultValue:i}),n.endpoint?` (${n.endpoint})`:null]}),c.jsx("div",{className:"flex-shrink-1",children:t})]})};export{bs as D,L as F,F as T,Vt as a,Be as b,Ye as g,Ue as i};
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{u as f,j as s,r as g,c as h,a as _,w as x,i as j,L as y,g as k,f as b,B as m,b as p,t as v}from"./index-731ec1e3.js";import{D as w}from"./DeviceImage-f74d9d0a.js";import{V as A,M as N}from"./vendor-links-6dfec9d6.js";import{T as O}from"./ReactTableCom-3dd97a7f.js";import"./index-b6b836d5.js";import"./persist-df5c7828.js";const T={"device-image":"_device-image_29lej_1"},C=({device:u,deviceState:r,...t})=>{const{t:o}=f("ota");let i;if(u!==void 0&&(i=u.power_source),i!=="Battery")return null;let n,l,c;if(r!==void 0&&((r==null?void 0:r.battery)!==void 0&&(n=r.battery),(r==null?void 0:r.battery_state)!==void 0&&(l=r.battery_state),(r==null?void 0:r.battery_low)!==void 0&&(c=r.battery_low)),n!==void 0&&n<=50||l!==void 0&&l==="low"||c!==void 0&&c===!0)return s.jsx(g.Fragment,{children:s.jsx("i",{title:o("ota:battery_low_upd"),className:"fa fa-triangle-exclamation text-warning ms-2"})})},D=C,H=u=>{const{t:r}=f("ota"),{device:t,state:o,checkOTA:i,scheduleOTA:n,unscheduleOTA:l,updateOTA:c}=u,d=(o==null?void 0:o.update)??{};switch(d.state){case"updating":return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"progress",children:s.jsxs("div",{className:"progress-bar progress-bar-striped progress-bar-animated",style:{width:`${d.progress}%`},children:[d.progress,"%"]})}),s.jsx("div",{children:r("remaining_time",{remaining:v(d.remaining)})})]});case"available":return s.jsxs("div",{className:"btn-group btn-group-sm",role:"group",children:[s.jsx(m,{className:"btn btn-danger btn-sm me-1",onClick:c,item:t.friendly_name,prompt:!0,children:r("update")}),s.jsx(m,{className:"btn btn-sm btn-info",onClick:n,item:t.friendly_name,title:r("schedule"),prompt:!0,children:s.jsx("i",{className:p("fa","fa-clock")})}),s.jsx(D,{device:t,deviceState:o})]});case"scheduled":return s.jsxs("div",{className:"btn-group btn-group-sm",role:"group",children:[s.jsx(m,{className:"btn btn-primary btn-sm me-1",onClick:i,item:t.friendly_name,children:r("check")}),s.jsx(m,{className:p("btn","btn-sm","btn-danger"),onClick:l,item:t.friendly_name,title:r("scheduled"),prompt:!0,children:s.jsx("i",{className:p("fa","fa-clock")})})]});default:return s.jsxs("div",{className:"btn-group btn-group-sm",role:"group",children:[s.jsx(m,{className:"btn btn-primary btn-sm me-1",onClick:i,item:t.friendly_name,children:r("check")}),s.jsx(m,{className:p("btn","btn-sm","btn-info"),onClick:n,item:t.friendly_name,title:r("schedule"),prompt:!0,children:s.jsx("i",{className:p("fa","fa-clock")})})]})}};class z extends g.Component{constructor(){super(...arguments),this.checkAllOTA=()=>{const{checkOTA:r}=this.props;this.getAllOtaDevices().forEach(({device:o})=>r(o.friendly_name))}}getAllOtaDevices(){const{devices:r,deviceStates:t,bridgeInfo:{config:o}}=this.props;return Object.values(r).filter(i=>{var n;return((n=i==null?void 0:i.definition)==null?void 0:n.supports_ota)&&!j(i,o)}).map(i=>{const n=t[i.friendly_name]??{};return{id:i.friendly_name,device:i,state:n}})}render(){const{checkOTA:r,scheduleOTA:t,unscheduleOTA:o,updateOTA:i,t:n}=this.props,l={checkOTA:r,scheduleOTA:t,unscheduleOTA:o,updateOTA:i},c=this.getAllOtaDevices(),d=[{Header:n("zigbee:pic"),Cell:({row:{original:{device:e,state:a}}})=>s.jsx(w,{className:T["device-image"],device:e,deviceStatus:a,disabled:!1}),disableSortBy:!0},{Header:n("zigbee:friendly_name"),accessor:({device:e})=>e.friendly_name,Cell:({row:{original:{device:e}}})=>s.jsx(y,{to:k(e.ieee_address),children:e.friendly_name})},{Header:n("zigbee:manufacturer"),accessor:({device:e})=>{var a;return[e.manufacturer,(a=e.definition)==null?void 0:a.vendor].join(" ")},Cell:({row:{original:{device:e}}})=>s.jsx(A,{device:e})},{Header:n("zigbee:model"),accessor:({device:e})=>{var a;return[e.model_id,(a=e.definition)==null?void 0:a.model].join(" ")},Cell:({row:{original:{device:e}}})=>s.jsx(N,{device:e})},{Header:n("zigbee:firmware_installed_version"),accessor:({state:e})=>{const a=((e==null?void 0:e.update)??{}).installed_version;return typeof a=="number"&&a?b(a):n("zigbee:firmware_installed_version_na")}},{Header:n("zigbee:firmware_available_version"),accessor:({state:e})=>{const a=((e==null?void 0:e.update)??{}).latest_version;return typeof a=="number"&&a?b(a):"N/A"}},{Header:()=>s.jsx(m,{className:"btn btn-danger btn-sm",onClick:this.checkAllOTA,prompt:!0,children:n("check_all")}),accessor:({state:e})=>((e==null?void 0:e.update)??{}).state+"",id:"check_all",Cell:({row:{original:{device:e,state:a}}})=>s.jsx(H,{device:e,state:a,...l})}];return s.jsx("div",{className:"card",children:s.jsx("div",{className:"table-responsive",children:s.jsx(O,{id:"otaDevices",columns:d,data:c,initialState:{sortBy:[{id:"check_all",desc:!1}]}})})})}}const L=["devices","deviceStates","bridgeInfo"],F=h(L,_)(x(["ota","zigbee","common"])(z));export{F as ConnectedOtaPage};
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{u as f,j as r,r as u,H as h}from"./index-731ec1e3.js";const a=o=>{const e="[/| |:]",n=new RegExp(e,"g");return o.replace(n,"_")},v=o=>{const{t:e}=f("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(u.Fragment,{children:e("unsupported")})},g=o=>{var d,s,c,p,l;const{device:e,anchor:n}=o;let t=e.model_id,i=h;if(e.supported&&e.definition){const m=[encodeURIComponent((s=(d=e.definition)==null?void 0:d.vendor)==null?void 0:s.toLowerCase()),encodeURIComponent((p=(c=e.definition)==null?void 0:c.model)==null?void 0:p.toLowerCase())].join("-");i=`https://www.zigbee2mqtt.io/devices/${encodeURIComponent(a((l=e.definition)==null?void 0:l.model))}.html#${encodeURIComponent(a(n||m))}`,t=e.definition.model}return r.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:i,children:t})};export{g as M,v as V};