zigbee2mqtt-frontend 0.9.8 → 0.9.10

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 (91) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/assets/{Availability-fed47c87.js → Availability-3af40fab.js} +1 -1
  3. package/dist/assets/Availability-3af40fab.js.br +0 -0
  4. package/dist/assets/{CodeEditor-33e25424.js → CodeEditor-7c720b92.js} +1 -1
  5. package/dist/assets/CodeEditor-7c720b92.js.br +0 -0
  6. package/dist/assets/ConnectedDevicePage-e65ab035.js +1 -0
  7. package/dist/assets/ConnectedDevicePage-e65ab035.js.br +0 -0
  8. package/dist/assets/{ConnectedMap-eabba86e.js → ConnectedMap-a96098c3.js} +1 -1
  9. package/dist/assets/ConnectedMap-a96098c3.js.br +0 -0
  10. package/dist/assets/Dashboard-d3da00e6.js +1 -0
  11. package/dist/assets/Dashboard-d3da00e6.js.br +0 -0
  12. package/dist/assets/{DashboardDevice-b6b96e13.js → DashboardDevice-5ee69e85.js} +1 -1
  13. package/dist/assets/DashboardDevice-5ee69e85.js.br +0 -0
  14. package/dist/assets/DashboardFeatureWrapper-1872fc34.js +1 -0
  15. package/dist/assets/DashboardFeatureWrapper-1872fc34.js.br +0 -0
  16. package/dist/assets/DeviceImage-a014c977.js +1 -0
  17. package/dist/assets/DeviceImage-a014c977.js.br +0 -0
  18. package/dist/assets/{GroupPage-49200c64.js → GroupPage-8dc2aca7.js} +1 -1
  19. package/dist/assets/GroupPage-8dc2aca7.js.br +0 -0
  20. package/dist/assets/{ReactTableCom-13b499aa.js → ReactTableCom-a75a090d.js} +1 -1
  21. package/dist/assets/ReactTableCom-a75a090d.js.br +0 -0
  22. package/dist/assets/{RecallRemove-0a64d03c.js → RecallRemove-be1c705a.js} +1 -1
  23. package/dist/assets/RecallRemove-be1c705a.js.br +0 -0
  24. package/dist/assets/{_baseSet-97e612bf.js → _baseSet-f833c1d5.js} +1 -1
  25. package/dist/assets/{_getAllKeysIn-a3189b68.js → _getAllKeysIn-6a01525f.js} +1 -1
  26. package/dist/assets/{bootstrap-5.esm-d86cd837.js → bootstrap-5.esm-52a977ef.js} +1 -1
  27. package/dist/assets/bootstrap-5.esm-52a977ef.js.br +0 -0
  28. package/dist/assets/{index-1b82b6b8.js → index-1f3e7dcc.js} +2 -2
  29. package/dist/assets/index-1f3e7dcc.js.br +0 -0
  30. package/dist/assets/index-2487f74c.js +1 -0
  31. package/dist/assets/index-2487f74c.js.br +0 -0
  32. package/dist/assets/{index-4339902c.js → index-28ce4a18.js} +1 -1
  33. package/dist/assets/{index-23068bf4.js → index-31204834.js} +22 -17
  34. package/dist/assets/index-31204834.js.br +0 -0
  35. package/dist/assets/{index-7d930dc1.js → index-323f362a.js} +1 -1
  36. package/dist/assets/index-323f362a.js.br +0 -0
  37. package/dist/assets/{index-4fcaa722.js → index-38a40fdc.js} +1 -1
  38. package/dist/assets/index-38a40fdc.js.br +0 -0
  39. package/dist/assets/index-5b25f68e.js +1 -0
  40. package/dist/assets/index-5b25f68e.js.br +0 -0
  41. package/dist/assets/{index-a9bb04e9.js → index-82c1d7f0.js} +1 -1
  42. package/dist/assets/index-82c1d7f0.js.br +0 -0
  43. package/dist/assets/{index-bc89dfe2.js → index-ae4b79d5.js} +1 -1
  44. package/dist/assets/index-ae4b79d5.js.br +0 -0
  45. package/dist/assets/{index-954f14a1.js → index-c9a4a107.js} +1 -1
  46. package/dist/assets/index-c9a4a107.js.br +0 -0
  47. package/dist/assets/{intersection-91f17eab.js → intersection-195a70b5.js} +1 -1
  48. package/dist/assets/intersection-195a70b5.js.br +0 -0
  49. package/dist/assets/{isEqual-ad8cee2a.js → isEqual-d94cac69.js} +1 -1
  50. package/dist/assets/{jszip.min-048ecc70.js → jszip.min-54482ccd.js} +1 -1
  51. package/dist/assets/jszip.min-54482ccd.js.br +0 -0
  52. package/dist/assets/{persist-750d029a.js → persist-57fe68c1.js} +1 -1
  53. package/dist/assets/persist-57fe68c1.js.br +0 -0
  54. package/dist/assets/{rjsf-translation-fields-85a8446f.js → rjsf-translation-fields-6be6779f.js} +1 -1
  55. package/dist/assets/{spinner-1baacd6e.js → spinner-ebc58fff.js} +1 -1
  56. package/dist/assets/{vendor-links-f5ab3b16.js → vendor-links-74296de2.js} +1 -1
  57. package/dist/assets/vendor-links-74296de2.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-fed47c87.js.br +0 -0
  62. package/dist/assets/CodeEditor-33e25424.js.br +0 -0
  63. package/dist/assets/ConnectedDevicePage-47a9e8fd.js +0 -1
  64. package/dist/assets/ConnectedDevicePage-47a9e8fd.js.br +0 -0
  65. package/dist/assets/ConnectedMap-eabba86e.js.br +0 -0
  66. package/dist/assets/Dashboard-3791ebf9.js +0 -1
  67. package/dist/assets/Dashboard-3791ebf9.js.br +0 -0
  68. package/dist/assets/DashboardDevice-b6b96e13.js.br +0 -0
  69. package/dist/assets/DashboardFeatureWrapper-7f54ea64.js +0 -1
  70. package/dist/assets/DashboardFeatureWrapper-7f54ea64.js.br +0 -0
  71. package/dist/assets/DeviceImage-f6ec5888.js +0 -1
  72. package/dist/assets/DeviceImage-f6ec5888.js.br +0 -0
  73. package/dist/assets/GroupPage-49200c64.js.br +0 -0
  74. package/dist/assets/ReactTableCom-13b499aa.js.br +0 -0
  75. package/dist/assets/RecallRemove-0a64d03c.js.br +0 -0
  76. package/dist/assets/bootstrap-5.esm-d86cd837.js.br +0 -0
  77. package/dist/assets/index-1b82b6b8.js.br +0 -0
  78. package/dist/assets/index-23068bf4.js.br +0 -0
  79. package/dist/assets/index-4fcaa722.js.br +0 -0
  80. package/dist/assets/index-6889516c.js +0 -1
  81. package/dist/assets/index-6889516c.js.br +0 -0
  82. package/dist/assets/index-7d930dc1.js.br +0 -0
  83. package/dist/assets/index-954f14a1.js.br +0 -0
  84. package/dist/assets/index-99fa9147.js +0 -1
  85. package/dist/assets/index-99fa9147.js.br +0 -0
  86. package/dist/assets/index-a9bb04e9.js.br +0 -0
  87. package/dist/assets/index-bc89dfe2.js.br +0 -0
  88. package/dist/assets/intersection-91f17eab.js.br +0 -0
  89. package/dist/assets/jszip.min-048ecc70.js.br +0 -0
  90. package/dist/assets/persist-750d029a.js.br +0 -0
  91. package/dist/assets/vendor-links-f5ab3b16.js.br +0 -0
@@ -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,h as te,k as ne,m as ie,B as j,c as S,a as A,i as D,E as F,b as re,G as z,d as oe,H as V,n as E,q as ae,I as ce,y as le,_ as de,R as W,C as ue,A as me,o as he}from"./index-23068bf4.js";import{F as pe,a as ge,b as ve,w as xe,T as fe}from"./bootstrap-5.esm-d86cd837.js";import{D as be,a as je,A as Ne}from"./Availability-fed47c87.js";import{D as _e}from"./DeviceImage-f6ec5888.js";import{V as Ce,M as Se}from"./vendor-links-f5ab3b16.js";import{L as Ae,D as K,P as Ie}from"./index-7d930dc1.js";import{E as O,D as we,A as Re,R as Ee}from"./RecallRemove-0a64d03c.js";import{F as ke,a as q,T as Pe}from"./DashboardFeatureWrapper-7f54ea64.js";import{T as ye,D as Oe}from"./rjsf-translation-fields-85a8446f.js";import{L as Be,A as Me}from"./index-954f14a1.js";import"./_getAllKeysIn-a3189b68.js";import"./isEqual-ad8cee2a.js";import"./intersection-91f17eab.js";import"./index-4339902c.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./_baseSet-97e612bf.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?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_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-33e25424.js"),["./CodeEditor-33e25424.js","./index-23068bf4.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};
@@ -1 +0,0 @@
1
- import{at as b,aH as F,q as v,as as S,av as C,c as D,a as A,r as x,i as E,E as w,j as m}from"./index-23068bf4.js";import{D as B}from"./DashboardDevice-b6b96e13.js";import{i as j,b as k,g as I,c as f,D as T}from"./DashboardFeatureWrapper-7f54ea64.js";import{_ as N}from"./_baseSet-97e612bf.js";import{c as G}from"./_getAllKeysIn-a3189b68.js";import{a as P,g as L,G as K,p as M}from"./persist-750d029a.js";import{D as y}from"./DEVICES_GLOBAL_NAME-6620c611.js";import"./index-7d930dc1.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./DeviceImage-f6ec5888.js";import"./index-4339902c.js";import"./isEqual-ad8cee2a.js";var O=b,R=N,V=F;function q(t,a,n){for(var e=-1,s=a.length,l={};++e<s;){var r=a[e],i=O(t,r);n(i,r)&&R(l,V(r,t),i)}return l}var W=q,$=S,H=C,z=W,J=G;function Q(t,a){if(t==null)return{};var n=$(J(t),function(e){return[e]});return a=H(a),z(t,n,function(e,s){return a(e,s[0])})}var U=Q;const X=v(U),Y=["linkquality","battery","battery_low","battery_state","color_temp_startup","voltage","strength","color_options","warning","position","operation_mode","operation_mode2","programming_mode","options","programming","schedule_monday","schedule_tuesday","schedule_wednesday","schedule_thursday","schedule_friday","schedule_saturday","schedule_sunday","holiday_mode_date"],Z=["state","brightness","color_temp","mode","sound","occupancy","tamper","alarm"],ee=["light"],re=["",null,void 0],g=(t,a={})=>{const{access:n,property:e,name:s,type:l}=t;let{features:r}=t;if(j(t)||k(t)){r=r.map(d=>g(d,e?a[e]:a)).filter(d=>d);const c=I(r,"property");r=Object.values(c).map(d=>d[0])}const i={...t,features:r};return Z.includes(s)||ee.includes(l)?i:n&&!(n&f.ACCESS_STATE&&!re.includes(a[e]))?!1:s=="voltage"&&a.battery==null?i:Y.includes(s)?!1:n===f.ACCESS_STATE||n===f.ACCESS_STATE+f.ACCESS_READ||Array.isArray(r)&&r.length>0?i:!1},te=["friendly_name","description","ieee_address","manufacturer","type","power_source","model_id","definition.model","definition.vendor"];function ae(t,a,n){return Object.values(t).filter(e=>e.supported).map(e=>({device:e,deviceState:a[e.friendly_name]??{}})).map(({device:e,deviceState:s})=>{var i;const r=(((i=e.definition)==null?void 0:i.exposes)??[]).map(c=>n(c,s)).filter(c=>c);return{device:e,deviceState:s,filteredFeatures:r}}).filter(({filteredFeatures:e})=>e.length>0).sort((e,s)=>e.device.friendly_name.localeCompare(s.device.friendly_name))}function se(t){const{setDeviceState:a,getDeviceState:n,deviceStates:e,bridgeInfo:s,devices:l}=t,[r,i]=x.useState(()=>P(L(y))??{}),c=o=>{const p={...r,globalFilter:o};i(p),M(y,p)},d=X(l,(o,p)=>E(o,s.config)?!1:r.globalFilter?te.map(u=>w(o,u)).filter(Boolean).map(String).map(u=>u.toLowerCase()).some(u=>u.includes(r.globalFilter.toLowerCase())):!0);return m.jsxs("div",{className:"row",children:[m.jsx("div",{className:"col-12",children:m.jsx("div",{className:"flex-fill card flex-shrink-1",children:m.jsx("div",{className:"card-footer",children:m.jsx(K,{globalFilter:r.globalFilter,setGlobalFilter:c})})})}),ae(d,e,g).map(({device:o,deviceState:p,filteredFeatures:u})=>m.jsx(B,{feature:{features:u},device:o,deviceState:p,onChange:(h,_)=>a(o.friendly_name,_),onRead:(h,_)=>n(o.friendly_name,_),featureWrapperClass:T,lastSeenType:s.config.advanced.last_seen},o.ieee_address))]})}const ge=D(["devices","deviceStates","bridgeInfo"],A)(se);export{ge as ConnectedDashboardPage};
@@ -1 +0,0 @@
1
- import{q as B,aI as $e,a9 as Fe,j as c,B as v,r as x,b as y,aJ as Ae,u as ee,w as q,R as V,P as I}from"./index-23068bf4.js";import{D as G}from"./index-7d930dc1.js";import{i as Te}from"./isEqual-ad8cee2a.js";function Oe(e){return e.type==="binary"}function te(e){return e.type==="list"}function Me(e){return e.type==="numeric"}function Le(e){return e.type==="text"}function We(e){return e.type==="enum"}function Ie(e){return e.type==="light"}function Ue(e){return e.type==="switch"}function ze(e){return e.type==="cover"}function De(e){return e.type==="lock"}function Pe(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 qe(e){return te(e)&&e.name==="gradient"&&e.length_min!==void 0&&e.length_max!==void 0}var Ve=Fe,Ge=$e,Je=Object.prototype,Ze=Je.hasOwnProperty,He=Ge(function(e,t,n){Ze.call(e,n)?e[n].push(t):Ve(e,n,[t])}),Ke=He;const Ye=B(Ke);var b=(e=>(e[e.NONE=0]="NONE",e[e.ACCESS_STATE=1]="ACCESS_STATE",e[e.ACCESS_WRITE=2]="ACCESS_WRITE",e[e.ACCESS_READ=4]="ACCESS_READ",e))(b||{});const 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})})},Xe=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})]})},Qe=Xe,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]})},T=({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(Qe,{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(T,{...e})},tt=et,nt=e=>c.jsx(_,{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(_,{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 F=ct,re={};for(const e of Object.keys(F))re[F[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(F)){const a=F[s],o=it(e,a);o<n&&(n=o,r=s)}return r};d.keyword.rgb=function(e){return F[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 z=se,mt=ht,N={},pt=Object.keys(z);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=>{N[e]={},Object.defineProperty(N[e],"channels",{value:z[e].channels}),Object.defineProperty(N[e],"labels",{value:z[e].labels});const t=mt(e);Object.keys(t).forEach(r=>{const s=t[r];N[e][r]=xt(s),N[e][r].raw=gt(s)})});var M=N;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"#"+M.xyz.hex([u*100,l*100,f*100])}case"color_hs":{const{hue:a=0,saturation:o=0}=e;return"#"+M.hsv.hex([a,o,100])}case"color_rgb":const{r:n,g:r,b:s}=e;return"#"+M.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(T,{...e})},St=wt,Et={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"}))},_t=e=>c.jsx(_,{type:"light",...e,stepsConfiguration:Et}),Rt=_t,Nt=e=>c.jsx(_,{type:"lock",...e}),$t=Nt,Ft=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=Ft,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(T,{...e})},Tt=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]})},Mt=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(Mt,{onChange:o=>a(n,{[r]:o}),value:s[r]??""}):t&b.ACCESS_STATE?c.jsx(A,{...e}):c.jsx(T,{...e})},Wt=Lt,It=e=>c.jsx(_,{type:"switch",...e}),Ut=It,zt=e=>c.jsx(_,{type:"fan",...e}),Dt=zt,Pt=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=Pt,qt=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})]})},Vt=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,E)=>{u(E,p)},onRead:(w,E)=>{},featureWrapperClass:qt,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=Vt;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(T,{...this.props})}}const Zt=q(["list","common"])(V.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"#"+M.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 R=[...u];R[g]=H(C),f(R)},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),[E,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:R=>{h(C,R.hex)},value:g,format:"color_rgb"}),E&&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=q(["gradient","common"])(V.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(Me(t))return c.jsx(i,{...h,children:c.jsx(Tt,{feature:t,...f,steps:s==null?void 0:s[t.name]})});if(qe(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(Ie(t))return c.jsx(Rt,{feature:t,...f});if(Ue(t))return c.jsx(Ut,{feature:t,...f});if(ze(t))return c.jsx(ot,{feature:t,...f});if(De(t))return c.jsx($t,{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(Pe(t))return c.jsx(Dt,{feature:t,...f});if(O(t)){const m=u&&t.property?r[t.property]:r;return c.jsx(i,{...h,children:c.jsx(_,{type:"composite",feature:t,...f,deviceState:m})})}return c.jsx(i,{...h,children:c.jsx("pre",{children:JSON.stringify(t,null,4)})})};class Xt 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 E={...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:E,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],R=C.length==1;w.push(c.jsxs("div",{children:[r?`Endpoint: ${g}`:null,c.jsx("div",{className:R?"":"ps-4",children:C.map(U=>c.jsx(L,{feature:U,parentFeatures:m,device:a,deviceState:E,onChange:this.onChange,onRead:this.onRead,featureWrapperClass:u,minimal:f},U.name+U.endpoint))})]},g))}}else{const S=h.map(g=>c.jsx(L,{feature:g,parentFeatures:m,device:a,deviceState:E,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 Qt(e,t){return["deviceState","device","feature"].every(r=>Te(e[r],t[r]))}const _=q(["composite","common"])(V.memo(Xt,Qt));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+"]",D="["+yn+"]",P="\\ud83c[\\udffb-\\udfff]",kn="(?:"+D+"|"+P+")",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+")*",En=me+he+Sn,_n="(?:"+[ue+D+"?",D,fe,de,jn].join("|")+")",Rn=RegExp(P+"(?="+P+")|"+_n+En,"g");function Nn(e){return e.match(Rn)||[]}var $n=Nn,Fn=gn,An=ie,Tn=$n;function On(e){return An(e)?Tn(e):Fn(e)}var Mn=On,Ln=sn,Wn=ie,In=Mn,Un=I;function zn(e){return function(t){t=Un(t);var n=Wn(t)?In(t):void 0,r=n?n[0]:t.charAt(0),s=n?Ln(n,1).join(""):t.slice(1);return r[e]()+s}}var Dn=zn,Pn=Dn,Bn=Pn("toUpperCase"),pe=Bn,qn=I,Vn=pe;function Gn(e){return Vn(qn(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,Xn=Yn,Qn={À:"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=Xn(Qn),tr=er,nr=tr,rr=I,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",Er=" \\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",_r="\\ufe0e\\ufe0f",ye=kr+wr+Sr+Er,Ce="['’]",K="["+ye+"]",Rr="["+jr+"]",je="\\d+",Nr="["+xe+"]",ke="["+be+"]",we="[^"+ge+ye+je+xe+be+ve+"]",$r="\\ud83c[\\udffb-\\udfff]",Fr="(?:"+Rr+"|"+$r+")",Ar="[^"+ge+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",Ee="[\\ud800-\\udbff][\\udc00-\\udfff]",$="["+ve+"]",Tr="\\u200d",Y="(?:"+ke+"|"+we+")",Or="(?:"+$+"|"+we+")",X="(?:"+Ce+"(?:d|ll|m|re|s|t|ve))?",Q="(?:"+Ce+"(?:D|LL|M|RE|S|T|VE))?",_e=Fr+"?",Re="["+_r+"]?",Mr="(?:"+Tr+"(?:"+[Ar,Se,Ee].join("|")+")"+Re+_e+")*",Lr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Wr="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ir=Re+_e+Mr,Ur="(?:"+[Nr,Se,Ee].join("|")+")"+Ir,zr=RegExp([$+"?"+ke+"+"+X+"(?="+[K,$,"$"].join("|")+")",Or+"+"+Q+"(?="+[K,$+Y,"$"].join("|")+")",$+"?"+Y+"+"+X,$+"+"+Q,Wr,Lr,je,Ur].join("|"),"g");function Dr(e){return e.match(zr)||[]}var Pr=Dr,Br=pr,qr=br,Vr=I,Gr=Pr;function Jr(e,t,n){return e=Vr(e),t=n?void 0:t,t===void 0?qr(e)?Gr(e):Br(e):e.match(t)||[]}var Zr=Jr,Hr=Hn,Kr=dr,Yr=Zr,Xr="['’]",Qr=RegExp(Xr,"g");function es(e){return function(t){return Hr(Yr(Kr(t).replace(Qr,"")),e,"")}}var Ne=es,ts=Jn,ns=Ne,rs=ns(function(e,t,n){return t=t.toLowerCase(),e+(n?ts(t):t)}),ss=rs;const as=B(ss);var os=Ne,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)},xs=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{xs as D,L as F,_ as T,qt as a,Be as b,b as c,Ye as g,Ie as i};
@@ -1 +0,0 @@
1
- import{r as g,j as o,R as x,u as w,b as S}from"./index-23068bf4.js";import{A as P,a as v}from"./index-4339902c.js";function p(r){"@babel/helpers - typeof";return p=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(r)}function E(r,e){if(p(r)!="object"||!r)return r;var t=r[Symbol.toPrimitive];if(t!==void 0){var n=t.call(r,e||"default");if(p(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(r)}function A(r){var e=E(r,"string");return p(e)=="symbol"?e:e+""}function L(r,e,t){return(e=A(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var N=function(r){var e=r.decode,t=e===void 0?!0:e,n=r.crossOrigin,s=n===void 0?"":n;return function(u){return new Promise(function(l,f){var a=new Image;s&&(a.crossOrigin=s),a.onload=function(){t&&a.decode?a.decode().then(l).catch(f):l()},a.onerror=f,a.src=u})}};function y(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(r,s).enumerable})),t.push.apply(t,n)}return t}function d(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?y(Object(t),!0).forEach(function(n){L(r,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):y(Object(t)).forEach(function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(t,n))})}return r}var _=function(e){return e.filter(function(t){return t})},D=function(e){return Array.isArray(e)?e:[e]},c={},I=function(e,t){var n=!1;return new Promise(function(s,u){var l=function(a){return t(a).then(function(){n=!0,s(a)})};e.reduce(function(f,a){return f.catch(function(){if(!n)return l(a)})},l(e.shift())).catch(u)})};function R(r){var e=r.srcList,t=r.imgPromise,n=t===void 0?N({decode:!0}):t,s=r.useSuspense,u=s===void 0?!0:s,l=g.useState(!1),f=l[1],a=_(D(e)),i=a.join("");if(c[i]||(c[i]={promise:I(a,n),cache:"pending",error:null}),c[i].cache==="resolved")return{src:c[i].src,isLoading:!1,error:null};if(c[i].cache==="rejected"){if(u)throw c[i].error;return{isLoading:!1,error:c[i].error,src:void 0}}if(c[i].promise.then(function(m){c[i]=d(d({},c[i]),{},{cache:"resolved",src:m}),u||f(i)}).catch(function(m){c[i]=d(d({},c[i]),{},{cache:"rejected",error:m}),u||f(i)}),u)throw c[i].promise;return{isLoading:!0,src:void 0,error:null}}function b(r){const{device:e,type:t,...n}=r,{src:s}=R({srcList:P.map(u=>u(e)).filter(Boolean)});return t==="svg"?o.jsx("image",{crossOrigin:"anonymous",...n,href:s}):o.jsx("img",{alt:"",crossOrigin:"anonymous",src:s})}class h extends x.Component{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?o.jsx(o.Fragment,{children:"ERROR"}):this.props.children}}function k(r){const{t:e}=w("zigbee"),{device:t={},disabled:n,deviceStatus:s,type:u="img",className:l,...f}=r;if(u==="svg")return o.jsx(g.Suspense,{fallback:o.jsx("image",{crossOrigin:"anonymous",...f,href:v}),children:o.jsx(h,{children:o.jsx(b,{type:"svg",device:t,...f})})});const i=((s==null?void 0:s.update)??{}).state==="updating"?o.jsx("i",{title:e("updating_firmware"),className:"fa fa-sync fa-spin position-absolute bottom-0 right-0"}):null,m=t.interviewing?o.jsx("i",{title:e("interviewing"),className:"fa fa-spinner fa-spin position-absolute bottom-0 right-0"}):null,j=!t.interviewing&&!t.interview_completed,O=n?o.jsx("i",{title:e("device_disabled"),className:"fa fa-ban position-absolute bottom-0 right-0"}):null;return o.jsxs("div",{className:S(l,"position-relative"),...f,children:[o.jsx(g.Suspense,{fallback:o.jsx("img",{alt:"",src:v}),children:o.jsx(h,{children:o.jsx(b,{device:t})})}),m,i,O,j&&o.jsx("i",{title:e("interview_failed"),className:"fa fa-exclamation-triangle position-absolute top-0 right-0 text-danger"})]})}export{k as D};
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{c as m,a as p,w as g,r as u,i as b,j as s,L as h,g as f,B as l,u as _,t as j}from"./index-23068bf4.js";import{D as x}from"./DeviceImage-f6ec5888.js";import{V as v,M as k,O}from"./vendor-links-f5ab3b16.js";import{T as A}from"./ReactTableCom-13b499aa.js";import"./index-4339902c.js";import"./persist-750d029a.js";const w={"device-image":"_device-image_29lej_1"},y=d=>{const{t:r}=_("ota"),{device:o,state:a,checkOTA:i,updateOTA:n}=d,c=(a==null?void 0:a.update)??{};switch(c.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:`${c.progress}%`},children:[c.progress,"%"]})}),s.jsx("div",{children:r("remaining_time",{remaining:j(c.remaining)})})]});case"available":return s.jsx(l,{className:"btn btn-danger btn-sm",onClick:n,item:o.friendly_name,prompt:!0,children:r("update")});default:return s.jsx(l,{className:"btn btn-primary btn-sm",onClick:i,item:o.friendly_name,children:r("check")})}};class D extends u.Component{constructor(){super(...arguments),this.checkAllOTA=()=>{const{checkOTA:r}=this.props;this.getAllOtaDevices().forEach(({device:a})=>r(a.friendly_name))}}getAllOtaDevices(){const{devices:r,deviceStates:o,bridgeInfo:{config:a}}=this.props;return Object.values(r).filter(i=>{var n;return((n=i==null?void 0:i.definition)==null?void 0:n.supports_ota)&&!b(i,a)}).map(i=>{const n=o[i.friendly_name]??{};return{id:i.friendly_name,device:i,state:n}})}render(){const{checkOTA:r,updateOTA:o,t:a}=this.props,i={checkOTA:r,updateOTA:o},n=this.getAllOtaDevices(),c=[{Header:a("zigbee:pic"),Cell:({row:{original:{device:e,state:t}}})=>s.jsx(x,{className:w["device-image"],device:e,deviceStatus:t,disabled:!1}),disableSortBy:!0},{Header:a("zigbee:friendly_name"),accessor:({device:e})=>e.friendly_name,Cell:({row:{original:{device:e}}})=>s.jsx(h,{to:f(e.ieee_address),children:e.friendly_name})},{Header:a("zigbee:manufacturer"),accessor:({device:e})=>{var t;return[e.manufacturer,(t=e.definition)==null?void 0:t.vendor].join(" ")},Cell:({row:{original:{device:e}}})=>s.jsx(v,{device:e})},{Header:a("zigbee:model"),accessor:({device:e})=>{var t;return[e.model_id,(t=e.definition)==null?void 0:t.model].join(" ")},Cell:({row:{original:{device:e}}})=>s.jsx(k,{device:e})},{Header:a("zigbee:firmware_build_date"),accessor:({device:e})=>e.date_code},{Header:a("zigbee:firmware_version"),accessor:({device:e})=>e.software_build_id,Cell:({row:{original:{device:e}}})=>s.jsx(O,{device:e})},{Header:()=>s.jsx(l,{className:"btn btn-danger btn-sm",onClick:this.checkAllOTA,prompt:!0,children:a("check_all")}),accessor:({state:e})=>((e==null?void 0:e.update)??{}).state+"",id:"check_all",Cell:({row:{original:{device:e,state:t}}})=>s.jsx(y,{device:e,state:t,...i})}];return s.jsx("div",{className:"card",children:s.jsx("div",{className:"table-responsive",children:s.jsx(A,{id:"otaDevices",columns:c,data:n,initialState:{sortBy:[{id:"check_all",desc:!1}]}})})})}}const C=["devices","deviceStates","bridgeInfo"],B=m(C,p)(g(["ota","zigbee","common"])(D));export{B as ConnectedOtaPage};
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{q as N,v as S,u as T,j as t,w as _,r as y,B as u,o as C,c as D,a as z,x as F,F as I,y as O,z as q,A as B,C as A,b as K}from"./index-23068bf4.js";import{_ as E,w as P,T as V,c as j}from"./bootstrap-5.esm-d86cd837.js";import{T as R,D as M}from"./rjsf-translation-fields-85a8446f.js";import{p as L}from"./powerSourceTypeToTranslationKey-452dac81.js";import{S as $}from"./spinner-1baacd6e.js";import{g as G}from"./index-4339902c.js";import"./_getAllKeysIn-a3189b68.js";import"./isEqual-ad8cee2a.js";import"./intersection-91f17eab.js";const U={"ui:order":["base_topic","server","user","password","client_id","version","ca","key","cert","reject_unauthorized","*"]},H={"ui:order":["port","adapter","disable_led","*"]},J={"ui:order":["port","host","*"]},Z={mqtt:U,serial:H,frontend:J};var Y=E,x=S;function W(a,e,s,n){return a==null?[]:(x(e)||(e=e==null?[]:[e]),s=n?void 0:s,x(s)||(s=s==null?[]:[s]),Y(a,e,s))}var Q=W;const X=N(Q);function ee(a){const{devices:e}=a,{t:s}=T(["stats","zigbee"]),n=Object.values(e).filter(i=>i.type!=="Coordinator"),r=n.length,o={byType:{},byPowerSource:{},byVendor:{},byModel:{}};n.forEach(i=>{o.byModel[i.model_id]=(o.byModel[i.model_id]||0)+1,o.byVendor[i.manufacturer]=(o.byVendor[i.manufacturer]||0)+1,o.byType[s(i.type)]=(o.byType[s(i.type)]||0)+1;const l=s("zigbee:"+L(i.power_source));o.byPowerSource[l]=(o.byPowerSource[l]||0)+1});const m=Object.entries(o).map(([i,l])=>t.jsx("li",{className:"list-group-item d-flex justify-content-between align-items-start",children:t.jsxs("div",{className:"ms-2 me-auto",children:[t.jsx("div",{className:"fw-bold",children:s(i)}),X(Object.entries(l),[([c,d])=>d],["desc"]).map(([c,d])=>t.jsxs("div",{children:[c,": ",d]},c))]})},i));return t.jsxs("ol",{className:"list-group list-group-numbered",children:[t.jsx("li",{className:"list-group-item d-flex justify-content-between align-items-start",children:t.jsx("div",{className:"ms-2 me-auto",children:t.jsxs("div",{className:"fw-bold",children:[s("total")," ",r]})})}),m]})}const te={access:"public",cache:""},se=["*.css"],ne="zigbee2mqtt-frontend",re="0.9.8",oe="GPL-3.0",ie={build:"vite build",preview:"vite preview",start:"vite dev",postversion:"git push && git push --tags",version:"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",pretty:'prettier --write "./**/*.{js,jsx,tsx}"',postinstall:"husky install",prepublishOnly:"pinst --disable",postpublish:"pinst --enable","test:unit":"vitest","test:coverage":"vitest run --coverage","test:eslint":'eslint "./src/**/*.{js,jsx,tsx}"',"test:pretty":'prettier --check "./**/*.{js,jsx,tsx}"',"i18n:download":"node download_translations.js","i18n:trim":"node trim-locales.js"},ae=["dist/*"],ce={node:">=20.11"},le={"@codemirror/lang-javascript":"^6.2.2","@commitlint/cli":"~17.8.0","@commitlint/config-conventional":"~17.8.0","@ebay/nice-modal-react":"~1.2.13","@eslint/js":"^9.18.0","@fortawesome/fontawesome-free":"~6.6.0","@rjsf/bootstrap-5":"https://github.com/nurikk/fileshare/blob/main/rjsf-bootstrap-5-4.2.0.tgz?raw=true","@rjsf/core":"~4.2.3","@testing-library/jest-dom":"^6.3.0","@testing-library/react":"^14.1.2","@testing-library/user-event":"^14.5.2","@types/color-convert":"~2.0.1","@types/d3-drag":"~3.0.4","@types/d3-force":"~3.0.6","@types/d3-selection":"~3.0.7","@types/d3-zoom":"~3.0.5","@types/events":"~3.0.1","@types/file-saver":"~2.0.5","@types/json-schema":"~7.0.13","@types/lodash":"~4.17.0","@types/react":"~18.2.24","@types/react-dom":"~18.2.8","@types/react-router-dom":"~5.3.3","@types/react-table":"~7.7.16","@types/react-transition-group":"~4.4.7","@types/reconnectingwebsocket":"~1.0.8","@types/ws":"~8.5.6","@uiw/codemirror-theme-github":"^4.21.24","@uiw/react-codemirror":"^4.21.24","@vitejs/plugin-react":"~4.3.0","@vitest/coverage-v8":"^1.2.2",bootstrap:"~5.3.2",classnames:"~2.5.0","color-convert":"~2.0.1","conventional-changelog-cli":"~4.1.0","d3-drag":"~3.0.0","d3-force":"~3.0.0","d3-force-reuse":"~1.0.1","d3-selection":"~3.0.0","d3-zoom":"~3.0.0","deep-diff":"~1.0.2","deep-object-diff":"~1.1.9",eslint:"~9.18.0","eslint-config-prettier":"~10.0.1","eslint-plugin-react":"~7.37.4","eslint-plugin-react-refresh":"~0.4.18",events:"~3.3.0","file-saver":"~2.0.5",globals:"~15.14.0",husky:"~8.0.3",i18next:"~23.5.1","i18next-browser-languagedetector":"~7.1.0",jsdom:"^24.0.0",jszip:"~3.10.1",lodash:"~4.17.21",notyf:"~3.10.0",pinst:"~3.0.0",prettier:"~3.4.2",react:"~18.2.0","react-app-polyfill":"~3.0.0","react-bootstrap":"~2.10.0","react-css-theme-switcher":"~0.3.0","react-dom":"~18.2.0","react-i18next":"~13.5.0","react-image":"~4.1.0","react-notifications-component":"^4.0.1","react-router-dom":"~5.3.4","react-table":"~7.8.0","react-transition-group":"~4.4.5","reconnecting-websocket":"~4.4.0",sass:"~1.71.0",store2:"^2.14.2","timeago.js":"~4.0.2",typescript:"~5.2.2","typescript-eslint":"^8.21.0",unistore:"~3.5.2",vite:"~4.5.0","vite-plugin-compression":"~0.5.1","vite-plugin-html":"~3.2.0","vite-plugin-sass-dts":"~1.3.11",vitest:"^1.3.1",ws:"~8.17.0"},de="index.js",me={hooks:{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},pe={type:"git",url:"git+https://github.com/nurikk/zigbee2mqtt-frontend.git"},ue={url:"https://github.com/nurikk/zigbee2mqtt-frontend/issues"},ge="pnpm@10.5.2",he={onlyBuiltDependencies:["core-js","core-js-pure","esbuild"]},fe={private:!1,publishConfig:te,sideEffects:se,name:ne,version:re,license:oe,scripts:ie,eslintIgnore:ae,engines:ce,devDependencies:le,main:de,husky:me,repository:pe,bugs:ue,packageManager:ge,pnpm:he};function be(a){return new Promise((e,s)=>{const n=new FileReader;n.onloadend=()=>e(n.result),n.onerror=r=>s(r),n.readAsDataURL(a)})}async function ye(a){const e=await fetch(a);if(e.ok){const s=await e.blob();return be(s)}else return Promise.reject(e.status)}async function ve(a,e){for(const s of a)try{if(await e(s))return!0}catch{}return!1}function je(a){const[e,s]=y.useState("none"),{setDeviceOptions:n,t:r,devices:o}=a,[m,i]=y.useState({});async function l(c){if(i(p=>({...p,[c.ieee_address]:"init"})),!await ve([G],async p=>{const g=p(c),h=await ye(g);return await n(c.ieee_address,{icon:h}),i(f=>({...f,[c.ieee_address]:"done"})),!0}))throw new Error("Failed to localise image")}switch(y.useEffect(()=>{if(e=="start"){for(const c of Object.values(o).filter(d=>d.type!=="Coordinator"))l(c).catch(d=>{console.log("Error localising image",d),i(p=>({...p,[c.ieee_address]:"error"}))}).then();s("inprogress")}},[e]),e){case"none":return t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:()=>s("start"),children:r("localise_images")});case"inprogress":return t.jsx("div",{children:Object.values(o).map(c=>t.jsxs("div",{children:[c.friendly_name," ",m[c.ieee_address]]},c.ieee_address))});case"done":return t.jsx("div",{children:"done"})}return t.jsx("div",{children:"Unknown"})}const xe=_(["settings"])(je),ke=P(V),b="main",w=["groups","devices","device_options","ban","whitelist","map_options"],_e=["object","array"],k=(a,e={},s={})=>{e.required&&(e.required=e.required.filter(n=>a.includes(n)));for(const n of a)e.properties&&delete e.properties[n],delete s[n];return{schema:e,config:s}},we=[t.jsx("div",{className:"row pb-2",children:t.jsx("div",{className:"col",children:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.buymeacoffee.com/nurikk",children:t.jsx("img",{crossOrigin:"anonymous",src:"https://img.buymeacoffee.com/button-api/?text=Thanks for frontend&emoji=🍺&slug=nurikk&button_colour=FFDD00&font_colour=000000&font_family=Arial&outline_colour=000000&coffee_colour=ffffff"})})})},"nurikk"),t.jsx("div",{className:"row pb-2",children:t.jsx("div",{className:"col",children:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.buymeacoffee.com/koenkk",children:t.jsx("img",{crossOrigin:"anonymous",src:"https://img.buymeacoffee.com/button-api/?text=Thanks for zigbee2mqtt&emoji=☕&slug=koenkk&button_colour=FFDD00&font_colour=000000&font_family=Arial&outline_colour=000000&coffee_colour=ffffff"})})})},"koenkk")].sort(()=>Math.random()-.5),Ne=(a,e)=>_e.includes(e.type)&&!w.includes(a)||(e&&e.oneOf?e.oneOf.length>0:!1);class Se extends y.Component{constructor(){super(...arguments),this.state={keyName:b},this.settingsFormData={},this.downloadBackup=()=>{const{backup:e,bridgeInfo:s}=this.props,n=F(new Date).replace(/[\s_:]/g,"-"),r=`z2m-backup.${s.version}.${n}.zip`;I.saveAs(`data:application/zip;base64,${e}`,r)},this.addInstallCode=()=>{const{t:e,addInstallCode:s}=this.props,n=prompt(e("enter_install_code"));n&&s(n)},this.onSettingsSave=e=>{const{formData:s}=e,{updateBridgeConfig:n}=this.props,{keyName:r}=this.state,o=O(this.getSettingsInfo().currentConfig,s);n(r===b?o:{[r]:o})}}renderCategoriesTabs(){const{t:e}=this.props;return t.jsx("ul",{className:"nav nav-tabs",children:q.map(s=>t.jsx("li",{className:"nav-item",children:t.jsx(B,{className:"nav-link",activeClassName:"active",to:s.url,children:e(s.translationKey)})},s.url))})}render(){return t.jsxs("div",{className:"tab",children:[this.renderCategoriesTabs(),t.jsx("div",{className:"tab-content h-100 p-0 p-sm-3",children:t.jsx("div",{className:"tab-pane fade show active",children:this.renderSwitcher()})})]})}renderSwitcher(){const{match:e}=this.props,{tab:s}=e.params;switch(s){case"tools":return this.renderTools();case"bridge":return this.renderBridgeInfo();case"about":return this.renderAbout();case"settings":return this.renderSettings();case"donate":return this.renderDonate();case"translate":return this.renderTranslate();default:return t.jsx(A,{to:"/settings/settings"})}}renderTranslate(){const{t:e}=this.props;return t.jsx("div",{className:"p-3",children:t.jsxs("p",{children:[e("settings:translation_prompt")," ",t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://poeditor.com/join/project?hash=Az88waAhPd",children:"POEditor"})]})})}renderAbout(){var l,c,d,p,g,h,f;const{bridgeInfo:e,devices:s,t:n}=this.props,o=((l=e.version)==null?void 0:l.match(/^\d+\.\d+\.\d+$/))===null?e.version:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:`https://github.com/Koenkk/zigbee2mqtt/releases/tag/${e.version}`,children:e.version}),m=e.commit?t.jsxs(t.Fragment,{children:["commit:"," ",t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:`https://github.com/Koenkk/zigbee2mqtt/commit/${e.commit}`,children:e.commit})]}):null,i=[{translationKey:"zigbee2mqtt_version",content:t.jsxs(t.Fragment,{children:[o," ",m]})},{translationKey:"coordinator_type",content:t.jsx(t.Fragment,{children:((c=e.coordinator)==null?void 0:c.type)??n("common:unknown")})},{translationKey:"coordinator_revision",content:t.jsx(t.Fragment,{children:((p=(d=e.coordinator)==null?void 0:d.meta)==null?void 0:p.revision)??n("common:unknown")})},{translationKey:"coordinator_ieee_address",content:t.jsx(t.Fragment,{children:((g=e.coordinator)==null?void 0:g.ieee_address)??n("common:unknown")})},{translationKey:"frontend_version",content:fe.version},{translationKey:"zigbee_herdsman_converters_version",content:((h=e.zigbee_herdsman_converters)==null?void 0:h.version)??n("common:unknown")},{translationKey:"zigbee_herdsman_version",content:((f=e.zigbee_herdsman)==null?void 0:f.version)??n("common:unknown")},{translationKey:"stats",content:t.jsx(ee,{devices:s})}];return t.jsx("div",{className:"p-3",children:i.map(v=>t.jsxs("dl",{className:"row",children:[t.jsx("dt",{className:"col-sm-3",children:n(v.translationKey)}),t.jsx("dd",{className:"col-sm-9",children:v.content})]},v.translationKey))})}renderBridgeInfo(){const{bridgeInfo:e}=this.props;return t.jsx("div",{className:"p-3",children:t.jsx("pre",{children:JSON.stringify(e,null,4)})})}renderBackupControls(){const{backup:e,preparingBackup:s,requestBackup:n,t:r}=this.props;return s?t.jsx(u,{className:"btn btn-primary d-block mt-2 disabled",children:t.jsx($,{})}):e?t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:this.downloadBackup,children:r("download_z2m_backup")}):t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:n,children:r("request_z2m_backup")})}renderTools(){const{exportState:e,restartBridge:s,setDeviceOptions:n,devices:r,t:o}=this.props;return t.jsxs("div",{className:"p-3",children:[t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:e,children:o("download_state")}),t.jsx(u,{className:"btn btn-danger d-block mt-2",onClick:s,prompt:!0,children:o("restart_zigbee2mqtt")}),this.renderBackupControls(),t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:this.addInstallCode,children:o("add_install_code")}),t.jsx(xe,{setDeviceOptions:n,devices:r})]})}getSettingsTabs(){const{bridgeInfo:{config_schema:e={properties:{}}},t:s}=this.props,n=Object.entries(e.properties).filter(([r,o])=>Ne(r,o)).map(([r,o])=>({name:r,title:s(r,{defaultValue:o.title})}));return n.unshift({name:b,title:s("main",{defaultValue:"Main"})}),n}getSettingsInfo(){const{keyName:e}=this.state,{bridgeInfo:{config_schema:s,config:n}}=this.props;let r=k(w,j(s),j(n)),o=r.schema,m;if(e===b){const i=this.getSettingsTabs().map(l=>l.name);r=k(i,r.schema,r.config),o=r.schema,m=r.config}else m=r.config[e],r.schema.properties&&(o=r.schema.properties[e]);return{currentSchema:o,currentConfig:m}}renderSettingsTabs(){const{t:e}=this.props,s=this.getSettingsTabs(),{keyName:n}=this.state;return t.jsx("div",{className:"nav nav-pills",children:s.map(r=>t.jsx("li",{className:"nav-item",children:t.jsx("a",{className:K("nav-link",{"bg-primary active":n===r.name}),"aria-current":"page",href:"#",onClick:o=>{this.setState({keyName:r.name}),o.preventDefault()},children:e(r.name,{defaultValue:r.title})})},r.name))})}renderSettings(){const{keyName:e}=this.state,{currentSchema:s,currentConfig:n}=this.getSettingsInfo();return e in this.settingsFormData||(this.settingsFormData[e]=n),t.jsxs("div",{className:"tab",children:[this.renderSettingsTabs(),t.jsx("div",{className:"tab-content",children:t.jsx("div",{className:"tab-pane active",children:t.jsx(ke,{idPrefix:e,schema:s,formData:this.settingsFormData[e],onChange:r=>this.settingsFormData[e]=r.formData,onSubmit:this.onSettingsSave,uiSchema:Z[e],fields:{TitleField:R,DescriptionField:M}})})})]})}renderDonate(){const{t:e}=this.props,s=e("donation_text",{returnObjects:!0,defaultValue:[]});return t.jsxs("div",{className:"container-fluid",children:[s.map(n=>t.jsx("p",{children:n},n)),we]})}}const Te=C(Se),Ce=["bridgeInfo","missingTranslations","devices","backup","preparingBackup"],Ee=_(["settings","common"])(D(Ce,z)(Te));export{Ee as ConnectedSettingsPage};
Binary file
Binary file
Binary file
Binary file