zigbee2mqtt-windfront 1.0.5 → 1.1.0

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 (235) hide show
  1. package/README.md +2 -0
  2. package/dist/assets/About-CHG9qEyJ.js +1 -0
  3. package/dist/assets/About-CHG9qEyJ.js.br +0 -0
  4. package/dist/assets/{Availability-Jxv3jj-f.js → Availability-DqdWkfDH.js} +1 -1
  5. package/dist/assets/Availability-DqdWkfDH.js.br +0 -0
  6. package/dist/assets/Bind-BZCsVn5K.js +1 -0
  7. package/dist/assets/Bind-BZCsVn5K.js.br +0 -0
  8. package/dist/assets/Bridge-C0GtTxvP.js +1 -0
  9. package/dist/assets/Bridge-C0GtTxvP.js.br +0 -0
  10. package/dist/assets/{CheckboxField-aJECTtGJ.js → CheckboxField-D4WcnhtA.js} +1 -1
  11. package/dist/assets/CheckboxField-D4WcnhtA.js.br +0 -0
  12. package/dist/assets/{ClusterSinglePicker-Ckri6Ml1.js → ClusterSinglePicker-B5OOQ6mb.js} +1 -1
  13. package/dist/assets/ClusterSinglePicker-B5OOQ6mb.js.br +0 -0
  14. package/dist/assets/Clusters-CbiAzP-9.js +1 -0
  15. package/dist/assets/Clusters-CbiAzP-9.js.br +0 -0
  16. package/dist/assets/Dashboard-CqVyYUM9.js +1 -0
  17. package/dist/assets/Dashboard-CqVyYUM9.js.br +0 -0
  18. package/dist/assets/{DashboardFeatureWrapper-DZDafjVF.js → DashboardFeatureWrapper-Ea6Qa5lp.js} +1 -1
  19. package/dist/assets/DashboardFeatureWrapper-Ea6Qa5lp.js.br +3 -0
  20. package/dist/assets/{DebouncedInput-hrRL_knE.js → DebouncedInput-BCwsFI67.js} +1 -1
  21. package/dist/assets/DebouncedInput-BCwsFI67.js.br +0 -0
  22. package/dist/assets/DevConsole-BSa7PeYc.js +1 -0
  23. package/dist/assets/DevConsole-BSa7PeYc.js.br +0 -0
  24. package/dist/assets/DevConsole-CkK2XsUe.js +1 -0
  25. package/dist/assets/DevConsole-CkK2XsUe.js.br +0 -0
  26. package/dist/assets/DeviceCard-BuAJV1ep.js +1 -0
  27. package/dist/assets/DeviceCard-BuAJV1ep.js.br +0 -0
  28. package/dist/assets/{DeviceControlEditName-B_UgBTKk.js → DeviceControlEditName-5UBVC6Eg.js} +1 -1
  29. package/dist/assets/DeviceControlEditName-5UBVC6Eg.js.br +0 -0
  30. package/dist/assets/DeviceImage-Cb7RHKBI.js +1 -0
  31. package/dist/assets/DeviceImage-Cb7RHKBI.js.br +0 -0
  32. package/dist/assets/DeviceInfo-COKYwTKa.js +1 -0
  33. package/dist/assets/DeviceInfo-COKYwTKa.js.br +0 -0
  34. package/dist/assets/DevicePage-BY_N8DYI.js +2 -0
  35. package/dist/assets/DevicePage-BY_N8DYI.js.br +0 -0
  36. package/dist/assets/{DevicePicker-Dt0o_iaP.js → DevicePicker-CW0G0R1X.js} +1 -1
  37. package/dist/assets/DevicePicker-CW0G0R1X.js.br +0 -0
  38. package/dist/assets/DeviceSettings-BWCnryj7.js +1 -0
  39. package/dist/assets/DeviceSettings-BWCnryj7.js.br +0 -0
  40. package/dist/assets/DeviceSpecificSettings-fSa3sI14.js +1 -0
  41. package/dist/assets/DeviceSpecificSettings-fSa3sI14.js.br +0 -0
  42. package/dist/assets/Devices-CHNA9iyw.js +1 -0
  43. package/dist/assets/Devices-CHNA9iyw.js.br +0 -0
  44. package/dist/assets/DevicesPage-DD_lq9fM.js +1 -0
  45. package/dist/assets/DevicesPage-DD_lq9fM.js.br +0 -0
  46. package/dist/assets/{DisplayValue-CjZXHxIO.js → DisplayValue-D6WaJtz3.js} +1 -1
  47. package/dist/assets/DisplayValue-D6WaJtz3.js.br +0 -0
  48. package/dist/assets/Donate-cXhugEOk.js +1 -0
  49. package/dist/assets/Donate-cXhugEOk.js.br +0 -0
  50. package/dist/assets/{EndpointPicker-CX9S9S7k.js → EndpointPicker-BFmyskL0.js} +1 -1
  51. package/dist/assets/EndpointPicker-BFmyskL0.js.br +4 -0
  52. package/dist/assets/Exposes-CuAljq_B.js +1 -0
  53. package/dist/assets/Exposes-CuAljq_B.js.br +0 -0
  54. package/dist/assets/Feature-BCBPYnkS.js +1 -0
  55. package/dist/assets/Feature-BCBPYnkS.js.br +0 -0
  56. package/dist/assets/Frontend-C0oorWBo.js +1 -0
  57. package/dist/assets/Frontend-C0oorWBo.js.br +0 -0
  58. package/dist/assets/GroupPage-BlV5Ncv4.js +2 -0
  59. package/dist/assets/GroupPage-BlV5Ncv4.js.br +0 -0
  60. package/dist/assets/GroupSettings-3BRfTE0G.js +1 -0
  61. package/dist/assets/GroupSettings-3BRfTE0G.js.br +0 -0
  62. package/dist/assets/Groups-D6fh3n8c.js +1 -0
  63. package/dist/assets/Groups-D6fh3n8c.js.br +0 -0
  64. package/dist/assets/GroupsPage-DoSDMcht.js +1 -0
  65. package/dist/assets/GroupsPage-DoSDMcht.js.br +0 -0
  66. package/dist/assets/Health-B9s7LtEK.js +1 -0
  67. package/dist/assets/Health-B9s7LtEK.js.br +0 -0
  68. package/dist/assets/HomePage-zGwSdNWr.js +1 -0
  69. package/dist/assets/HomePage-zGwSdNWr.js.br +0 -0
  70. package/dist/assets/{InputField-TubacR8F.js → InputField-CUtgkM7U.js} +1 -1
  71. package/dist/assets/InputField-CUtgkM7U.js.br +0 -0
  72. package/dist/assets/LastSeen-GhuRvai1.js +1 -0
  73. package/dist/assets/LastSeen-GhuRvai1.js.br +0 -0
  74. package/dist/assets/LogsPage-Ctm8MAct.js +1 -0
  75. package/dist/assets/LogsPage-Ctm8MAct.js.br +0 -0
  76. package/dist/assets/{Lqi-BNx2QV2z.js → Lqi-ZwgCV9oF.js} +1 -1
  77. package/dist/assets/Lqi-ZwgCV9oF.js.br +0 -0
  78. package/dist/assets/NetworkPage-DOP4KKYZ.js +2 -0
  79. package/dist/assets/NetworkPage-DOP4KKYZ.js.br +0 -0
  80. package/dist/assets/{NumberField-B10BRlkz.js → NumberField-BEvCeksV.js} +1 -1
  81. package/dist/assets/NumberField-BEvCeksV.js.br +0 -0
  82. package/dist/assets/OtaPage-n9DevcfN.js +1 -0
  83. package/dist/assets/OtaPage-n9DevcfN.js.br +0 -0
  84. package/dist/assets/PowerSource-QPJB86Ep.js +1 -0
  85. package/dist/assets/PowerSource-QPJB86Ep.js.br +0 -0
  86. package/dist/assets/{RawNetworkData-uldf8APR.js → RawNetworkData-BHAe5V1f.js} +2 -2
  87. package/dist/assets/RawNetworkData-BHAe5V1f.js.br +0 -0
  88. package/dist/assets/{RawNetworkMap-CAdhahgm.js → RawNetworkMap-VreVUHDy.js} +2 -2
  89. package/dist/assets/RawNetworkMap-VreVUHDy.js.br +0 -0
  90. package/dist/assets/{RecallRemove-CLsmJI45.js → RecallRemove-CyUS3cNL.js} +1 -1
  91. package/dist/assets/RecallRemove-CyUS3cNL.js.br +0 -0
  92. package/dist/assets/Reporting-BMofiL2I.js +1 -0
  93. package/dist/assets/Reporting-BMofiL2I.js.br +0 -0
  94. package/dist/assets/Scene-Bmk9qkHa.js +1 -0
  95. package/dist/assets/Scene-Bmk9qkHa.js.br +0 -0
  96. package/dist/assets/{SelectField-CboFEeLv.js → SelectField-CeC-3WfV.js} +1 -1
  97. package/dist/assets/SelectField-CeC-3WfV.js.br +0 -0
  98. package/dist/assets/Settings-4YsrF3gD.js +1 -0
  99. package/dist/assets/Settings-4YsrF3gD.js.br +0 -0
  100. package/dist/assets/{SettingsList-BXXsCJCy.js → SettingsList-C8kLqktG.js} +1 -1
  101. package/dist/assets/SettingsList-C8kLqktG.js.br +0 -0
  102. package/dist/assets/SettingsPage-vFYHL-yF.js +2 -0
  103. package/dist/assets/SettingsPage-vFYHL-yF.js.br +0 -0
  104. package/dist/assets/State-PkeiVF8r.js +1 -0
  105. package/dist/assets/State-PkeiVF8r.js.br +0 -0
  106. package/dist/assets/{Table-CK8_rY6Z.js → Table-BDjEregh.js} +1 -1
  107. package/dist/assets/Table-BDjEregh.js.br +0 -0
  108. package/dist/assets/{TextareaField-Cb3faakR.js → TextareaField-DOKywSRw.js} +1 -1
  109. package/dist/assets/TextareaField-DOKywSRw.js.br +0 -0
  110. package/dist/assets/Tools-DrhIW8C1.js +1 -0
  111. package/dist/assets/Tools-DrhIW8C1.js.br +0 -0
  112. package/dist/assets/TouchlinkPage-DpRQZGgK.js +1 -0
  113. package/dist/assets/TouchlinkPage-DpRQZGgK.js.br +0 -0
  114. package/dist/assets/{VendorLink-CQWJDUO2.js → VendorLink-CgOu9biy.js} +1 -1
  115. package/dist/assets/VendorLink-CgOu9biy.js.br +3 -0
  116. package/dist/assets/{_createCompounder-COpq92ed.js → _createCompounder-Dk28qyWA.js} +1 -1
  117. package/dist/assets/_createCompounder-Dk28qyWA.js.br +0 -0
  118. package/dist/assets/{capitalize-JuEfl3u2.js → capitalize-De56x2mx.js} +1 -1
  119. package/dist/assets/capitalize-De56x2mx.js.br +0 -0
  120. package/dist/assets/envs-DXl2ikyY.js +1 -0
  121. package/dist/assets/format-hzS4qi3R.js +1 -0
  122. package/dist/assets/format-hzS4qi3R.js.br +0 -0
  123. package/dist/assets/index-Dhds16Bb.css +1 -0
  124. package/dist/assets/index-Dhds16Bb.css.br +0 -0
  125. package/dist/assets/{index-CUIfkU6p.js → index-DsxT80wB.js} +1 -1
  126. package/dist/assets/index-DsxT80wB.js.br +0 -0
  127. package/dist/assets/index-ZiLZvzeu.js +635 -0
  128. package/dist/assets/index-ZiLZvzeu.js.br +0 -0
  129. package/dist/assets/{jszip.min-1QgvwwzN.js → jszip.min-DVbOwowp.js} +1 -1
  130. package/dist/assets/jszip.min-DVbOwowp.js.br +0 -0
  131. package/dist/assets/snakeCase-D13tb9hI.js +1 -0
  132. package/dist/assets/snakeCase-D13tb9hI.js.br +0 -0
  133. package/dist/index.html +3 -2
  134. package/dist/index.html.br +0 -0
  135. package/package.json +11 -11
  136. package/dist/assets/About-Bwc-SnjR.js +0 -1
  137. package/dist/assets/About-Bwc-SnjR.js.br +0 -0
  138. package/dist/assets/Availability-Jxv3jj-f.js.br +0 -0
  139. package/dist/assets/Bind-CCmoXBga.js +0 -1
  140. package/dist/assets/Bind-CCmoXBga.js.br +0 -0
  141. package/dist/assets/Bridge-B00gjrw-.js +0 -1
  142. package/dist/assets/Bridge-B00gjrw-.js.br +0 -0
  143. package/dist/assets/CheckboxField-aJECTtGJ.js.br +0 -0
  144. package/dist/assets/ClusterSinglePicker-Ckri6Ml1.js.br +0 -0
  145. package/dist/assets/Clusters-C4Yp-rHe.js +0 -1
  146. package/dist/assets/Clusters-C4Yp-rHe.js.br +0 -0
  147. package/dist/assets/Dashboard-CjpyYRjt.js +0 -1
  148. package/dist/assets/Dashboard-CjpyYRjt.js.br +0 -0
  149. package/dist/assets/DashboardFeatureWrapper-DZDafjVF.js.br +0 -0
  150. package/dist/assets/DebouncedInput-hrRL_knE.js.br +0 -0
  151. package/dist/assets/DevConsole-B4vldyLk.js +0 -1
  152. package/dist/assets/DevConsole-B4vldyLk.js.br +0 -0
  153. package/dist/assets/DevConsole-FoMbBemz.js +0 -1
  154. package/dist/assets/DevConsole-FoMbBemz.js.br +0 -0
  155. package/dist/assets/DeviceCard-C2NVxg8O.js +0 -1
  156. package/dist/assets/DeviceCard-C2NVxg8O.js.br +0 -0
  157. package/dist/assets/DeviceControlEditName-B_UgBTKk.js.br +0 -0
  158. package/dist/assets/DeviceInfo-D7K10Qfz.js +0 -1
  159. package/dist/assets/DeviceInfo-D7K10Qfz.js.br +0 -0
  160. package/dist/assets/DevicePage-BuRX-zbG.js +0 -2
  161. package/dist/assets/DevicePage-BuRX-zbG.js.br +0 -0
  162. package/dist/assets/DevicePicker-Dt0o_iaP.js.br +0 -0
  163. package/dist/assets/DeviceSettings-DPEQ0NWl.js +0 -1
  164. package/dist/assets/DeviceSettings-DPEQ0NWl.js.br +0 -0
  165. package/dist/assets/DeviceSpecificSettings-B5ywqTh7.js +0 -1
  166. package/dist/assets/DeviceSpecificSettings-B5ywqTh7.js.br +0 -0
  167. package/dist/assets/Devices-DAG6vs0G.js +0 -1
  168. package/dist/assets/Devices-DAG6vs0G.js.br +0 -0
  169. package/dist/assets/DevicesPage-BgcI1RZT.js +0 -1
  170. package/dist/assets/DevicesPage-BgcI1RZT.js.br +0 -0
  171. package/dist/assets/DisplayValue-CjZXHxIO.js.br +0 -0
  172. package/dist/assets/Donate-BI8FFOLc.js +0 -1
  173. package/dist/assets/Donate-BI8FFOLc.js.br +0 -0
  174. package/dist/assets/EndpointPicker-CX9S9S7k.js.br +0 -0
  175. package/dist/assets/Exposes-CZ40iv73.js +0 -1
  176. package/dist/assets/Exposes-CZ40iv73.js.br +0 -0
  177. package/dist/assets/Feature-DhPZqYWh.js +0 -1
  178. package/dist/assets/Feature-DhPZqYWh.js.br +0 -0
  179. package/dist/assets/Frontend-D8k0f0AR.js +0 -1
  180. package/dist/assets/Frontend-D8k0f0AR.js.br +0 -0
  181. package/dist/assets/GroupPage-H559xYGM.js +0 -2
  182. package/dist/assets/GroupPage-H559xYGM.js.br +0 -0
  183. package/dist/assets/GroupSettings-CEzY10KG.js +0 -1
  184. package/dist/assets/GroupSettings-CEzY10KG.js.br +0 -0
  185. package/dist/assets/Groups-QvxyfbK9.js +0 -1
  186. package/dist/assets/Groups-QvxyfbK9.js.br +0 -0
  187. package/dist/assets/GroupsPage-DQRrJ45C.js +0 -1
  188. package/dist/assets/GroupsPage-DQRrJ45C.js.br +0 -0
  189. package/dist/assets/HomePage-Dqztw8Hc.js +0 -1
  190. package/dist/assets/HomePage-Dqztw8Hc.js.br +0 -0
  191. package/dist/assets/InputField-TubacR8F.js.br +0 -0
  192. package/dist/assets/LastSeen-DjUuaYXi.js +0 -1
  193. package/dist/assets/LastSeen-DjUuaYXi.js.br +0 -0
  194. package/dist/assets/LogsPage-DrJ3t-Cv.js +0 -1
  195. package/dist/assets/LogsPage-DrJ3t-Cv.js.br +0 -0
  196. package/dist/assets/Lqi-BNx2QV2z.js.br +0 -0
  197. package/dist/assets/NetworkPage-C4sfYTKz.js +0 -2
  198. package/dist/assets/NetworkPage-C4sfYTKz.js.br +0 -0
  199. package/dist/assets/NumberField-B10BRlkz.js.br +0 -0
  200. package/dist/assets/OtaPage-M9j8HXqi.js +0 -1
  201. package/dist/assets/OtaPage-M9j8HXqi.js.br +0 -0
  202. package/dist/assets/PowerSource-CT5LulZX.js +0 -1
  203. package/dist/assets/PowerSource-CT5LulZX.js.br +0 -0
  204. package/dist/assets/RawNetworkData-uldf8APR.js.br +0 -0
  205. package/dist/assets/RawNetworkMap-CAdhahgm.js.br +0 -0
  206. package/dist/assets/RecallRemove-CLsmJI45.js.br +0 -0
  207. package/dist/assets/Reporting-Bo6_VF2b.js +0 -1
  208. package/dist/assets/Reporting-Bo6_VF2b.js.br +0 -0
  209. package/dist/assets/Scene-BXVtU8op.js +0 -1
  210. package/dist/assets/Scene-BXVtU8op.js.br +0 -0
  211. package/dist/assets/SelectField-CboFEeLv.js.br +0 -0
  212. package/dist/assets/Settings-B5wIMTA9.js +0 -1
  213. package/dist/assets/Settings-B5wIMTA9.js.br +0 -0
  214. package/dist/assets/SettingsList-BXXsCJCy.js.br +0 -0
  215. package/dist/assets/SettingsPage-DnvMw2Gc.js +0 -2
  216. package/dist/assets/SettingsPage-DnvMw2Gc.js.br +0 -0
  217. package/dist/assets/State--9WxnrT8.js +0 -1
  218. package/dist/assets/State--9WxnrT8.js.br +0 -0
  219. package/dist/assets/Table-CK8_rY6Z.js.br +0 -0
  220. package/dist/assets/TextareaField-Cb3faakR.js.br +0 -0
  221. package/dist/assets/Tools-DdvQNnDA.js +0 -1
  222. package/dist/assets/Tools-DdvQNnDA.js.br +0 -0
  223. package/dist/assets/TouchlinkPage-DGFmsjIH.js +0 -1
  224. package/dist/assets/TouchlinkPage-DGFmsjIH.js.br +0 -0
  225. package/dist/assets/VendorLink-CQWJDUO2.js.br +0 -0
  226. package/dist/assets/_createCompounder-COpq92ed.js.br +0 -0
  227. package/dist/assets/capitalize-JuEfl3u2.js.br +0 -0
  228. package/dist/assets/index-CUIfkU6p.js.br +0 -0
  229. package/dist/assets/index-Cs-KexR1.js +0 -635
  230. package/dist/assets/index-Cs-KexR1.js.br +0 -0
  231. package/dist/assets/index-vRya9HWu.css +0 -1
  232. package/dist/assets/index-vRya9HWu.css.br +0 -0
  233. package/dist/assets/jszip.min-1QgvwwzN.js.br +0 -0
  234. package/dist/assets/snakeCase-XNTmpa2i.js +0 -1
  235. package/dist/assets/snakeCase-XNTmpa2i.js.br +0 -0
@@ -0,0 +1 @@
1
+ import{r as l,W as _,A as C,a as g,b as w,$ as y,j as s,a0 as u,F as k,f as N,a1 as S,a2 as E,B as I,a3 as A,a4 as M}from"./index-ZiLZvzeu.js";import{C as F}from"./CheckboxField-D4WcnhtA.js";import{D as G}from"./DebouncedInput-BCwsFI67.js";import{S as d}from"./SelectField-CeC-3WfV.js";import"./envs-DXl2ikyY.js";const D={error:"bg-error text-error-content",warning:"bg-warning text-warning-content",info:"bg-info text-info-content",debug:"bg-accent text-accent-content opacity-50"};function $(){const{sendMessage:m}=l.useContext(_),[t,c]=l.useState(""),[n,x]=l.useState("all"),[r,f]=l.useState(!1),h=C(),L=g(e=>e.logsLimit),b=g(e=>e.bridgeInfo.config.advanced.log_level),{t:a}=w("logs"),p=g(e=>e.logs),o=l.useMemo(()=>p.filter(e=>(n==="all"||e.level===n)&&(r||!t||e.message.toLowerCase().includes(t.toLowerCase()))),[t,r,n,p]),j=l.useCallback((e,i)=>t&&e.toLowerCase().includes(t.toLowerCase())?D[i]:y[i],[t]),v=l.useCallback(async e=>{await m("bridge/request/options",{options:{advanced:{log_level:e}}})},[m]);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex flex-row flex-wrap gap-3 items-top",children:[s.jsxs(d,{name:"log_level",label:a("show_only"),value:n,onChange:e=>x(e.target.value),children:[s.jsx("option",{value:"all",children:"all"},"all"),u.map(e=>s.jsx("option",{value:e,children:e},e))]}),s.jsxs("fieldset",{className:"fieldset",children:[s.jsx("legend",{className:"fieldset-legend",children:a("filter_by_text")}),s.jsxs("label",{className:"input w-64",children:[s.jsx(k,{icon:N}),s.jsx(G,{className:"",type:"search",onChange:e=>c(e.toString()),placeholder:a("common:search"),value:t,disabled:o.length===0}),s.jsx("kbd",{className:"kbd kbd-sm cursor-pointer",onClick:()=>c(""),onKeyUp:e=>{e.key==="enter"&&c("")},title:a("common:clear"),children:"x"})]})]}),s.jsx(F,{name:"highlight_only",label:a("highlight_only"),checked:r,onChange:e=>f(e.target.checked)}),s.jsx(d,{name:"log_limit",label:a("logs_limit"),onChange:e=>{h(E(Number.parseInt(e.target.value)))},value:L,children:S.map(e=>s.jsx("option",{value:e,children:e},e))}),s.jsx(I,{onClick:()=>{h(A())},className:"btn btn-primary self-center",disabled:o.length===0,children:a("common:clear")}),s.jsx("div",{className:"ml-auto",children:s.jsx(d,{name:"log_level_config",label:a("log_level_config"),value:b,onChange:e=>!e.target.validationMessage&&v(e.target.value),children:u.map(e=>s.jsx("option",{value:e,children:e},e))})})]}),s.jsx("div",{className:"mockup-code w-full mt-1 mb-3",children:o.length>0?o.map((e,i)=>s.jsx("pre",{"data-prefix":i,className:j(e.message,e.level),children:s.jsxs("code",{children:["[",e.timestamp,"] ",e.message]})},`${e.timestamp}-${e.message}`)):s.jsx("pre",{"data-prefix":"~",children:s.jsxs("code",{children:["[",M(new Date),"] ",a("empty_logs_message")]})})})]})}export{$ as default};
@@ -1 +1 @@
1
- import{r,j as t,F as i,aP as a}from"./index-Cs-KexR1.js";import{D as n}from"./DisplayValue-CjZXHxIO.js";const x=r.memo(({value:s})=>{let e="";return s&&(s<75?e="text-error":s<125?e="text-warning":s>200&&(e="text-success")),t.jsxs(t.Fragment,{children:[t.jsx(i,{icon:a,className:e})," ",t.jsx("span",{className:e,children:t.jsx(n,{value:s,name:"linkquality"})})]})});export{x as L};
1
+ import{r,j as t,F as i,aP as a}from"./index-ZiLZvzeu.js";import{D as n}from"./DisplayValue-D6WaJtz3.js";const x=r.memo(({value:s})=>{let e="";return s&&(s<75?e="text-error":s<125?e="text-warning":s>200&&(e="text-success")),t.jsxs(t.Fragment,{children:[t.jsx(i,{icon:a,className:e})," ",t.jsx("span",{className:e,children:t.jsx(n,{value:s,name:"linkquality"})})]})});export{x as L};
Binary file
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./RawNetworkData-BHAe5V1f.js","./index-ZiLZvzeu.js","./envs-DXl2ikyY.js","./index-Dhds16Bb.css","./DeviceImage-Cb7RHKBI.js","./index-DsxT80wB.js","./DebouncedInput-BCwsFI67.js","./PowerSource-QPJB86Ep.js","./snakeCase-D13tb9hI.js","./_createCompounder-Dk28qyWA.js","./index-BN7eS8uY.js","./Lqi-ZwgCV9oF.js","./DisplayValue-D6WaJtz3.js","./RawNetworkMap-VreVUHDy.js"])))=>i.map(i=>d[i]);
2
+ import{A as C,r as s,W as E,b as R,a as m,s as d,C as h,E as M,G as T,j as e,F as n,I as x,B as z,J as A,i as I,_ as g}from"./index-ZiLZvzeu.js";import{C as S}from"./CheckboxField-D4WcnhtA.js";import{S as f}from"./SelectField-CeC-3WfV.js";import"./envs-DXl2ikyY.js";const D=s.lazy(async()=>await g(()=>import("./RawNetworkData-BHAe5V1f.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]),import.meta.url)),F=s.lazy(async()=>await g(()=>import("./RawNetworkMap-VreVUHDy.js"),__vite__mapDeps([13,1,2,3,10]),import.meta.url));function q(){const o=C(),{sendMessage:u}=s.useContext(E),{t:a}=R(["network","common"]),i=m(t=>t.networkMapIsLoading),r=m(t=>t.networkMap),[l,w]=s.useState("raw"),[c,j]=s.useState(!1),[p,k]=s.useState(d.get(h,"data")),v=s.useCallback(t=>{t.target.value&&w(t.target.value)},[]),y=s.useCallback(t=>{t.target.value&&(d.set(h,t.target.value),k(t.target.value))},[]),b=s.useCallback(t=>{j(t.target.checked)},[]),_=s.useCallback(async()=>{o(M(void 0)),o(T()),await u("bridge/request/networkmap",{type:l,routes:c})},[l,c,o,u]),N=s.useMemo(()=>{if(i)return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-row justify-center items-center gap-2",children:e.jsx("span",{className:"loading loading-infinity loading-xl"})}),e.jsx("div",{className:"flex flex-row justify-center items-center gap-2",children:a("loading")})]});if(r)switch(r.type){case"raw":return p==="data"?e.jsx(D,{map:r.value}):e.jsx(F,{map:r.value});case"graphviz":return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"alert alert-info alert-soft mb-3",role:"alert",children:[e.jsx(n,{icon:x,size:"2xl"}),a("copy_paste_on"),e.jsx("a",{href:"https://dreampuf.github.io/GraphvizOnline",target:"_blank",rel:"noreferrer",className:"link link-hover",children:"https://dreampuf.github.io/GraphvizOnline"}),e.jsx("a",{href:"https://edotor.net/",target:"_blank",rel:"noreferrer",className:"link link-hover",children:"https://edotor.net/"})]}),e.jsx("textarea",{className:"textarea w-full",rows:5,readOnly:!0,value:r.value})]});case"plantuml":return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"alert alert-info alert-soft mb-3",role:"alert",children:[e.jsx(n,{icon:x,size:"2xl"}),a("copy_paste_on"),e.jsx("a",{href:"https://editor.plantuml.com/uml/",target:"_blank",rel:"noreferrer",className:"link link-hover",children:"https://editor.plantuml.com/uml/"}),e.jsx("a",{href:"https://www.planttext.com/",target:"_blank",rel:"noreferrer",className:"link link-hover",children:"https://www.planttext.com/"})]}),e.jsx("textarea",{className:"textarea w-full",rows:5,readOnly:!0,value:r.value})]})}return null},[r,i,p,a]);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-row justify-center gap-3 mb-2",children:[e.jsxs(f,{name:"type",label:a("type"),value:l,onChange:v,children:[e.jsx("option",{value:"raw",children:a("raw")}),e.jsx("option",{value:"graphviz",children:a("graphviz")}),e.jsx("option",{value:"plantuml",children:a("plantuml")})]}),e.jsx(S,{name:"enable_routes",label:a("enable_routes"),checked:c,onChange:b}),e.jsx(z,{className:"btn btn-primary btn-square self-center ms-3 me-6",onClick:_,title:a(r?"reload":"load"),disabled:i,children:r?e.jsx(n,{icon:A}):e.jsx(n,{icon:I})}),l==="raw"&&e.jsxs(f,{name:"display_type",label:a("display_type"),value:p,onChange:y,children:[e.jsx("option",{value:"data",children:a("data")}),e.jsx("option",{value:"map",children:a("map")})]})]}),N]})}export{q as default};
@@ -1 +1 @@
1
- import{r as n,j as e}from"./index-Cs-KexR1.js";const h=n.memo(a=>{const{label:c,detail:m,onChange:t,onSubmit:r,defaultValue:i,minimal:d,...x}=a,[s,o]=n.useState(i);n.useEffect(()=>{o(i)},[i]);const j=n.useCallback(l=>{o(l.target.value?l.target.valueAsNumber:""),t==null||t(l)},[t]),u=n.useCallback(l=>{r==null||r(s,!l.target.validationMessage)},[r,s]);return e.jsxs("fieldset",{className:"fieldset",children:[c&&e.jsx("legend",{className:"fieldset-legend",children:c}),a.min!=null&&a.max!=null&&e.jsxs("div",{className:"w-full max-w-xs",children:[e.jsx("input",{className:"range range-xs range-primary",onChange:j,onTouchEnd:u,onMouseUp:u,...x,type:"range",value:s}),e.jsxs("div",{className:"flex justify-between px-1 mt-1 text-xs",children:[e.jsx("span",{children:a.min}),d&&e.jsx("span",{children:s}),e.jsx("span",{children:a.max})]})]}),!d&&e.jsx("input",{className:`input${a.pattern||a.required?" validator":""}`,onChange:j,onBlur:u,...x,type:"number",value:s}),m&&e.jsx("p",{className:"label whitespace-normal",children:m})]})});export{h as N};
1
+ import{r as n,j as e}from"./index-ZiLZvzeu.js";const h=n.memo(a=>{const{label:c,detail:m,onChange:t,onSubmit:r,defaultValue:i,minimal:d,...x}=a,[s,o]=n.useState(i);n.useEffect(()=>{o(i)},[i]);const j=n.useCallback(l=>{o(l.target.value?l.target.valueAsNumber:""),t==null||t(l)},[t]),u=n.useCallback(l=>{r==null||r(s,!l.target.validationMessage)},[r,s]);return e.jsxs("fieldset",{className:"fieldset",children:[c&&e.jsx("legend",{className:"fieldset-legend",children:c}),a.min!=null&&a.max!=null&&e.jsxs("div",{className:"w-full max-w-xs",children:[e.jsx("input",{className:"range range-xs range-primary",onChange:j,onTouchEnd:u,onMouseUp:u,...x,type:"range",value:s}),e.jsxs("div",{className:"flex justify-between px-1 mt-1 text-xs",children:[e.jsx("span",{children:a.min}),d&&e.jsx("span",{children:s}),e.jsx("span",{children:a.max})]})]}),!d&&e.jsx("input",{className:`input${a.pattern||a.required?" validator":""}`,onChange:j,onBlur:u,...x,type:"number",value:s}),m&&e.jsx("p",{className:"label whitespace-normal",children:m})]})});export{h as N};
@@ -0,0 +1 @@
1
+ import{r as l,b as g,j as s,B as N,Q as h,F as f,R as j,a as y,W as $,L,S as D}from"./index-ZiLZvzeu.js";import{D as M}from"./DeviceImage-Cb7RHKBI.js";import{T as z}from"./Table-BDjEregh.js";import{M as A,V as P}from"./VendorLink-CgOu9biy.js";import{P as q}from"./PowerSource-QPJB86Ep.js";import"./envs-DXl2ikyY.js";import"./index-DsxT80wB.js";import"./DebouncedInput-BCwsFI67.js";import"./snakeCase-D13tb9hI.js";import"./_createCompounder-Dk28qyWA.js";const B=l.memo(({label:t,remaining:i,progress:n})=>{if(i&&i>0){const a=Math.floor(i/3600),o=Math.floor(i/60)%60,m=Math.floor(i%60),r=a>0,u=o>0;return s.jsxs(s.Fragment,{children:[s.jsx("progress",{className:"progress w-48",value:n,max:"100"}),s.jsxs("div",{children:[t," ",`${r?`${a}:`:""}${u?`${o}:`:""}${m}`]})]})}return s.jsx("progress",{className:"progress w-48",value:n,max:"100"})}),U=l.memo(t=>{const{t:i}=g(["ota","common"]),{device:n,state:a,onCheckClick:o,onUpdateClick:m,onScheduleClick:r,onUnscheduleClick:u}=t;return a==null||a.state==="idle"?s.jsxs("div",{className:"join join-horizontal",children:[s.jsx(N,{className:"btn btn-primary btn-sm join-item",onClick:o,item:n.ieee_address,children:i("check")}),s.jsx(h,{className:"btn btn-info btn-sm join-item",onClick:r,item:n.ieee_address,title:i("schedule"),modalDescription:i("schedule_info"),modalCancelLabel:i("common:cancel"),children:s.jsx(f,{icon:j})})]}):a.state==="updating"?s.jsx(B,{label:i("remaining_time"),remaining:a.remaining,progress:a.progress}):s.jsx("div",{className:"join join-horizontal",children:a.state==="available"?s.jsxs(s.Fragment,{children:[s.jsx(h,{className:"btn btn-error btn-sm join-item",onClick:m,item:n.ieee_address,title:i("update"),modalDescription:i("common:dialog_confirmation_prompt"),modalCancelLabel:i("common:cancel"),children:i("update")}),s.jsx(h,{className:"btn btn-info btn-sm join-item",onClick:r,item:n.ieee_address,title:i("schedule"),modalDescription:i("schedule_info"),modalCancelLabel:i("common:cancel"),children:s.jsx(f,{icon:j})})]}):a.state==="scheduled"?s.jsx(h,{className:"btn btn-sm btn-error join-item",onClick:u,item:n.ieee_address,title:i("unschedule"),modalDescription:i("common:dialog_confirmation_prompt"),modalCancelLabel:i("common:cancel"),children:i("unschedule")}):s.jsxs(s.Fragment,{children:[s.jsx(N,{className:"btn btn-primary btn-sm join-item",onClick:o,item:n.ieee_address,children:i("check")}),s.jsx(h,{className:"btn btn-info btn-sm join-item",onClick:r,item:n.ieee_address,title:i("schedule"),modalDescription:i("schedule_info"),modalCancelLabel:i("common:cancel"),children:s.jsx(f,{icon:j})})]})})}),S=l.memo(t=>{const{t:i}=g("ota"),n=l.useMemo(()=>{if(t.version==null||t.version<0)return;const a=t.version.toString(16).padStart(8,"0"),o=`${a[0]}.${a[1]}`,m=a.slice(2,4),r=`${a[4]}.${a[5]}`,u=a.slice(6);return[o,m,r,u]},[t.version]);return n===void 0?s.jsx(s.Fragment,{children:"N/A"}):s.jsxs("div",{className:"join join-vertical",children:[s.jsxs("span",{className:"badge badge-sm badge-soft badge-ghost cursor-default join-item w-full",children:[i("app"),": ",`${n[0]} build ${n[1]}`]}),s.jsxs("span",{className:"badge badge-sm badge-soft badge-ghost cursor-default join-item w-full",children:[i("stack"),": ",`${n[2]} build ${n[3]}`]})]})}),O=l.memo(({device:t})=>{var o,m,r,u;const{t:i}=g("zigbee");let n="https://github.com/Koenkk/zigbee-OTA/releases";const a=t.software_build_id||i("unknown");switch((o=t==null?void 0:t.definition)==null?void 0:o.vendor){case"IKEA":n="https://ww8.ikea.com/ikeahomesmart/releasenotes/releasenotes.html";break;case"Inovelli":n="https://help.inovelli.com/en/articles/8503774-what-is-the-latest-firmware-version-for-your-device#h_b74c1e7dc6";break;case"Philips":n=`https://www.philips-hue.com/en-us/support/release-notes/${(m=t.definition)!=null&&m.exposes.find(b=>b.type==="light")?"lamps":"accessories"}`;break;case"Ubisys":n=`https://www.ubisys.de/en/support/firmware/change-logs-${(u=(r=t.definition)==null?void 0:r.model)==null?void 0:u.replace(/[-]/g,"").toLowerCase()}/`;break}return s.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:n,className:"link link-hover",children:a})});function J(){const t=y(e=>e.devices),i=y(e=>e.deviceStates),{sendMessage:n}=l.useContext($),{t:a}=g(["ota","zigbee","common"]),[o,m]=l.useState([]);l.useEffect(()=>{m([])},[t]);const r=l.useMemo(()=>{var c;const e=[];for(const d of t)if((c=d.definition)!=null&&c.supports_ota&&!d.disabled){const p=i[d.friendly_name]??{};e.push({device:d,state:p.update,batteryState:d.power_source==="Battery"?{batteryPercent:p.battery,batteryState:p.battery_state,batteryLow:p.battery_low}:void 0,selected:o.includes(d.ieee_address)})}return e},[i,t,o]),u=l.useCallback(e=>{e.target.checked?m(r.map(({device:c})=>c.ieee_address)):m([])},[r]),b=l.useCallback((e,c)=>{m(c?[...o,e.ieee_address]:o.filter(d=>d!==e.ieee_address))},[o]),x=l.useCallback(async()=>{await Promise.allSettled(o.map(e=>n("bridge/request/device/ota_update/check",{id:e})))},[n,o]),k=l.useCallback(async()=>{await Promise.allSettled(o.map(e=>n("bridge/request/device/ota_update/update",{id:e})))},[n,o]),_=l.useCallback(async e=>await n("bridge/request/device/ota_update/check",{id:e}),[n]),C=l.useCallback(async e=>await n("bridge/request/device/ota_update/update",{id:e}),[n]),w=l.useCallback(async e=>await n("bridge/request/device/ota_update/schedule",{id:e}),[n]),v=l.useCallback(async e=>await n("bridge/request/device/ota_update/unschedule",{id:e}),[n]),F=l.useMemo(()=>[{id:"select",header:()=>s.jsx("label",{children:s.jsx("input",{type:"checkbox",className:"checkbox",onChange:u,defaultChecked:o.length===r.length})}),accessorFn:()=>"",cell:({row:{original:{device:e,selected:c}}})=>s.jsx("label",{children:s.jsx("input",{type:"checkbox",className:"checkbox",onChange:d=>b(e,d.target.checked),defaultChecked:c})}),enableColumnFilter:!1,enableSorting:!1},{header:a("common:friendly_name"),accessorFn:({device:e})=>[e.friendly_name,e.description,e.ieee_address].join(" "),cell:({row:{original:{device:e,state:c,batteryState:d}}})=>s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"avatar",children:s.jsx("div",{className:"h-11 w-11",style:{overflow:"visible"},children:s.jsx(M,{device:e,otaState:c==null?void 0:c.state,disabled:!1})})}),s.jsxs("div",{className:"flex flex-col",children:[s.jsxs(L,{to:`/device/${e.ieee_address}/info`,className:"link link-hover",children:[e.friendly_name,e.friendly_name!==e.ieee_address?` (${e.ieee_address})`:""]}),e.description&&s.jsx("div",{className:"text-xs opacity-50",children:e.description}),s.jsxs("div",{className:"flex flex-row gap-1 mt-0.5 items-center",children:[s.jsxs("span",{className:"badge badge-sm badge-soft badge-ghost cursor-default",title:a("zigbee:firmware_id"),children:[s.jsx(f,{icon:D}),s.jsx(O,{device:e}),e.date_code?s.jsxs("span",{title:a("zigbee:firmware_build_date"),children:[" (",e.date_code,")"]}):void 0]}),d&&s.jsx("span",{className:"badge badge-sm badge-soft badge-ghost cursor-default",children:s.jsx(q,{device:e,...d})})]})]})]})},{header:a("zigbee:model"),accessorFn:({device:e})=>{var c,d;return[(c=e.definition)==null?void 0:c.model,e.model_id,(d=e.definition)==null?void 0:d.vendor,e.manufacturer].join(" ")},cell:({row:{original:{device:e}}})=>s.jsxs(s.Fragment,{children:[s.jsx(A,{device:e}),s.jsx("div",{children:s.jsx("span",{className:"badge badge-sm badge-ghost",title:a("zigbee:manufacturer"),children:s.jsx(P,{device:e})})})]})},{header:a("firmware_version"),accessorFn:({state:e})=>e==null?void 0:e.installed_version,cell:({row:{original:{state:e}}})=>s.jsx(S,{version:e==null?void 0:e.installed_version}),enableColumnFilter:!1},{header:a("available_firmware_version"),accessorFn:({state:e})=>e==null?void 0:e.latest_version,cell:({row:{original:{state:e}}})=>s.jsx(S,{version:e==null?void 0:e.latest_version}),enableColumnFilter:!1},{header:()=>s.jsxs("div",{className:"join join-vertical",children:[s.jsx(h,{className:"btn btn-error btn-xs join-item",onClick:x,title:a("check_selected"),modalDescription:a("common:dialog_confirmation_prompt"),modalCancelLabel:a("common:cancel"),disabled:o.length===0,children:a("check_selected")}),s.jsx(h,{className:"btn btn-error btn-xs join-item",onClick:k,title:a("update_selected"),modalDescription:a("update_selected_info"),modalCancelLabel:a("common:cancel"),disabled:o.length===0,children:a("update_selected")})]}),accessorFn:({state:e})=>e==null?void 0:e.state,id:"check_all",cell:({row:{original:{device:e,state:c}}})=>s.jsx(U,{device:e,state:c,onCheckClick:_,onUpdateClick:C,onScheduleClick:w,onUnscheduleClick:v}),enableSorting:!1,enableColumnFilter:!1}],[o.length,r.length,u,b,x,k,_,C,w,v,a]);return s.jsx(z,{id:"ota-devices",columns:F,data:r})}export{J as default};
@@ -0,0 +1 @@
1
+ import{r as j,b as g,j as a,F as c,bF as d,bC as B,bG as E,bg as P,bw as u,bx as k,by as w,bz as F,bq as m}from"./index-ZiLZvzeu.js";import{s as y}from"./snakeCase-D13tb9hI.js";const L=j.memo(x=>{const{device:t,batteryPercent:s,batteryState:b,batteryLow:f,showLevel:h,...l}=x,{t:n}=g("zigbee");let r;switch(t!=null&&t.power_source&&(r=t.power_source),r){case"Battery":{let p=n("battery"),o="",e=u,i=!1;if(s!=null)o=`${s}%`,s>=85?e=u:s>=65?e=k:s>=40?e=w:s>=20?e=F:(e=m,i=!0);else if(b!=null)switch(o=b,b){case"high":e=u;break;case"medium":e=w;break;case"low":e=m,i=!0;break}else f!=null&&(o=f?"low":"ok",e=f?m:u);return f===!0&&(i=!0),o!==""&&(p+=`, ${n("power_level")}: ${o}`),a.jsxs("span",{className:i?"text-error":"",children:[a.jsx(c,{icon:e,fade:i,title:p,...l}),h&&a.jsx("span",{className:"ps-2",children:o})]})}case"Mains (single phase)":case"Mains (3 phase)":case"DC Source":return a.jsx(c,{icon:P,title:n(y(r)),...l});case"Emergency mains and transfer switch":case"Emergency mains constantly powered":return a.jsx(c,{icon:E,title:n(y(r)),...l});default:return(t==null?void 0:t.type)==="GreenPower"?a.jsx(c,{icon:d,title:"Green",...l}):a.jsx(c,{icon:B,title:r?n(y(r)):void 0,...l})}});export{L as P};
@@ -1,4 +1,4 @@
1
- import{a9 as lr,r as ee,b as Pi,j as A,t as _t,F as or,an as gp,L as Wi,a as _p,Y as pp,f as dp,ao as vp}from"./index-Cs-KexR1.js";import{D as ds,P as xp}from"./PowerSource-CT5LulZX.js";import{D as _s}from"./DebouncedInput-hrRL_knE.js";import{Z as ht}from"./index-BN7eS8uY.js";import{L as wp}from"./Lqi-BNx2QV2z.js";import"./index-CUIfkU6p.js";import"./snakeCase-XNTmpa2i.js";import"./_createCompounder-COpq92ed.js";import"./DisplayValue-CjZXHxIO.js";var gt={exports:{}};/**
1
+ import{aa as lr,r as ee,b as Pi,j as A,t as _t,F as or,ao as gp,L as Wi,a as _p,Y as pp,f as dp,ap as vp}from"./index-ZiLZvzeu.js";import{D as ds}from"./DeviceImage-Cb7RHKBI.js";import{D as _s}from"./DebouncedInput-BCwsFI67.js";import{P as xp}from"./PowerSource-QPJB86Ep.js";import{Z as ht}from"./index-BN7eS8uY.js";import{L as wp}from"./Lqi-ZwgCV9oF.js";import"./envs-DXl2ikyY.js";import"./index-DsxT80wB.js";import"./snakeCase-D13tb9hI.js";import"./_createCompounder-Dk28qyWA.js";import"./DisplayValue-D6WaJtz3.js";var gt={exports:{}};/**
2
2
  * @license
3
3
  * Lodash <https://lodash.com/>
4
4
  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
@@ -24,4 +24,4 @@ __p += '`),O&&(d+=`' +
24
24
  function print() { __p += __j.call(arguments, '') }
25
25
  `:`;
26
26
  `)+d+`return __p
27
- }`;var L=cs(function(){return N(f,w+"return "+d).apply(s,l)});if(L.source=d,mi(L))throw L;return L}function A_(n){return B(n).toLowerCase()}function m_(n){return B(n).toUpperCase()}function y_(n,e,t){if(n=B(n),n&&(t||e===s))return wu(n);if(!n||!(e=pn(e)))return n;var r=On(n),i=On(e),f=Au(r,i),l=mu(r,i)+1;return ce(r,f,l).join("")}function I_(n,e,t){if(n=B(n),n&&(t||e===s))return n.slice(0,Iu(n)+1);if(!n||!(e=pn(e)))return n;var r=On(n),i=mu(r,On(e))+1;return ce(r,0,i).join("")}function R_(n,e,t){if(n=B(n),n&&(t||e===s))return n.replace(mr,"");if(!n||!(e=pn(e)))return n;var r=On(n),i=Au(r,On(e));return ce(r,i).join("")}function S_(n,e){var t=vs,r=xs;if(H(e)){var i="separator"in e?e.separator:i;t="length"in e?C(e.length):t,r="omission"in e?pn(e.omission):r}n=B(n);var f=n.length;if(Te(n)){var l=On(n);f=l.length}if(t>=f)return n;var o=t-be(r);if(o<1)return r;var c=l?ce(l,0,o).join(""):n.slice(0,o);if(i===s)return c+r;if(l&&(o+=c.length-o),yi(i)){if(n.slice(o).search(i)){var _,p=c;for(i.global||(i=Dr(i.source,B(Gi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var d=_.index;c=c.slice(0,d===s?o:d)}}else if(n.indexOf(pn(i),o)!=o){var v=c.lastIndexOf(i);v>-1&&(c=c.slice(0,v))}return c+r}function C_(n){return n=B(n),n&&Fs.test(n)?n.replace(Di,no):n}var L_=Me(function(n,e,t){return n+(t?" ":"")+e.toUpperCase()}),Si=hf("toUpperCase");function as(n,e,t){return n=B(n),e=t?s:e,e===s?Jl(n)?ro(n):$l(n):n.match(e)||[]}var cs=E(function(n,e){try{return gn(n,s,e)}catch(t){return mi(t)?t:new R(t)}}),E_=Qn(function(n,e){return mn(e,function(t){t=Un(t),Xn(n,t,wi(n[t],n))}),n});function T_(n){var e=n==null?0:n.length,t=m();return n=e?G(n,function(r){if(typeof r[1]!="function")throw new yn(P);return[t(r[0]),r[1]]}):[],E(function(r){for(var i=-1;++i<e;){var f=n[i];if(gn(f[0],this,r))return gn(f[1],this,r)}})}function b_(n){return ea(Rn(n,sn))}function Ci(n){return function(){return n}}function O_(n,e){return n==null||n!==n?e:n}var W_=_f(),P_=_f(!0);function cn(n){return n}function Li(n){return qu(typeof n=="function"?n:Rn(n,sn))}function N_(n){return Ku(Rn(n,sn))}function B_(n,e){return Zu(n,Rn(e,sn))}var F_=E(function(n,e){return function(t){return ut(t,n,e)}}),M_=E(function(n,e){return function(t){return ut(n,t,e)}});function Ei(n,e,t){var r=Q(e),i=Ht(e,r);t==null&&!(H(e)&&(i.length||!r.length))&&(t=e,e=n,n=this,i=Ht(e,Q(e)));var f=!(H(t)&&"chain"in t)||!!t.chain,l=Vn(n);return mn(i,function(o){var c=e[o];n[o]=c,l&&(n.prototype[o]=function(){var _=this.__chain__;if(f||_){var p=n(this.__wrapped__),d=p.__actions__=ln(this.__actions__);return d.push({func:c,args:arguments,thisArg:n}),p.__chain__=_,p}return c.apply(n,ue([this.value()],arguments))})}),n}function D_(){return V._===this&&(V._=oo),this}function Ti(){}function U_(n){return n=C(n),E(function(e){return Yu(e,n)})}var $_=fi(G),G_=fi(_u),H_=fi(Or);function hs(n){return gi(n)?Wr(Un(n)):xa(n)}function q_(n){return function(e){return n==null?s:Ae(n,e)}}var z_=df(),K_=df(!0);function bi(){return[]}function Oi(){return!1}function Z_(){return{}}function Y_(){return""}function X_(){return!0}function J_(n,e){if(n=C(n),n<1||n>re)return[];var t=Fn,r=en(n,Fn);e=m(e),n-=Fn;for(var i=Br(r,e);++t<n;)e(t);return i}function Q_(n){return S(n)?G(n,Un):dn(n)?[n]:ln(Wf(B(n)))}function k_(n){var e=++so;return B(n)+e}var V_=Xt(function(n,e){return n+e},0),j_=si("ceil"),np=Xt(function(n,e){return n/e},1),ep=si("floor");function tp(n){return n&&n.length?Gt(n,cn,Zr):s}function rp(n,e){return n&&n.length?Gt(n,m(e,2),Zr):s}function ip(n){return vu(n,cn)}function up(n,e){return vu(n,m(e,2))}function fp(n){return n&&n.length?Gt(n,cn,Qr):s}function sp(n,e){return n&&n.length?Gt(n,m(e,2),Qr):s}var lp=Xt(function(n,e){return n*e},1),op=si("round"),ap=Xt(function(n,e){return n-e},0);function cp(n){return n&&n.length?Nr(n,cn):0}function hp(n,e){return n&&n.length?Nr(n,m(e,2)):0}return u.after=Nh,u.ary=qf,u.assign=mg,u.assignIn=rs,u.assignInWith=sr,u.assignWith=yg,u.at=Ig,u.before=zf,u.bind=wi,u.bindAll=E_,u.bindKey=Kf,u.castArray=Zh,u.chain=$f,u.chunk=ec,u.compact=tc,u.concat=rc,u.cond=T_,u.conforms=b_,u.constant=Ci,u.countBy=ch,u.create=Rg,u.curry=Zf,u.curryRight=Yf,u.debounce=Xf,u.defaults=Sg,u.defaultsDeep=Cg,u.defer=Bh,u.delay=Fh,u.difference=ic,u.differenceBy=uc,u.differenceWith=fc,u.drop=sc,u.dropRight=lc,u.dropRightWhile=oc,u.dropWhile=ac,u.fill=cc,u.filter=gh,u.flatMap=dh,u.flatMapDeep=vh,u.flatMapDepth=xh,u.flatten=Ff,u.flattenDeep=hc,u.flattenDepth=gc,u.flip=Mh,u.flow=W_,u.flowRight=P_,u.fromPairs=_c,u.functions=Pg,u.functionsIn=Ng,u.groupBy=wh,u.initial=dc,u.intersection=vc,u.intersectionBy=xc,u.intersectionWith=wc,u.invert=Fg,u.invertBy=Mg,u.invokeMap=mh,u.iteratee=Li,u.keyBy=yh,u.keys=Q,u.keysIn=an,u.map=er,u.mapKeys=Ug,u.mapValues=$g,u.matches=N_,u.matchesProperty=B_,u.memoize=rr,u.merge=Gg,u.mergeWith=is,u.method=F_,u.methodOf=M_,u.mixin=Ei,u.negate=ir,u.nthArg=U_,u.omit=Hg,u.omitBy=qg,u.once=Dh,u.orderBy=Ih,u.over=$_,u.overArgs=Uh,u.overEvery=G_,u.overSome=H_,u.partial=Ai,u.partialRight=Jf,u.partition=Rh,u.pick=zg,u.pickBy=us,u.property=hs,u.propertyOf=q_,u.pull=Ic,u.pullAll=Df,u.pullAllBy=Rc,u.pullAllWith=Sc,u.pullAt=Cc,u.range=z_,u.rangeRight=K_,u.rearg=$h,u.reject=Lh,u.remove=Lc,u.rest=Gh,u.reverse=vi,u.sampleSize=Th,u.set=Zg,u.setWith=Yg,u.shuffle=bh,u.slice=Ec,u.sortBy=Ph,u.sortedUniq=Bc,u.sortedUniqBy=Fc,u.split=d_,u.spread=Hh,u.tail=Mc,u.take=Dc,u.takeRight=Uc,u.takeRightWhile=$c,u.takeWhile=Gc,u.tap=th,u.throttle=qh,u.thru=nr,u.toArray=ns,u.toPairs=fs,u.toPairsIn=ss,u.toPath=Q_,u.toPlainObject=ts,u.transform=Xg,u.unary=zh,u.union=Hc,u.unionBy=qc,u.unionWith=zc,u.uniq=Kc,u.uniqBy=Zc,u.uniqWith=Yc,u.unset=Jg,u.unzip=xi,u.unzipWith=Uf,u.update=Qg,u.updateWith=kg,u.values=$e,u.valuesIn=Vg,u.without=Xc,u.words=as,u.wrap=Kh,u.xor=Jc,u.xorBy=Qc,u.xorWith=kc,u.zip=Vc,u.zipObject=jc,u.zipObjectDeep=nh,u.zipWith=eh,u.entries=fs,u.entriesIn=ss,u.extend=rs,u.extendWith=sr,Ei(u,u),u.add=V_,u.attempt=cs,u.camelCase=t_,u.capitalize=ls,u.ceil=j_,u.clamp=jg,u.clone=Yh,u.cloneDeep=Jh,u.cloneDeepWith=Qh,u.cloneWith=Xh,u.conformsTo=kh,u.deburr=os,u.defaultTo=O_,u.divide=np,u.endsWith=r_,u.eq=Pn,u.escape=i_,u.escapeRegExp=u_,u.every=hh,u.find=_h,u.findIndex=Nf,u.findKey=Lg,u.findLast=ph,u.findLastIndex=Bf,u.findLastKey=Eg,u.floor=ep,u.forEach=Gf,u.forEachRight=Hf,u.forIn=Tg,u.forInRight=bg,u.forOwn=Og,u.forOwnRight=Wg,u.get=Ii,u.gt=Vh,u.gte=jh,u.has=Bg,u.hasIn=Ri,u.head=Mf,u.identity=cn,u.includes=Ah,u.indexOf=pc,u.inRange=n_,u.invoke=Dg,u.isArguments=Ie,u.isArray=S,u.isArrayBuffer=ng,u.isArrayLike=on,u.isArrayLikeObject=z,u.isBoolean=eg,u.isBuffer=he,u.isDate=tg,u.isElement=rg,u.isEmpty=ig,u.isEqual=ug,u.isEqualWith=fg,u.isError=mi,u.isFinite=sg,u.isFunction=Vn,u.isInteger=Qf,u.isLength=ur,u.isMap=kf,u.isMatch=lg,u.isMatchWith=og,u.isNaN=ag,u.isNative=cg,u.isNil=gg,u.isNull=hg,u.isNumber=Vf,u.isObject=H,u.isObjectLike=q,u.isPlainObject=ct,u.isRegExp=yi,u.isSafeInteger=_g,u.isSet=jf,u.isString=fr,u.isSymbol=dn,u.isTypedArray=Ue,u.isUndefined=pg,u.isWeakMap=dg,u.isWeakSet=vg,u.join=Ac,u.kebabCase=f_,u.last=Cn,u.lastIndexOf=mc,u.lowerCase=s_,u.lowerFirst=l_,u.lt=xg,u.lte=wg,u.max=tp,u.maxBy=rp,u.mean=ip,u.meanBy=up,u.min=fp,u.minBy=sp,u.stubArray=bi,u.stubFalse=Oi,u.stubObject=Z_,u.stubString=Y_,u.stubTrue=X_,u.multiply=lp,u.nth=yc,u.noConflict=D_,u.noop=Ti,u.now=tr,u.pad=o_,u.padEnd=a_,u.padStart=c_,u.parseInt=h_,u.random=e_,u.reduce=Sh,u.reduceRight=Ch,u.repeat=g_,u.replace=__,u.result=Kg,u.round=op,u.runInContext=a,u.sample=Eh,u.size=Oh,u.snakeCase=p_,u.some=Wh,u.sortedIndex=Tc,u.sortedIndexBy=bc,u.sortedIndexOf=Oc,u.sortedLastIndex=Wc,u.sortedLastIndexBy=Pc,u.sortedLastIndexOf=Nc,u.startCase=v_,u.startsWith=x_,u.subtract=ap,u.sum=cp,u.sumBy=hp,u.template=w_,u.times=J_,u.toFinite=jn,u.toInteger=C,u.toLength=es,u.toLower=A_,u.toNumber=Ln,u.toSafeInteger=Ag,u.toString=B,u.toUpper=m_,u.trim=y_,u.trimEnd=I_,u.trimStart=R_,u.truncate=S_,u.unescape=C_,u.uniqueId=k_,u.upperCase=L_,u.upperFirst=Si,u.each=Gf,u.eachRight=Hf,u.first=Mf,Ei(u,function(){var n={};return Mn(u,function(e,t){F.call(u.prototype,t)||(n[t]=e)}),n}(),{chain:!1}),u.VERSION=wn,mn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){u[n].placeholder=u}),mn(["drop","take"],function(n,e){b.prototype[n]=function(t){t=t===s?1:J(C(t),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=en(t,r.__takeCount__):r.__views__.push({size:en(t,Fn),type:n+(r.__dir__<0?"Right":"")}),r},b.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),mn(["filter","map","takeWhile"],function(n,e){var t=e+1,r=t==Bi||t==ys;b.prototype[n]=function(i){var f=this.clone();return f.__iteratees__.push({iteratee:m(i,3),type:t}),f.__filtered__=f.__filtered__||r,f}}),mn(["head","last"],function(n,e){var t="take"+(e?"Right":"");b.prototype[n]=function(){return this[t](1).value()[0]}}),mn(["initial","tail"],function(n,e){var t="drop"+(e?"":"Right");b.prototype[n]=function(){return this.__filtered__?new b(this):this[t](1)}}),b.prototype.compact=function(){return this.filter(cn)},b.prototype.find=function(n){return this.filter(n).head()},b.prototype.findLast=function(n){return this.reverse().find(n)},b.prototype.invokeMap=E(function(n,e){return typeof n=="function"?new b(this):this.map(function(t){return ut(t,n,e)})}),b.prototype.reject=function(n){return this.filter(ir(m(n)))},b.prototype.slice=function(n,e){n=C(n);var t=this;return t.__filtered__&&(n>0||e<0)?new b(t):(n<0?t=t.takeRight(-n):n&&(t=t.drop(n)),e!==s&&(e=C(e),t=e<0?t.dropRight(-e):t.take(e-n)),t)},b.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},b.prototype.toArray=function(){return this.take(Fn)},Mn(b.prototype,function(n,e){var t=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=u[r?"take"+(e=="last"?"Right":""):e],f=r||/^find/.test(e);i&&(u.prototype[e]=function(){var l=this.__wrapped__,o=r?[1]:arguments,c=l instanceof b,_=o[0],p=c||S(l),d=function(T){var O=i.apply(u,ue([T],o));return r&&v?O[0]:O};p&&t&&typeof _=="function"&&_.length!=1&&(c=p=!1);var v=this.__chain__,w=!!this.__actions__.length,y=f&&!v,L=c&&!w;if(!f&&p){l=L?l:new b(this);var I=n.apply(l,o);return I.__actions__.push({func:nr,args:[d],thisArg:s}),new In(I,v)}return y&&L?n.apply(this,o):(I=this.thru(d),y?r?I.value()[0]:I.value():I)})}),mn(["pop","push","shift","sort","splice","unshift"],function(n){var e=Ct[n],t=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return e.apply(S(f)?f:[],i)}return this[t](function(l){return e.apply(S(l)?l:[],i)})}}),Mn(b.prototype,function(n,e){var t=u[e];if(t){var r=t.name+"";F.call(Ne,r)||(Ne[r]=[]),Ne[r].push({name:e,func:t})}}),Ne[Yt(s,te).name]=[{name:"wrapper",func:s}],b.prototype.clone=Co,b.prototype.reverse=Lo,b.prototype.value=Eo,u.prototype.at=rh,u.prototype.chain=ih,u.prototype.commit=uh,u.prototype.next=fh,u.prototype.plant=lh,u.prototype.reverse=oh,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=ah,u.prototype.first=u.prototype.head,Ve&&(u.prototype[Ve]=sh),u},Oe=io();pe?((pe.exports=Oe)._=Oe,Lr._=Oe):V._=Oe}).call(Ap)}(gt,gt.exports)),gt.exports}var yp=mp();const Ip=ee.memo(({relation:Z,device:W,highlight:s,setHighlightValue:wn,...En})=>{const{t:nn}=Pi(["network","common"]),P=ee.useMemo(()=>s(W.friendly_name),[W.friendly_name,s]),Bn=ee.useCallback(()=>wn(P?"":W.friendly_name),[W.friendly_name,P,wn]);return A.jsx("li",{title:`${nn("zigbee:ieee_address")}: ${W.ieee_address} | ${nn("zigbee:network_address")}: ${_t(W.network_address,4)} (${W.network_address})`,className:P?"bg-accent text-accent-content rounded-sm":void 0,...En,children:A.jsxs("details",{children:[A.jsxs("summary",{className:"flex flex-row",children:[A.jsx("div",{className:"w-8 h-8",onClick:Bn,children:A.jsx(ds,{disabled:!1,device:W,noIndicator:!0})}),A.jsx("div",{className:"grow",children:W.friendly_name}),A.jsx("span",{className:"badge badge-ghost",children:A.jsx(wp,{value:Z.linkquality})}),A.jsxs("span",{className:"badge badge-ghost",title:nn("depth"),children:[A.jsx(or,{icon:gp}),Z.depth===255?"N/A":Z.depth]})]}),A.jsxs("ul",{children:[A.jsx("li",{children:A.jsxs(Wi,{to:`/device/${W.ieee_address}/info`,className:"link link-hover",children:[nn("zigbee:ieee_address"),": ",W.ieee_address]})}),A.jsx("li",{children:A.jsxs(Wi,{to:`/device/${W.ieee_address}/info`,className:"link link-hover",children:[nn("zigbee:network_address"),": ",_t(W.network_address,4)," (",W.network_address,")"]})}),Z.routes.length>0&&A.jsxs(A.Fragment,{children:[A.jsx("li",{children:A.jsxs("span",{children:[nn("routes"),":"]})}),A.jsx("ul",{children:Z.routes.map(hn=>A.jsx("li",{children:A.jsxs("span",{children:["➥ ",_t(hn.destinationAddress)," : ",hn.status]})},`${Z.source.ieeeAddr}-${hn.destinationAddress}-${hn.nextHop}-${hn.status}`))})]})]})]})},Z.source.ieeeAddr)}),Rp={[ht.NeighborIsParent]:"parent",[ht.NeighborIsAChild]:"children",[ht.NeighborIsASibling]:"siblings",[ht.NoneOfTheAbove]:"zigbee:none",[ht.NeighborIsPreviousChild]:"previous_children"},Sp=ee.memo(({devices:Z,relationship:W,relations:s,highlight:wn,setHighlightValue:En})=>{const{t:nn}=Pi(["network","zigbee"]);return A.jsx("li",{children:A.jsxs("details",{children:[A.jsxs("summary",{children:[nn(Rp[W])," (",s.length,")"]}),A.jsx("ul",{children:s.map(P=>{const Bn=Z.find(hn=>hn.ieee_address===P.source.ieeeAddr);return Bn?A.jsx(Ip,{relation:P,device:Bn,highlight:wn,setHighlightValue:En},`${P.source.ieeeAddr}-${P.target.ieeeAddr}`):A.jsxs("li",{children:[nn("zigbee:unknown"),": ",P.source.ieeeAddr]},`${P.source.ieeeAddr}-${P.target.ieeeAddr}`)})})]})})}),Bp=ee.memo(({map:Z})=>{const{t:W}=Pi(["network","common"]),s=_p(k=>k.devices),[wn,En]=ee.useState(""),[nn,P]=ee.useState(""),Bn=ee.useCallback(k=>!!nn&&k.toLowerCase().includes(nn.toLowerCase()),[nn]),hn=ee.useMemo(()=>{const k=[];for(const M of Z.nodes){const sn=s.find(ge=>ge.ieee_address===M.ieeeAddr);if(!wn||M.friendlyName.toLowerCase().includes(wn.toLowerCase())){const ge=yp.groupBy(Z.links.filter(Y=>Y.target.ieeeAddr===M.ieeeAddr),Y=>Y.relationship),$n=[];for(const Y in ge){const te=ge[Y];$n.push(A.jsx(Sp,{devices:s,relations:te,highlight:Bn,setHighlightValue:P,relationship:Y},Y))}const Gn=Bn(M.friendlyName),Re=M.type==="Coordinator"?"/settings/about":`/device/${M.ieeeAddr}/info`;k.push(A.jsxs("ul",{className:"w-md menu bg-base-200 rounded-box shadow",children:[A.jsx("li",{title:`${W("zigbee:ieee_address")}: ${M.ieeeAddr} | ${W("zigbee:network_address")}: ${_t(M.networkAddress,4)} (${M.networkAddress})`,className:Gn?"bg-accent text-accent-content rounded-sm":void 0,children:A.jsxs("span",{onClick:()=>P(Gn?"":M.friendlyName),children:[A.jsx("span",{className:"w-10 h-10",children:A.jsx(ds,{disabled:!1,device:sn,noIndicator:!0})}),M.friendlyName,sn&&M.type!=="Coordinator"&&A.jsx("span",{className:"badge badge-ghost",children:A.jsx(xp,{device:sn,showLevel:!1})}),M.failed&&M.failed.length>0&&A.jsx("span",{className:"badge badge-ghost",title:`${W("common:failed")}: ${M.failed}`,children:A.jsx(or,{icon:pp,className:"text-error",beatFade:!0})})]})}),A.jsx("li",{children:A.jsx("span",{className:"cursor-default",children:M.type})}),A.jsx("li",{children:A.jsxs(Wi,{to:Re,className:"link link-hover",children:[A.jsx("span",{title:W("zigbee:ieee_address"),children:M.ieeeAddr}),A.jsxs("span",{title:W("zigbee:network_address_hex"),className:"justify-self-end",children:[_t(M.networkAddress,4)," | ",A.jsx("span",{title:W("zigbee:network_address_dec"),children:M.networkAddress})]})]})}),$n]},M.friendlyName))}}return k.sort((M,sn)=>M.key==="Coordinator"?-1:M.key.localeCompare(sn.key)),k},[s,wn,Z,Bn,W]);return A.jsxs(A.Fragment,{children:[A.jsxs("div",{className:"flex flex-row justify-center items-center gap-3",children:[A.jsxs("label",{className:"input w-64",children:[A.jsx(or,{icon:dp}),A.jsx(_s,{className:"",type:"search",onChange:k=>En(k.toString()),placeholder:W("common:search"),value:wn,disabled:Z.nodes.length===0}),A.jsx("kbd",{className:"kbd kbd-sm cursor-pointer",onClick:()=>En(""),onKeyUp:k=>{k.key==="enter"&&En("")},title:W("common:clear"),children:"x"})]}),A.jsxs("label",{className:"input w-64",children:[A.jsx(or,{icon:vp}),A.jsx(_s,{className:"",type:"search",onChange:k=>P(k.toString()),placeholder:W("common:highlight"),value:nn,disabled:Z.nodes.length===0,title:W("highlight_info")}),A.jsx("kbd",{className:"kbd kbd-sm cursor-pointer",onClick:()=>P(""),onKeyUp:k=>{k.key==="enter"&&P("")},title:W("common:clear"),children:"x"})]})]}),A.jsx("div",{className:"flex flex-row flex-wrap justify-center gap-3 p-3",children:hn})]})});export{Bp as default};
27
+ }`;var L=cs(function(){return N(f,w+"return "+d).apply(s,l)});if(L.source=d,mi(L))throw L;return L}function A_(n){return B(n).toLowerCase()}function m_(n){return B(n).toUpperCase()}function y_(n,e,t){if(n=B(n),n&&(t||e===s))return wu(n);if(!n||!(e=pn(e)))return n;var r=On(n),i=On(e),f=Au(r,i),l=mu(r,i)+1;return ce(r,f,l).join("")}function I_(n,e,t){if(n=B(n),n&&(t||e===s))return n.slice(0,Iu(n)+1);if(!n||!(e=pn(e)))return n;var r=On(n),i=mu(r,On(e))+1;return ce(r,0,i).join("")}function R_(n,e,t){if(n=B(n),n&&(t||e===s))return n.replace(mr,"");if(!n||!(e=pn(e)))return n;var r=On(n),i=Au(r,On(e));return ce(r,i).join("")}function S_(n,e){var t=vs,r=xs;if(H(e)){var i="separator"in e?e.separator:i;t="length"in e?C(e.length):t,r="omission"in e?pn(e.omission):r}n=B(n);var f=n.length;if(Te(n)){var l=On(n);f=l.length}if(t>=f)return n;var o=t-be(r);if(o<1)return r;var c=l?ce(l,0,o).join(""):n.slice(0,o);if(i===s)return c+r;if(l&&(o+=c.length-o),yi(i)){if(n.slice(o).search(i)){var _,p=c;for(i.global||(i=Dr(i.source,B(Gi.exec(i))+"g")),i.lastIndex=0;_=i.exec(p);)var d=_.index;c=c.slice(0,d===s?o:d)}}else if(n.indexOf(pn(i),o)!=o){var v=c.lastIndexOf(i);v>-1&&(c=c.slice(0,v))}return c+r}function C_(n){return n=B(n),n&&Fs.test(n)?n.replace(Di,no):n}var L_=Me(function(n,e,t){return n+(t?" ":"")+e.toUpperCase()}),Si=hf("toUpperCase");function as(n,e,t){return n=B(n),e=t?s:e,e===s?Jl(n)?ro(n):$l(n):n.match(e)||[]}var cs=E(function(n,e){try{return gn(n,s,e)}catch(t){return mi(t)?t:new R(t)}}),E_=Qn(function(n,e){return mn(e,function(t){t=Un(t),Xn(n,t,wi(n[t],n))}),n});function T_(n){var e=n==null?0:n.length,t=m();return n=e?G(n,function(r){if(typeof r[1]!="function")throw new yn(P);return[t(r[0]),r[1]]}):[],E(function(r){for(var i=-1;++i<e;){var f=n[i];if(gn(f[0],this,r))return gn(f[1],this,r)}})}function b_(n){return ea(Rn(n,sn))}function Ci(n){return function(){return n}}function O_(n,e){return n==null||n!==n?e:n}var W_=_f(),P_=_f(!0);function cn(n){return n}function Li(n){return qu(typeof n=="function"?n:Rn(n,sn))}function N_(n){return Ku(Rn(n,sn))}function B_(n,e){return Zu(n,Rn(e,sn))}var F_=E(function(n,e){return function(t){return ut(t,n,e)}}),M_=E(function(n,e){return function(t){return ut(n,t,e)}});function Ei(n,e,t){var r=Q(e),i=Ht(e,r);t==null&&!(H(e)&&(i.length||!r.length))&&(t=e,e=n,n=this,i=Ht(e,Q(e)));var f=!(H(t)&&"chain"in t)||!!t.chain,l=Vn(n);return mn(i,function(o){var c=e[o];n[o]=c,l&&(n.prototype[o]=function(){var _=this.__chain__;if(f||_){var p=n(this.__wrapped__),d=p.__actions__=ln(this.__actions__);return d.push({func:c,args:arguments,thisArg:n}),p.__chain__=_,p}return c.apply(n,ue([this.value()],arguments))})}),n}function D_(){return V._===this&&(V._=oo),this}function Ti(){}function U_(n){return n=C(n),E(function(e){return Yu(e,n)})}var $_=fi(G),G_=fi(_u),H_=fi(Or);function hs(n){return gi(n)?Wr(Un(n)):xa(n)}function q_(n){return function(e){return n==null?s:Ae(n,e)}}var z_=df(),K_=df(!0);function bi(){return[]}function Oi(){return!1}function Z_(){return{}}function Y_(){return""}function X_(){return!0}function J_(n,e){if(n=C(n),n<1||n>re)return[];var t=Fn,r=en(n,Fn);e=m(e),n-=Fn;for(var i=Br(r,e);++t<n;)e(t);return i}function Q_(n){return S(n)?G(n,Un):dn(n)?[n]:ln(Wf(B(n)))}function k_(n){var e=++so;return B(n)+e}var V_=Xt(function(n,e){return n+e},0),j_=si("ceil"),np=Xt(function(n,e){return n/e},1),ep=si("floor");function tp(n){return n&&n.length?Gt(n,cn,Zr):s}function rp(n,e){return n&&n.length?Gt(n,m(e,2),Zr):s}function ip(n){return vu(n,cn)}function up(n,e){return vu(n,m(e,2))}function fp(n){return n&&n.length?Gt(n,cn,Qr):s}function sp(n,e){return n&&n.length?Gt(n,m(e,2),Qr):s}var lp=Xt(function(n,e){return n*e},1),op=si("round"),ap=Xt(function(n,e){return n-e},0);function cp(n){return n&&n.length?Nr(n,cn):0}function hp(n,e){return n&&n.length?Nr(n,m(e,2)):0}return u.after=Nh,u.ary=qf,u.assign=mg,u.assignIn=rs,u.assignInWith=sr,u.assignWith=yg,u.at=Ig,u.before=zf,u.bind=wi,u.bindAll=E_,u.bindKey=Kf,u.castArray=Zh,u.chain=$f,u.chunk=ec,u.compact=tc,u.concat=rc,u.cond=T_,u.conforms=b_,u.constant=Ci,u.countBy=ch,u.create=Rg,u.curry=Zf,u.curryRight=Yf,u.debounce=Xf,u.defaults=Sg,u.defaultsDeep=Cg,u.defer=Bh,u.delay=Fh,u.difference=ic,u.differenceBy=uc,u.differenceWith=fc,u.drop=sc,u.dropRight=lc,u.dropRightWhile=oc,u.dropWhile=ac,u.fill=cc,u.filter=gh,u.flatMap=dh,u.flatMapDeep=vh,u.flatMapDepth=xh,u.flatten=Ff,u.flattenDeep=hc,u.flattenDepth=gc,u.flip=Mh,u.flow=W_,u.flowRight=P_,u.fromPairs=_c,u.functions=Pg,u.functionsIn=Ng,u.groupBy=wh,u.initial=dc,u.intersection=vc,u.intersectionBy=xc,u.intersectionWith=wc,u.invert=Fg,u.invertBy=Mg,u.invokeMap=mh,u.iteratee=Li,u.keyBy=yh,u.keys=Q,u.keysIn=an,u.map=er,u.mapKeys=Ug,u.mapValues=$g,u.matches=N_,u.matchesProperty=B_,u.memoize=rr,u.merge=Gg,u.mergeWith=is,u.method=F_,u.methodOf=M_,u.mixin=Ei,u.negate=ir,u.nthArg=U_,u.omit=Hg,u.omitBy=qg,u.once=Dh,u.orderBy=Ih,u.over=$_,u.overArgs=Uh,u.overEvery=G_,u.overSome=H_,u.partial=Ai,u.partialRight=Jf,u.partition=Rh,u.pick=zg,u.pickBy=us,u.property=hs,u.propertyOf=q_,u.pull=Ic,u.pullAll=Df,u.pullAllBy=Rc,u.pullAllWith=Sc,u.pullAt=Cc,u.range=z_,u.rangeRight=K_,u.rearg=$h,u.reject=Lh,u.remove=Lc,u.rest=Gh,u.reverse=vi,u.sampleSize=Th,u.set=Zg,u.setWith=Yg,u.shuffle=bh,u.slice=Ec,u.sortBy=Ph,u.sortedUniq=Bc,u.sortedUniqBy=Fc,u.split=d_,u.spread=Hh,u.tail=Mc,u.take=Dc,u.takeRight=Uc,u.takeRightWhile=$c,u.takeWhile=Gc,u.tap=th,u.throttle=qh,u.thru=nr,u.toArray=ns,u.toPairs=fs,u.toPairsIn=ss,u.toPath=Q_,u.toPlainObject=ts,u.transform=Xg,u.unary=zh,u.union=Hc,u.unionBy=qc,u.unionWith=zc,u.uniq=Kc,u.uniqBy=Zc,u.uniqWith=Yc,u.unset=Jg,u.unzip=xi,u.unzipWith=Uf,u.update=Qg,u.updateWith=kg,u.values=$e,u.valuesIn=Vg,u.without=Xc,u.words=as,u.wrap=Kh,u.xor=Jc,u.xorBy=Qc,u.xorWith=kc,u.zip=Vc,u.zipObject=jc,u.zipObjectDeep=nh,u.zipWith=eh,u.entries=fs,u.entriesIn=ss,u.extend=rs,u.extendWith=sr,Ei(u,u),u.add=V_,u.attempt=cs,u.camelCase=t_,u.capitalize=ls,u.ceil=j_,u.clamp=jg,u.clone=Yh,u.cloneDeep=Jh,u.cloneDeepWith=Qh,u.cloneWith=Xh,u.conformsTo=kh,u.deburr=os,u.defaultTo=O_,u.divide=np,u.endsWith=r_,u.eq=Pn,u.escape=i_,u.escapeRegExp=u_,u.every=hh,u.find=_h,u.findIndex=Nf,u.findKey=Lg,u.findLast=ph,u.findLastIndex=Bf,u.findLastKey=Eg,u.floor=ep,u.forEach=Gf,u.forEachRight=Hf,u.forIn=Tg,u.forInRight=bg,u.forOwn=Og,u.forOwnRight=Wg,u.get=Ii,u.gt=Vh,u.gte=jh,u.has=Bg,u.hasIn=Ri,u.head=Mf,u.identity=cn,u.includes=Ah,u.indexOf=pc,u.inRange=n_,u.invoke=Dg,u.isArguments=Ie,u.isArray=S,u.isArrayBuffer=ng,u.isArrayLike=on,u.isArrayLikeObject=z,u.isBoolean=eg,u.isBuffer=he,u.isDate=tg,u.isElement=rg,u.isEmpty=ig,u.isEqual=ug,u.isEqualWith=fg,u.isError=mi,u.isFinite=sg,u.isFunction=Vn,u.isInteger=Qf,u.isLength=ur,u.isMap=kf,u.isMatch=lg,u.isMatchWith=og,u.isNaN=ag,u.isNative=cg,u.isNil=gg,u.isNull=hg,u.isNumber=Vf,u.isObject=H,u.isObjectLike=q,u.isPlainObject=ct,u.isRegExp=yi,u.isSafeInteger=_g,u.isSet=jf,u.isString=fr,u.isSymbol=dn,u.isTypedArray=Ue,u.isUndefined=pg,u.isWeakMap=dg,u.isWeakSet=vg,u.join=Ac,u.kebabCase=f_,u.last=Cn,u.lastIndexOf=mc,u.lowerCase=s_,u.lowerFirst=l_,u.lt=xg,u.lte=wg,u.max=tp,u.maxBy=rp,u.mean=ip,u.meanBy=up,u.min=fp,u.minBy=sp,u.stubArray=bi,u.stubFalse=Oi,u.stubObject=Z_,u.stubString=Y_,u.stubTrue=X_,u.multiply=lp,u.nth=yc,u.noConflict=D_,u.noop=Ti,u.now=tr,u.pad=o_,u.padEnd=a_,u.padStart=c_,u.parseInt=h_,u.random=e_,u.reduce=Sh,u.reduceRight=Ch,u.repeat=g_,u.replace=__,u.result=Kg,u.round=op,u.runInContext=a,u.sample=Eh,u.size=Oh,u.snakeCase=p_,u.some=Wh,u.sortedIndex=Tc,u.sortedIndexBy=bc,u.sortedIndexOf=Oc,u.sortedLastIndex=Wc,u.sortedLastIndexBy=Pc,u.sortedLastIndexOf=Nc,u.startCase=v_,u.startsWith=x_,u.subtract=ap,u.sum=cp,u.sumBy=hp,u.template=w_,u.times=J_,u.toFinite=jn,u.toInteger=C,u.toLength=es,u.toLower=A_,u.toNumber=Ln,u.toSafeInteger=Ag,u.toString=B,u.toUpper=m_,u.trim=y_,u.trimEnd=I_,u.trimStart=R_,u.truncate=S_,u.unescape=C_,u.uniqueId=k_,u.upperCase=L_,u.upperFirst=Si,u.each=Gf,u.eachRight=Hf,u.first=Mf,Ei(u,function(){var n={};return Mn(u,function(e,t){F.call(u.prototype,t)||(n[t]=e)}),n}(),{chain:!1}),u.VERSION=wn,mn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){u[n].placeholder=u}),mn(["drop","take"],function(n,e){b.prototype[n]=function(t){t=t===s?1:J(C(t),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=en(t,r.__takeCount__):r.__views__.push({size:en(t,Fn),type:n+(r.__dir__<0?"Right":"")}),r},b.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),mn(["filter","map","takeWhile"],function(n,e){var t=e+1,r=t==Bi||t==ys;b.prototype[n]=function(i){var f=this.clone();return f.__iteratees__.push({iteratee:m(i,3),type:t}),f.__filtered__=f.__filtered__||r,f}}),mn(["head","last"],function(n,e){var t="take"+(e?"Right":"");b.prototype[n]=function(){return this[t](1).value()[0]}}),mn(["initial","tail"],function(n,e){var t="drop"+(e?"":"Right");b.prototype[n]=function(){return this.__filtered__?new b(this):this[t](1)}}),b.prototype.compact=function(){return this.filter(cn)},b.prototype.find=function(n){return this.filter(n).head()},b.prototype.findLast=function(n){return this.reverse().find(n)},b.prototype.invokeMap=E(function(n,e){return typeof n=="function"?new b(this):this.map(function(t){return ut(t,n,e)})}),b.prototype.reject=function(n){return this.filter(ir(m(n)))},b.prototype.slice=function(n,e){n=C(n);var t=this;return t.__filtered__&&(n>0||e<0)?new b(t):(n<0?t=t.takeRight(-n):n&&(t=t.drop(n)),e!==s&&(e=C(e),t=e<0?t.dropRight(-e):t.take(e-n)),t)},b.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},b.prototype.toArray=function(){return this.take(Fn)},Mn(b.prototype,function(n,e){var t=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=u[r?"take"+(e=="last"?"Right":""):e],f=r||/^find/.test(e);i&&(u.prototype[e]=function(){var l=this.__wrapped__,o=r?[1]:arguments,c=l instanceof b,_=o[0],p=c||S(l),d=function(T){var O=i.apply(u,ue([T],o));return r&&v?O[0]:O};p&&t&&typeof _=="function"&&_.length!=1&&(c=p=!1);var v=this.__chain__,w=!!this.__actions__.length,y=f&&!v,L=c&&!w;if(!f&&p){l=L?l:new b(this);var I=n.apply(l,o);return I.__actions__.push({func:nr,args:[d],thisArg:s}),new In(I,v)}return y&&L?n.apply(this,o):(I=this.thru(d),y?r?I.value()[0]:I.value():I)})}),mn(["pop","push","shift","sort","splice","unshift"],function(n){var e=Ct[n],t=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);u.prototype[n]=function(){var i=arguments;if(r&&!this.__chain__){var f=this.value();return e.apply(S(f)?f:[],i)}return this[t](function(l){return e.apply(S(l)?l:[],i)})}}),Mn(b.prototype,function(n,e){var t=u[e];if(t){var r=t.name+"";F.call(Ne,r)||(Ne[r]=[]),Ne[r].push({name:e,func:t})}}),Ne[Yt(s,te).name]=[{name:"wrapper",func:s}],b.prototype.clone=Co,b.prototype.reverse=Lo,b.prototype.value=Eo,u.prototype.at=rh,u.prototype.chain=ih,u.prototype.commit=uh,u.prototype.next=fh,u.prototype.plant=lh,u.prototype.reverse=oh,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=ah,u.prototype.first=u.prototype.head,Ve&&(u.prototype[Ve]=sh),u},Oe=io();pe?((pe.exports=Oe)._=Oe,Lr._=Oe):V._=Oe}).call(Ap)}(gt,gt.exports)),gt.exports}var yp=mp();const Ip=ee.memo(({relation:Z,device:W,highlight:s,setHighlightValue:wn,...En})=>{const{t:nn}=Pi(["network","common"]),P=ee.useMemo(()=>s(W.friendly_name),[W.friendly_name,s]),Bn=ee.useCallback(()=>wn(P?"":W.friendly_name),[W.friendly_name,P,wn]);return A.jsx("li",{title:`${nn("zigbee:ieee_address")}: ${W.ieee_address} | ${nn("zigbee:network_address")}: ${_t(W.network_address,4)} (${W.network_address})`,className:P?"bg-accent text-accent-content rounded-sm":void 0,...En,children:A.jsxs("details",{children:[A.jsxs("summary",{className:"flex flex-row",children:[A.jsx("div",{className:"w-8 h-8",onClick:Bn,children:A.jsx(ds,{disabled:!1,device:W,noIndicator:!0})}),A.jsx("div",{className:"grow",children:W.friendly_name}),A.jsx("span",{className:"badge badge-ghost",children:A.jsx(wp,{value:Z.linkquality})}),A.jsxs("span",{className:"badge badge-ghost",title:nn("depth"),children:[A.jsx(or,{icon:gp}),Z.depth===255?"N/A":Z.depth]})]}),A.jsxs("ul",{children:[A.jsx("li",{children:A.jsxs(Wi,{to:`/device/${W.ieee_address}/info`,className:"link link-hover",children:[nn("zigbee:ieee_address"),": ",W.ieee_address]})}),A.jsx("li",{children:A.jsxs(Wi,{to:`/device/${W.ieee_address}/info`,className:"link link-hover",children:[nn("zigbee:network_address"),": ",_t(W.network_address,4)," (",W.network_address,")"]})}),Z.routes.length>0&&A.jsxs(A.Fragment,{children:[A.jsx("li",{children:A.jsxs("span",{children:[nn("routes"),":"]})}),A.jsx("ul",{children:Z.routes.map(hn=>A.jsx("li",{children:A.jsxs("span",{children:["➥ ",_t(hn.destinationAddress)," : ",hn.status]})},`${Z.source.ieeeAddr}-${hn.destinationAddress}-${hn.nextHop}-${hn.status}`))})]})]})]})},Z.source.ieeeAddr)}),Rp={[ht.NeighborIsParent]:"parent",[ht.NeighborIsAChild]:"children",[ht.NeighborIsASibling]:"siblings",[ht.NoneOfTheAbove]:"zigbee:none",[ht.NeighborIsPreviousChild]:"previous_children"},Sp=ee.memo(({devices:Z,relationship:W,relations:s,highlight:wn,setHighlightValue:En})=>{const{t:nn}=Pi(["network","zigbee"]);return A.jsx("li",{children:A.jsxs("details",{children:[A.jsxs("summary",{children:[nn(Rp[W])," (",s.length,")"]}),A.jsx("ul",{children:s.map(P=>{const Bn=Z.find(hn=>hn.ieee_address===P.source.ieeeAddr);return Bn?A.jsx(Ip,{relation:P,device:Bn,highlight:wn,setHighlightValue:En},`${P.source.ieeeAddr}-${P.target.ieeeAddr}`):A.jsxs("li",{children:[nn("zigbee:unknown"),": ",P.source.ieeeAddr]},`${P.source.ieeeAddr}-${P.target.ieeeAddr}`)})})]})})}),Mp=ee.memo(({map:Z})=>{const{t:W}=Pi(["network","common"]),s=_p(k=>k.devices),[wn,En]=ee.useState(""),[nn,P]=ee.useState(""),Bn=ee.useCallback(k=>!!nn&&k.toLowerCase().includes(nn.toLowerCase()),[nn]),hn=ee.useMemo(()=>{const k=[];for(const M of Z.nodes){const sn=s.find(ge=>ge.ieee_address===M.ieeeAddr);if(!wn||M.friendlyName.toLowerCase().includes(wn.toLowerCase())){const ge=yp.groupBy(Z.links.filter(Y=>Y.target.ieeeAddr===M.ieeeAddr),Y=>Y.relationship),$n=[];for(const Y in ge){const te=ge[Y];$n.push(A.jsx(Sp,{devices:s,relations:te,highlight:Bn,setHighlightValue:P,relationship:Y},Y))}const Gn=Bn(M.friendlyName),Re=M.type==="Coordinator"?"/settings/about":`/device/${M.ieeeAddr}/info`;k.push(A.jsxs("ul",{className:"w-md menu bg-base-200 rounded-box shadow",children:[A.jsx("li",{title:`${W("zigbee:ieee_address")}: ${M.ieeeAddr} | ${W("zigbee:network_address")}: ${_t(M.networkAddress,4)} (${M.networkAddress})`,className:Gn?"bg-accent text-accent-content rounded-sm":void 0,children:A.jsxs("span",{onClick:()=>P(Gn?"":M.friendlyName),children:[A.jsx("span",{className:"w-10 h-10",children:A.jsx(ds,{disabled:!1,device:sn,noIndicator:!0})}),M.friendlyName,sn&&M.type!=="Coordinator"&&A.jsx("span",{className:"badge badge-ghost",children:A.jsx(xp,{device:sn,showLevel:!1})}),M.failed&&M.failed.length>0&&A.jsx("span",{className:"badge badge-ghost",title:`${W("common:failed")}: ${M.failed}`,children:A.jsx(or,{icon:pp,className:"text-error",beatFade:!0})})]})}),A.jsx("li",{children:A.jsx("span",{className:"cursor-default",children:M.type})}),A.jsx("li",{children:A.jsxs(Wi,{to:Re,className:"link link-hover",children:[A.jsx("span",{title:W("zigbee:ieee_address"),children:M.ieeeAddr}),A.jsxs("span",{title:W("zigbee:network_address_hex"),className:"justify-self-end",children:[_t(M.networkAddress,4)," | ",A.jsx("span",{title:W("zigbee:network_address_dec"),children:M.networkAddress})]})]})}),$n]},M.friendlyName))}}return k.sort((M,sn)=>M.key==="Coordinator"?-1:M.key.localeCompare(sn.key)),k},[s,wn,Z,Bn,W]);return A.jsxs(A.Fragment,{children:[A.jsxs("div",{className:"flex flex-row justify-center items-center gap-3",children:[A.jsxs("label",{className:"input w-64",children:[A.jsx(or,{icon:dp}),A.jsx(_s,{className:"",type:"search",onChange:k=>En(k.toString()),placeholder:W("common:search"),value:wn,disabled:Z.nodes.length===0}),A.jsx("kbd",{className:"kbd kbd-sm cursor-pointer",onClick:()=>En(""),onKeyUp:k=>{k.key==="enter"&&En("")},title:W("common:clear"),children:"x"})]}),A.jsxs("label",{className:"input w-64",children:[A.jsx(or,{icon:vp}),A.jsx(_s,{className:"",type:"search",onChange:k=>P(k.toString()),placeholder:W("common:highlight"),value:nn,disabled:Z.nodes.length===0,title:W("highlight_info")}),A.jsx("kbd",{className:"kbd kbd-sm cursor-pointer",onClick:()=>P(""),onKeyUp:k=>{k.key==="enter"&&P("")},title:W("common:clear"),children:"x"})]})]}),A.jsx("div",{className:"flex flex-row flex-wrap justify-center gap-3 p-3",children:hn})]})});export{Mp as default};
@@ -1,4 +1,4 @@
1
- import{ap as Ox,aa as po,aq as lo,r as $,j as fe,ar as GU,b as xg,t as HU,F as ni,Y as VU,B as ts,as as WU,at as XU,au as jU,av as qU,aw as YU,ax as ZU,ay as KU,az as JU,aA as QU,aB as Qc,aC as $U,aD as eO,aE as tO,aF as Nv,s as qa,aG as HS,aH as VS,aI as WS,aJ as XS}from"./index-Cs-KexR1.js";import{E as yl,Z as ti,N as tm}from"./index-BN7eS8uY.js";/**
1
+ import{aq as Ox,ab as po,ar as lo,r as $,j as fe,as as GU,b as xg,t as HU,F as ni,Y as VU,B as ts,at as WU,au as XU,av as jU,aw as qU,ax as YU,ay as ZU,az as KU,aA as JU,aB as QU,aC as Qc,aD as $U,aE as eO,aF as tO,aG as Nv,s as qa,aH as HS,aI as VS,aJ as WS,aK as XS}from"./index-ZiLZvzeu.js";import{E as yl,Z as ti,N as tm}from"./index-BN7eS8uY.js";import"./envs-DXl2ikyY.js";/**
2
2
  * @license
3
3
  * Copyright 2010-2025 Three.js Authors
4
4
  * SPDX-License-Identifier: MIT
@@ -4230,4 +4230,4 @@ vTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;
4230
4230
  top: 50%;
4231
4231
  left: 50%;
4232
4232
  transform: translate(-50%, -50%);
4233
- }`)),document.head.appendChild(i)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();var lA,cA;function D3(i,e=[]){const t=e.length;for(const n of i){const r=e.indexOf(n);if(r>-1){const s=[...e.slice(r),n].map(a=>a.data.id);throw new Error(`Invalid Graph: Circular node path detected: ${s.join(" -> ")}.`)}t>n.depth&&(n.depth=t,D3(n.out,[...e,n]))}}function U3(i,e){let t=!1;const n=i.reduce((a,o)=>({...a,[o.id]:{data:o,out:[],depth:-1,ins:[]}}),{});try{for(const a of e){const o=a.source,l=a.target;if(!n.hasOwnProperty(o))throw new Error(`Missing source Node ${o}`);if(!n.hasOwnProperty(l))throw new Error(`Missing target Node ${l}`);const c=n[o],f=n[l];f.ins.push(c),c.out.push(f)}D3(Object.values(n))}catch{t=!0}const r=Object.keys(n).map(a=>n[a].depth),s=Math.max(...r);return{invalid:t,depths:n,maxDepth:s||1}}const uA=["radialin","radialout"];function lW({nodes:i,edges:e,mode:t="lr",nodeLevelRatio:n=2}){const{depths:r,maxDepth:s,invalid:a}=U3(i,e);if(a)return null;const o=uA.includes(t)?1:5,l=i.length/s*n*o;if(t){const c=(m,y)=>x=>m?(r[x.id].depth-s/2)*l*(y?-1:1):void 0,f=c(["lr","rl"].includes(t),t==="rl"),d=c(["td","bu"].includes(t),t==="td"),p=c(["zin","zout"].includes(t),t==="zout");i.forEach(m=>{m.fx=f(m),m.fy=d(m),m.fz=p(m)})}return uA.includes(t)?Hk(c=>{const f=r[c.id];return(t==="radialin"?s-f.depth:f.depth)*l}).strength(1):null}function cW(i){return new Promise((e,t)=>{let n;function r(){n?e(n):(n=i.step(),r())}r()})}function od(i){const e=[],t=[];return i.forEachNode((n,r)=>{e.push({...r,id:n,radius:r.size||1})}),i.forEachEdge((n,r)=>{t.push({...r,id:n})}),{nodes:e,edges:t}}function uW(){const i=L=>()=>L;let t=L=>L.index,n=[],r=[],s,a,o=[100,100],l=i(1),c=i(-1),f=i(100),d=i(.1),p={},m=.1,y=.001,x=[],_=[0,0],g,b=L=>L.cluster,S="treemap",E=!0,w=.1;function T(L){if(!E)return T;S==="force"&&(g.tick(),O());for(let F=0,V=n.length,W,G=L*w;F<V;++F)W=n[F],W.vx+=(p[b(W)].x-W.x)*G,W.vy+=(p[b(W)].y-W.y)*G}function R(){n&&(S==="treemap"?H():z())}T.initialize=function(L){n=L,R()};function U(L){let F=b(L.source),V=b(L.target);return F<=V?F+"~"+V:V+"~"+F}function C(L){let F=new Map,V={};return L.forEach(function(W){F.has(b(W))||F.set(b(W),{count:0,sumforceNodeSize:0})}),L.forEach(function(W){V=F.get(b(W)),V.count=V.count+1,V.sumforceNodeSize=V.sumforceNodeSize+Math.PI*(l(W)*l(W))*1.3,F.set(b(W),V)}),F}function D(L){let F=new Map,V=[];return L.forEach(function(W){let G=U(W),Z;F.has(G)?Z=F.get(G):Z=0,Z+=1,F.set(G,Z)}),F.forEach(function(W,G){let Z,Q;Z=G.split("~")[0],Q=G.split("~")[1],Z!==void 0&&Q!==void 0&&V.push({source:Z,target:Q,count:W})}),V}function I(){let L=[],F=[],V=new Map,W,G,Z,Q,j;Q=C(n),j=D(r);for(W of Q.keys())Z=Q.get(W),L.push({id:W,size:Z.count,r:Math.sqrt(Z.sumforceNodeSize/Math.PI)}),V.set(W,G);return j.forEach(function(ee){let pe=V.get(ee.source),le=V.get(ee.target);pe!==void 0&&le!==void 0&&F.push({source:pe,target:le,count:ee.count})}),{nodes:L,links:F}}function P(){let L=[],F,V,W;W=C(T.nodes());for(F of W.keys())V=W.get(F),L.push({id:F,size:V.count});return{id:"clustersTree",children:L}}function O(){return p.none={x:0,y:0},x.forEach(function(L){S==="treemap"?p[L.data.id]={x:L.x0+(L.x1-L.x0)/2-_[0],y:L.y0+(L.y1-L.y0)/2-_[1]}:p[L.id]={x:L.x-_[0],y:L.y-_[1]}}),p}function H(){let L=TG().size(T.size());a=o0(P()).sum(F=>F.radius).sort(function(F,V){return V.height-F.height||V.value-F.value}),x=L(a).leaves(),O()}function J(){let L=0;n.length!==0&&r.forEach(function(F){let V,W;if(n){if(V=F.source,W=F.target,typeof F.source!="object"&&(V=n.find(G=>G.id===F.source)),typeof F.target!="object"&&(W=n.find(G=>G.id===F.target)),V===void 0||W===void 0)throw Error("Error setting links, couldnt find nodes for a link (see it on the console)");F.source=V,F.target=W,F.index=L++}})}function z(){let L;!n||!n.length||(J(),L=I(),s.size>0&&L.nodes.forEach(F=>{var V,W,G,Z;F.fx=(W=(V=s.get(F.id))==null?void 0:V.position)==null?void 0:W.x,F.fy=(Z=(G=s.get(F.id))==null?void 0:G.position)==null?void 0:Z.y}),g=$C(L.nodes).force("x",ox(o[0]/2).strength(.1)).force("y",lx(o[1]/2).strength(.1)).force("collide",jC(F=>F.r).iterations(4)).force("charge",eR().strength(c)).force("links",qC(L.nodes.length?L.links:[]).distance(f).strength(d)),x=g.nodes(),O())}return T.template=function(L){return arguments.length?(S=L,R(),T):S},T.groupBy=function(L){return arguments.length?typeof L=="string"?(b=function(F){return F[L]},T):(b=L,T):b},T.enableGrouping=function(L){return arguments.length?(E=L,T):E},T.strength=function(L){return arguments.length?(w=L,T):w},T.getLinkStrength=function(L){return E?b(L.source)===b(L.target)?typeof m=="function"?m(L):m:typeof y=="function"?y(L):y:typeof m=="function"?m(L):m},T.id=function(L){return arguments.length?(t=L,T):t},T.size=function(L){return arguments.length?(o=L,T):o},T.linkStrengthInterCluster=function(L){return arguments.length?(y=L,T):y},T.linkStrengthIntraCluster=function(L){return arguments.length?(m=L,T):m},T.nodes=function(L){return arguments.length?(n=L,T):n},T.links=function(L){return arguments.length?(L===null?r=[]:r=L,R(),T):r},T.template=function(L){return arguments.length?(S=L,R(),T):S},T.forceNodeSize=function(L){return arguments.length?(l=typeof L=="function"?L:i(+L),R(),T):l},T.nodeSize=T.forceNodeSize,T.forceCharge=function(L){return arguments.length?(c=typeof L=="function"?L:i(+L),R(),T):c},T.forceLinkDistance=function(L){return arguments.length?(f=typeof L=="function"?L:i(+L),R(),T):f},T.forceLinkStrength=function(L){return arguments.length?(d=typeof L=="function"?L:i(+L),R(),T):d},T.offset=function(L){return arguments.length?(_=typeof L=="function"?L:i(+L),T):_},T.getFocis=O,T.setClusters=function(L){return s=L,T},T}function no({graph:i,nodeLevelRatio:e=2,mode:t=null,dimensions:n=2,nodeStrength:r=-250,linkDistance:s=50,clusterStrength:a=.5,linkStrengthInterCluster:o=.01,linkStrengthIntraCluster:l=.5,forceLinkDistance:c=100,forceLinkStrength:f=.1,clusterType:d="force",forceCharge:p=-700,getNodePosition:m,drags:y,clusters:x,clusterAttribute:_,forceLayout:g}){const{nodes:b,edges:S}=od(i),w=n===2&&S.length>25?r*2:r;let T,R;g==="forceDirected2d"?(T=ox(),R=lx()):(T=ox(600).strength(.05),R=lx(600).strength(.05));const U=$C().force("center",R5(0,0)).force("link",qC()).force("charge",eR().strength(w)).force("x",T).force("y",R).force("z",Vk()).force("collide",jC(P=>P.radius+10)).force("dagRadial",lW({nodes:b,edges:S,mode:t,nodeLevelRatio:e})).stop();let C;if(_){let P=p;if(b!=null&&b.length){const O=Math.ceil(b.length/200);P=p*O}C=uW().setClusters(x).strength(a).template(d).groupBy(O=>O.data[_]).links(S).size([100,100]).linkStrengthInterCluster(o).linkStrengthIntraCluster(l).forceLinkDistance(c).forceLinkStrength(f).forceCharge(P).forceNodeSize(O=>O.radius)}let D=U.numDimensions(n).nodes(b);if(C&&(D=D.force("group",C)),s){let P=D.force("link");P&&(P.id(O=>O.id).links(S).distance(s),C&&(P=P.strength((C==null?void 0:C.getLinkStrength)??.1)))}const I=new Map(b.map(P=>[P.id,P]));return{step(){for(;U.alpha()>.01;)U.tick();return!0},getNodePosition(P){var O,H;if(m){const J=m(P,{graph:i,drags:y,nodes:b,edges:S});if(J)return J}return(O=y==null?void 0:y[P])!=null&&O.position?(H=y==null?void 0:y[P])==null?void 0:H.position:I.get(P)}}}function hW({graph:i,radius:e,drags:t,getNodePosition:n}){const r=RG(i,{scale:e}),{nodes:s,edges:a}=od(i);return{step(){return!0},getNodePosition(o){var l,c;if(n){const f=n(o,{graph:i,drags:t,nodes:s,edges:a});if(f)return f}return(l=t==null?void 0:t[o])!=null&&l.position?(c=t==null?void 0:t[o])==null?void 0:c.position:r==null?void 0:r[o]}}}const fW={td:{x:"x",y:"y",factor:-1},lr:{x:"y",y:"x",factor:1}};function hA({graph:i,drags:e,mode:t="td",nodeSeparation:n=1,nodeSize:r=[50,50],getNodePosition:s}){const{nodes:a,edges:o}=od(i),{depths:l}=U3(a,o),c=Object.keys(l).map(x=>l[x]),f=pG().id(x=>x.data.id).parentId(x=>{var _,g,b;return(b=(g=(_=x.ins)==null?void 0:_[0])==null?void 0:g.data)==null?void 0:b.id})(c),p=bG().separation(()=>n).nodeSize(r)(o0(f)).descendants(),m=fW[t],y=new Map(a.map(x=>{const{x:_,y:g}=p.find(b=>b.data.id===x.id);return[x.id,{...x,[m.x]:_*m.factor,[m.y]:g*m.factor,z:0}]}));return{step(){return!0},getNodePosition(x){var _,g;if(s){const b=s(x,{graph:i,drags:e,nodes:a,edges:o});if(b)return b}return(_=e==null?void 0:e[x])!=null&&_.position?(g=e==null?void 0:e[x])==null?void 0:g.position:y.get(x)}}}function dW({graph:i,margin:e,drags:t,getNodePosition:n,ratio:r,gridSize:s,maxIterations:a}){const{nodes:o,edges:l}=od(i),c=IG(i,{maxIterations:a,inputReducer:(f,d)=>({...d,x:d.x||0,y:d.y||0}),settings:{ratio:r,margin:e,gridSize:s}});return{step(){return!0},getNodePosition(f){var d,p;if(n){const m=n(f,{graph:i,drags:t,nodes:o,edges:l});if(m)return m}return(d=t==null?void 0:t[f])!=null&&d.position?(p=t==null?void 0:t[f])==null?void 0:p.position:c==null?void 0:c[f]}}}function pW({graph:i,drags:e,iterations:t,...n}){WG.assign(i);const r=GG(i,{iterations:t,settings:n});return{step(){return!0},getNodePosition(s){var a;return((a=e==null?void 0:e[s])==null?void 0:a.position)||(r==null?void 0:r[s])}}}function mW({graph:i,drags:e,getNodePosition:t}){const{nodes:n,edges:r}=od(i);return{step(){return!0},getNodePosition(s){return t(s,{graph:i,drags:e,nodes:n,edges:r})}}}const gW=["forceDirected2d","treeTd2d","treeLr2d","radialOut2d","treeTd3d","treeLr3d","radialOut3d","forceDirected3d"];function vW({type:i,...e}){if(gW.includes(i)){const{nodeStrength:t,linkDistance:n,nodeLevelRatio:r}=e;if(i==="forceDirected2d")return no({...e,dimensions:2,nodeLevelRatio:r||2,nodeStrength:t||-250,linkDistance:n,forceLayout:i});if(i==="treeTd2d")return no({...e,mode:"td",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-250,linkDistance:n||50,forceLayout:i});if(i==="treeLr2d")return no({...e,mode:"lr",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-250,linkDistance:n||50,forceLayout:i});if(i==="radialOut2d")return no({...e,mode:"radialout",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-500,linkDistance:n||100,forceLayout:i});if(i==="treeTd3d")return no({...e,mode:"td",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||50});if(i==="treeLr3d")return no({...e,mode:"lr",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||50,forceLayout:i});if(i==="radialOut3d")return no({...e,mode:"radialout",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||100,forceLayout:i});if(i==="forceDirected3d")return no({...e,dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-250,linkDistance:n,forceLayout:i})}else if(i==="circular2d"){const{radius:t}=e;return hW({...e,radius:t||300})}else{if(i==="hierarchicalTd")return hA({...e,mode:"td"});if(i==="hierarchicalLr")return hA({...e,mode:"lr"});if(i==="nooverlap"){const{graph:t,maxIterations:n,ratio:r,margin:s,gridSize:a,...o}=e;return dW({graph:t,margin:s||10,maxIterations:n||50,ratio:r||10,gridSize:a||20,...o})}else if(i==="forceatlas2"){const{graph:t,iterations:n,gravity:r,scalingRatio:s,...a}=e;return pW({type:"forceatlas2",graph:t,...a,scalingRatio:s||100,gravity:r||10,iterations:n||50})}else if(i==="custom")return mW({...e})}throw new Error(`Layout ${i} not found.`)}function O3({nodeCount:i,nodePosition:e,labelType:t,camera:n}){return(r,s)=>{var a;if(n&&e&&((a=n==null?void 0:n.position)==null?void 0:a.z)/(n==null?void 0:n.zoom)-(e==null?void 0:e.z)>6e3)return!1;if(t==="all")return!0;if(t==="nodes"&&r==="node")return!0;if(t==="edges"&&r==="edge")return!0;if(t==="auto"&&r==="node"){if(s>7)return!0;if(n&&e&&n.position.z/n.zoom-e.z<3e3)return!0}return!1}}function L3(i,e){switch(e){case"above":return i;case"below":return-i;case"inline":case"natural":default:return 0}}const sb=typeof window>"u";function yW({graph:i}){const e=YG(i);return{ranks:e,getSizeForNode:t=>e[t]*80}}function _W({graph:i}){const e=KG.degreeCentrality(i);return{ranks:e,getSizeForNode:t=>e[t]*20}}function xW({graph:i,attribute:e,defaultSize:t}){const n=new Map;return e?i.forEachNode((r,s)=>{var a;const o=(a=s.data)==null?void 0:a[e];isNaN(o)&&console.warn(`Attribute ${o} is not a number for node ${s.id}`),n.set(r,o||0)}):console.warn("Attribute sizing configured but no attribute provided"),{getSizeForNode:r=>!e||!n?t:n.get(r)}}const fA={pagerank:yW,centrality:_W,attribute:xW,none:({defaultSize:i})=>({getSizeForNode:e=>i})};function bW({type:i,...e}){var t;const n=(t=fA[i])==null?void 0:t.call(fA,e);if(!n&&i!=="default")throw new Error(`Unknown sizing strategy: ${i}`);const{graph:r,minSize:s,maxSize:a}=e,o=new Map;let l,c;if(r.forEachNode((f,d)=>{let p;i==="default"?p=d.size||e.defaultSize:p=n.getSizeForNode(f),(l===void 0||p<l)&&(l=p),(c===void 0||p>c)&&(c=p),o.set(f,p)}),i!=="none"){const f=hR().domain([l,c]).rangeRound([s,a]);for(const[d,p]of o)o.set(d,f(p))}return o}function SW(i,e,t){i.clear();const n=new Set;for(const r of e)try{n.has(r.id)||(i.addNode(r.id,r),n.add(r.id))}catch(s){console.error(`[Graph] Error adding node '${r.id}`,s)}for(const r of t)if(!(!n.has(r.source)||!n.has(r.target)))try{i.addEdge(r.source,r.target,r)}catch(s){console.error(`[Graph] Error adding edge '${r.source} -> ${r.target}`,s)}return i}function EW({graph:i,layout:e,sizingType:t,labelType:n,sizingAttribute:r,defaultNodeSize:s,minNodeSize:a,maxNodeSize:o,clusterAttribute:l}){const c=[],f=[],d=new Map,p=bW({graph:i,type:t,attribute:r,minSize:a,maxSize:o,defaultSize:s}),m=i.nodes().length,y=O3({nodeCount:m,labelType:n});return i.forEachNode((x,_)=>{const g=e.getNodePosition(x),{data:b,fill:S,icon:E,label:w,size:T,...R}=_,U=p.get(_.id),C=y("node",U),I=(i.inboundNeighbors(_.id)||[]).map(O=>i.getNodeAttributes(O)),P={..._,size:U,labelVisible:C,label:w,icon:E,fill:S,cluster:l?b[l]:void 0,parents:I,data:{...R,...b??{}},position:{...g,x:g.x||0,y:g.y||0,z:g.z||1}};d.set(_.id,P),c.push(P)}),i.forEachEdge((x,_)=>{const g=d.get(_.source),b=d.get(_.target);if(g&&b){const{data:S,id:E,label:w,size:T,...R}=_,U=y("edge",T);f.push({..._,id:E,label:w,labelVisible:U,size:T,data:{...R,id:E,...S||{}}})}}),{nodes:c,edges:f}}const _r={mass:10,tension:1e3,friction:300,precision:.1};function N3(i,e,t){const n=e.getLength(),r=i==="end"?n:n/2,s=i==="end"?t/2:0,a=(r-s)/n,o=e.getPointAt(a),l=e.getTangentAt(a);return[o,l]}function I3(i){return[i+6,2+i/1.5]}const dA=.7;function P3(i,e,t=0){const n=new K(i.x,i.y||0,i.z||0),r=new K(e.x,e.y||0,e.z||0),s=new K().addVectors(n,r).divideScalar(2);return s.setLength(s.length()+t)}function MW(i,e,t=-1){const n=i.clone(),r=e.clone(),s=new K().subVectors(r,n),a=s.length(),o=s.clone().normalize(),l=new K().subVectors(r,n).divideScalar(2),c=Math.abs(o.x)%1,f=new K(-o.y,o.x-c*o.z,c*o.y).normalize(),d=new K().add(n).add(l).add(f.multiplyScalar(a/4).multiplyScalar(t));return[i,d,e]}function Gf(i,e,t,n,r,s){const a=pA(i,t,e),o=pA(t,i,n);return r?new Xg(...MW(a,o,s)):new i1(a,o)}function Hf(i){return new K(i.position.x,i.position.y,i.position.z||0)}function pA(i,e,t){const n=i.distanceTo(e);return i.clone().add(e.clone().sub(i).multiplyScalar(t/n))}function mA(i,e){return{...i,position:{...i.position,x:i.position.x+e.x,y:i.position.y+e.y,z:i.position.z+e.z}}}function wW({edge:i,edges:e,curved:t}){let n=t,r;const s=e.filter(a=>a.target===i.target&&a.source===i.source).map(a=>a.id);if(s.length>1){n=!0;const a=s.indexOf(i.id);s.length===2?r=a===0?dA:-.7:r=(a-Math.floor(s.length/2))*dA}return{curved:n,curveOffset:r}}function Vf(i){let e=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(let o of i)e=Math.min(e,o.position.x),t=Math.max(t,o.position.x),n=Math.min(n,o.position.y),r=Math.max(r,o.position.y),s=Math.min(s,o.position.z),a=Math.max(a,o.position.z);return{height:r-n,width:t-e,minX:e,maxX:t,minY:n,maxY:r,minZ:s,maxZ:a,x:(t+e)/2,y:(r+n)/2,z:(a+s)/2}}function TW(i,e){return e?i.reduce((t,n)=>{const r=n.data[e];return r&&t.set(r,[...t.get(r)||[],n]),t},new Map):new Map}function AW({nodes:i,clusterAttribute:e}){const t=new Map;if(e){const n=TW(i,e);for(const[r,s]of n){const a=Vf(s);t.set(r,{label:r,nodes:s,position:a})}}return t}function CW(i,e,t){return mV.bidirectional(i,e,t)}const gA=i=>i.tagName!=="INPUT"&&i.tagName!=="SELECT"&&i.tagName!=="TEXTAREA"&&!i.isContentEditable,z3=({actives:i=[],selections:e=[],collapsedNodeIds:t=[],theme:n})=>eV(r=>{var s,a,o;return{theme:{...n,edge:{...n==null?void 0:n.edge,label:{...(s=n==null?void 0:n.edge)==null?void 0:s.label,fontSize:((o=(a=n==null?void 0:n.edge)==null?void 0:a.label)==null?void 0:o.fontSize)??6}}},edges:[],nodes:[],collapsedNodeIds:t,clusters:new Map,panning:!1,draggingIds:[],actives:i,edgeContextMenus:new Set,edgeMeshes:[],selections:e,hoveredNodeId:null,drags:{},graph:new cn({multi:!0}),setTheme:l=>r(c=>({...c,theme:l})),setClusters:l=>r(c=>({...c,clusters:l})),setEdgeContextMenus:l=>r(c=>({...c,edgeContextMenus:l})),setEdgeMeshes:l=>r(c=>({...c,edgeMeshes:l})),setPanning:l=>r(c=>({...c,panning:l})),setDrags:l=>r(c=>({...c,drags:l})),addDraggingId:l=>r(c=>({...c,draggingIds:[...c.draggingIds,l]})),removeDraggingId:l=>r(c=>({...c,draggingIds:c.draggingIds.filter(f=>f!==l)})),setActives:l=>r(c=>({...c,actives:l})),setSelections:l=>r(c=>({...c,selections:l})),setHoveredNodeId:l=>r(c=>({...c,hoveredNodeId:l})),setNodes:l=>r(c=>({...c,nodes:l,centerPosition:Vf(l)})),setEdges:l=>r(c=>({...c,edges:l})),setNodePosition:(l,c)=>r(f=>{var d,p;const m=f.nodes.find(b=>b.id===l),y=Hf(m),_=new K(c.x,c.y,c.z).sub(y),g=[...f.nodes];if((d=f.selections)!=null&&d.includes(l))(p=f.selections)==null||p.forEach(b=>{const S=f.nodes.find(E=>E.id===b);if(S){const E=f.nodes.indexOf(S);g[E]=mA(S,_)}});else{const b=f.nodes.indexOf(m);g[b]=mA(m,_)}return{...f,drags:{...f.drags,[l]:m},nodes:g}}),setCollapsedNodeIds:(l=[])=>r(c=>({...c,collapsedNodeIds:l})),setClusterPosition:(l,c)=>r(f=>{const d=new Map(f.clusters),p=d.get(l);if(p){const m=p.position,y=new K(c.x-m.x,c.y-m.y,c.z-(m.z??0)),x=[...f.nodes],_={...f.drags};x.forEach((S,E)=>{S.cluster===l&&(x[E]={...S,position:{...S.position,x:S.position.x+y.x,y:S.position.y+y.y,z:S.position.z+(y.z??0)}},_[S.id]=S)});const g=x.filter(S=>S.cluster===l),b=Vf(g);return d.set(l,{...p,position:b}),{...f,drags:{..._,[l]:p},clusters:d,nodes:x}}return f})}}),F3=z3({}),B3=sb?null:$.createContext(F3),RW=({children:i,store:e=F3})=>sb?i:lo.createElement(B3.Provider,{value:e},i),tt=i=>{const e=$.useContext(B3);return fR(e,iV(i))};function k3({nodeId:i,nodes:e,edges:t,currentHiddenNodes:n,currentHiddenEdges:r}){const s=[],a=[],o=n.map(m=>m.id),l=r.map(m=>m.id),c=t.filter(m=>m.source===i),f=c.map(m=>m.target);a.push(...c);for(const m of f){const y=t.filter(_=>_.target===m&&_.source!==i);let x=!1;if((y.length===0||y.length>0&&!o.includes(m)&&y.map(g=>g.id).every(g=>l.includes(g)))&&(x=!0),x){const _=e.find(b=>b.id===m);_&&s.push(_);const g=k3({nodeId:m,nodes:e,edges:t,currentHiddenEdges:a,currentHiddenNodes:s});a.push(...g.hiddenEdges),s.push(...g.hiddenNodes)}}const d=Object.values(a.reduce((m,y)=>({...m,[y.id]:y}),{})),p=Object.values(s.reduce((m,y)=>({...m,[y.id]:y}),{}));return{hiddenEdges:d,hiddenNodes:p}}const DW=({collapsedIds:i,nodes:e,edges:t})=>{const n=[],r=[];for(const c of i){const{hiddenEdges:f,hiddenNodes:d}=k3({nodeId:c,nodes:e,edges:t,currentHiddenEdges:r,currentHiddenNodes:n});n.push(...d),r.push(...f)}const s=n.map(c=>c.id),a=r.map(c=>c.id),o=e.filter(c=>!s.includes(c.id)),l=t.filter(c=>!a.includes(c.id));return{visibleNodes:o,visibleEdges:l}},UW=({layoutType:i,sizingType:e,labelType:t,sizingAttribute:n,clusterAttribute:r,selections:s,nodes:a,edges:o,actives:l,collapsedNodeIds:c,defaultNodeSize:f,maxNodeSize:d,minNodeSize:p,layoutOverrides:m,constrainDragging:y})=>{const x=tt(G=>G.graph),_=tt(G=>G.clusters),g=tt(G=>G.nodes),b=tt(G=>G.setClusters),S=tt(G=>G.collapsedNodeIds),E=tt(G=>G.setEdges),w=tt(G=>G.nodes),T=tt(G=>G.setNodes),R=tt(G=>G.setSelections),U=tt(G=>G.setActives),C=tt(G=>G.drags),D=tt(G=>G.setDrags),I=tt(G=>G.setCollapsedNodeIds),P=$.useRef(!1),O=$.useRef(null),H=Kn(G=>G.camera),J=$.useRef(C),z=$.useRef([]);$.useEffect(()=>{var G;if(!r)return;const Z=g.map(j=>j.id),Q=a.find(j=>!Z.includes(j.id));if(Q){const j=Q.data[r],ee=_.get(j),pe={...J.current};(G=ee==null?void 0:ee.nodes)==null||G.forEach(le=>pe[le.id]=void 0),J.current=pe,D(pe)}},[g,a,r,_,D]);const{visibleEdges:L,visibleNodes:F}=$.useMemo(()=>DW({collapsedIds:S,nodes:a,edges:o}),[S,a,o]),V=$.useCallback(G=>{const Z={...J.current};G.forEach(Q=>Z[Q.id]=Q),J.current=Z,D(Z)},[D]),W=$.useCallback(async G=>{O.current=G||vW({...m,type:i,graph:x,drags:J.current,clusters:z==null?void 0:z.current,clusterAttribute:r}),await cW(O.current);const Z=EW({graph:x,layout:O.current,sizingType:e,labelType:t,sizingAttribute:n,maxNodeSize:d,minNodeSize:p,defaultNodeSize:f,clusterAttribute:r}),Q=AW({nodes:Z.nodes,clusterAttribute:r});y&&Q.forEach(j=>{var ee,pe;const le=z.current.get(j.label);(le==null?void 0:le.nodes.length)===j.nodes.length&&(j.position=((pe=(ee=z.current)==null?void 0:ee.get(j.label))==null?void 0:pe.position)??j.position)}),E(Z.edges),T(Z.nodes),b(Q),r&&V(Z.nodes)},[m,i,r,e,t,n,d,p,f,E,T,b]);return $.useEffect(()=>{J.current=C},[C,r,W]),$.useEffect(()=>{z.current=_},[_]),$.useEffect(()=>{const G=w.map(Q=>({...Q,labelVisible:O3({nodeCount:w==null?void 0:w.length,labelType:t,camera:H,nodePosition:Q==null?void 0:Q.position})("node",Q==null?void 0:Q.size)}));G.some((Q,j)=>Q.labelVisible!==w[j].labelVisible)&&T(G)},[H,H.zoom,H.position.z,T,w,t]),$.useEffect(()=>{P.current&&R(s)},[s,R]),$.useEffect(()=>{P.current&&U(l)},[l,U]),$.useEffect(()=>{async function G(){P.current=!1,SW(x,F,L),await W(),requestAnimationFrame(()=>P.current=!0)}G()},[F,L]),$.useEffect(()=>{P.current&&I(c)},[c,I]),$.useEffect(()=>{P.current&&(J.current={},D({}),W())},[i,W,D]),$.useEffect(()=>{P.current&&W(O.current)},[e,n,t,W]),{updateLayout:W}},Wf=({text:i,fontSize:e=7,fontUrl:t,color:n="#2A6475",opacity:r=1,stroke:s,active:a,ellipsis:o=75,rotation:l})=>{const c=o&&!a?iW(i,o):i,f=$.useMemo(()=>new $e(n),[n]),d=$.useMemo(()=>s?new $e(s):void 0,[s]);return fe.jsx(g3,{position:[0,0,1],children:fe.jsx(J9,{font:t,fontSize:e,color:f,fillOpacity:r,textAlign:"center",outlineWidth:s?1:0,outlineColor:d,depthOffset:0,maxWidth:100,overflowWrap:"break-word",rotation:l,children:c})})},G3=({draggable:i,set:e,position:t,bounds:n,onDragStart:r,onDragEnd:s})=>{const a=Kn(_=>_.camera),o=Kn(_=>_.raycaster),l=Kn(_=>_.size),c=Kn(_=>_.gl),{mouse2D:f,mouse3D:d,offset:p,normal:m,plane:y}=$.useMemo(()=>({mouse2D:new ke,mouse3D:new K,offset:new K,normal:new K,plane:new la}),[]),x=$.useMemo(()=>c.domElement.getBoundingClientRect(),[c.domElement]);return t9({onDragStart:({event:_})=>{const{eventObject:g,point:b}=_;g.getWorldPosition(p).sub(b),d.copy(b),r()},onDrag:({xy:_,buttons:g,cancel:b})=>{if(g!==1){b();return}const S=(_[0]-((x==null?void 0:x.left)??0))/l.width*2-1,E=-((_[1]-((x==null?void 0:x.top)??0))/l.height)*2+1;f.set(S,E),o.setFromCamera(f,a),a.getWorldDirection(m).negate(),y.setFromNormalAndCoplanarPoint(m,d),o.ray.intersectPlane(y,d);const w=new K(t.x,t.y,t.z).copy(d).add(p);if(n){const T=new K((n.minX+n.maxX)/2,(n.minY+n.maxY)/2,(n.minZ+n.maxZ)/2),R=(n.maxX-n.minX)/2,U=w.clone().sub(T);U.length()>R&&(U.normalize().multiplyScalar(R),w.copy(T).add(U))}return e(w)},onDragEnd:s},{drag:{enabled:i,threshold:10}})},ab=({sensitivity:i=7,interval:e=50,timeout:t=0,disabled:n,onPointerOver:r,onPointerOut:s})=>{const a=$.useRef(!1),o=$.useRef(null),l=$.useRef(0),c=$.useRef({x:null,y:null,px:null,py:null}),f=$.useCallback(_=>{c.current.x=_.clientX,c.current.y=_.clientY},[]),d=$.useCallback(_=>{o.current=clearTimeout(o.current);const{px:g,x:b,py:S,y:E}=c.current;Math.abs(g-b)+Math.abs(S-E)<i?(l.current=1,r(_)):(c.current.px=b,c.current.py=E,o.current=setTimeout(()=>d(_),e))},[e,r,i]),p=$.useCallback(()=>{clearTimeout(o.current),typeof window<"u"&&document.removeEventListener("mousemove",f,!1)},[f]),m=$.useCallback(_=>{n||(a.current=!0,p(),l.current!==1&&(c.current.px=_.pointer.x,c.current.py=_.pointer.y,typeof window<"u"&&document.addEventListener("mousemove",f,!1),o.current=setTimeout(()=>d(_),t)))},[p,d,n,f,t]),y=$.useCallback(_=>{o.current=clearTimeout(o.current),l.current=0,s(_)},[s]),x=$.useCallback(_=>{a.current=!1,p(),l.current===1&&(o.current=setTimeout(()=>y(_),t))},[p,y,t]);return{pointerOver:m,pointerOut:x}},H3=$.createContext({controls:null,resetControls:()=>{},zoomIn:()=>{},zoomOut:()=>{},dollyIn:()=>{},dollyOut:()=>{},panLeft:()=>{},panRight:()=>{},panUp:()=>{},panDown:()=>{},freeze:()=>{},unFreeze:()=>{}}),_0=()=>{const i=$.useContext(H3);if(i===void 0)throw new Error("`useCameraControls` hook must be used within a `ControlsProvider` component");return i},OW=({outerRadius:i,innerRadius:e,padding:t,normalizedFill:n,normalizedStroke:r,opacity:s,animated:a,theme:o})=>{var l;const{opacity:c}=yr({from:{opacity:0},to:{opacity:s},config:{..._r,duration:a?void 0:0}});return fe.jsxs(fe.Fragment,{children:[fe.jsxs("mesh",{children:[fe.jsx("ringGeometry",{attach:"geometry",args:[i,0,128]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:n,transparent:!0,depthTest:!1,opacity:(l=o.cluster)!=null&&l.fill?c:0,side:In,fog:!0})]}),fe.jsxs("mesh",{children:[fe.jsx("ringGeometry",{attach:"geometry",args:[i,e+t,128]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:r,transparent:!0,depthTest:!1,opacity:c,side:In,fog:!0})]})]})},LW=({animated:i,position:e,padding:t=40,labelFontUrl:n,disabled:r,radius:s=2,nodes:a,label:o,onClick:l,onPointerOver:c,onPointerOut:f,draggable:d=!1,onDragged:p,onRender:m})=>{var y,x,_,g,b,S,E;const w=tt(ie=>ie.theme),T=Math.max(e.width,e.height)/2,R=T-s+t,[U,C]=$.useState(!1),D=tt(ie=>ie.centerPosition),I=tt(ie=>ie.nodes),P=_0(),O=tt(ie=>ie.draggingIds),H=O.includes(o),J=O.length>0,z=tt(ie=>{var be;return(be=ie.actives)==null?void 0:be.some(k=>a.some(re=>re.id===k))}),L=tt(ie=>ie.hoveredNodeId),F=tt(ie=>{var be;return(be=ie.selections)==null?void 0:be.some(k=>a.some(re=>re.id===k))}),W=tt(ie=>{var be;return((be=ie.selections)==null?void 0:be.length)>0})?F||U||z?(y=w.cluster)==null?void 0:y.selectedOpacity:(x=w.cluster)==null?void 0:x.inactiveOpacity:(_=w.cluster)==null?void 0:_.opacity,G=$.useMemo(()=>{var ie,be;const k=[0,-R,2],re=(be=(ie=w.cluster)==null?void 0:ie.label)==null?void 0:be.offset;return re?[k[0]-re[0],k[1]-re[1],k[2]-re[2]]:k},[R,(b=(g=w.cluster)==null?void 0:g.label)==null?void 0:b.offset]),{circlePosition:Z}=yr({from:{circlePosition:[D.x,D.y,-1]},to:{circlePosition:e?[e.x,e.y,-1]:[0,0,-1]},config:{..._r,duration:i&&!J?void 0:0}}),Q=$.useMemo(()=>{var ie;return new $e((ie=w.cluster)==null?void 0:ie.stroke)},[(S=w.cluster)==null?void 0:S.stroke]),j=$.useMemo(()=>{var ie;return new $e((ie=w.cluster)==null?void 0:ie.fill)},[(E=w.cluster)==null?void 0:E.fill]),ee=tt(ie=>ie.addDraggingId),pe=tt(ie=>ie.removeDraggingId),le=tt(ie=>ie.setClusterPosition),ce=G3({draggable:d&&!L,position:{x:e.x,y:e.y,z:-1},set:ie=>le(o,ie),onDragStart:()=>{ee(o),C(!0)},onDragEnd:()=>{pe(o),C(!1);const ie=I.filter(be=>be.cluster===o);p==null||p({nodes:ie,label:o})}});El(U&&!J&&l!==void 0,"pointer"),El(U&&d&&!H&&l===void 0,"grab"),El(H,"grabbing");const{pointerOver:Le,pointerOut:Me}=ab({disabled:r,onPointerOver:ie=>{C(!0),P.freeze(),c==null||c({nodes:a,label:o},ie)},onPointerOut:ie=>{C(!1),P.unFreeze(),f==null||f({nodes:a,label:o},ie)}});return $.useMemo(()=>{var ie,be,k;return w.cluster&&fe.jsx(zn.group,{userData:{id:o,type:"cluster"},position:Z,onPointerOver:Le,onPointerOut:Me,onClick:re=>{!r&&!H&&(l==null||l({nodes:a,label:o},re))},...ce(),children:m?m({label:{position:G,text:o,opacity:W,fontUrl:n},opacity:W,outerRadius:R,innerRadius:T,padding:t,theme:w}):fe.jsxs(fe.Fragment,{children:[fe.jsx(OW,{outerRadius:R,innerRadius:T,padding:t,normalizedFill:j,normalizedStroke:Q,opacity:W,animated:i,theme:w}),((ie=w.cluster)==null?void 0:ie.label)&&fe.jsx(zn.group,{position:G,children:fe.jsx(Wf,{text:o,opacity:W,fontUrl:n,stroke:w.cluster.label.stroke,active:!1,color:(be=w.cluster)==null?void 0:be.label.color,fontSize:((k=w.cluster)==null?void 0:k.label.fontSize)??12})})]})})},[w,Z,Le,Me,R,j,T,t,Q,G,o,W,n,r,l,a,ce,H,m,i])},NW=({animated:i,color:e="#D8E6EA",length:t,opacity:n=.5,position:r,rotation:s,size:a=1,onActive:o,onContextMenu:l})=>{const c=$.useMemo(()=>new $e(e),[e]),f=$.useRef(null),d=tt(_=>_.draggingIds.length>0),p=tt(_=>_.centerPosition),[{pos:m,arrowOpacity:y}]=yr(()=>({from:{pos:p?[p.x,p.y,p.z]:[0,0,0],arrowOpacity:0},to:{pos:[r.x,r.y,r.z],arrowOpacity:n},config:{..._r,duration:i&&!d?void 0:0}}),[i,d,n,r]),x=$.useCallback(()=>{var _;const g=new K(0,1,0);(_=f.current)==null||_.quaternion.setFromUnitVectors(g,s)},[s,f]);return $.useEffect(()=>x(),[x]),fe.jsxs(zn.mesh,{position:m,ref:f,scale:[1,1,1],onPointerOver:()=>o(!0),onPointerOut:()=>o(!1),onPointerDown:_=>{_.nativeEvent.buttons===2&&(_.stopPropagation(),l())},children:[fe.jsx("cylinderGeometry",{args:[0,a,t,20,1,!0],attach:"geometry"}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:c,depthTest:!1,opacity:y,transparent:!0,side:In,fog:!0})]})},IW=({curveOffset:i,animated:e,color:t="#000",curve:n,curved:r=!1,id:s,opacity:a=1,size:o=1,onContextMenu:l,onClick:c,onPointerOver:f,onPointerOut:d})=>{const p=$.useRef(null),m=tt(b=>b.draggingIds.length>0),y=$.useMemo(()=>new $e(t),[t]),x=tt(b=>b.centerPosition),_=$.useRef(!1),{lineOpacity:g}=yr({from:{lineOpacity:0},to:{lineOpacity:a},config:{..._r,duration:e?void 0:0}});return yr(()=>{const b=n.getPoint(0),S=n.getPoint(1);return{from:{fromVertices:_.current?[S==null?void 0:S.x,S==null?void 0:S.y,(S==null?void 0:S.z)||0]:[x==null?void 0:x.x,x==null?void 0:x.y,(x==null?void 0:x.z)||0],toVertices:[b==null?void 0:b.x,b==null?void 0:b.y,(b==null?void 0:b.z)||0]},to:{fromVertices:[b==null?void 0:b.x,b==null?void 0:b.y,(b==null?void 0:b.z)||0],toVertices:[S==null?void 0:S.x,S==null?void 0:S.y,(S==null?void 0:S.z)||0]},onChange:E=>{const{fromVertices:w,toVertices:T}=E.value,R=new K(...w),U=new K(...T),C=Gf(R,0,U,0,r,i);p.current.copy(new Rl(C,20,o/2,5,!1))},config:{..._r,duration:e&&!m?void 0:0}}},[e,m,n,o]),$.useEffect(()=>{_.current=!0},[]),fe.jsxs("mesh",{userData:{id:s,type:"edge"},onPointerOver:f,onPointerOut:d,onClick:c,onPointerDown:b=>{b.nativeEvent.buttons===2&&(b.stopPropagation(),l())},children:[fe.jsx("tubeGeometry",{attach:"geometry",ref:p}),fe.jsx(zn.meshBasicMaterial,{attach:"material",opacity:g,fog:!0,transparent:!0,depthTest:!1,color:y})]})},vA=3,PW=({animated:i,arrowPlacement:e="end",contextMenu:t,disabled:n,labelPlacement:r="inline",id:s,interpolation:a,labelFontUrl:o,onContextMenu:l,onClick:c,onPointerOver:f,onPointerOut:d})=>{const p=tt(be=>be.theme),m=tt(be=>be.draggingIds.length>0),[y,x]=$.useState(!1),[_,g]=$.useState(!1),b=tt(be=>be.edges),S=b.find(be=>be.id===s),{target:E,source:w,label:T,labelVisible:R=!1,size:U=1,fill:C}=S,D=tt(be=>be.nodes.find(k=>k.id===w)),I=tt(be=>be.nodes.find(k=>k.id===E)),P=(U+p.edge.label.fontSize)/2,[O,H]=$.useMemo(()=>I3(U),[U]),{curveOffset:J,curved:z}=$.useMemo(()=>wW({edge:S,edges:b,curved:a==="curved"}),[S,b,a]),[L,F,V]=$.useMemo(()=>{const be=Hf(D),k=D.size,re=Hf(I),te=I.size;let we=Gf(be,k,re,te,z,J);const[se,Re]=N3(e,we,O);return e==="end"&&(we=Gf(be,k,se,0,z,J)),[we,se,Re]},[D,I,z,J,e,O]),W=$.useMemo(()=>{let be=P3(D.position,I.position,L3(P,r));if(z){const k=new K().subVectors(be,L.getPoint(.5));switch(r){case"above":k.y=k.y-vA;break;case"below":k.y=k.y+vA;break}be=be.sub(k)}return be},[D.position,I.position,P,r,z,L]),G=tt(be=>{var k;return(k=be.selections)==null?void 0:k.includes(s)}),Z=tt(be=>{var k;return(k=be.selections)==null?void 0:k.length}),Q=tt(be=>{var k;return(k=be.actives)==null?void 0:k.includes(s)}),j=tt(be=>be.centerPosition),ee=Z?G||Q?p.edge.selectedOpacity:p.edge.inactiveOpacity:p.edge.opacity,[{labelPosition:pe}]=yr(()=>({from:{labelPosition:j?[j.x,j.y,j.z]:[0,0,0]},to:{labelPosition:[W.x,W.y,W.z]},config:{..._r,duration:i&&!m?void 0:0}}),[W,i,m]),le=$.useMemo(()=>new Ui(0,0,r==="natural"?0:Math.atan((I.position.y-D.position.y)/(I.position.x-D.position.x))),[I.position.x,I.position.y,D.position.x,D.position.y,r]);El(y&&!m&&c!==void 0,"pointer");const{pointerOver:ce,pointerOut:Le}=ab({disabled:n,onPointerOver:be=>{x(!0),f==null||f(S,be)},onPointerOut:be=>{x(!1),d==null||d(S,be)}}),Me=$.useMemo(()=>e!=="none"&&fe.jsx(NW,{animated:i,color:G||y||Q?p.arrow.activeFill:C||p.arrow.fill,length:O,opacity:ee,position:F,rotation:V,size:H,onActive:x,onContextMenu:()=>{n||(g(!0),l==null||l(S))}}),[C,y,i,O,e,F,V,H,n,S,Q,G,l,ee,p.arrow.activeFill,p.arrow.fill]),ge=$.useMemo(()=>R&&T&&fe.jsx(zn.group,{position:pe,onContextMenu:()=>{n||(g(!0),l==null||l(S))},onPointerOver:ce,onPointerOut:Le,children:fe.jsx(Wf,{text:T,ellipsis:15,fontUrl:o,stroke:p.edge.label.stroke,color:G||y||Q?p.edge.label.activeColor:p.edge.label.color,opacity:ee,fontSize:p.edge.label.fontSize,rotation:le})}),[y,n,S,Q,G,T,o,pe,le,R,l,Le,ce,ee,p.edge.label.activeColor,p.edge.label.color,p.edge.label.fontSize,p.edge.label.stroke]),ie=$.useMemo(()=>_&&t&&fe.jsx(nb,{prepend:!0,center:!0,position:W,children:t({data:S,onClose:()=>g(!1)})}),[_,t,W,S]);return fe.jsxs("group",{children:[fe.jsx(IW,{curveOffset:J,animated:i,color:G||y||Q?p.edge.activeFill:C||p.edge.fill,curve:L,curved:z,id:s,opacity:ee,size:U,onClick:be=>{n||c==null||c(S,be)},onPointerOver:ce,onPointerOut:Le,onContextMenu:()=>{n||(g(!0),l==null||l(S))}}),Me,ge,ie]})},yA=new Ea(0,0,0);function zW(i,e){const t=$.useRef(null),n=tt(c=>c.theme);tt(c=>{t.current=c});const r=$.useRef(new Map);$.useRef(new Ea(0,0,0));const s=$.useRef(null),a=e==="curved",o=$.useCallback(c=>{const f=[],d=r.current,{nodes:p}=t.current,m=new Map(p.map(x=>[x.id,x])),y=n.edge.label.fontSize;return i!=="none"&&!s.current&&(s.current=new bu(0,1,1,20,1,!0)),c.forEach(x=>{const{target:_,source:g,size:b=1}=x,S=m.get(g),E=m.get(_);if(!S||!E)return;const w=`${S.position.x},${S.position.y},${E.position.x},${E.position.y},${b}`;if(d.has(w)){f.push(d.get(w));return}const T=Hf(S),R=S.size+y,U=Hf(E),C=E.size+y;let D=Gf(T,R,U,C,a),I=new Rl(D,20,b/2,5,!1);if(i==="none"){f.push(I),d.set(w,I);return}const[P,O]=I3(b),H=s.current.clone();H.scale(O,P,O);const[J,z]=N3(i,D,P),L=new _i;if(L.setFromUnitVectors(new K(0,1,0),z),H.applyQuaternion(L),H.translate(J.x,J.y,J.z),i&&i==="end"){const V=Gf(T,R,J,0,a);I=new Rl(V,20,b/2,5,!1)}const F=Vp([I,H]);f.push(F),d.set(w,F)}),f},[i,a,n.edge.label.fontSize]),l=$.useCallback((c,f)=>{const d=o(c),p=o(f);return Vp([p.length?Vp(p):yA,d.length?Vp(d):yA],!0)},[o]);return{getGeometries:o,getGeometry:l}}function FW(i,e,t){const n=$.useRef(i);$.useEffect(()=>{n.current=i},[i]);const r=tt(d=>d.edgeContextMenus),s=tt($.useCallback(d=>d.setEdgeContextMenus,[])),a=$.useRef(!1),o=$.useCallback(()=>{a.current=!0},[]),l=$.useRef(!1),c=$.useCallback(()=>{l.current=!0},[]),f=$.useCallback((d,p)=>{const{onClick:m,onContextMenu:y,onPointerOver:x,onPointerOut:_}=n.current;if(m&&a.current&&!t){a.current=!1;for(const g of p)m(g)}if((e||y)&&l.current&&!t){l.current=!1;const g=new Set(r);let b=!1;for(const S of p)r.has(S.id)||(g.add(S.id),b=!0,y==null||y(S));b&&s(g)}x&&p.filter(b=>!d.includes(b)).forEach(b=>{x(b)}),_&&d.filter(b=>!p.includes(b)).forEach(b=>{_(b)})},[e,t,r,s]);return{handleClick:o,handleContextMenu:c,handleIntersections:f}}function BW(i,e){const t=$.useRef(i),n=$.useRef(null);$.useEffect(()=>{t.current=i;const a=i.getAttribute("position");n.current=new Float32Array(a.array.length)},[i]);const r=$.useCallback(()=>{const a=t.current.getAttribute("position");return{from:new Float32Array(a.array.length),to:a.array}},[]),s=$.useCallback(a=>{const o=n.current;o.set(a);const l=new en(o,3,!1);t.current.setAttribute("position",l),l.needsUpdate=!0},[]);yr(()=>{if(!e)return null;const a=r();return{from:{positions:a.from},to:{positions:a.to},onChange:o=>{s(o.value.positions)},config:{..._r,duration:e?void 0:0}}},[e,r,s])}function kW(i,e,t){const[{activeOpacity:n,inactiveOpacity:r}]=yr(()=>({from:{activeOpacity:0,inactiveOpacity:0},to:{activeOpacity:e?t.edge.selectedOpacity:t.edge.opacity,inactiveOpacity:e?t.edge.inactiveOpacity:t.edge.opacity},config:{..._r,duration:i?void 0:0}}),[i,e,t]);return{activeOpacity:n,inactiveOpacity:r}}const GW=({animated:i,color:e,contextMenu:t,edge:n,labelFontUrl:r,labelPlacement:s="inline",opacity:a})=>{const o=tt(D=>D.theme),{target:l,source:c,label:f,labelVisible:d=!1,size:p=1}=n,m=tt(D=>D.nodes),[y,x]=$.useMemo(()=>[m.find(D=>D.id===c),m.find(D=>D.id===l)],[m,c,l]),_=tt(D=>D.draggingIds.length>0),g=$.useMemo(()=>(p+o.edge.label.fontSize)/2,[p,o.edge.label.fontSize]),b=$.useMemo(()=>P3(y.position,x.position,L3(g,s)),[y.position,x.position,g,s]),S=tt(D=>D.edgeContextMenus),E=tt(D=>D.setEdgeContextMenus),[{labelPosition:w}]=yr(()=>({from:{labelPosition:[0,0,0]},to:{labelPosition:[b.x,b.y,b.z]},config:{..._r,duration:i&&!_?void 0:0}}),[b,i,_]),T=$.useCallback(D=>{S.delete(D),E(new Set(S))},[S,E]),R=$.useMemo(()=>s==="natural"?new Ui(0,0,0):new Ui(0,0,Math.atan2(x.position.y-y.position.y,x.position.x-y.position.x)),[s,x.position.y,x.position.x,y.position.y,y.position.x]),U=$.useMemo(()=>({prepend:!0,center:!0,position:b}),[b]),C=$.useMemo(()=>({text:f,ellipsis:15,fontUrl:r,stroke:o.edge.label.stroke,color:e,opacity:a,fontSize:o.edge.label.fontSize,rotation:R}),[f,r,o.edge.label.stroke,e,a,o.edge.label.fontSize,R]);return fe.jsxs("group",{children:[d&&f&&fe.jsx(zn.group,{position:w,children:fe.jsx(Wf,{...C})}),t&&S.has(n.id)&&fe.jsx(nb,{...U,children:t({data:n,onClose:()=>T(n.id)})})]})},HW=({interpolation:i="linear",arrowPlacement:e="end",labelPlacement:t="inline",animated:n,contextMenu:r,disabled:s,edges:a,labelFontUrl:o,onClick:l,onContextMenu:c,onPointerOut:f,onPointerOver:d})=>{const p=tt(W=>W.theme),{getGeometries:m,getGeometry:y}=zW(e,i),x=tt(W=>W.draggingIds),_=tt(W=>W.edgeMeshes),g=tt(W=>W.setEdgeMeshes),b=tt(W=>W.actives||[]),S=tt(W=>W.selections||[]),[E,w,T,R]=$.useMemo(()=>{const W=[],G=[],Z=[],Q=[];return a.forEach(j=>{if(x.includes(j.source)||x.includes(j.target)){S.includes(j.id)||b.includes(j.id)?Z.push(j):Q.push(j);return}S.includes(j.id)||b.includes(j.id)?W.push(j):G.push(j)}),[W,G,Z,Q]},[a,b,S,x]),U=!!S.length,C=$.useMemo(()=>y(E,w),[y,E,w]),{activeOpacity:D,inactiveOpacity:I}=kW(n,U,p);BW(C,n),$.useEffect(()=>{if(x.length===0){const G=m(a).map(Z=>new pn(Z));g(G)}},[m,g,a,x.length]);const P=$.useRef(new pn),O=$.useRef(new pn),H=$.useCallback(W=>{if(!W.camera)return[];const G=W.intersectObjects(_);return G.length?G.map(Z=>a[_.indexOf(Z.object)]):[]},[_,a]),{handleClick:J,handleContextMenu:z,handleIntersections:L}=FW({onClick:l,onContextMenu:c,onPointerOut:f,onPointerOver:d},r,s),F=$.useRef([]),V=$.useRef([]);return r0(W=>{if(P.current.geometry=C,s)return;const G=F.current;if((x.length||x.length===0&&G!==null)&&(O.current.geometry=y(T,R)),F.current=x,x.length)return;const Z=V.current,Q=H(W.raycaster);L(Z,Q),Q.join()!==Z.join()&&(O.current.geometry=y(Q,[])),V.current=Q}),fe.jsxs("group",{onClick:J,onContextMenu:z,children:[fe.jsxs("mesh",{ref:P,children:[fe.jsx(zn.meshBasicMaterial,{attach:"material-0",color:p.edge.fill,depthTest:!1,fog:!0,opacity:I,side:In,transparent:!0}),fe.jsx(zn.meshBasicMaterial,{attach:"material-1",color:p.edge.activeFill,depthTest:!1,fog:!0,opacity:D,side:In,transparent:!0})]}),fe.jsxs("mesh",{ref:O,children:[fe.jsx(zn.meshBasicMaterial,{attach:"material-0",color:p.edge.fill,depthTest:!1,fog:!0,opacity:I,side:In,transparent:!0}),fe.jsx(zn.meshBasicMaterial,{attach:"material-1",color:p.edge.activeFill,depthTest:!1,fog:!0,opacity:D,side:In,transparent:!0})]}),a.map(W=>fe.jsx(GW,{animated:n,contextMenu:r,color:p.edge.label.color,disabled:s,edge:W,labelFontUrl:o,labelPlacement:t},W.id))]})},VW=({color:i="#D8E6EA",size:e=1,opacity:t=.5,animated:n,strokeWidth:r=5,innerRadius:s=4,segments:a=25})=>{const o=$.useMemo(()=>new $e(i),[i]),{ringSize:l,ringOpacity:c}=yr({from:{ringOpacity:0,ringSize:[1e-5,1e-5,1e-5]},to:{ringOpacity:t,ringSize:[e/2,e/2,1]},config:{..._r,duration:n?void 0:0}}),f=r/10,d=s+f;return fe.jsx(g3,{position:[0,0,1],children:fe.jsxs(zn.mesh,{scale:l,children:[fe.jsx("ringGeometry",{attach:"geometry",args:[s,d,a]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:o,transparent:!0,depthTest:!1,opacity:c,side:In,fog:!0})]})})},WW=({color:i,id:e,size:t,selected:n,opacity:r=1,animated:s})=>{const{scale:a,nodeOpacity:o}=yr({from:{scale:[1e-5,1e-5,1e-5],nodeOpacity:0},to:{scale:[t,t,t],nodeOpacity:r},config:{..._r,duration:s?void 0:0}}),l=$.useMemo(()=>new $e(i),[i]),c=tt(f=>f.theme);return fe.jsxs(fe.Fragment,{children:[fe.jsxs(zn.mesh,{userData:{id:e,type:"node"},scale:a,children:[fe.jsx("sphereGeometry",{attach:"geometry",args:[1,25,25]}),fe.jsx(zn.meshPhongMaterial,{attach:"material",side:In,transparent:!0,fog:!0,opacity:o,color:l,emissive:l,emissiveIntensity:.7})]}),fe.jsx(VW,{opacity:n?.5:0,size:t,animated:s,color:n?c.ring.activeFill:c.ring.fill})]})},XW=({image:i,id:e,size:t,opacity:n=1,animated:r})=>{const s=$.useMemo(()=>new Q2().load(i),[i]),{scale:a,spriteOpacity:o}=yr({from:{scale:[1e-5,1e-5,1e-5],spriteOpacity:0},to:{scale:[t,t,t],spriteOpacity:n},config:{..._r,duration:r?void 0:0}});return fe.jsx(zn.sprite,{userData:{id:e,type:"node"},scale:a,children:fe.jsx(zn.spriteMaterial,{attach:"material",opacity:o,fog:!0,depthTest:!1,transparent:!0,side:In,children:fe.jsx("primitive",{attach:"map",object:s,minFilter:Pn})})})},jW=({animated:i,disabled:e,id:t,draggable:n=!1,labelFontUrl:r,contextMenu:s,onClick:a,onDoubleClick:o,onPointerOver:l,onDragged:c,onPointerOut:f,onContextMenu:d,renderNode:p,constrainDragging:m})=>{var y,x,_;const g=_0(),b=tt(ne=>ne.theme),S=tt(ne=>ne.nodes.find(ve=>ve.id===t)),E=tt(ne=>ne.edges),w=tt(ne=>ne.draggingIds),T=tt(ne=>ne.collapsedNodeIds),R=tt(ne=>ne.addDraggingId),U=tt(ne=>ne.removeDraggingId),C=tt(ne=>ne.setHoveredNodeId),D=tt(ne=>ne.setNodePosition),I=tt(ne=>ne.setCollapsedNodeIds),P=tt(ne=>ne.collapsedNodeIds.includes(t)),O=tt(ne=>{var ve;return(ve=ne.actives)==null?void 0:ve.includes(t)}),H=tt(ne=>{var ve;return(ve=ne.selections)==null?void 0:ve.includes(t)}),J=tt(ne=>{var ve;return((ve=ne.selections)==null?void 0:ve.length)>0}),z=tt(ne=>ne.centerPosition),L=tt(ne=>ne.clusters.get(S.cluster)),F=w.includes(t),V=w.length>0,{position:W,label:G,subLabel:Z,size:Q=7,labelVisible:j=!0}=S,ee=$.useRef(null),[pe,le]=$.useState(!1),[ce,Le]=$.useState(!1),Me=pe||H||O,ge=J?Me?b.node.selectedOpacity:b.node.inactiveOpacity:b.node.opacity,ie=$.useMemo(()=>E.filter(ve=>ve.source===t).length>0||P,[E,t,P]),be=$.useCallback(()=>{ie&&I(P?T.filter(ne=>ne!==t):[...T,t])},[ie,T,t,P,I]),[{nodePosition:k,labelPosition:re,subLabelPosition:te}]=yr(()=>({from:{nodePosition:z?[z.x,z.y,0]:[0,0,0],labelPosition:[0,-(Q+7),2],subLabelPosition:[0,-(Q+14),2]},to:{nodePosition:W?[W.x,W.y,Me?W.z+1:W.z]:[0,0,0],labelPosition:[0,-(Q+7),2],subLabelPosition:[0,-(Q+14),2]},config:{..._r,duration:i&&!V?void 0:0}}),[F,W,i,Q,Me]),we=G3({draggable:n,position:W,bounds:m?L==null?void 0:L.position:void 0,set:ne=>D(t,ne),onDragStart:()=>{R(t),le(!0)},onDragEnd:()=>{U(t),c==null||c(S)}});El(pe&&!V&&a!==void 0,"pointer"),El(pe&&n&&!F&&a===void 0,"grab"),El(F,"grabbing");const se=Me||F,Re=se?b.node.activeFill:S.fill||b.node.fill,{pointerOver:xe,pointerOut:de}=ab({disabled:e||F,onPointerOver:ne=>{g.freeze(),le(!0),l==null||l(S,ne),C(t)},onPointerOut:ne=>{g.unFreeze(),le(!1),f==null||f(S,ne),C(null)}}),We=$.useMemo(()=>p?p({id:t,color:Re,size:Q,active:se,opacity:ge,animated:i,selected:H,node:S}):fe.jsx(fe.Fragment,{children:S.icon?fe.jsx(XW,{id:t,image:S.icon||"",size:Q+8,opacity:ge,animated:i,color:Re,node:S,active:se,selected:H}):fe.jsx(WW,{id:t,size:Q,opacity:ge,animated:i,color:Re,node:S,active:se,selected:H})}),[p,t,Re,Q,se,ge,i,H,S]),X=$.useMemo(()=>{var ne,ve,ye;return j&&(j||H||pe)&&G&&fe.jsxs(fe.Fragment,{children:[fe.jsx(zn.group,{position:re,children:fe.jsx(Wf,{text:G,fontUrl:r,opacity:ge,stroke:b.node.label.stroke,active:H||pe||F||O,color:H||pe||F||O?b.node.label.activeColor:b.node.label.color})}),Z&&fe.jsx(zn.group,{position:te,children:fe.jsx(Wf,{text:Z,fontUrl:r,fontSize:5,opacity:ge,stroke:(ne=b.node.subLabel)==null?void 0:ne.stroke,active:H||pe||F||O,color:H||pe||F||O?(ve=b.node.subLabel)==null?void 0:ve.activeColor:(ye=b.node.subLabel)==null?void 0:ye.color})})]})},[pe,O,F,H,G,r,re,j,ge,Z,te,b.node.label.activeColor,b.node.label.color,b.node.label.stroke,(y=b.node.subLabel)==null?void 0:y.activeColor,(x=b.node.subLabel)==null?void 0:x.color,(_=b.node.subLabel)==null?void 0:_.stroke]),B=$.useMemo(()=>ce&&s&&fe.jsx(nb,{prepend:!0,center:!0,children:s({data:S,canCollapse:ie,isCollapsed:P,onCollapse:be,onClose:()=>Le(!1)})}),[ce,s,S,ie,P,be]);return fe.jsxs(zn.group,{renderOrder:1,userData:{id:t,type:"node"},ref:ee,position:k,onPointerOver:xe,onPointerOut:de,onClick:ne=>{!e&&!F&&(a==null||a(S,{canCollapse:ie,isCollapsed:P},ne))},onDoubleClick:ne=>{!e&&!F&&(o==null||o(S,ne))},onContextMenu:()=>{e||(Le(!0),d==null||d(S,{canCollapse:ie,isCollapsed:P,onCollapse:be}))},...we(),children:[We,B,X]})};function V3(i,e){const t=e.position.z;i<t?i-=t:i+=t;const n=e.fov/e.zoom*Math.PI/180;return 2*Math.tan(n/2)*Math.abs(i)}function qW(i,e){return V3(i,e)*e.aspect}function _A(i,e){var t,n,r,s;const a=qW(1,i),o=V3(1,i),l={x0:((t=i==null?void 0:i.position)==null?void 0:t.x)-a/2,x1:((n=i==null?void 0:i.position)==null?void 0:n.x)+a/2,y0:((r=i==null?void 0:i.position)==null?void 0:r.y)-o/2,y1:((s=i==null?void 0:i.position)==null?void 0:s.y)+o/2};return(e==null?void 0:e.x)>l.x0&&(e==null?void 0:e.x)<l.x1&&(e==null?void 0:e.y)>l.y0&&(e==null?void 0:e.y)<l.y1}function xA(i,e){return e.reduce((t,n)=>Math.abs(n-i%Math.PI)<Math.abs(t-i%Math.PI)?n:t)}function YW(i,e){const t=xA(i,[0,Math.PI]),n=xA(e,[Math.PI/2,3*Math.PI/2]);return{horizontalRotation:t-i%Math.PI,verticalRotation:n-e%Math.PI}}const Qp=50,ZW=({animated:i,disabled:e,layoutType:t})=>{const n=tt(x=>x.nodes),[r,s]=$.useState(!1),a=Kn(x=>x.invalidate),{controls:o}=_0(),l=Kn(x=>x.camera),c=$.useRef(!1),f=$.useCallback(async(x,_)=>{const g=(_==null?void 0:_.animated)!==void 0?_==null?void 0:_.animated:!0,b=(_==null?void 0:_.centerOnlyIfNodesNotInView)!==void 0?_==null?void 0:_.centerOnlyIfNodesNotInView:!1;if(!c.current||!b||b&&(x!=null&&x.some(S=>!_A(l,S.position)))){const{x:S,y:E,z:w}=Vf(x);await o.setTarget(S,E,w,g),r||s(!0),a()}},[a,o,n]),d=$.useCallback(async(x,_={animated:!0,fitOnlyIfNodesNotInView:!1})=>{const{fitOnlyIfNodesNotInView:g}=_;if(!g||g&&(x!=null&&x.some(b=>!_A(l,b.position)))){const{minX:b,maxX:S,minY:E,maxY:w,minZ:T,maxZ:R}=Vf(x);if(!t.includes("3d")){const{horizontalRotation:U,verticalRotation:C}=YW(o==null?void 0:o.azimuthAngle,o==null?void 0:o.polarAngle);o==null||o.rotate(U,C,!0)}await(o==null?void 0:o.zoomTo(1,_==null?void 0:_.animated)),await(o==null?void 0:o.fitToBox(new Jn(new K(b,E,T),new K(S,w,R)),_==null?void 0:_.animated,{cover:!1,paddingLeft:Qp,paddingRight:Qp,paddingBottom:Qp,paddingTop:Qp}))}},[l,o,t]),p=$.useCallback(x=>{let _=null;return x!=null&&x.length&&(_=x.reduce((g,b)=>{const S=n.find(E=>E.id===b);if(S)g.push(S);else throw new Error(`Attempted to center ${b} but it was not found in the nodes`);return g},[])),_},[n]),m=$.useCallback((x,_)=>{const g=p(x);f(g||n,{animated:i,centerOnlyIfNodesNotInView:_==null?void 0:_.centerOnlyIfNodesNotInView})},[i,f,p,n]),y=$.useCallback(async(x,_)=>{const g=p(x);await d(g||n,{animated:i,..._})},[i,d,p,n]);return $.useLayoutEffect(()=>{async function x(){o&&(n!=null&&n.length)&&(c.current||(await f(n,{animated:!1}),await d(n,{animated:!1}),c.current=!0))}x()},[o,f,n,i,l,d]),{centerNodes:f,centerNodesById:m,fitNodesInViewById:y,isCentered:r}},KW=$.forwardRef(({onNodeClick:i,onNodeDoubleClick:e,onNodeContextMenu:t,onEdgeContextMenu:n,onEdgeClick:r,onEdgePointerOver:s,onEdgePointerOut:a,onNodePointerOver:o,onNodePointerOut:l,onClusterClick:c,onNodeDragged:f,onClusterDragged:d,onClusterPointerOver:p,onClusterPointerOut:m,contextMenu:y,animated:x,disabled:_,draggable:g,constrainDragging:b=!1,edgeLabelPosition:S,edgeArrowPosition:E,edgeInterpolation:w="linear",labelFontUrl:T,renderNode:R,onRenderCluster:U,...C},D)=>{const{layoutType:I,clusterAttribute:P}=C,O=Kn(ce=>ce.gl),H=Kn(ce=>ce.scene),J=Kn(ce=>ce.camera),{updateLayout:z}=UW({...C,constrainDragging:b});if(P&&!(I==="forceDirected2d"||I==="forceDirected3d"))throw new Error("Clustering is only supported for the force directed layouts.");const L=tt(ce=>ce.graph),F=tt(ce=>ce.nodes),V=tt(ce=>ce.edges),W=tt(ce=>[...ce.clusters.values()]),{centerNodesById:G,fitNodesInViewById:Z,isCentered:Q}=ZW({animated:x,disabled:_,layoutType:I});$.useImperativeHandle(D,()=>({centerGraph:G,fitNodesInView:Z,graph:L,renderScene:()=>O.render(H,J)}),[G,Z,L,O,H,J]);const j=$.useCallback(ce=>{f==null||f(ce),P&&z()},[P,f,z]),ee=$.useMemo(()=>F.map(ce=>fe.jsx(jW,{id:ce==null?void 0:ce.id,labelFontUrl:T,draggable:g,constrainDragging:b,disabled:_,animated:x,contextMenu:y,renderNode:R,onClick:i,onDoubleClick:e,onContextMenu:t,onPointerOver:o,onPointerOut:l,onDragged:j},ce==null?void 0:ce.id)),[b,x,y,_,g,T,F,i,t,e,j,l,o,R]),pe=$.useMemo(()=>x?V.map(ce=>fe.jsx(PW,{id:ce.id,disabled:_,animated:x,labelFontUrl:T,labelPlacement:S,arrowPlacement:E,interpolation:w,contextMenu:y,onClick:r,onContextMenu:n,onPointerOver:s,onPointerOut:a},ce.id)):fe.jsx(HW,{edges:V,disabled:_,animated:x,labelFontUrl:T,labelPlacement:S,arrowPlacement:E,interpolation:w,contextMenu:y,onClick:r,onContextMenu:n,onPointerOver:s,onPointerOut:a}),[x,y,_,E,w,S,V,T,r,n,a,s]),le=$.useMemo(()=>W.map(ce=>fe.jsx(LW,{animated:x,disabled:_,draggable:g,labelFontUrl:T,onClick:c,onPointerOver:p,onPointerOut:m,onDragged:d,onRender:U,...ce},ce.label)),[x,W,_,g,T,c,m,p,d,U]);return Q&&fe.jsxs($.Fragment,{children:[pe,ee,le]})});di.install({THREE:{MOUSE:SA,Vector2:ke,Vector3:K,Vector4:kt,Quaternion:_i,Matrix4:bt,Spherical:fC,Box3:Jn,Sphere:ri,Raycaster:y1,MathUtils:{DEG2RAD:(lA=Km)==null?void 0:lA.DEG2RAD,clamp:(cA=Km)==null?void 0:cA.clamp}}});IC({ThreeCameraControls:di});const $p={ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40},JW=$.forwardRef(({mode:i="rotate",children:e,animated:t,disabled:n,minDistance:r=1e3,maxDistance:s=5e4},a)=>{const o=$.useRef(null),l=Kn(O=>O.camera),c=Kn(O=>O.gl),f=i==="orbit",d=tt(O=>O.setPanning),p=tt(O=>O.draggingIds.length>0),m=$.useRef(0),[y,x]=$.useState(!1);r0((O,H)=>{var J,z;(J=o.current)!=null&&J.enabled&&((z=o.current)==null||z.update(H)),f&&(o.current.azimuthAngle+=20*H*Km.DEG2RAD)},-1),$.useEffect(()=>()=>{var O;return(O=o.current)==null?void 0:O.dispose()},[]);const _=$.useCallback(()=>{var O;(O=o.current)==null||O.zoom(l.zoom/2,t)},[t,l.zoom]),g=$.useCallback(()=>{var O;(O=o.current)==null||O.zoom(-l.zoom/2,t)},[t,l.zoom]),b=$.useCallback(O=>{var H;(H=o.current)==null||H.dolly(O,t)},[t]),S=$.useCallback(O=>{var H;(H=o.current)==null||H.dolly(O,t)},[t]),E=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(-.03*O.deltaTime,0,t)},[t,f]),w=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(.03*O.deltaTime,0,t)},[t,f]),T=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(0,.03*O.deltaTime,t)},[t,f]),R=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(0,-.03*O.deltaTime,t)},[t,f]),U=$.useCallback(O=>{O.code==="Space"&&(i==="rotate"?o.current.mouseButtons.left=di.ACTION.TRUCK:o.current.mouseButtons.left=di.ACTION.ROTATE)},[i]),C=$.useCallback(O=>{O.code==="Space"&&(i==="rotate"?o.current.mouseButtons.left=di.ACTION.ROTATE:o.current.mouseButtons.left=di.ACTION.TRUCK)},[i]),[D,I]=$.useState(null);$.useEffect(()=>{sb||I({leftKey:new Jp($p.ARROW_LEFT,100),rightKey:new Jp($p.ARROW_RIGHT,100),upKey:new Jp($p.ARROW_UP,100),downKey:new Jp($p.ARROW_DOWN,100)})},[]),$.useEffect(()=>(!n&&D&&(D.leftKey.addEventListener("holding",w),D.rightKey.addEventListener("holding",E),D.upKey.addEventListener("holding",T),D.downKey.addEventListener("holding",R),window.addEventListener("keydown",U),window.addEventListener("keyup",C)),()=>{D&&(D.leftKey.removeEventListener("holding",w),D.rightKey.removeEventListener("holding",E),D.upKey.removeEventListener("holding",T),D.downKey.removeEventListener("holding",R),window.removeEventListener("keydown",U),window.removeEventListener("keyup",C))}),[n,U,C,R,w,E,T,D]),$.useEffect(()=>{n?(o.current.mouseButtons.left=di.ACTION.NONE,o.current.mouseButtons.middle=di.ACTION.NONE,o.current.mouseButtons.wheel=di.ACTION.NONE):(o.current.mouseButtons.left=di.ACTION.TRUCK,o.current.mouseButtons.middle=di.ACTION.TRUCK,o.current.mouseButtons.wheel=di.ACTION.DOLLY)},[n]),$.useEffect(()=>{const O=()=>d(!0),H=()=>d(!1),J=o.current;return J&&(J.addEventListener("control",O),J.addEventListener("controlend",H)),()=>{J&&(J.removeEventListener("control",O),J.removeEventListener("controlend",H))}},[o,d]),$.useEffect(()=>{p?(o.current.mouseButtons.left=di.ACTION.NONE,o.current.touches.one=di.ACTION.NONE):i==="rotate"?(o.current.mouseButtons.left=di.ACTION.ROTATE,o.current.touches.one=di.ACTION.TOUCH_ROTATE):(o.current.touches.one=di.ACTION.TOUCH_TRUCK,o.current.mouseButtons.left=di.ACTION.TRUCK)},[p,i]);const P=$.useMemo(()=>({controls:o.current,zoomIn:()=>_(),zoomOut:()=>g(),dollyIn:(O=1e3)=>b(O),dollyOut:(O=-1e3)=>S(O),panLeft:(O=100)=>w({deltaTime:O}),panRight:(O=100)=>E({deltaTime:O}),panDown:(O=100)=>R({deltaTime:O}),panUp:(O=100)=>T({deltaTime:O}),resetControls:O=>{var H;return(H=o.current)==null?void 0:H.reset(O)},freeze:()=>{o.current.truckSpeed&&(m.current=o.current.truckSpeed),o.current.truckSpeed=0},unFreeze:()=>o.current.truckSpeed=m.current}),[_,g,w,E,R,T,o.current]);return $.useImperativeHandle(a,()=>P),fe.jsxs(H3.Provider,{value:P,children:[fe.jsx("threeCameraControls",{ref:O=>{o.current=O,y||x(!0)},args:[l,c.domElement],smoothTime:.1,minDistance:r,dollyToCursor:!0,maxDistance:s}),e]})}),QW={canvas:{background:"#fff"},node:{fill:"#7CA0AB",activeFill:"#1DE9AC",opacity:1,selectedOpacity:1,inactiveOpacity:.2,label:{color:"#2A6475",stroke:"#fff",activeColor:"#1DE9AC"},subLabel:{color:"#ddd",stroke:"transparent",activeColor:"#1DE9AC"}},lasso:{border:"1px solid #55aaff",background:"rgba(75, 160, 255, 0.1)"},ring:{fill:"#D8E6EA",activeFill:"#1DE9AC"},edge:{fill:"#D8E6EA",activeFill:"#1DE9AC",opacity:1,selectedOpacity:1,inactiveOpacity:.1,label:{stroke:"#fff",color:"#2A6475",activeColor:"#1DE9AC",fontSize:6}},arrow:{fill:"#D8E6EA",activeFill:"#1DE9AC"},cluster:{stroke:"#D8E6EA",opacity:1,selectedOpacity:1,inactiveOpacity:.1,label:{stroke:"#fff",color:"#2A6475"}}};function P_(i,e,t){e=Array.isArray(e)?e:[e];const n=[],r=[];for(const s of e){const a=[...i.inEdgeEntries(s)??[],...i.outEdgeEntries(s)??[]];if(a)for(const o of a){const l=o.attributes.id;if(t==="in"?o.target===s&&!r.includes(l)&&r.push(l):t==="out"?o.source===s&&!r.includes(l)&&r.push(l):r.includes(l)||r.push(l),t==="out"||t==="all"){const c=o.target;n.includes(c)||n.push(c)}(t==="in"||t==="all")&&(n.includes(o.source)||n.push(o.source))}}return{nodes:n,edges:r}}function em(i,e,t){const{offsetX:n,offsetY:r}=i,{width:s,height:a}=t;e.set(n/s*2-1,-(r/a)*2+1)}function $W(i){const e=document.createElement("div");return e.style.pointerEvents="none",e.style.border=i.lasso.border,e.style.backgroundColor=i.lasso.background,e.style.position="fixed",e}const eX=({children:i,type:e="none",onLasso:t,onLassoEnd:n,disabled:r})=>{var s;const a=tt(P=>P.theme),o=Kn(P=>P.camera),l=Kn(P=>P.gl),c=Kn(P=>P.setEvents),f=Kn(P=>P.size),d=Kn(P=>P.get),p=Kn(P=>P.scene),m=_0(),y=tt(P=>P.actives),x=tt(P=>P.setActives),_=tt(P=>P.edges),g=tt(P=>P.edgeMeshes),b=$.useRef(null),S=$.useRef(null),E=$.useRef($W(a)),w=$.useRef(null),T=$.useRef(!1),R=$.useRef(d().events.enabled),U=$.useRef((s=m.controls)==null?void 0:s.enabled),C=$.useCallback(P=>{if(T.current){const[O,H,J]=w.current;J.x=Math.max(O.x,P.clientX),J.y=Math.max(O.y,P.clientY),H.x=Math.min(O.x,P.clientX),H.y=Math.min(O.y,P.clientY),E.current.style.left=`${H.x}px`,E.current.style.top=`${H.y}px`,E.current.style.width=`${J.x-H.x}px`,E.current.style.height=`${J.y-H.y}px`,em(P,b.current.endPoint,f),em(P,S.current.endPoint,f);const z=[],L=S.current.select().sort(V=>V.uuid).map(V=>_[g.indexOf(V)].id);z.push(...L);const F=b.current.select().sort(V=>V.uuid).filter(V=>{var W,G;return V.isMesh&&((W=V.userData)==null?void 0:W.id)&&(((G=V.userData)==null?void 0:G.type)===e||e==="all")}).map(V=>V.userData.id);z.push(...F),requestAnimationFrame(()=>{x(z),t==null||t(z)}),document.addEventListener("pointermove",C,{passive:!0,capture:!0,once:!0})}},[f,_,g,e,x,t]),D=$.useCallback(()=>{var P;T.current&&(c({enabled:R.current}),T.current=!1,(P=E.current.parentElement)==null||P.removeChild(E.current),m.controls.enabled=U.current,n==null||n(y),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",D))},[c,m.controls,n,y,C]),I=$.useCallback(P=>{var O,H;if(P.shiftKey){R.current=d().events.enabled,U.current=(O=m.controls)==null?void 0:O.enabled,b.current=new zT(o,p);const J=new Pg;g.length&&J.add(...g),S.current=new zT(o,J),w.current=[new ke,new ke,new ke];const[z]=w.current;m.controls.enabled=!1,c({enabled:!1}),T.current=!0,(H=l.domElement.parentElement)==null||H.appendChild(E.current),E.current.style.left=`${P.clientX}px`,E.current.style.top=`${P.clientY}px`,E.current.style.width="0px",E.current.style.height="0px",z.x=P.clientX,z.y=P.clientY,em(P,b.current.startPoint,f),em(P,S.current.startPoint,f),document.addEventListener("pointermove",C,{passive:!0,capture:!0,once:!0}),document.addEventListener("pointerup",D,{passive:!0})}},[o,m.controls,g,d,l.domElement.parentElement,C,D,p,c,f]);return $.useEffect(()=>{if(!(r||e==="none"))return typeof window<"u"&&(document.addEventListener("pointerdown",I,{passive:!0}),document.addEventListener("pointermove",C,{passive:!0}),document.addEventListener("pointerup",D,{passive:!0})),()=>{typeof window<"u"&&(document.removeEventListener("pointerdown",I),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",D))}},[e,r,I,C,D]),fe.jsx("group",{children:i})},tX="_canvas_670zp_1",nX={canvas:tX},iX={alpha:!0,antialias:!0},rX={position:[0,0,1e3],near:5,far:5e4,fov:10},sX=$.forwardRef(({cameraMode:i="pan",layoutType:e="forceDirected2d",sizingType:t="default",labelType:n="auto",theme:r=QW,animated:s=!0,defaultNodeSize:a=7,minNodeSize:o=5,maxNodeSize:l=15,lassoType:c="none",glOptions:f={},edges:d,children:p,nodes:m,minDistance:y,maxDistance:x,onCanvasClick:_,disabled:g,onLasso:b,onLassoEnd:S,...E},w)=>{var T,R;const U=$.useRef(null),C=$.useRef(null),D=$.useRef(null);$.useImperativeHandle(w,()=>({centerGraph:(L,F)=>{var V;return(V=U.current)==null?void 0:V.centerGraph(L,F)},fitNodesInView:(L,F)=>{var V;return(V=U.current)==null?void 0:V.fitNodesInView(L,F)},zoomIn:()=>{var L;return(L=C.current)==null?void 0:L.zoomIn()},zoomOut:()=>{var L;return(L=C.current)==null?void 0:L.zoomOut()},dollyIn:L=>{var F;return(F=C.current)==null?void 0:F.dollyIn(L)},dollyOut:L=>{var F;return(F=C.current)==null?void 0:F.dollyOut(L)},panLeft:()=>{var L;return(L=C.current)==null?void 0:L.panLeft()},panRight:()=>{var L;return(L=C.current)==null?void 0:L.panRight()},panDown:()=>{var L;return(L=C.current)==null?void 0:L.panDown()},panUp:()=>{var L;return(L=C.current)==null?void 0:L.panUp()},resetControls:L=>{var F;return(F=C.current)==null?void 0:F.resetControls(L)},getControls:()=>{var L;return(L=C.current)==null?void 0:L.controls},getGraph:()=>{var L;return(L=U.current)==null?void 0:L.graph},exportCanvas:()=>(U.current.renderScene(),D.current.toDataURL()),freeze:()=>{var L;return(L=C.current)==null?void 0:L.freeze()},unFreeze:()=>{var L;return(L=C.current)==null?void 0:L.unFreeze()}}));const{selections:I,actives:P,collapsedNodeIds:O}=E,H=d.length+m.length>400?!1:s,J=$.useMemo(()=>({...f,...iX}),[f]),z=$.useRef(z3({selections:I,actives:P,theme:r,collapsedNodeIds:O})).current;return fe.jsx("div",{className:nX.canvas,children:fe.jsx(C5,{legacy:!0,linear:!0,ref:D,flat:!0,gl:J,camera:rX,onPointerMissed:_,children:fe.jsxs(RW,{store:z,children:[((T=r.canvas)==null?void 0:T.background)&&fe.jsx("color",{attach:"background",args:[r.canvas.background]}),fe.jsx("ambientLight",{intensity:1}),p,((R=r.canvas)==null?void 0:R.fog)&&fe.jsx("fog",{attach:"fog",args:[r.canvas.fog,4e3,9e3]}),fe.jsx(JW,{mode:i,ref:C,disabled:g,minDistance:y,maxDistance:x,animated:s,children:fe.jsx(eX,{disabled:g,type:c,onLasso:b,onLassoEnd:S,children:fe.jsx($.Suspense,{children:fe.jsx(KW,{ref:U,disabled:g,animated:H,edges:d,nodes:m,layoutType:e,sizingType:t,labelType:n,defaultNodeSize:a,minNodeSize:o,maxNodeSize:l,...E})})})})]})})})}),aX=({selections:i=[],nodes:e=[],actives:t=[],focusOnSelect:n=!0,type:r="single",pathHoverType:s="out",pathSelectionType:a="direct",ref:o,disabled:l,onSelection:c})=>{const[f,d]=$.useState([]),[p,m]=$.useState(t),[y,x]=$.useState(i),[_,g]=$.useState(!1),b=r==="multi"||r==="multiModifier",S=$.useCallback(L=>{if(!l&&L){L=Array.isArray(L)?L:[L];const F=L.filter(V=>!y.includes(V));if(F.length){const V=[...y,...F];c==null||c(V),x(V)}}},[l,y,c]),E=$.useCallback(L=>{if(!l&&L){L=Array.isArray(L)?L:[L];const F=y.filter(V=>!L.includes(V));c==null||c(F),x(F)}},[l,y,c]),w=$.useCallback((L=[])=>{l||(L=Array.isArray(L)?L:[L],m([]),x(L),c==null||c(L))},[l,c]),T=$.useCallback(L=>{y.includes(L)?E(L):b?S(L):w(L)},[S,w,y,b,E]),R=$.useCallback(L=>{if(b?r==="multiModifier"?_?S(L.id):w(L.id):S(L.id):w(L.id),n===!0||n==="singleOnly"&&!_){if(!o.current)throw new Error("No ref found for the graph canvas.");const F=o.current.getGraph(),{nodes:V}=P_(F,[L.id],a);o.current.fitNodesInView([L.id,...V],{fitOnlyIfNodesNotInView:!0})}},[S,w,n,b,_,a,o,r]),U=$.useCallback((L,F)=>{const V=o.current.getGraph();if(!V)throw new Error("Graph is not initialized");const W=CW(V,L,F);w([L,F]);const G=[];for(let Z=0;Z<W.length-1;Z++){const Q=W[Z],j=W[Z+1],ee=V.getEdgeAttributes(Q,j);ee&&G.push(ee.id)}m([...W.map(Z=>Z),...G])},[w,o]),C=$.useCallback(L=>{const F=L.target,V=gA(F),W=L.metaKey||L.ctrlKey;V&&W&&g(!0)},[]),D=$.useCallback(L=>{const F=L.target,V=gA(F),W=["Meta","Control"].includes(L.key);V&&W&&g(!1)},[]);$.useEffect(()=>(typeof window<"u"&&(window.addEventListener("keydown",C),window.addEventListener("keyup",D)),()=>{typeof window<"u"&&(window.removeEventListener("keydown",C),window.removeEventListener("keyup",D))}),[C,D]);const I=$.useCallback(L=>{if(L.button!==2&&(y.length||p.length)&&(w(),g(!1),n&&y.length===1)){if(!o.current)throw new Error("No ref found for the graph canvas.");o.current.fitNodesInView([],{fitOnlyIfNodesNotInView:!0})}},[w,n,p.length,y.length,o]),P=$.useCallback(L=>{m(L)},[]),O=$.useCallback(L=>{w(L)},[w]),H=$.useCallback(L=>{if(s){const F=o.current.getGraph();if(!F)throw new Error("No ref found for the graph canvas.");const{nodes:V,edges:W}=P_(F,[L.id],s);d([...V,...W])}},[s,o]),J=$.useCallback(()=>{s&&d([])},[s]);return $.useEffect(()=>{var L;if(a!=="direct"&&y.length>0){const F=(L=o.current)==null?void 0:L.getGraph();if(F){const{nodes:V,edges:W}=P_(F,y,a);m([...V,...W])}}},[y,a,o]),{actives:$.useMemo(()=>[...p,...f],[p,f]),onNodeClick:R,onNodePointerOver:H,onNodePointerOut:J,onLasso:P,onLassoEnd:O,selectNodePaths:U,onCanvasClick:I,selections:y,clearSelections:w,addSelection:S,removeSelection:E,toggleSelection:T,setSelections:x}},oX=""+new URL("NotoSans-Regular-D96CXwz4.ttf",import.meta.url).href,lX=$.memo(({data:i,onCollapse:e,isCollapsed:t,canCollapse:n,onClose:r})=>{const{t:s}=xg(["network","zigbee","common"]);let a;if(i.parent){const o=i.parent.lastIndexOf(` - ${s("children")}`);a=o>-1?i.parent.slice(0,o):i.parent}return fe.jsx("div",{className:"card bg-base-100 shadow-sm",children:fe.jsxs("div",{className:"card-body",children:[fe.jsx("h2",{className:"card-title",children:i.friendlyName}),fe.jsx("span",{children:i.type}),fe.jsx("span",{title:s("zigbee:ieee_address"),children:i.ieeeAddr}),fe.jsxs("span",{title:s("zigbee:network_address_hex"),className:"justify-self-end",children:[HU(i.networkAddress,4)," | ",fe.jsx("span",{title:s("zigbee:network_address_dec"),children:i.networkAddress})]}),a&&fe.jsxs("span",{children:[s("parent"),": ",a]}),i.failed&&i.failed.length>0&&fe.jsxs("div",{className:"badge badge-ghost",children:[fe.jsx(ni,{icon:VU,className:"text-error",beatFade:!0}),s("common:failed"),": ",i.failed]}),fe.jsxs("div",{className:"card-actions justify-end mt-2",children:[n&&fe.jsx(ts,{className:"btn btn-square btn-primary",onClick:e,children:fe.jsx(ni,{icon:t?WU:XU})}),fe.jsx(ts,{className:"btn btn-square btn-neutral",onClick:r,children:fe.jsx(ni,{icon:jU})})]})]})})}),bA=$.memo(i=>{const{label:e,icon:t,onChange:n,onSubmit:r,defaultValue:s,...a}=i,[o,l]=$.useState(s);$.useEffect(()=>{l(s)},[s]);const c=$.useCallback(d=>{l(d.target.value?d.target.valueAsNumber:""),n==null||n(d)},[n]),f=$.useCallback(d=>{r==null||r(o,!d.target.validationMessage)},[r,o]);return fe.jsxs("div",{className:"flex flex-row flex-wrap items-center gap-2 bg-base-100 rounded-box px-2 pb-1",title:e,children:[fe.jsx(ni,{icon:t}),fe.jsxs("div",{className:"",children:[fe.jsx("input",{className:"range range-xs",onChange:c,onTouchEnd:f,onMouseUp:f,...a,type:"range",value:o}),fe.jsxs("div",{className:"flex justify-between px-1 mt-1 text-xs",children:[fe.jsx("span",{children:i.min}),fe.jsx("span",{children:o}),fe.jsx("span",{children:i.max})]})]})]})}),cX=$.memo(({graphRef:i,layoutType:e,onLayoutTypeChange:t,labelType:n,onLabelTypeChange:r,nodeStrength:s,onNodeStrengthChange:a,linkDistance:o,onLinkDistanceChange:l,nodes:c,showParents:f,setShowParents:d,showChildren:p,setShowChildren:m,showSiblings:y,setShowSiblings:x})=>{const{t:_}=xg("network"),g=$.useMemo(()=>{const E=c.map(w=>[w.id,w.data.type!=="Coordinator"?`${w.data.type[0]} - ${w.label}`:w.label]);return E.sort(([,w],[,T])=>w.localeCompare(T)),E.map(([w,T])=>fe.jsx("option",{value:w,children:T},w))},[c]),b=$.useCallback(()=>{i.current&&qU(i.current.exportCanvas(),`network-map-${Date.now()}.png`)},[i]),S=$.useCallback(E=>{var w,T;if(E.target.value){const R=[E.target.value];(w=i.current)==null||w.centerGraph(R),(T=i.current)==null||T.fitNodesInView(R)}},[i]);return fe.jsxs(fe.Fragment,{children:[fe.jsxs("div",{className:"absolute z-9 top-0 left-0 p-1 flex flex-row flex-wrap gap-1 items-start",children:[fe.jsx(ts,{title:_("download_image"),className:"btn btn-square btn-neutral btn-sm",onClick:b,children:fe.jsx(ni,{icon:YU})}),fe.jsx(ts,{title:_("reset_controls"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.resetControls()},children:fe.jsx(ni,{icon:ZU})}),fe.jsx(ts,{title:_("fit_view"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E,w;(E=i.current)==null||E.centerGraph(),(w=i.current)==null||w.fitNodesInView()},children:fe.jsx(ni,{icon:KU})}),fe.jsx(ts,{title:_("zoom_in"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.zoomIn()},children:fe.jsx(ni,{icon:JU})}),fe.jsx(ts,{title:_("zoom_out"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.zoomOut()},children:fe.jsx(ni,{icon:QU})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${f?"":"btn-outline"}`,item:!f,onClick:d,title:_("parent"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsParent]}})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${p?"":"btn-outline"}`,item:!p,onClick:m,title:_("child"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsAChild]}})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${y?"":"btn-outline"}`,item:!y,onClick:x,title:_("sibling"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsASibling]}})}),fe.jsxs("select",{className:"select select-sm w-36",title:_("find_node"),defaultValue:"",onChange:S,children:[fe.jsx("option",{value:"",children:_("find_node")}),g]})]}),fe.jsxs("div",{className:"absolute z-9 top-0 right-0 p-1 flex flex-row flex-wrap gap-1 items-start justify-end",children:[fe.jsxs("select",{className:"select select-sm w-36",title:_("layout_type"),value:e,onChange:t,children:[fe.jsx("option",{value:"",disabled:!0,children:_("layout_type")}),fe.jsx("option",{value:"forceDirected2d",children:"forceDirected2d"}),fe.jsx("option",{value:"forceDirected3d",children:"forceDirected3d"}),fe.jsx("option",{value:"radialOut2d",children:"radialOut2d"}),fe.jsx("option",{value:"radialOut3d",children:"radialOut3d"})]}),fe.jsxs("select",{className:"select select-sm w-36",title:_("label_type"),value:n,onChange:r,children:[fe.jsx("option",{value:"",disabled:!0,children:_("label_type")}),fe.jsx("option",{value:"all",children:"all"}),fe.jsx("option",{value:"auto",children:"auto"}),fe.jsx("option",{value:"none",children:"none"}),fe.jsx("option",{value:"nodes",children:"nodes"}),fe.jsx("option",{value:"edges",children:"edges"})]})]}),fe.jsxs("div",{className:"absolute z-9 bottom-0 left-0 p-1 flex flex-row flex-wrap gap-1 items-end",children:[fe.jsx(bA,{name:"node_strength",label:_("node_strength"),icon:$U,onSubmit:(E,w)=>w&&typeof E=="number"&&a(E),min:-1e3,max:-100,step:10,defaultValue:s}),fe.jsx(bA,{name:"link_distance",label:_("link_distance"),icon:eO,onSubmit:(E,w)=>w&&typeof E=="number"&&l(E),min:10,max:200,step:5,defaultValue:o})]}),fe.jsx("div",{className:"absolute z-9 bottom-0 right-0 p-1 flex flex-row flex-wrap gap-1 items-end justify-end",children:fe.jsx(ts,{title:_("scroll_to_top"),className:"btn btn-primary btn-sm ml-auto",onClick:()=>{window.scrollTo(0,0)},children:fe.jsx(ni,{icon:tO})})})]})}),uX=$.memo(()=>{const{t:i}=xg("network");return fe.jsxs("details",{className:"collapse collapse-arrow bg-white text-black rounded-b-none",children:[fe.jsx("summary",{className:"collapse-title font-semibold",children:i("legend")}),fe.jsxs("div",{className:"collapse-content text-sm",children:[fe.jsxs("div",{className:"flex flex-row flex-wrap gap-3 mb-2",children:[fe.jsxs("div",{children:[fe.jsxs("p",{children:[i("nodes"),":"]}),fe.jsxs("ul",{className:"list-none list-inside",children:[fe.jsxs("li",{style:{color:tm.Coordinator},children:[fe.jsx(ni,{icon:Nv})," Coordinator"]}),fe.jsxs("li",{style:{color:tm.Router},children:[fe.jsx(ni,{icon:Nv})," Router"]}),fe.jsxs("li",{style:{color:tm.EndDevice},children:[fe.jsx(ni,{icon:Nv})," EndDevice"]})]})]}),fe.jsxs("div",{children:[fe.jsxs("p",{children:[i("edges"),":"]}),fe.jsxs("ul",{className:"list-none list-inside",children:[fe.jsxs("li",{style:{color:yl[ti.NeighborIsParent]},children:[fe.jsx(ni,{icon:Qc})," ",i("parent")]}),fe.jsxs("li",{style:{color:yl[ti.NeighborIsAChild]},children:[fe.jsx(ni,{icon:Qc})," ",i("child")]}),fe.jsxs("li",{style:{color:yl[ti.NeighborIsASibling]},children:[fe.jsx(ni,{icon:Qc})," ",i("sibling")]})]})]})]}),fe.jsx("p",{children:i("legend_node_siblings")}),fe.jsx("p",{children:i("legend_node_size")}),fe.jsx("p",{children:i("legend_node_select")}),fe.jsx("p",{children:i("legend_node_fold")}),fe.jsx("p",{children:i("legend_edge_toggle")}),fe.jsx("p",{className:"text-xs mt-2",children:"Known issues:"}),fe.jsxs("ul",{className:"list-disc list-inside text-xs",children:[fe.jsxs("li",{children:['If you cannot see labels (names/LQIs) after the map has finished loading, zoom-in sufficiently, switch the "',i("label_type"),'" value to something else, then back to the one you want']}),fe.jsx("li",{children:"Edge colors are currently not working"})]})]})]})}),EX=$.memo(({map:i})=>{const{t:e}=xg("network"),[t,n]=$.useState(qa.get(HS,"forceDirected2d")),[r,s]=$.useState(qa.get(VS,"all")),[a,o]=$.useState(qa.get(WS,-750)),[l,c]=$.useState(qa.get(XS,50)),[f,d]=$.useState(!0),[p,m]=$.useState(!0),[y,x]=$.useState(!0),_=$.useRef(null),[g,b]=$.useMemo(()=>{var z,L;const I=[],P=[],O=[];for(const F of i.nodes){const V=i.links.find(G=>G.relationship===ti.NeighborIsParent&&G.target.ieeeAddr===F.ieeeAddr);let W=V?(z=i.nodes.find(G=>G.ieeeAddr===V.source.ieeeAddr))==null?void 0:z.friendlyName:void 0;if(!V){const G=i.links.find(Z=>Z.relationship===ti.NeighborIsAChild&&Z.source.ieeeAddr===F.ieeeAddr);W=G?(L=i.nodes.find(Z=>Z.ieeeAddr===G.target.ieeeAddr))==null?void 0:L.friendlyName:void 0,W&&(W+=` - ${e("children")}`)}I.push({id:F.ieeeAddr,data:{...F,parent:W},label:F.friendlyName,labelVisible:!0,fill:tm[F.type]})}const H=new Map;for(const F of i.links){if(!f&&F.relationship===ti.NeighborIsParent||!p&&F.relationship===ti.NeighborIsAChild||!y&&F.relationship===ti.NeighborIsASibling)continue;if(F.relationship===ti.NeighborIsASibling){const W=H.get(F.source.ieeeAddr);(!W||F.depth<W.depth||F.linkquality>W.linkquality||W.linkquality===F.linkquality&&F.depth<W.depth)&&H.set(F.source.ieeeAddr,F);continue}const V=i.links.find(W=>W.source.ieeeAddr===F.target.ieeeAddr&&W.target.ieeeAddr===F.source.ieeeAddr);F.relationship===ti.NeighborIsAChild&&(V==null?void 0:V.relationship)===ti.NeighborIsParent||O.push([F,V])}for(const[,F]of H){const V=i.links.find(W=>W.source.ieeeAddr===F.target.ieeeAddr&&W.target.ieeeAddr===F.source.ieeeAddr);O.push([F,V])}const J=[];for(const[F,V]of O)J.includes(F)||F.relationship===ti.NeighborIsASibling&&((V==null?void 0:V.relationship)===ti.NeighborIsParent||(V==null?void 0:V.relationship)===ti.NeighborIsAChild)||P.push({id:`${F.source.ieeeAddr}-${F.target.ieeeAddr}-${F.relationship}`,data:F,label:V?`${F.linkquality} / ${V.linkquality??"?"}`:`${F.linkquality}`,size:F.relationship===ti.NeighborIsParent||F.relationship===ti.NeighborIsAChild?1.5:.75,labelVisible:!0,source:F.source.ieeeAddr,target:F.target.ieeeAddr,fill:yl[F.relationship]});return[I,P]},[i,f,p,y,e]),{selections:S,actives:E,onNodeClick:w,onCanvasClick:T}=aX({ref:_,nodes:g,type:"single",pathSelectionType:"out",focusOnSelect:!1}),R=$.useCallback(I=>{var P,O,H;I.target.value&&(qa.set(HS,I.target.value),n(I.target.value),(P=_.current)==null||P.resetControls(),(O=_.current)==null||O.centerGraph(),(H=_.current)==null||H.fitNodesInView())},[]),U=$.useCallback(I=>{I.target.value&&(qa.set(VS,I.target.value),s(I.target.value))},[]),C=$.useCallback(I=>{qa.set(WS,I),o(I)},[]),D=$.useCallback(I=>{qa.set(XS,I),c(I)},[]);return fe.jsxs(fe.Fragment,{children:[fe.jsx(uX,{}),fe.jsxs("div",{className:"relative h-screen",children:[fe.jsx(cX,{graphRef:_,layoutType:t,onLayoutTypeChange:R,labelType:r,onLabelTypeChange:U,nodeStrength:a,onNodeStrengthChange:C,linkDistance:l,onLinkDistanceChange:D,nodes:g,showParents:f,setShowParents:d,showChildren:p,setShowChildren:m,showSiblings:y,setShowSiblings:x}),fe.jsx(sX,{ref:_,nodes:g,edges:b,clusterAttribute:t.startsWith("forceDirected")?"parent":void 0,selections:S,actives:E,onCanvasClick:T,onNodeClick:w,layoutType:t,layoutOverrides:{nodeStrength:a,linkDistance:l},sizingType:"centrality",labelType:r,labelFontUrl:oX,edgeLabelPosition:"natural",lassoType:"node",cameraMode:t.endsWith("3d")?"rotate":"pan",draggable:!0,animated:!1,contextMenu:({data:{data:I},onCollapse:P,isCollapsed:O,canCollapse:H,onClose:J})=>I.friendlyName?fe.jsx(lX,{data:I,onCollapse:P,isCollapsed:O,canCollapse:H,onClose:J}):null})]})]})});export{EX as default};
4233
+ }`)),document.head.appendChild(i)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();var lA,cA;function D3(i,e=[]){const t=e.length;for(const n of i){const r=e.indexOf(n);if(r>-1){const s=[...e.slice(r),n].map(a=>a.data.id);throw new Error(`Invalid Graph: Circular node path detected: ${s.join(" -> ")}.`)}t>n.depth&&(n.depth=t,D3(n.out,[...e,n]))}}function U3(i,e){let t=!1;const n=i.reduce((a,o)=>({...a,[o.id]:{data:o,out:[],depth:-1,ins:[]}}),{});try{for(const a of e){const o=a.source,l=a.target;if(!n.hasOwnProperty(o))throw new Error(`Missing source Node ${o}`);if(!n.hasOwnProperty(l))throw new Error(`Missing target Node ${l}`);const c=n[o],f=n[l];f.ins.push(c),c.out.push(f)}D3(Object.values(n))}catch{t=!0}const r=Object.keys(n).map(a=>n[a].depth),s=Math.max(...r);return{invalid:t,depths:n,maxDepth:s||1}}const uA=["radialin","radialout"];function lW({nodes:i,edges:e,mode:t="lr",nodeLevelRatio:n=2}){const{depths:r,maxDepth:s,invalid:a}=U3(i,e);if(a)return null;const o=uA.includes(t)?1:5,l=i.length/s*n*o;if(t){const c=(m,y)=>x=>m?(r[x.id].depth-s/2)*l*(y?-1:1):void 0,f=c(["lr","rl"].includes(t),t==="rl"),d=c(["td","bu"].includes(t),t==="td"),p=c(["zin","zout"].includes(t),t==="zout");i.forEach(m=>{m.fx=f(m),m.fy=d(m),m.fz=p(m)})}return uA.includes(t)?Hk(c=>{const f=r[c.id];return(t==="radialin"?s-f.depth:f.depth)*l}).strength(1):null}function cW(i){return new Promise((e,t)=>{let n;function r(){n?e(n):(n=i.step(),r())}r()})}function od(i){const e=[],t=[];return i.forEachNode((n,r)=>{e.push({...r,id:n,radius:r.size||1})}),i.forEachEdge((n,r)=>{t.push({...r,id:n})}),{nodes:e,edges:t}}function uW(){const i=L=>()=>L;let t=L=>L.index,n=[],r=[],s,a,o=[100,100],l=i(1),c=i(-1),f=i(100),d=i(.1),p={},m=.1,y=.001,x=[],_=[0,0],g,b=L=>L.cluster,S="treemap",E=!0,w=.1;function T(L){if(!E)return T;S==="force"&&(g.tick(),O());for(let F=0,V=n.length,W,G=L*w;F<V;++F)W=n[F],W.vx+=(p[b(W)].x-W.x)*G,W.vy+=(p[b(W)].y-W.y)*G}function R(){n&&(S==="treemap"?H():z())}T.initialize=function(L){n=L,R()};function U(L){let F=b(L.source),V=b(L.target);return F<=V?F+"~"+V:V+"~"+F}function C(L){let F=new Map,V={};return L.forEach(function(W){F.has(b(W))||F.set(b(W),{count:0,sumforceNodeSize:0})}),L.forEach(function(W){V=F.get(b(W)),V.count=V.count+1,V.sumforceNodeSize=V.sumforceNodeSize+Math.PI*(l(W)*l(W))*1.3,F.set(b(W),V)}),F}function D(L){let F=new Map,V=[];return L.forEach(function(W){let G=U(W),Z;F.has(G)?Z=F.get(G):Z=0,Z+=1,F.set(G,Z)}),F.forEach(function(W,G){let Z,Q;Z=G.split("~")[0],Q=G.split("~")[1],Z!==void 0&&Q!==void 0&&V.push({source:Z,target:Q,count:W})}),V}function I(){let L=[],F=[],V=new Map,W,G,Z,Q,j;Q=C(n),j=D(r);for(W of Q.keys())Z=Q.get(W),L.push({id:W,size:Z.count,r:Math.sqrt(Z.sumforceNodeSize/Math.PI)}),V.set(W,G);return j.forEach(function(ee){let pe=V.get(ee.source),le=V.get(ee.target);pe!==void 0&&le!==void 0&&F.push({source:pe,target:le,count:ee.count})}),{nodes:L,links:F}}function P(){let L=[],F,V,W;W=C(T.nodes());for(F of W.keys())V=W.get(F),L.push({id:F,size:V.count});return{id:"clustersTree",children:L}}function O(){return p.none={x:0,y:0},x.forEach(function(L){S==="treemap"?p[L.data.id]={x:L.x0+(L.x1-L.x0)/2-_[0],y:L.y0+(L.y1-L.y0)/2-_[1]}:p[L.id]={x:L.x-_[0],y:L.y-_[1]}}),p}function H(){let L=TG().size(T.size());a=o0(P()).sum(F=>F.radius).sort(function(F,V){return V.height-F.height||V.value-F.value}),x=L(a).leaves(),O()}function J(){let L=0;n.length!==0&&r.forEach(function(F){let V,W;if(n){if(V=F.source,W=F.target,typeof F.source!="object"&&(V=n.find(G=>G.id===F.source)),typeof F.target!="object"&&(W=n.find(G=>G.id===F.target)),V===void 0||W===void 0)throw Error("Error setting links, couldnt find nodes for a link (see it on the console)");F.source=V,F.target=W,F.index=L++}})}function z(){let L;!n||!n.length||(J(),L=I(),s.size>0&&L.nodes.forEach(F=>{var V,W,G,Z;F.fx=(W=(V=s.get(F.id))==null?void 0:V.position)==null?void 0:W.x,F.fy=(Z=(G=s.get(F.id))==null?void 0:G.position)==null?void 0:Z.y}),g=$C(L.nodes).force("x",ox(o[0]/2).strength(.1)).force("y",lx(o[1]/2).strength(.1)).force("collide",jC(F=>F.r).iterations(4)).force("charge",eR().strength(c)).force("links",qC(L.nodes.length?L.links:[]).distance(f).strength(d)),x=g.nodes(),O())}return T.template=function(L){return arguments.length?(S=L,R(),T):S},T.groupBy=function(L){return arguments.length?typeof L=="string"?(b=function(F){return F[L]},T):(b=L,T):b},T.enableGrouping=function(L){return arguments.length?(E=L,T):E},T.strength=function(L){return arguments.length?(w=L,T):w},T.getLinkStrength=function(L){return E?b(L.source)===b(L.target)?typeof m=="function"?m(L):m:typeof y=="function"?y(L):y:typeof m=="function"?m(L):m},T.id=function(L){return arguments.length?(t=L,T):t},T.size=function(L){return arguments.length?(o=L,T):o},T.linkStrengthInterCluster=function(L){return arguments.length?(y=L,T):y},T.linkStrengthIntraCluster=function(L){return arguments.length?(m=L,T):m},T.nodes=function(L){return arguments.length?(n=L,T):n},T.links=function(L){return arguments.length?(L===null?r=[]:r=L,R(),T):r},T.template=function(L){return arguments.length?(S=L,R(),T):S},T.forceNodeSize=function(L){return arguments.length?(l=typeof L=="function"?L:i(+L),R(),T):l},T.nodeSize=T.forceNodeSize,T.forceCharge=function(L){return arguments.length?(c=typeof L=="function"?L:i(+L),R(),T):c},T.forceLinkDistance=function(L){return arguments.length?(f=typeof L=="function"?L:i(+L),R(),T):f},T.forceLinkStrength=function(L){return arguments.length?(d=typeof L=="function"?L:i(+L),R(),T):d},T.offset=function(L){return arguments.length?(_=typeof L=="function"?L:i(+L),T):_},T.getFocis=O,T.setClusters=function(L){return s=L,T},T}function no({graph:i,nodeLevelRatio:e=2,mode:t=null,dimensions:n=2,nodeStrength:r=-250,linkDistance:s=50,clusterStrength:a=.5,linkStrengthInterCluster:o=.01,linkStrengthIntraCluster:l=.5,forceLinkDistance:c=100,forceLinkStrength:f=.1,clusterType:d="force",forceCharge:p=-700,getNodePosition:m,drags:y,clusters:x,clusterAttribute:_,forceLayout:g}){const{nodes:b,edges:S}=od(i),w=n===2&&S.length>25?r*2:r;let T,R;g==="forceDirected2d"?(T=ox(),R=lx()):(T=ox(600).strength(.05),R=lx(600).strength(.05));const U=$C().force("center",R5(0,0)).force("link",qC()).force("charge",eR().strength(w)).force("x",T).force("y",R).force("z",Vk()).force("collide",jC(P=>P.radius+10)).force("dagRadial",lW({nodes:b,edges:S,mode:t,nodeLevelRatio:e})).stop();let C;if(_){let P=p;if(b!=null&&b.length){const O=Math.ceil(b.length/200);P=p*O}C=uW().setClusters(x).strength(a).template(d).groupBy(O=>O.data[_]).links(S).size([100,100]).linkStrengthInterCluster(o).linkStrengthIntraCluster(l).forceLinkDistance(c).forceLinkStrength(f).forceCharge(P).forceNodeSize(O=>O.radius)}let D=U.numDimensions(n).nodes(b);if(C&&(D=D.force("group",C)),s){let P=D.force("link");P&&(P.id(O=>O.id).links(S).distance(s),C&&(P=P.strength((C==null?void 0:C.getLinkStrength)??.1)))}const I=new Map(b.map(P=>[P.id,P]));return{step(){for(;U.alpha()>.01;)U.tick();return!0},getNodePosition(P){var O,H;if(m){const J=m(P,{graph:i,drags:y,nodes:b,edges:S});if(J)return J}return(O=y==null?void 0:y[P])!=null&&O.position?(H=y==null?void 0:y[P])==null?void 0:H.position:I.get(P)}}}function hW({graph:i,radius:e,drags:t,getNodePosition:n}){const r=RG(i,{scale:e}),{nodes:s,edges:a}=od(i);return{step(){return!0},getNodePosition(o){var l,c;if(n){const f=n(o,{graph:i,drags:t,nodes:s,edges:a});if(f)return f}return(l=t==null?void 0:t[o])!=null&&l.position?(c=t==null?void 0:t[o])==null?void 0:c.position:r==null?void 0:r[o]}}}const fW={td:{x:"x",y:"y",factor:-1},lr:{x:"y",y:"x",factor:1}};function hA({graph:i,drags:e,mode:t="td",nodeSeparation:n=1,nodeSize:r=[50,50],getNodePosition:s}){const{nodes:a,edges:o}=od(i),{depths:l}=U3(a,o),c=Object.keys(l).map(x=>l[x]),f=pG().id(x=>x.data.id).parentId(x=>{var _,g,b;return(b=(g=(_=x.ins)==null?void 0:_[0])==null?void 0:g.data)==null?void 0:b.id})(c),p=bG().separation(()=>n).nodeSize(r)(o0(f)).descendants(),m=fW[t],y=new Map(a.map(x=>{const{x:_,y:g}=p.find(b=>b.data.id===x.id);return[x.id,{...x,[m.x]:_*m.factor,[m.y]:g*m.factor,z:0}]}));return{step(){return!0},getNodePosition(x){var _,g;if(s){const b=s(x,{graph:i,drags:e,nodes:a,edges:o});if(b)return b}return(_=e==null?void 0:e[x])!=null&&_.position?(g=e==null?void 0:e[x])==null?void 0:g.position:y.get(x)}}}function dW({graph:i,margin:e,drags:t,getNodePosition:n,ratio:r,gridSize:s,maxIterations:a}){const{nodes:o,edges:l}=od(i),c=IG(i,{maxIterations:a,inputReducer:(f,d)=>({...d,x:d.x||0,y:d.y||0}),settings:{ratio:r,margin:e,gridSize:s}});return{step(){return!0},getNodePosition(f){var d,p;if(n){const m=n(f,{graph:i,drags:t,nodes:o,edges:l});if(m)return m}return(d=t==null?void 0:t[f])!=null&&d.position?(p=t==null?void 0:t[f])==null?void 0:p.position:c==null?void 0:c[f]}}}function pW({graph:i,drags:e,iterations:t,...n}){WG.assign(i);const r=GG(i,{iterations:t,settings:n});return{step(){return!0},getNodePosition(s){var a;return((a=e==null?void 0:e[s])==null?void 0:a.position)||(r==null?void 0:r[s])}}}function mW({graph:i,drags:e,getNodePosition:t}){const{nodes:n,edges:r}=od(i);return{step(){return!0},getNodePosition(s){return t(s,{graph:i,drags:e,nodes:n,edges:r})}}}const gW=["forceDirected2d","treeTd2d","treeLr2d","radialOut2d","treeTd3d","treeLr3d","radialOut3d","forceDirected3d"];function vW({type:i,...e}){if(gW.includes(i)){const{nodeStrength:t,linkDistance:n,nodeLevelRatio:r}=e;if(i==="forceDirected2d")return no({...e,dimensions:2,nodeLevelRatio:r||2,nodeStrength:t||-250,linkDistance:n,forceLayout:i});if(i==="treeTd2d")return no({...e,mode:"td",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-250,linkDistance:n||50,forceLayout:i});if(i==="treeLr2d")return no({...e,mode:"lr",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-250,linkDistance:n||50,forceLayout:i});if(i==="radialOut2d")return no({...e,mode:"radialout",dimensions:2,nodeLevelRatio:r||5,nodeStrength:t||-500,linkDistance:n||100,forceLayout:i});if(i==="treeTd3d")return no({...e,mode:"td",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||50});if(i==="treeLr3d")return no({...e,mode:"lr",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||50,forceLayout:i});if(i==="radialOut3d")return no({...e,mode:"radialout",dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-500,linkDistance:n||100,forceLayout:i});if(i==="forceDirected3d")return no({...e,dimensions:3,nodeLevelRatio:r||2,nodeStrength:t||-250,linkDistance:n,forceLayout:i})}else if(i==="circular2d"){const{radius:t}=e;return hW({...e,radius:t||300})}else{if(i==="hierarchicalTd")return hA({...e,mode:"td"});if(i==="hierarchicalLr")return hA({...e,mode:"lr"});if(i==="nooverlap"){const{graph:t,maxIterations:n,ratio:r,margin:s,gridSize:a,...o}=e;return dW({graph:t,margin:s||10,maxIterations:n||50,ratio:r||10,gridSize:a||20,...o})}else if(i==="forceatlas2"){const{graph:t,iterations:n,gravity:r,scalingRatio:s,...a}=e;return pW({type:"forceatlas2",graph:t,...a,scalingRatio:s||100,gravity:r||10,iterations:n||50})}else if(i==="custom")return mW({...e})}throw new Error(`Layout ${i} not found.`)}function O3({nodeCount:i,nodePosition:e,labelType:t,camera:n}){return(r,s)=>{var a;if(n&&e&&((a=n==null?void 0:n.position)==null?void 0:a.z)/(n==null?void 0:n.zoom)-(e==null?void 0:e.z)>6e3)return!1;if(t==="all")return!0;if(t==="nodes"&&r==="node")return!0;if(t==="edges"&&r==="edge")return!0;if(t==="auto"&&r==="node"){if(s>7)return!0;if(n&&e&&n.position.z/n.zoom-e.z<3e3)return!0}return!1}}function L3(i,e){switch(e){case"above":return i;case"below":return-i;case"inline":case"natural":default:return 0}}const sb=typeof window>"u";function yW({graph:i}){const e=YG(i);return{ranks:e,getSizeForNode:t=>e[t]*80}}function _W({graph:i}){const e=KG.degreeCentrality(i);return{ranks:e,getSizeForNode:t=>e[t]*20}}function xW({graph:i,attribute:e,defaultSize:t}){const n=new Map;return e?i.forEachNode((r,s)=>{var a;const o=(a=s.data)==null?void 0:a[e];isNaN(o)&&console.warn(`Attribute ${o} is not a number for node ${s.id}`),n.set(r,o||0)}):console.warn("Attribute sizing configured but no attribute provided"),{getSizeForNode:r=>!e||!n?t:n.get(r)}}const fA={pagerank:yW,centrality:_W,attribute:xW,none:({defaultSize:i})=>({getSizeForNode:e=>i})};function bW({type:i,...e}){var t;const n=(t=fA[i])==null?void 0:t.call(fA,e);if(!n&&i!=="default")throw new Error(`Unknown sizing strategy: ${i}`);const{graph:r,minSize:s,maxSize:a}=e,o=new Map;let l,c;if(r.forEachNode((f,d)=>{let p;i==="default"?p=d.size||e.defaultSize:p=n.getSizeForNode(f),(l===void 0||p<l)&&(l=p),(c===void 0||p>c)&&(c=p),o.set(f,p)}),i!=="none"){const f=hR().domain([l,c]).rangeRound([s,a]);for(const[d,p]of o)o.set(d,f(p))}return o}function SW(i,e,t){i.clear();const n=new Set;for(const r of e)try{n.has(r.id)||(i.addNode(r.id,r),n.add(r.id))}catch(s){console.error(`[Graph] Error adding node '${r.id}`,s)}for(const r of t)if(!(!n.has(r.source)||!n.has(r.target)))try{i.addEdge(r.source,r.target,r)}catch(s){console.error(`[Graph] Error adding edge '${r.source} -> ${r.target}`,s)}return i}function EW({graph:i,layout:e,sizingType:t,labelType:n,sizingAttribute:r,defaultNodeSize:s,minNodeSize:a,maxNodeSize:o,clusterAttribute:l}){const c=[],f=[],d=new Map,p=bW({graph:i,type:t,attribute:r,minSize:a,maxSize:o,defaultSize:s}),m=i.nodes().length,y=O3({nodeCount:m,labelType:n});return i.forEachNode((x,_)=>{const g=e.getNodePosition(x),{data:b,fill:S,icon:E,label:w,size:T,...R}=_,U=p.get(_.id),C=y("node",U),I=(i.inboundNeighbors(_.id)||[]).map(O=>i.getNodeAttributes(O)),P={..._,size:U,labelVisible:C,label:w,icon:E,fill:S,cluster:l?b[l]:void 0,parents:I,data:{...R,...b??{}},position:{...g,x:g.x||0,y:g.y||0,z:g.z||1}};d.set(_.id,P),c.push(P)}),i.forEachEdge((x,_)=>{const g=d.get(_.source),b=d.get(_.target);if(g&&b){const{data:S,id:E,label:w,size:T,...R}=_,U=y("edge",T);f.push({..._,id:E,label:w,labelVisible:U,size:T,data:{...R,id:E,...S||{}}})}}),{nodes:c,edges:f}}const _r={mass:10,tension:1e3,friction:300,precision:.1};function N3(i,e,t){const n=e.getLength(),r=i==="end"?n:n/2,s=i==="end"?t/2:0,a=(r-s)/n,o=e.getPointAt(a),l=e.getTangentAt(a);return[o,l]}function I3(i){return[i+6,2+i/1.5]}const dA=.7;function P3(i,e,t=0){const n=new K(i.x,i.y||0,i.z||0),r=new K(e.x,e.y||0,e.z||0),s=new K().addVectors(n,r).divideScalar(2);return s.setLength(s.length()+t)}function MW(i,e,t=-1){const n=i.clone(),r=e.clone(),s=new K().subVectors(r,n),a=s.length(),o=s.clone().normalize(),l=new K().subVectors(r,n).divideScalar(2),c=Math.abs(o.x)%1,f=new K(-o.y,o.x-c*o.z,c*o.y).normalize(),d=new K().add(n).add(l).add(f.multiplyScalar(a/4).multiplyScalar(t));return[i,d,e]}function Gf(i,e,t,n,r,s){const a=pA(i,t,e),o=pA(t,i,n);return r?new Xg(...MW(a,o,s)):new i1(a,o)}function Hf(i){return new K(i.position.x,i.position.y,i.position.z||0)}function pA(i,e,t){const n=i.distanceTo(e);return i.clone().add(e.clone().sub(i).multiplyScalar(t/n))}function mA(i,e){return{...i,position:{...i.position,x:i.position.x+e.x,y:i.position.y+e.y,z:i.position.z+e.z}}}function wW({edge:i,edges:e,curved:t}){let n=t,r;const s=e.filter(a=>a.target===i.target&&a.source===i.source).map(a=>a.id);if(s.length>1){n=!0;const a=s.indexOf(i.id);s.length===2?r=a===0?dA:-.7:r=(a-Math.floor(s.length/2))*dA}return{curved:n,curveOffset:r}}function Vf(i){let e=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(let o of i)e=Math.min(e,o.position.x),t=Math.max(t,o.position.x),n=Math.min(n,o.position.y),r=Math.max(r,o.position.y),s=Math.min(s,o.position.z),a=Math.max(a,o.position.z);return{height:r-n,width:t-e,minX:e,maxX:t,minY:n,maxY:r,minZ:s,maxZ:a,x:(t+e)/2,y:(r+n)/2,z:(a+s)/2}}function TW(i,e){return e?i.reduce((t,n)=>{const r=n.data[e];return r&&t.set(r,[...t.get(r)||[],n]),t},new Map):new Map}function AW({nodes:i,clusterAttribute:e}){const t=new Map;if(e){const n=TW(i,e);for(const[r,s]of n){const a=Vf(s);t.set(r,{label:r,nodes:s,position:a})}}return t}function CW(i,e,t){return mV.bidirectional(i,e,t)}const gA=i=>i.tagName!=="INPUT"&&i.tagName!=="SELECT"&&i.tagName!=="TEXTAREA"&&!i.isContentEditable,z3=({actives:i=[],selections:e=[],collapsedNodeIds:t=[],theme:n})=>eV(r=>{var s,a,o;return{theme:{...n,edge:{...n==null?void 0:n.edge,label:{...(s=n==null?void 0:n.edge)==null?void 0:s.label,fontSize:((o=(a=n==null?void 0:n.edge)==null?void 0:a.label)==null?void 0:o.fontSize)??6}}},edges:[],nodes:[],collapsedNodeIds:t,clusters:new Map,panning:!1,draggingIds:[],actives:i,edgeContextMenus:new Set,edgeMeshes:[],selections:e,hoveredNodeId:null,drags:{},graph:new cn({multi:!0}),setTheme:l=>r(c=>({...c,theme:l})),setClusters:l=>r(c=>({...c,clusters:l})),setEdgeContextMenus:l=>r(c=>({...c,edgeContextMenus:l})),setEdgeMeshes:l=>r(c=>({...c,edgeMeshes:l})),setPanning:l=>r(c=>({...c,panning:l})),setDrags:l=>r(c=>({...c,drags:l})),addDraggingId:l=>r(c=>({...c,draggingIds:[...c.draggingIds,l]})),removeDraggingId:l=>r(c=>({...c,draggingIds:c.draggingIds.filter(f=>f!==l)})),setActives:l=>r(c=>({...c,actives:l})),setSelections:l=>r(c=>({...c,selections:l})),setHoveredNodeId:l=>r(c=>({...c,hoveredNodeId:l})),setNodes:l=>r(c=>({...c,nodes:l,centerPosition:Vf(l)})),setEdges:l=>r(c=>({...c,edges:l})),setNodePosition:(l,c)=>r(f=>{var d,p;const m=f.nodes.find(b=>b.id===l),y=Hf(m),_=new K(c.x,c.y,c.z).sub(y),g=[...f.nodes];if((d=f.selections)!=null&&d.includes(l))(p=f.selections)==null||p.forEach(b=>{const S=f.nodes.find(E=>E.id===b);if(S){const E=f.nodes.indexOf(S);g[E]=mA(S,_)}});else{const b=f.nodes.indexOf(m);g[b]=mA(m,_)}return{...f,drags:{...f.drags,[l]:m},nodes:g}}),setCollapsedNodeIds:(l=[])=>r(c=>({...c,collapsedNodeIds:l})),setClusterPosition:(l,c)=>r(f=>{const d=new Map(f.clusters),p=d.get(l);if(p){const m=p.position,y=new K(c.x-m.x,c.y-m.y,c.z-(m.z??0)),x=[...f.nodes],_={...f.drags};x.forEach((S,E)=>{S.cluster===l&&(x[E]={...S,position:{...S.position,x:S.position.x+y.x,y:S.position.y+y.y,z:S.position.z+(y.z??0)}},_[S.id]=S)});const g=x.filter(S=>S.cluster===l),b=Vf(g);return d.set(l,{...p,position:b}),{...f,drags:{..._,[l]:p},clusters:d,nodes:x}}return f})}}),F3=z3({}),B3=sb?null:$.createContext(F3),RW=({children:i,store:e=F3})=>sb?i:lo.createElement(B3.Provider,{value:e},i),tt=i=>{const e=$.useContext(B3);return fR(e,iV(i))};function k3({nodeId:i,nodes:e,edges:t,currentHiddenNodes:n,currentHiddenEdges:r}){const s=[],a=[],o=n.map(m=>m.id),l=r.map(m=>m.id),c=t.filter(m=>m.source===i),f=c.map(m=>m.target);a.push(...c);for(const m of f){const y=t.filter(_=>_.target===m&&_.source!==i);let x=!1;if((y.length===0||y.length>0&&!o.includes(m)&&y.map(g=>g.id).every(g=>l.includes(g)))&&(x=!0),x){const _=e.find(b=>b.id===m);_&&s.push(_);const g=k3({nodeId:m,nodes:e,edges:t,currentHiddenEdges:a,currentHiddenNodes:s});a.push(...g.hiddenEdges),s.push(...g.hiddenNodes)}}const d=Object.values(a.reduce((m,y)=>({...m,[y.id]:y}),{})),p=Object.values(s.reduce((m,y)=>({...m,[y.id]:y}),{}));return{hiddenEdges:d,hiddenNodes:p}}const DW=({collapsedIds:i,nodes:e,edges:t})=>{const n=[],r=[];for(const c of i){const{hiddenEdges:f,hiddenNodes:d}=k3({nodeId:c,nodes:e,edges:t,currentHiddenEdges:r,currentHiddenNodes:n});n.push(...d),r.push(...f)}const s=n.map(c=>c.id),a=r.map(c=>c.id),o=e.filter(c=>!s.includes(c.id)),l=t.filter(c=>!a.includes(c.id));return{visibleNodes:o,visibleEdges:l}},UW=({layoutType:i,sizingType:e,labelType:t,sizingAttribute:n,clusterAttribute:r,selections:s,nodes:a,edges:o,actives:l,collapsedNodeIds:c,defaultNodeSize:f,maxNodeSize:d,minNodeSize:p,layoutOverrides:m,constrainDragging:y})=>{const x=tt(G=>G.graph),_=tt(G=>G.clusters),g=tt(G=>G.nodes),b=tt(G=>G.setClusters),S=tt(G=>G.collapsedNodeIds),E=tt(G=>G.setEdges),w=tt(G=>G.nodes),T=tt(G=>G.setNodes),R=tt(G=>G.setSelections),U=tt(G=>G.setActives),C=tt(G=>G.drags),D=tt(G=>G.setDrags),I=tt(G=>G.setCollapsedNodeIds),P=$.useRef(!1),O=$.useRef(null),H=Kn(G=>G.camera),J=$.useRef(C),z=$.useRef([]);$.useEffect(()=>{var G;if(!r)return;const Z=g.map(j=>j.id),Q=a.find(j=>!Z.includes(j.id));if(Q){const j=Q.data[r],ee=_.get(j),pe={...J.current};(G=ee==null?void 0:ee.nodes)==null||G.forEach(le=>pe[le.id]=void 0),J.current=pe,D(pe)}},[g,a,r,_,D]);const{visibleEdges:L,visibleNodes:F}=$.useMemo(()=>DW({collapsedIds:S,nodes:a,edges:o}),[S,a,o]),V=$.useCallback(G=>{const Z={...J.current};G.forEach(Q=>Z[Q.id]=Q),J.current=Z,D(Z)},[D]),W=$.useCallback(async G=>{O.current=G||vW({...m,type:i,graph:x,drags:J.current,clusters:z==null?void 0:z.current,clusterAttribute:r}),await cW(O.current);const Z=EW({graph:x,layout:O.current,sizingType:e,labelType:t,sizingAttribute:n,maxNodeSize:d,minNodeSize:p,defaultNodeSize:f,clusterAttribute:r}),Q=AW({nodes:Z.nodes,clusterAttribute:r});y&&Q.forEach(j=>{var ee,pe;const le=z.current.get(j.label);(le==null?void 0:le.nodes.length)===j.nodes.length&&(j.position=((pe=(ee=z.current)==null?void 0:ee.get(j.label))==null?void 0:pe.position)??j.position)}),E(Z.edges),T(Z.nodes),b(Q),r&&V(Z.nodes)},[m,i,r,e,t,n,d,p,f,E,T,b]);return $.useEffect(()=>{J.current=C},[C,r,W]),$.useEffect(()=>{z.current=_},[_]),$.useEffect(()=>{const G=w.map(Q=>({...Q,labelVisible:O3({nodeCount:w==null?void 0:w.length,labelType:t,camera:H,nodePosition:Q==null?void 0:Q.position})("node",Q==null?void 0:Q.size)}));G.some((Q,j)=>Q.labelVisible!==w[j].labelVisible)&&T(G)},[H,H.zoom,H.position.z,T,w,t]),$.useEffect(()=>{P.current&&R(s)},[s,R]),$.useEffect(()=>{P.current&&U(l)},[l,U]),$.useEffect(()=>{async function G(){P.current=!1,SW(x,F,L),await W(),requestAnimationFrame(()=>P.current=!0)}G()},[F,L]),$.useEffect(()=>{P.current&&I(c)},[c,I]),$.useEffect(()=>{P.current&&(J.current={},D({}),W())},[i,W,D]),$.useEffect(()=>{P.current&&W(O.current)},[e,n,t,W]),{updateLayout:W}},Wf=({text:i,fontSize:e=7,fontUrl:t,color:n="#2A6475",opacity:r=1,stroke:s,active:a,ellipsis:o=75,rotation:l})=>{const c=o&&!a?iW(i,o):i,f=$.useMemo(()=>new $e(n),[n]),d=$.useMemo(()=>s?new $e(s):void 0,[s]);return fe.jsx(g3,{position:[0,0,1],children:fe.jsx(J9,{font:t,fontSize:e,color:f,fillOpacity:r,textAlign:"center",outlineWidth:s?1:0,outlineColor:d,depthOffset:0,maxWidth:100,overflowWrap:"break-word",rotation:l,children:c})})},G3=({draggable:i,set:e,position:t,bounds:n,onDragStart:r,onDragEnd:s})=>{const a=Kn(_=>_.camera),o=Kn(_=>_.raycaster),l=Kn(_=>_.size),c=Kn(_=>_.gl),{mouse2D:f,mouse3D:d,offset:p,normal:m,plane:y}=$.useMemo(()=>({mouse2D:new ke,mouse3D:new K,offset:new K,normal:new K,plane:new la}),[]),x=$.useMemo(()=>c.domElement.getBoundingClientRect(),[c.domElement]);return t9({onDragStart:({event:_})=>{const{eventObject:g,point:b}=_;g.getWorldPosition(p).sub(b),d.copy(b),r()},onDrag:({xy:_,buttons:g,cancel:b})=>{if(g!==1){b();return}const S=(_[0]-((x==null?void 0:x.left)??0))/l.width*2-1,E=-((_[1]-((x==null?void 0:x.top)??0))/l.height)*2+1;f.set(S,E),o.setFromCamera(f,a),a.getWorldDirection(m).negate(),y.setFromNormalAndCoplanarPoint(m,d),o.ray.intersectPlane(y,d);const w=new K(t.x,t.y,t.z).copy(d).add(p);if(n){const T=new K((n.minX+n.maxX)/2,(n.minY+n.maxY)/2,(n.minZ+n.maxZ)/2),R=(n.maxX-n.minX)/2,U=w.clone().sub(T);U.length()>R&&(U.normalize().multiplyScalar(R),w.copy(T).add(U))}return e(w)},onDragEnd:s},{drag:{enabled:i,threshold:10}})},ab=({sensitivity:i=7,interval:e=50,timeout:t=0,disabled:n,onPointerOver:r,onPointerOut:s})=>{const a=$.useRef(!1),o=$.useRef(null),l=$.useRef(0),c=$.useRef({x:null,y:null,px:null,py:null}),f=$.useCallback(_=>{c.current.x=_.clientX,c.current.y=_.clientY},[]),d=$.useCallback(_=>{o.current=clearTimeout(o.current);const{px:g,x:b,py:S,y:E}=c.current;Math.abs(g-b)+Math.abs(S-E)<i?(l.current=1,r(_)):(c.current.px=b,c.current.py=E,o.current=setTimeout(()=>d(_),e))},[e,r,i]),p=$.useCallback(()=>{clearTimeout(o.current),typeof window<"u"&&document.removeEventListener("mousemove",f,!1)},[f]),m=$.useCallback(_=>{n||(a.current=!0,p(),l.current!==1&&(c.current.px=_.pointer.x,c.current.py=_.pointer.y,typeof window<"u"&&document.addEventListener("mousemove",f,!1),o.current=setTimeout(()=>d(_),t)))},[p,d,n,f,t]),y=$.useCallback(_=>{o.current=clearTimeout(o.current),l.current=0,s(_)},[s]),x=$.useCallback(_=>{a.current=!1,p(),l.current===1&&(o.current=setTimeout(()=>y(_),t))},[p,y,t]);return{pointerOver:m,pointerOut:x}},H3=$.createContext({controls:null,resetControls:()=>{},zoomIn:()=>{},zoomOut:()=>{},dollyIn:()=>{},dollyOut:()=>{},panLeft:()=>{},panRight:()=>{},panUp:()=>{},panDown:()=>{},freeze:()=>{},unFreeze:()=>{}}),_0=()=>{const i=$.useContext(H3);if(i===void 0)throw new Error("`useCameraControls` hook must be used within a `ControlsProvider` component");return i},OW=({outerRadius:i,innerRadius:e,padding:t,normalizedFill:n,normalizedStroke:r,opacity:s,animated:a,theme:o})=>{var l;const{opacity:c}=yr({from:{opacity:0},to:{opacity:s},config:{..._r,duration:a?void 0:0}});return fe.jsxs(fe.Fragment,{children:[fe.jsxs("mesh",{children:[fe.jsx("ringGeometry",{attach:"geometry",args:[i,0,128]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:n,transparent:!0,depthTest:!1,opacity:(l=o.cluster)!=null&&l.fill?c:0,side:In,fog:!0})]}),fe.jsxs("mesh",{children:[fe.jsx("ringGeometry",{attach:"geometry",args:[i,e+t,128]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:r,transparent:!0,depthTest:!1,opacity:c,side:In,fog:!0})]})]})},LW=({animated:i,position:e,padding:t=40,labelFontUrl:n,disabled:r,radius:s=2,nodes:a,label:o,onClick:l,onPointerOver:c,onPointerOut:f,draggable:d=!1,onDragged:p,onRender:m})=>{var y,x,_,g,b,S,E;const w=tt(ie=>ie.theme),T=Math.max(e.width,e.height)/2,R=T-s+t,[U,C]=$.useState(!1),D=tt(ie=>ie.centerPosition),I=tt(ie=>ie.nodes),P=_0(),O=tt(ie=>ie.draggingIds),H=O.includes(o),J=O.length>0,z=tt(ie=>{var be;return(be=ie.actives)==null?void 0:be.some(k=>a.some(re=>re.id===k))}),L=tt(ie=>ie.hoveredNodeId),F=tt(ie=>{var be;return(be=ie.selections)==null?void 0:be.some(k=>a.some(re=>re.id===k))}),W=tt(ie=>{var be;return((be=ie.selections)==null?void 0:be.length)>0})?F||U||z?(y=w.cluster)==null?void 0:y.selectedOpacity:(x=w.cluster)==null?void 0:x.inactiveOpacity:(_=w.cluster)==null?void 0:_.opacity,G=$.useMemo(()=>{var ie,be;const k=[0,-R,2],re=(be=(ie=w.cluster)==null?void 0:ie.label)==null?void 0:be.offset;return re?[k[0]-re[0],k[1]-re[1],k[2]-re[2]]:k},[R,(b=(g=w.cluster)==null?void 0:g.label)==null?void 0:b.offset]),{circlePosition:Z}=yr({from:{circlePosition:[D.x,D.y,-1]},to:{circlePosition:e?[e.x,e.y,-1]:[0,0,-1]},config:{..._r,duration:i&&!J?void 0:0}}),Q=$.useMemo(()=>{var ie;return new $e((ie=w.cluster)==null?void 0:ie.stroke)},[(S=w.cluster)==null?void 0:S.stroke]),j=$.useMemo(()=>{var ie;return new $e((ie=w.cluster)==null?void 0:ie.fill)},[(E=w.cluster)==null?void 0:E.fill]),ee=tt(ie=>ie.addDraggingId),pe=tt(ie=>ie.removeDraggingId),le=tt(ie=>ie.setClusterPosition),ce=G3({draggable:d&&!L,position:{x:e.x,y:e.y,z:-1},set:ie=>le(o,ie),onDragStart:()=>{ee(o),C(!0)},onDragEnd:()=>{pe(o),C(!1);const ie=I.filter(be=>be.cluster===o);p==null||p({nodes:ie,label:o})}});El(U&&!J&&l!==void 0,"pointer"),El(U&&d&&!H&&l===void 0,"grab"),El(H,"grabbing");const{pointerOver:Le,pointerOut:Me}=ab({disabled:r,onPointerOver:ie=>{C(!0),P.freeze(),c==null||c({nodes:a,label:o},ie)},onPointerOut:ie=>{C(!1),P.unFreeze(),f==null||f({nodes:a,label:o},ie)}});return $.useMemo(()=>{var ie,be,k;return w.cluster&&fe.jsx(zn.group,{userData:{id:o,type:"cluster"},position:Z,onPointerOver:Le,onPointerOut:Me,onClick:re=>{!r&&!H&&(l==null||l({nodes:a,label:o},re))},...ce(),children:m?m({label:{position:G,text:o,opacity:W,fontUrl:n},opacity:W,outerRadius:R,innerRadius:T,padding:t,theme:w}):fe.jsxs(fe.Fragment,{children:[fe.jsx(OW,{outerRadius:R,innerRadius:T,padding:t,normalizedFill:j,normalizedStroke:Q,opacity:W,animated:i,theme:w}),((ie=w.cluster)==null?void 0:ie.label)&&fe.jsx(zn.group,{position:G,children:fe.jsx(Wf,{text:o,opacity:W,fontUrl:n,stroke:w.cluster.label.stroke,active:!1,color:(be=w.cluster)==null?void 0:be.label.color,fontSize:((k=w.cluster)==null?void 0:k.label.fontSize)??12})})]})})},[w,Z,Le,Me,R,j,T,t,Q,G,o,W,n,r,l,a,ce,H,m,i])},NW=({animated:i,color:e="#D8E6EA",length:t,opacity:n=.5,position:r,rotation:s,size:a=1,onActive:o,onContextMenu:l})=>{const c=$.useMemo(()=>new $e(e),[e]),f=$.useRef(null),d=tt(_=>_.draggingIds.length>0),p=tt(_=>_.centerPosition),[{pos:m,arrowOpacity:y}]=yr(()=>({from:{pos:p?[p.x,p.y,p.z]:[0,0,0],arrowOpacity:0},to:{pos:[r.x,r.y,r.z],arrowOpacity:n},config:{..._r,duration:i&&!d?void 0:0}}),[i,d,n,r]),x=$.useCallback(()=>{var _;const g=new K(0,1,0);(_=f.current)==null||_.quaternion.setFromUnitVectors(g,s)},[s,f]);return $.useEffect(()=>x(),[x]),fe.jsxs(zn.mesh,{position:m,ref:f,scale:[1,1,1],onPointerOver:()=>o(!0),onPointerOut:()=>o(!1),onPointerDown:_=>{_.nativeEvent.buttons===2&&(_.stopPropagation(),l())},children:[fe.jsx("cylinderGeometry",{args:[0,a,t,20,1,!0],attach:"geometry"}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:c,depthTest:!1,opacity:y,transparent:!0,side:In,fog:!0})]})},IW=({curveOffset:i,animated:e,color:t="#000",curve:n,curved:r=!1,id:s,opacity:a=1,size:o=1,onContextMenu:l,onClick:c,onPointerOver:f,onPointerOut:d})=>{const p=$.useRef(null),m=tt(b=>b.draggingIds.length>0),y=$.useMemo(()=>new $e(t),[t]),x=tt(b=>b.centerPosition),_=$.useRef(!1),{lineOpacity:g}=yr({from:{lineOpacity:0},to:{lineOpacity:a},config:{..._r,duration:e?void 0:0}});return yr(()=>{const b=n.getPoint(0),S=n.getPoint(1);return{from:{fromVertices:_.current?[S==null?void 0:S.x,S==null?void 0:S.y,(S==null?void 0:S.z)||0]:[x==null?void 0:x.x,x==null?void 0:x.y,(x==null?void 0:x.z)||0],toVertices:[b==null?void 0:b.x,b==null?void 0:b.y,(b==null?void 0:b.z)||0]},to:{fromVertices:[b==null?void 0:b.x,b==null?void 0:b.y,(b==null?void 0:b.z)||0],toVertices:[S==null?void 0:S.x,S==null?void 0:S.y,(S==null?void 0:S.z)||0]},onChange:E=>{const{fromVertices:w,toVertices:T}=E.value,R=new K(...w),U=new K(...T),C=Gf(R,0,U,0,r,i);p.current.copy(new Rl(C,20,o/2,5,!1))},config:{..._r,duration:e&&!m?void 0:0}}},[e,m,n,o]),$.useEffect(()=>{_.current=!0},[]),fe.jsxs("mesh",{userData:{id:s,type:"edge"},onPointerOver:f,onPointerOut:d,onClick:c,onPointerDown:b=>{b.nativeEvent.buttons===2&&(b.stopPropagation(),l())},children:[fe.jsx("tubeGeometry",{attach:"geometry",ref:p}),fe.jsx(zn.meshBasicMaterial,{attach:"material",opacity:g,fog:!0,transparent:!0,depthTest:!1,color:y})]})},vA=3,PW=({animated:i,arrowPlacement:e="end",contextMenu:t,disabled:n,labelPlacement:r="inline",id:s,interpolation:a,labelFontUrl:o,onContextMenu:l,onClick:c,onPointerOver:f,onPointerOut:d})=>{const p=tt(be=>be.theme),m=tt(be=>be.draggingIds.length>0),[y,x]=$.useState(!1),[_,g]=$.useState(!1),b=tt(be=>be.edges),S=b.find(be=>be.id===s),{target:E,source:w,label:T,labelVisible:R=!1,size:U=1,fill:C}=S,D=tt(be=>be.nodes.find(k=>k.id===w)),I=tt(be=>be.nodes.find(k=>k.id===E)),P=(U+p.edge.label.fontSize)/2,[O,H]=$.useMemo(()=>I3(U),[U]),{curveOffset:J,curved:z}=$.useMemo(()=>wW({edge:S,edges:b,curved:a==="curved"}),[S,b,a]),[L,F,V]=$.useMemo(()=>{const be=Hf(D),k=D.size,re=Hf(I),te=I.size;let we=Gf(be,k,re,te,z,J);const[se,Re]=N3(e,we,O);return e==="end"&&(we=Gf(be,k,se,0,z,J)),[we,se,Re]},[D,I,z,J,e,O]),W=$.useMemo(()=>{let be=P3(D.position,I.position,L3(P,r));if(z){const k=new K().subVectors(be,L.getPoint(.5));switch(r){case"above":k.y=k.y-vA;break;case"below":k.y=k.y+vA;break}be=be.sub(k)}return be},[D.position,I.position,P,r,z,L]),G=tt(be=>{var k;return(k=be.selections)==null?void 0:k.includes(s)}),Z=tt(be=>{var k;return(k=be.selections)==null?void 0:k.length}),Q=tt(be=>{var k;return(k=be.actives)==null?void 0:k.includes(s)}),j=tt(be=>be.centerPosition),ee=Z?G||Q?p.edge.selectedOpacity:p.edge.inactiveOpacity:p.edge.opacity,[{labelPosition:pe}]=yr(()=>({from:{labelPosition:j?[j.x,j.y,j.z]:[0,0,0]},to:{labelPosition:[W.x,W.y,W.z]},config:{..._r,duration:i&&!m?void 0:0}}),[W,i,m]),le=$.useMemo(()=>new Ui(0,0,r==="natural"?0:Math.atan((I.position.y-D.position.y)/(I.position.x-D.position.x))),[I.position.x,I.position.y,D.position.x,D.position.y,r]);El(y&&!m&&c!==void 0,"pointer");const{pointerOver:ce,pointerOut:Le}=ab({disabled:n,onPointerOver:be=>{x(!0),f==null||f(S,be)},onPointerOut:be=>{x(!1),d==null||d(S,be)}}),Me=$.useMemo(()=>e!=="none"&&fe.jsx(NW,{animated:i,color:G||y||Q?p.arrow.activeFill:C||p.arrow.fill,length:O,opacity:ee,position:F,rotation:V,size:H,onActive:x,onContextMenu:()=>{n||(g(!0),l==null||l(S))}}),[C,y,i,O,e,F,V,H,n,S,Q,G,l,ee,p.arrow.activeFill,p.arrow.fill]),ge=$.useMemo(()=>R&&T&&fe.jsx(zn.group,{position:pe,onContextMenu:()=>{n||(g(!0),l==null||l(S))},onPointerOver:ce,onPointerOut:Le,children:fe.jsx(Wf,{text:T,ellipsis:15,fontUrl:o,stroke:p.edge.label.stroke,color:G||y||Q?p.edge.label.activeColor:p.edge.label.color,opacity:ee,fontSize:p.edge.label.fontSize,rotation:le})}),[y,n,S,Q,G,T,o,pe,le,R,l,Le,ce,ee,p.edge.label.activeColor,p.edge.label.color,p.edge.label.fontSize,p.edge.label.stroke]),ie=$.useMemo(()=>_&&t&&fe.jsx(nb,{prepend:!0,center:!0,position:W,children:t({data:S,onClose:()=>g(!1)})}),[_,t,W,S]);return fe.jsxs("group",{children:[fe.jsx(IW,{curveOffset:J,animated:i,color:G||y||Q?p.edge.activeFill:C||p.edge.fill,curve:L,curved:z,id:s,opacity:ee,size:U,onClick:be=>{n||c==null||c(S,be)},onPointerOver:ce,onPointerOut:Le,onContextMenu:()=>{n||(g(!0),l==null||l(S))}}),Me,ge,ie]})},yA=new Ea(0,0,0);function zW(i,e){const t=$.useRef(null),n=tt(c=>c.theme);tt(c=>{t.current=c});const r=$.useRef(new Map);$.useRef(new Ea(0,0,0));const s=$.useRef(null),a=e==="curved",o=$.useCallback(c=>{const f=[],d=r.current,{nodes:p}=t.current,m=new Map(p.map(x=>[x.id,x])),y=n.edge.label.fontSize;return i!=="none"&&!s.current&&(s.current=new bu(0,1,1,20,1,!0)),c.forEach(x=>{const{target:_,source:g,size:b=1}=x,S=m.get(g),E=m.get(_);if(!S||!E)return;const w=`${S.position.x},${S.position.y},${E.position.x},${E.position.y},${b}`;if(d.has(w)){f.push(d.get(w));return}const T=Hf(S),R=S.size+y,U=Hf(E),C=E.size+y;let D=Gf(T,R,U,C,a),I=new Rl(D,20,b/2,5,!1);if(i==="none"){f.push(I),d.set(w,I);return}const[P,O]=I3(b),H=s.current.clone();H.scale(O,P,O);const[J,z]=N3(i,D,P),L=new _i;if(L.setFromUnitVectors(new K(0,1,0),z),H.applyQuaternion(L),H.translate(J.x,J.y,J.z),i&&i==="end"){const V=Gf(T,R,J,0,a);I=new Rl(V,20,b/2,5,!1)}const F=Vp([I,H]);f.push(F),d.set(w,F)}),f},[i,a,n.edge.label.fontSize]),l=$.useCallback((c,f)=>{const d=o(c),p=o(f);return Vp([p.length?Vp(p):yA,d.length?Vp(d):yA],!0)},[o]);return{getGeometries:o,getGeometry:l}}function FW(i,e,t){const n=$.useRef(i);$.useEffect(()=>{n.current=i},[i]);const r=tt(d=>d.edgeContextMenus),s=tt($.useCallback(d=>d.setEdgeContextMenus,[])),a=$.useRef(!1),o=$.useCallback(()=>{a.current=!0},[]),l=$.useRef(!1),c=$.useCallback(()=>{l.current=!0},[]),f=$.useCallback((d,p)=>{const{onClick:m,onContextMenu:y,onPointerOver:x,onPointerOut:_}=n.current;if(m&&a.current&&!t){a.current=!1;for(const g of p)m(g)}if((e||y)&&l.current&&!t){l.current=!1;const g=new Set(r);let b=!1;for(const S of p)r.has(S.id)||(g.add(S.id),b=!0,y==null||y(S));b&&s(g)}x&&p.filter(b=>!d.includes(b)).forEach(b=>{x(b)}),_&&d.filter(b=>!p.includes(b)).forEach(b=>{_(b)})},[e,t,r,s]);return{handleClick:o,handleContextMenu:c,handleIntersections:f}}function BW(i,e){const t=$.useRef(i),n=$.useRef(null);$.useEffect(()=>{t.current=i;const a=i.getAttribute("position");n.current=new Float32Array(a.array.length)},[i]);const r=$.useCallback(()=>{const a=t.current.getAttribute("position");return{from:new Float32Array(a.array.length),to:a.array}},[]),s=$.useCallback(a=>{const o=n.current;o.set(a);const l=new en(o,3,!1);t.current.setAttribute("position",l),l.needsUpdate=!0},[]);yr(()=>{if(!e)return null;const a=r();return{from:{positions:a.from},to:{positions:a.to},onChange:o=>{s(o.value.positions)},config:{..._r,duration:e?void 0:0}}},[e,r,s])}function kW(i,e,t){const[{activeOpacity:n,inactiveOpacity:r}]=yr(()=>({from:{activeOpacity:0,inactiveOpacity:0},to:{activeOpacity:e?t.edge.selectedOpacity:t.edge.opacity,inactiveOpacity:e?t.edge.inactiveOpacity:t.edge.opacity},config:{..._r,duration:i?void 0:0}}),[i,e,t]);return{activeOpacity:n,inactiveOpacity:r}}const GW=({animated:i,color:e,contextMenu:t,edge:n,labelFontUrl:r,labelPlacement:s="inline",opacity:a})=>{const o=tt(D=>D.theme),{target:l,source:c,label:f,labelVisible:d=!1,size:p=1}=n,m=tt(D=>D.nodes),[y,x]=$.useMemo(()=>[m.find(D=>D.id===c),m.find(D=>D.id===l)],[m,c,l]),_=tt(D=>D.draggingIds.length>0),g=$.useMemo(()=>(p+o.edge.label.fontSize)/2,[p,o.edge.label.fontSize]),b=$.useMemo(()=>P3(y.position,x.position,L3(g,s)),[y.position,x.position,g,s]),S=tt(D=>D.edgeContextMenus),E=tt(D=>D.setEdgeContextMenus),[{labelPosition:w}]=yr(()=>({from:{labelPosition:[0,0,0]},to:{labelPosition:[b.x,b.y,b.z]},config:{..._r,duration:i&&!_?void 0:0}}),[b,i,_]),T=$.useCallback(D=>{S.delete(D),E(new Set(S))},[S,E]),R=$.useMemo(()=>s==="natural"?new Ui(0,0,0):new Ui(0,0,Math.atan2(x.position.y-y.position.y,x.position.x-y.position.x)),[s,x.position.y,x.position.x,y.position.y,y.position.x]),U=$.useMemo(()=>({prepend:!0,center:!0,position:b}),[b]),C=$.useMemo(()=>({text:f,ellipsis:15,fontUrl:r,stroke:o.edge.label.stroke,color:e,opacity:a,fontSize:o.edge.label.fontSize,rotation:R}),[f,r,o.edge.label.stroke,e,a,o.edge.label.fontSize,R]);return fe.jsxs("group",{children:[d&&f&&fe.jsx(zn.group,{position:w,children:fe.jsx(Wf,{...C})}),t&&S.has(n.id)&&fe.jsx(nb,{...U,children:t({data:n,onClose:()=>T(n.id)})})]})},HW=({interpolation:i="linear",arrowPlacement:e="end",labelPlacement:t="inline",animated:n,contextMenu:r,disabled:s,edges:a,labelFontUrl:o,onClick:l,onContextMenu:c,onPointerOut:f,onPointerOver:d})=>{const p=tt(W=>W.theme),{getGeometries:m,getGeometry:y}=zW(e,i),x=tt(W=>W.draggingIds),_=tt(W=>W.edgeMeshes),g=tt(W=>W.setEdgeMeshes),b=tt(W=>W.actives||[]),S=tt(W=>W.selections||[]),[E,w,T,R]=$.useMemo(()=>{const W=[],G=[],Z=[],Q=[];return a.forEach(j=>{if(x.includes(j.source)||x.includes(j.target)){S.includes(j.id)||b.includes(j.id)?Z.push(j):Q.push(j);return}S.includes(j.id)||b.includes(j.id)?W.push(j):G.push(j)}),[W,G,Z,Q]},[a,b,S,x]),U=!!S.length,C=$.useMemo(()=>y(E,w),[y,E,w]),{activeOpacity:D,inactiveOpacity:I}=kW(n,U,p);BW(C,n),$.useEffect(()=>{if(x.length===0){const G=m(a).map(Z=>new pn(Z));g(G)}},[m,g,a,x.length]);const P=$.useRef(new pn),O=$.useRef(new pn),H=$.useCallback(W=>{if(!W.camera)return[];const G=W.intersectObjects(_);return G.length?G.map(Z=>a[_.indexOf(Z.object)]):[]},[_,a]),{handleClick:J,handleContextMenu:z,handleIntersections:L}=FW({onClick:l,onContextMenu:c,onPointerOut:f,onPointerOver:d},r,s),F=$.useRef([]),V=$.useRef([]);return r0(W=>{if(P.current.geometry=C,s)return;const G=F.current;if((x.length||x.length===0&&G!==null)&&(O.current.geometry=y(T,R)),F.current=x,x.length)return;const Z=V.current,Q=H(W.raycaster);L(Z,Q),Q.join()!==Z.join()&&(O.current.geometry=y(Q,[])),V.current=Q}),fe.jsxs("group",{onClick:J,onContextMenu:z,children:[fe.jsxs("mesh",{ref:P,children:[fe.jsx(zn.meshBasicMaterial,{attach:"material-0",color:p.edge.fill,depthTest:!1,fog:!0,opacity:I,side:In,transparent:!0}),fe.jsx(zn.meshBasicMaterial,{attach:"material-1",color:p.edge.activeFill,depthTest:!1,fog:!0,opacity:D,side:In,transparent:!0})]}),fe.jsxs("mesh",{ref:O,children:[fe.jsx(zn.meshBasicMaterial,{attach:"material-0",color:p.edge.fill,depthTest:!1,fog:!0,opacity:I,side:In,transparent:!0}),fe.jsx(zn.meshBasicMaterial,{attach:"material-1",color:p.edge.activeFill,depthTest:!1,fog:!0,opacity:D,side:In,transparent:!0})]}),a.map(W=>fe.jsx(GW,{animated:n,contextMenu:r,color:p.edge.label.color,disabled:s,edge:W,labelFontUrl:o,labelPlacement:t},W.id))]})},VW=({color:i="#D8E6EA",size:e=1,opacity:t=.5,animated:n,strokeWidth:r=5,innerRadius:s=4,segments:a=25})=>{const o=$.useMemo(()=>new $e(i),[i]),{ringSize:l,ringOpacity:c}=yr({from:{ringOpacity:0,ringSize:[1e-5,1e-5,1e-5]},to:{ringOpacity:t,ringSize:[e/2,e/2,1]},config:{..._r,duration:n?void 0:0}}),f=r/10,d=s+f;return fe.jsx(g3,{position:[0,0,1],children:fe.jsxs(zn.mesh,{scale:l,children:[fe.jsx("ringGeometry",{attach:"geometry",args:[s,d,a]}),fe.jsx(zn.meshBasicMaterial,{attach:"material",color:o,transparent:!0,depthTest:!1,opacity:c,side:In,fog:!0})]})})},WW=({color:i,id:e,size:t,selected:n,opacity:r=1,animated:s})=>{const{scale:a,nodeOpacity:o}=yr({from:{scale:[1e-5,1e-5,1e-5],nodeOpacity:0},to:{scale:[t,t,t],nodeOpacity:r},config:{..._r,duration:s?void 0:0}}),l=$.useMemo(()=>new $e(i),[i]),c=tt(f=>f.theme);return fe.jsxs(fe.Fragment,{children:[fe.jsxs(zn.mesh,{userData:{id:e,type:"node"},scale:a,children:[fe.jsx("sphereGeometry",{attach:"geometry",args:[1,25,25]}),fe.jsx(zn.meshPhongMaterial,{attach:"material",side:In,transparent:!0,fog:!0,opacity:o,color:l,emissive:l,emissiveIntensity:.7})]}),fe.jsx(VW,{opacity:n?.5:0,size:t,animated:s,color:n?c.ring.activeFill:c.ring.fill})]})},XW=({image:i,id:e,size:t,opacity:n=1,animated:r})=>{const s=$.useMemo(()=>new Q2().load(i),[i]),{scale:a,spriteOpacity:o}=yr({from:{scale:[1e-5,1e-5,1e-5],spriteOpacity:0},to:{scale:[t,t,t],spriteOpacity:n},config:{..._r,duration:r?void 0:0}});return fe.jsx(zn.sprite,{userData:{id:e,type:"node"},scale:a,children:fe.jsx(zn.spriteMaterial,{attach:"material",opacity:o,fog:!0,depthTest:!1,transparent:!0,side:In,children:fe.jsx("primitive",{attach:"map",object:s,minFilter:Pn})})})},jW=({animated:i,disabled:e,id:t,draggable:n=!1,labelFontUrl:r,contextMenu:s,onClick:a,onDoubleClick:o,onPointerOver:l,onDragged:c,onPointerOut:f,onContextMenu:d,renderNode:p,constrainDragging:m})=>{var y,x,_;const g=_0(),b=tt(ne=>ne.theme),S=tt(ne=>ne.nodes.find(ve=>ve.id===t)),E=tt(ne=>ne.edges),w=tt(ne=>ne.draggingIds),T=tt(ne=>ne.collapsedNodeIds),R=tt(ne=>ne.addDraggingId),U=tt(ne=>ne.removeDraggingId),C=tt(ne=>ne.setHoveredNodeId),D=tt(ne=>ne.setNodePosition),I=tt(ne=>ne.setCollapsedNodeIds),P=tt(ne=>ne.collapsedNodeIds.includes(t)),O=tt(ne=>{var ve;return(ve=ne.actives)==null?void 0:ve.includes(t)}),H=tt(ne=>{var ve;return(ve=ne.selections)==null?void 0:ve.includes(t)}),J=tt(ne=>{var ve;return((ve=ne.selections)==null?void 0:ve.length)>0}),z=tt(ne=>ne.centerPosition),L=tt(ne=>ne.clusters.get(S.cluster)),F=w.includes(t),V=w.length>0,{position:W,label:G,subLabel:Z,size:Q=7,labelVisible:j=!0}=S,ee=$.useRef(null),[pe,le]=$.useState(!1),[ce,Le]=$.useState(!1),Me=pe||H||O,ge=J?Me?b.node.selectedOpacity:b.node.inactiveOpacity:b.node.opacity,ie=$.useMemo(()=>E.filter(ve=>ve.source===t).length>0||P,[E,t,P]),be=$.useCallback(()=>{ie&&I(P?T.filter(ne=>ne!==t):[...T,t])},[ie,T,t,P,I]),[{nodePosition:k,labelPosition:re,subLabelPosition:te}]=yr(()=>({from:{nodePosition:z?[z.x,z.y,0]:[0,0,0],labelPosition:[0,-(Q+7),2],subLabelPosition:[0,-(Q+14),2]},to:{nodePosition:W?[W.x,W.y,Me?W.z+1:W.z]:[0,0,0],labelPosition:[0,-(Q+7),2],subLabelPosition:[0,-(Q+14),2]},config:{..._r,duration:i&&!V?void 0:0}}),[F,W,i,Q,Me]),we=G3({draggable:n,position:W,bounds:m?L==null?void 0:L.position:void 0,set:ne=>D(t,ne),onDragStart:()=>{R(t),le(!0)},onDragEnd:()=>{U(t),c==null||c(S)}});El(pe&&!V&&a!==void 0,"pointer"),El(pe&&n&&!F&&a===void 0,"grab"),El(F,"grabbing");const se=Me||F,Re=se?b.node.activeFill:S.fill||b.node.fill,{pointerOver:xe,pointerOut:de}=ab({disabled:e||F,onPointerOver:ne=>{g.freeze(),le(!0),l==null||l(S,ne),C(t)},onPointerOut:ne=>{g.unFreeze(),le(!1),f==null||f(S,ne),C(null)}}),We=$.useMemo(()=>p?p({id:t,color:Re,size:Q,active:se,opacity:ge,animated:i,selected:H,node:S}):fe.jsx(fe.Fragment,{children:S.icon?fe.jsx(XW,{id:t,image:S.icon||"",size:Q+8,opacity:ge,animated:i,color:Re,node:S,active:se,selected:H}):fe.jsx(WW,{id:t,size:Q,opacity:ge,animated:i,color:Re,node:S,active:se,selected:H})}),[p,t,Re,Q,se,ge,i,H,S]),X=$.useMemo(()=>{var ne,ve,ye;return j&&(j||H||pe)&&G&&fe.jsxs(fe.Fragment,{children:[fe.jsx(zn.group,{position:re,children:fe.jsx(Wf,{text:G,fontUrl:r,opacity:ge,stroke:b.node.label.stroke,active:H||pe||F||O,color:H||pe||F||O?b.node.label.activeColor:b.node.label.color})}),Z&&fe.jsx(zn.group,{position:te,children:fe.jsx(Wf,{text:Z,fontUrl:r,fontSize:5,opacity:ge,stroke:(ne=b.node.subLabel)==null?void 0:ne.stroke,active:H||pe||F||O,color:H||pe||F||O?(ve=b.node.subLabel)==null?void 0:ve.activeColor:(ye=b.node.subLabel)==null?void 0:ye.color})})]})},[pe,O,F,H,G,r,re,j,ge,Z,te,b.node.label.activeColor,b.node.label.color,b.node.label.stroke,(y=b.node.subLabel)==null?void 0:y.activeColor,(x=b.node.subLabel)==null?void 0:x.color,(_=b.node.subLabel)==null?void 0:_.stroke]),B=$.useMemo(()=>ce&&s&&fe.jsx(nb,{prepend:!0,center:!0,children:s({data:S,canCollapse:ie,isCollapsed:P,onCollapse:be,onClose:()=>Le(!1)})}),[ce,s,S,ie,P,be]);return fe.jsxs(zn.group,{renderOrder:1,userData:{id:t,type:"node"},ref:ee,position:k,onPointerOver:xe,onPointerOut:de,onClick:ne=>{!e&&!F&&(a==null||a(S,{canCollapse:ie,isCollapsed:P},ne))},onDoubleClick:ne=>{!e&&!F&&(o==null||o(S,ne))},onContextMenu:()=>{e||(Le(!0),d==null||d(S,{canCollapse:ie,isCollapsed:P,onCollapse:be}))},...we(),children:[We,B,X]})};function V3(i,e){const t=e.position.z;i<t?i-=t:i+=t;const n=e.fov/e.zoom*Math.PI/180;return 2*Math.tan(n/2)*Math.abs(i)}function qW(i,e){return V3(i,e)*e.aspect}function _A(i,e){var t,n,r,s;const a=qW(1,i),o=V3(1,i),l={x0:((t=i==null?void 0:i.position)==null?void 0:t.x)-a/2,x1:((n=i==null?void 0:i.position)==null?void 0:n.x)+a/2,y0:((r=i==null?void 0:i.position)==null?void 0:r.y)-o/2,y1:((s=i==null?void 0:i.position)==null?void 0:s.y)+o/2};return(e==null?void 0:e.x)>l.x0&&(e==null?void 0:e.x)<l.x1&&(e==null?void 0:e.y)>l.y0&&(e==null?void 0:e.y)<l.y1}function xA(i,e){return e.reduce((t,n)=>Math.abs(n-i%Math.PI)<Math.abs(t-i%Math.PI)?n:t)}function YW(i,e){const t=xA(i,[0,Math.PI]),n=xA(e,[Math.PI/2,3*Math.PI/2]);return{horizontalRotation:t-i%Math.PI,verticalRotation:n-e%Math.PI}}const Qp=50,ZW=({animated:i,disabled:e,layoutType:t})=>{const n=tt(x=>x.nodes),[r,s]=$.useState(!1),a=Kn(x=>x.invalidate),{controls:o}=_0(),l=Kn(x=>x.camera),c=$.useRef(!1),f=$.useCallback(async(x,_)=>{const g=(_==null?void 0:_.animated)!==void 0?_==null?void 0:_.animated:!0,b=(_==null?void 0:_.centerOnlyIfNodesNotInView)!==void 0?_==null?void 0:_.centerOnlyIfNodesNotInView:!1;if(!c.current||!b||b&&(x!=null&&x.some(S=>!_A(l,S.position)))){const{x:S,y:E,z:w}=Vf(x);await o.setTarget(S,E,w,g),r||s(!0),a()}},[a,o,n]),d=$.useCallback(async(x,_={animated:!0,fitOnlyIfNodesNotInView:!1})=>{const{fitOnlyIfNodesNotInView:g}=_;if(!g||g&&(x!=null&&x.some(b=>!_A(l,b.position)))){const{minX:b,maxX:S,minY:E,maxY:w,minZ:T,maxZ:R}=Vf(x);if(!t.includes("3d")){const{horizontalRotation:U,verticalRotation:C}=YW(o==null?void 0:o.azimuthAngle,o==null?void 0:o.polarAngle);o==null||o.rotate(U,C,!0)}await(o==null?void 0:o.zoomTo(1,_==null?void 0:_.animated)),await(o==null?void 0:o.fitToBox(new Jn(new K(b,E,T),new K(S,w,R)),_==null?void 0:_.animated,{cover:!1,paddingLeft:Qp,paddingRight:Qp,paddingBottom:Qp,paddingTop:Qp}))}},[l,o,t]),p=$.useCallback(x=>{let _=null;return x!=null&&x.length&&(_=x.reduce((g,b)=>{const S=n.find(E=>E.id===b);if(S)g.push(S);else throw new Error(`Attempted to center ${b} but it was not found in the nodes`);return g},[])),_},[n]),m=$.useCallback((x,_)=>{const g=p(x);f(g||n,{animated:i,centerOnlyIfNodesNotInView:_==null?void 0:_.centerOnlyIfNodesNotInView})},[i,f,p,n]),y=$.useCallback(async(x,_)=>{const g=p(x);await d(g||n,{animated:i,..._})},[i,d,p,n]);return $.useLayoutEffect(()=>{async function x(){o&&(n!=null&&n.length)&&(c.current||(await f(n,{animated:!1}),await d(n,{animated:!1}),c.current=!0))}x()},[o,f,n,i,l,d]),{centerNodes:f,centerNodesById:m,fitNodesInViewById:y,isCentered:r}},KW=$.forwardRef(({onNodeClick:i,onNodeDoubleClick:e,onNodeContextMenu:t,onEdgeContextMenu:n,onEdgeClick:r,onEdgePointerOver:s,onEdgePointerOut:a,onNodePointerOver:o,onNodePointerOut:l,onClusterClick:c,onNodeDragged:f,onClusterDragged:d,onClusterPointerOver:p,onClusterPointerOut:m,contextMenu:y,animated:x,disabled:_,draggable:g,constrainDragging:b=!1,edgeLabelPosition:S,edgeArrowPosition:E,edgeInterpolation:w="linear",labelFontUrl:T,renderNode:R,onRenderCluster:U,...C},D)=>{const{layoutType:I,clusterAttribute:P}=C,O=Kn(ce=>ce.gl),H=Kn(ce=>ce.scene),J=Kn(ce=>ce.camera),{updateLayout:z}=UW({...C,constrainDragging:b});if(P&&!(I==="forceDirected2d"||I==="forceDirected3d"))throw new Error("Clustering is only supported for the force directed layouts.");const L=tt(ce=>ce.graph),F=tt(ce=>ce.nodes),V=tt(ce=>ce.edges),W=tt(ce=>[...ce.clusters.values()]),{centerNodesById:G,fitNodesInViewById:Z,isCentered:Q}=ZW({animated:x,disabled:_,layoutType:I});$.useImperativeHandle(D,()=>({centerGraph:G,fitNodesInView:Z,graph:L,renderScene:()=>O.render(H,J)}),[G,Z,L,O,H,J]);const j=$.useCallback(ce=>{f==null||f(ce),P&&z()},[P,f,z]),ee=$.useMemo(()=>F.map(ce=>fe.jsx(jW,{id:ce==null?void 0:ce.id,labelFontUrl:T,draggable:g,constrainDragging:b,disabled:_,animated:x,contextMenu:y,renderNode:R,onClick:i,onDoubleClick:e,onContextMenu:t,onPointerOver:o,onPointerOut:l,onDragged:j},ce==null?void 0:ce.id)),[b,x,y,_,g,T,F,i,t,e,j,l,o,R]),pe=$.useMemo(()=>x?V.map(ce=>fe.jsx(PW,{id:ce.id,disabled:_,animated:x,labelFontUrl:T,labelPlacement:S,arrowPlacement:E,interpolation:w,contextMenu:y,onClick:r,onContextMenu:n,onPointerOver:s,onPointerOut:a},ce.id)):fe.jsx(HW,{edges:V,disabled:_,animated:x,labelFontUrl:T,labelPlacement:S,arrowPlacement:E,interpolation:w,contextMenu:y,onClick:r,onContextMenu:n,onPointerOver:s,onPointerOut:a}),[x,y,_,E,w,S,V,T,r,n,a,s]),le=$.useMemo(()=>W.map(ce=>fe.jsx(LW,{animated:x,disabled:_,draggable:g,labelFontUrl:T,onClick:c,onPointerOver:p,onPointerOut:m,onDragged:d,onRender:U,...ce},ce.label)),[x,W,_,g,T,c,m,p,d,U]);return Q&&fe.jsxs($.Fragment,{children:[pe,ee,le]})});di.install({THREE:{MOUSE:SA,Vector2:ke,Vector3:K,Vector4:kt,Quaternion:_i,Matrix4:bt,Spherical:fC,Box3:Jn,Sphere:ri,Raycaster:y1,MathUtils:{DEG2RAD:(lA=Km)==null?void 0:lA.DEG2RAD,clamp:(cA=Km)==null?void 0:cA.clamp}}});IC({ThreeCameraControls:di});const $p={ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40},JW=$.forwardRef(({mode:i="rotate",children:e,animated:t,disabled:n,minDistance:r=1e3,maxDistance:s=5e4},a)=>{const o=$.useRef(null),l=Kn(O=>O.camera),c=Kn(O=>O.gl),f=i==="orbit",d=tt(O=>O.setPanning),p=tt(O=>O.draggingIds.length>0),m=$.useRef(0),[y,x]=$.useState(!1);r0((O,H)=>{var J,z;(J=o.current)!=null&&J.enabled&&((z=o.current)==null||z.update(H)),f&&(o.current.azimuthAngle+=20*H*Km.DEG2RAD)},-1),$.useEffect(()=>()=>{var O;return(O=o.current)==null?void 0:O.dispose()},[]);const _=$.useCallback(()=>{var O;(O=o.current)==null||O.zoom(l.zoom/2,t)},[t,l.zoom]),g=$.useCallback(()=>{var O;(O=o.current)==null||O.zoom(-l.zoom/2,t)},[t,l.zoom]),b=$.useCallback(O=>{var H;(H=o.current)==null||H.dolly(O,t)},[t]),S=$.useCallback(O=>{var H;(H=o.current)==null||H.dolly(O,t)},[t]),E=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(-.03*O.deltaTime,0,t)},[t,f]),w=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(.03*O.deltaTime,0,t)},[t,f]),T=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(0,.03*O.deltaTime,t)},[t,f]),R=$.useCallback(O=>{var H;f||(H=o.current)==null||H.truck(0,-.03*O.deltaTime,t)},[t,f]),U=$.useCallback(O=>{O.code==="Space"&&(i==="rotate"?o.current.mouseButtons.left=di.ACTION.TRUCK:o.current.mouseButtons.left=di.ACTION.ROTATE)},[i]),C=$.useCallback(O=>{O.code==="Space"&&(i==="rotate"?o.current.mouseButtons.left=di.ACTION.ROTATE:o.current.mouseButtons.left=di.ACTION.TRUCK)},[i]),[D,I]=$.useState(null);$.useEffect(()=>{sb||I({leftKey:new Jp($p.ARROW_LEFT,100),rightKey:new Jp($p.ARROW_RIGHT,100),upKey:new Jp($p.ARROW_UP,100),downKey:new Jp($p.ARROW_DOWN,100)})},[]),$.useEffect(()=>(!n&&D&&(D.leftKey.addEventListener("holding",w),D.rightKey.addEventListener("holding",E),D.upKey.addEventListener("holding",T),D.downKey.addEventListener("holding",R),window.addEventListener("keydown",U),window.addEventListener("keyup",C)),()=>{D&&(D.leftKey.removeEventListener("holding",w),D.rightKey.removeEventListener("holding",E),D.upKey.removeEventListener("holding",T),D.downKey.removeEventListener("holding",R),window.removeEventListener("keydown",U),window.removeEventListener("keyup",C))}),[n,U,C,R,w,E,T,D]),$.useEffect(()=>{n?(o.current.mouseButtons.left=di.ACTION.NONE,o.current.mouseButtons.middle=di.ACTION.NONE,o.current.mouseButtons.wheel=di.ACTION.NONE):(o.current.mouseButtons.left=di.ACTION.TRUCK,o.current.mouseButtons.middle=di.ACTION.TRUCK,o.current.mouseButtons.wheel=di.ACTION.DOLLY)},[n]),$.useEffect(()=>{const O=()=>d(!0),H=()=>d(!1),J=o.current;return J&&(J.addEventListener("control",O),J.addEventListener("controlend",H)),()=>{J&&(J.removeEventListener("control",O),J.removeEventListener("controlend",H))}},[o,d]),$.useEffect(()=>{p?(o.current.mouseButtons.left=di.ACTION.NONE,o.current.touches.one=di.ACTION.NONE):i==="rotate"?(o.current.mouseButtons.left=di.ACTION.ROTATE,o.current.touches.one=di.ACTION.TOUCH_ROTATE):(o.current.touches.one=di.ACTION.TOUCH_TRUCK,o.current.mouseButtons.left=di.ACTION.TRUCK)},[p,i]);const P=$.useMemo(()=>({controls:o.current,zoomIn:()=>_(),zoomOut:()=>g(),dollyIn:(O=1e3)=>b(O),dollyOut:(O=-1e3)=>S(O),panLeft:(O=100)=>w({deltaTime:O}),panRight:(O=100)=>E({deltaTime:O}),panDown:(O=100)=>R({deltaTime:O}),panUp:(O=100)=>T({deltaTime:O}),resetControls:O=>{var H;return(H=o.current)==null?void 0:H.reset(O)},freeze:()=>{o.current.truckSpeed&&(m.current=o.current.truckSpeed),o.current.truckSpeed=0},unFreeze:()=>o.current.truckSpeed=m.current}),[_,g,w,E,R,T,o.current]);return $.useImperativeHandle(a,()=>P),fe.jsxs(H3.Provider,{value:P,children:[fe.jsx("threeCameraControls",{ref:O=>{o.current=O,y||x(!0)},args:[l,c.domElement],smoothTime:.1,minDistance:r,dollyToCursor:!0,maxDistance:s}),e]})}),QW={canvas:{background:"#fff"},node:{fill:"#7CA0AB",activeFill:"#1DE9AC",opacity:1,selectedOpacity:1,inactiveOpacity:.2,label:{color:"#2A6475",stroke:"#fff",activeColor:"#1DE9AC"},subLabel:{color:"#ddd",stroke:"transparent",activeColor:"#1DE9AC"}},lasso:{border:"1px solid #55aaff",background:"rgba(75, 160, 255, 0.1)"},ring:{fill:"#D8E6EA",activeFill:"#1DE9AC"},edge:{fill:"#D8E6EA",activeFill:"#1DE9AC",opacity:1,selectedOpacity:1,inactiveOpacity:.1,label:{stroke:"#fff",color:"#2A6475",activeColor:"#1DE9AC",fontSize:6}},arrow:{fill:"#D8E6EA",activeFill:"#1DE9AC"},cluster:{stroke:"#D8E6EA",opacity:1,selectedOpacity:1,inactiveOpacity:.1,label:{stroke:"#fff",color:"#2A6475"}}};function P_(i,e,t){e=Array.isArray(e)?e:[e];const n=[],r=[];for(const s of e){const a=[...i.inEdgeEntries(s)??[],...i.outEdgeEntries(s)??[]];if(a)for(const o of a){const l=o.attributes.id;if(t==="in"?o.target===s&&!r.includes(l)&&r.push(l):t==="out"?o.source===s&&!r.includes(l)&&r.push(l):r.includes(l)||r.push(l),t==="out"||t==="all"){const c=o.target;n.includes(c)||n.push(c)}(t==="in"||t==="all")&&(n.includes(o.source)||n.push(o.source))}}return{nodes:n,edges:r}}function em(i,e,t){const{offsetX:n,offsetY:r}=i,{width:s,height:a}=t;e.set(n/s*2-1,-(r/a)*2+1)}function $W(i){const e=document.createElement("div");return e.style.pointerEvents="none",e.style.border=i.lasso.border,e.style.backgroundColor=i.lasso.background,e.style.position="fixed",e}const eX=({children:i,type:e="none",onLasso:t,onLassoEnd:n,disabled:r})=>{var s;const a=tt(P=>P.theme),o=Kn(P=>P.camera),l=Kn(P=>P.gl),c=Kn(P=>P.setEvents),f=Kn(P=>P.size),d=Kn(P=>P.get),p=Kn(P=>P.scene),m=_0(),y=tt(P=>P.actives),x=tt(P=>P.setActives),_=tt(P=>P.edges),g=tt(P=>P.edgeMeshes),b=$.useRef(null),S=$.useRef(null),E=$.useRef($W(a)),w=$.useRef(null),T=$.useRef(!1),R=$.useRef(d().events.enabled),U=$.useRef((s=m.controls)==null?void 0:s.enabled),C=$.useCallback(P=>{if(T.current){const[O,H,J]=w.current;J.x=Math.max(O.x,P.clientX),J.y=Math.max(O.y,P.clientY),H.x=Math.min(O.x,P.clientX),H.y=Math.min(O.y,P.clientY),E.current.style.left=`${H.x}px`,E.current.style.top=`${H.y}px`,E.current.style.width=`${J.x-H.x}px`,E.current.style.height=`${J.y-H.y}px`,em(P,b.current.endPoint,f),em(P,S.current.endPoint,f);const z=[],L=S.current.select().sort(V=>V.uuid).map(V=>_[g.indexOf(V)].id);z.push(...L);const F=b.current.select().sort(V=>V.uuid).filter(V=>{var W,G;return V.isMesh&&((W=V.userData)==null?void 0:W.id)&&(((G=V.userData)==null?void 0:G.type)===e||e==="all")}).map(V=>V.userData.id);z.push(...F),requestAnimationFrame(()=>{x(z),t==null||t(z)}),document.addEventListener("pointermove",C,{passive:!0,capture:!0,once:!0})}},[f,_,g,e,x,t]),D=$.useCallback(()=>{var P;T.current&&(c({enabled:R.current}),T.current=!1,(P=E.current.parentElement)==null||P.removeChild(E.current),m.controls.enabled=U.current,n==null||n(y),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",D))},[c,m.controls,n,y,C]),I=$.useCallback(P=>{var O,H;if(P.shiftKey){R.current=d().events.enabled,U.current=(O=m.controls)==null?void 0:O.enabled,b.current=new zT(o,p);const J=new Pg;g.length&&J.add(...g),S.current=new zT(o,J),w.current=[new ke,new ke,new ke];const[z]=w.current;m.controls.enabled=!1,c({enabled:!1}),T.current=!0,(H=l.domElement.parentElement)==null||H.appendChild(E.current),E.current.style.left=`${P.clientX}px`,E.current.style.top=`${P.clientY}px`,E.current.style.width="0px",E.current.style.height="0px",z.x=P.clientX,z.y=P.clientY,em(P,b.current.startPoint,f),em(P,S.current.startPoint,f),document.addEventListener("pointermove",C,{passive:!0,capture:!0,once:!0}),document.addEventListener("pointerup",D,{passive:!0})}},[o,m.controls,g,d,l.domElement.parentElement,C,D,p,c,f]);return $.useEffect(()=>{if(!(r||e==="none"))return typeof window<"u"&&(document.addEventListener("pointerdown",I,{passive:!0}),document.addEventListener("pointermove",C,{passive:!0}),document.addEventListener("pointerup",D,{passive:!0})),()=>{typeof window<"u"&&(document.removeEventListener("pointerdown",I),document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",D))}},[e,r,I,C,D]),fe.jsx("group",{children:i})},tX="_canvas_670zp_1",nX={canvas:tX},iX={alpha:!0,antialias:!0},rX={position:[0,0,1e3],near:5,far:5e4,fov:10},sX=$.forwardRef(({cameraMode:i="pan",layoutType:e="forceDirected2d",sizingType:t="default",labelType:n="auto",theme:r=QW,animated:s=!0,defaultNodeSize:a=7,minNodeSize:o=5,maxNodeSize:l=15,lassoType:c="none",glOptions:f={},edges:d,children:p,nodes:m,minDistance:y,maxDistance:x,onCanvasClick:_,disabled:g,onLasso:b,onLassoEnd:S,...E},w)=>{var T,R;const U=$.useRef(null),C=$.useRef(null),D=$.useRef(null);$.useImperativeHandle(w,()=>({centerGraph:(L,F)=>{var V;return(V=U.current)==null?void 0:V.centerGraph(L,F)},fitNodesInView:(L,F)=>{var V;return(V=U.current)==null?void 0:V.fitNodesInView(L,F)},zoomIn:()=>{var L;return(L=C.current)==null?void 0:L.zoomIn()},zoomOut:()=>{var L;return(L=C.current)==null?void 0:L.zoomOut()},dollyIn:L=>{var F;return(F=C.current)==null?void 0:F.dollyIn(L)},dollyOut:L=>{var F;return(F=C.current)==null?void 0:F.dollyOut(L)},panLeft:()=>{var L;return(L=C.current)==null?void 0:L.panLeft()},panRight:()=>{var L;return(L=C.current)==null?void 0:L.panRight()},panDown:()=>{var L;return(L=C.current)==null?void 0:L.panDown()},panUp:()=>{var L;return(L=C.current)==null?void 0:L.panUp()},resetControls:L=>{var F;return(F=C.current)==null?void 0:F.resetControls(L)},getControls:()=>{var L;return(L=C.current)==null?void 0:L.controls},getGraph:()=>{var L;return(L=U.current)==null?void 0:L.graph},exportCanvas:()=>(U.current.renderScene(),D.current.toDataURL()),freeze:()=>{var L;return(L=C.current)==null?void 0:L.freeze()},unFreeze:()=>{var L;return(L=C.current)==null?void 0:L.unFreeze()}}));const{selections:I,actives:P,collapsedNodeIds:O}=E,H=d.length+m.length>400?!1:s,J=$.useMemo(()=>({...f,...iX}),[f]),z=$.useRef(z3({selections:I,actives:P,theme:r,collapsedNodeIds:O})).current;return fe.jsx("div",{className:nX.canvas,children:fe.jsx(C5,{legacy:!0,linear:!0,ref:D,flat:!0,gl:J,camera:rX,onPointerMissed:_,children:fe.jsxs(RW,{store:z,children:[((T=r.canvas)==null?void 0:T.background)&&fe.jsx("color",{attach:"background",args:[r.canvas.background]}),fe.jsx("ambientLight",{intensity:1}),p,((R=r.canvas)==null?void 0:R.fog)&&fe.jsx("fog",{attach:"fog",args:[r.canvas.fog,4e3,9e3]}),fe.jsx(JW,{mode:i,ref:C,disabled:g,minDistance:y,maxDistance:x,animated:s,children:fe.jsx(eX,{disabled:g,type:c,onLasso:b,onLassoEnd:S,children:fe.jsx($.Suspense,{children:fe.jsx(KW,{ref:U,disabled:g,animated:H,edges:d,nodes:m,layoutType:e,sizingType:t,labelType:n,defaultNodeSize:a,minNodeSize:o,maxNodeSize:l,...E})})})})]})})})}),aX=({selections:i=[],nodes:e=[],actives:t=[],focusOnSelect:n=!0,type:r="single",pathHoverType:s="out",pathSelectionType:a="direct",ref:o,disabled:l,onSelection:c})=>{const[f,d]=$.useState([]),[p,m]=$.useState(t),[y,x]=$.useState(i),[_,g]=$.useState(!1),b=r==="multi"||r==="multiModifier",S=$.useCallback(L=>{if(!l&&L){L=Array.isArray(L)?L:[L];const F=L.filter(V=>!y.includes(V));if(F.length){const V=[...y,...F];c==null||c(V),x(V)}}},[l,y,c]),E=$.useCallback(L=>{if(!l&&L){L=Array.isArray(L)?L:[L];const F=y.filter(V=>!L.includes(V));c==null||c(F),x(F)}},[l,y,c]),w=$.useCallback((L=[])=>{l||(L=Array.isArray(L)?L:[L],m([]),x(L),c==null||c(L))},[l,c]),T=$.useCallback(L=>{y.includes(L)?E(L):b?S(L):w(L)},[S,w,y,b,E]),R=$.useCallback(L=>{if(b?r==="multiModifier"?_?S(L.id):w(L.id):S(L.id):w(L.id),n===!0||n==="singleOnly"&&!_){if(!o.current)throw new Error("No ref found for the graph canvas.");const F=o.current.getGraph(),{nodes:V}=P_(F,[L.id],a);o.current.fitNodesInView([L.id,...V],{fitOnlyIfNodesNotInView:!0})}},[S,w,n,b,_,a,o,r]),U=$.useCallback((L,F)=>{const V=o.current.getGraph();if(!V)throw new Error("Graph is not initialized");const W=CW(V,L,F);w([L,F]);const G=[];for(let Z=0;Z<W.length-1;Z++){const Q=W[Z],j=W[Z+1],ee=V.getEdgeAttributes(Q,j);ee&&G.push(ee.id)}m([...W.map(Z=>Z),...G])},[w,o]),C=$.useCallback(L=>{const F=L.target,V=gA(F),W=L.metaKey||L.ctrlKey;V&&W&&g(!0)},[]),D=$.useCallback(L=>{const F=L.target,V=gA(F),W=["Meta","Control"].includes(L.key);V&&W&&g(!1)},[]);$.useEffect(()=>(typeof window<"u"&&(window.addEventListener("keydown",C),window.addEventListener("keyup",D)),()=>{typeof window<"u"&&(window.removeEventListener("keydown",C),window.removeEventListener("keyup",D))}),[C,D]);const I=$.useCallback(L=>{if(L.button!==2&&(y.length||p.length)&&(w(),g(!1),n&&y.length===1)){if(!o.current)throw new Error("No ref found for the graph canvas.");o.current.fitNodesInView([],{fitOnlyIfNodesNotInView:!0})}},[w,n,p.length,y.length,o]),P=$.useCallback(L=>{m(L)},[]),O=$.useCallback(L=>{w(L)},[w]),H=$.useCallback(L=>{if(s){const F=o.current.getGraph();if(!F)throw new Error("No ref found for the graph canvas.");const{nodes:V,edges:W}=P_(F,[L.id],s);d([...V,...W])}},[s,o]),J=$.useCallback(()=>{s&&d([])},[s]);return $.useEffect(()=>{var L;if(a!=="direct"&&y.length>0){const F=(L=o.current)==null?void 0:L.getGraph();if(F){const{nodes:V,edges:W}=P_(F,y,a);m([...V,...W])}}},[y,a,o]),{actives:$.useMemo(()=>[...p,...f],[p,f]),onNodeClick:R,onNodePointerOver:H,onNodePointerOut:J,onLasso:P,onLassoEnd:O,selectNodePaths:U,onCanvasClick:I,selections:y,clearSelections:w,addSelection:S,removeSelection:E,toggleSelection:T,setSelections:x}},oX=""+new URL("NotoSans-Regular-D96CXwz4.ttf",import.meta.url).href,lX=$.memo(({data:i,onCollapse:e,isCollapsed:t,canCollapse:n,onClose:r})=>{const{t:s}=xg(["network","zigbee","common"]);let a;if(i.parent){const o=i.parent.lastIndexOf(` - ${s("children")}`);a=o>-1?i.parent.slice(0,o):i.parent}return fe.jsx("div",{className:"card bg-base-100 shadow-sm",children:fe.jsxs("div",{className:"card-body",children:[fe.jsx("h2",{className:"card-title",children:i.friendlyName}),fe.jsx("span",{children:i.type}),fe.jsx("span",{title:s("zigbee:ieee_address"),children:i.ieeeAddr}),fe.jsxs("span",{title:s("zigbee:network_address_hex"),className:"justify-self-end",children:[HU(i.networkAddress,4)," | ",fe.jsx("span",{title:s("zigbee:network_address_dec"),children:i.networkAddress})]}),a&&fe.jsxs("span",{children:[s("parent"),": ",a]}),i.failed&&i.failed.length>0&&fe.jsxs("div",{className:"badge badge-ghost",children:[fe.jsx(ni,{icon:VU,className:"text-error",beatFade:!0}),s("common:failed"),": ",i.failed]}),fe.jsxs("div",{className:"card-actions justify-end mt-2",children:[n&&fe.jsx(ts,{className:"btn btn-square btn-primary",onClick:e,children:fe.jsx(ni,{icon:t?WU:XU})}),fe.jsx(ts,{className:"btn btn-square btn-neutral",onClick:r,children:fe.jsx(ni,{icon:jU})})]})]})})}),bA=$.memo(i=>{const{label:e,icon:t,onChange:n,onSubmit:r,defaultValue:s,...a}=i,[o,l]=$.useState(s);$.useEffect(()=>{l(s)},[s]);const c=$.useCallback(d=>{l(d.target.value?d.target.valueAsNumber:""),n==null||n(d)},[n]),f=$.useCallback(d=>{r==null||r(o,!d.target.validationMessage)},[r,o]);return fe.jsxs("div",{className:"flex flex-row flex-wrap items-center gap-2 bg-base-100 rounded-box px-2 pb-1",title:e,children:[fe.jsx(ni,{icon:t}),fe.jsxs("div",{className:"",children:[fe.jsx("input",{className:"range range-xs",onChange:c,onTouchEnd:f,onMouseUp:f,...a,type:"range",value:o}),fe.jsxs("div",{className:"flex justify-between px-1 mt-1 text-xs",children:[fe.jsx("span",{children:i.min}),fe.jsx("span",{children:o}),fe.jsx("span",{children:i.max})]})]})]})}),cX=$.memo(({graphRef:i,layoutType:e,onLayoutTypeChange:t,labelType:n,onLabelTypeChange:r,nodeStrength:s,onNodeStrengthChange:a,linkDistance:o,onLinkDistanceChange:l,nodes:c,showParents:f,setShowParents:d,showChildren:p,setShowChildren:m,showSiblings:y,setShowSiblings:x})=>{const{t:_}=xg("network"),g=$.useMemo(()=>{const E=c.map(w=>[w.id,w.data.type!=="Coordinator"?`${w.data.type[0]} - ${w.label}`:w.label]);return E.sort(([,w],[,T])=>w.localeCompare(T)),E.map(([w,T])=>fe.jsx("option",{value:w,children:T},w))},[c]),b=$.useCallback(()=>{i.current&&qU(i.current.exportCanvas(),`network-map-${Date.now()}.png`)},[i]),S=$.useCallback(E=>{var w,T;if(E.target.value){const R=[E.target.value];(w=i.current)==null||w.centerGraph(R),(T=i.current)==null||T.fitNodesInView(R)}},[i]);return fe.jsxs(fe.Fragment,{children:[fe.jsxs("div",{className:"absolute z-9 top-0 left-0 p-1 flex flex-row flex-wrap gap-1 items-start",children:[fe.jsx(ts,{title:_("download_image"),className:"btn btn-square btn-neutral btn-sm",onClick:b,children:fe.jsx(ni,{icon:YU})}),fe.jsx(ts,{title:_("reset_controls"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.resetControls()},children:fe.jsx(ni,{icon:ZU})}),fe.jsx(ts,{title:_("fit_view"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E,w;(E=i.current)==null||E.centerGraph(),(w=i.current)==null||w.fitNodesInView()},children:fe.jsx(ni,{icon:KU})}),fe.jsx(ts,{title:_("zoom_in"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.zoomIn()},children:fe.jsx(ni,{icon:JU})}),fe.jsx(ts,{title:_("zoom_out"),className:"btn btn-square btn-neutral btn-sm",onClick:()=>{var E;(E=i.current)==null||E.zoomOut()},children:fe.jsx(ni,{icon:QU})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${f?"":"btn-outline"}`,item:!f,onClick:d,title:_("parent"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsParent]}})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${p?"":"btn-outline"}`,item:!p,onClick:m,title:_("child"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsAChild]}})}),fe.jsx(ts,{className:`btn btn-square btn-neutral btn-sm ${y?"":"btn-outline"}`,item:!y,onClick:x,title:_("sibling"),children:fe.jsx(ni,{icon:Qc,style:{color:yl[ti.NeighborIsASibling]}})}),fe.jsxs("select",{className:"select select-sm w-36",title:_("find_node"),defaultValue:"",onChange:S,children:[fe.jsx("option",{value:"",children:_("find_node")}),g]})]}),fe.jsxs("div",{className:"absolute z-9 top-0 right-0 p-1 flex flex-row flex-wrap gap-1 items-start justify-end",children:[fe.jsxs("select",{className:"select select-sm w-36",title:_("layout_type"),value:e,onChange:t,children:[fe.jsx("option",{value:"",disabled:!0,children:_("layout_type")}),fe.jsx("option",{value:"forceDirected2d",children:"forceDirected2d"}),fe.jsx("option",{value:"forceDirected3d",children:"forceDirected3d"}),fe.jsx("option",{value:"radialOut2d",children:"radialOut2d"}),fe.jsx("option",{value:"radialOut3d",children:"radialOut3d"})]}),fe.jsxs("select",{className:"select select-sm w-36",title:_("label_type"),value:n,onChange:r,children:[fe.jsx("option",{value:"",disabled:!0,children:_("label_type")}),fe.jsx("option",{value:"all",children:"all"}),fe.jsx("option",{value:"auto",children:"auto"}),fe.jsx("option",{value:"none",children:"none"}),fe.jsx("option",{value:"nodes",children:"nodes"}),fe.jsx("option",{value:"edges",children:"edges"})]})]}),fe.jsxs("div",{className:"absolute z-9 bottom-0 left-0 p-1 flex flex-row flex-wrap gap-1 items-end",children:[fe.jsx(bA,{name:"node_strength",label:_("node_strength"),icon:$U,onSubmit:(E,w)=>w&&typeof E=="number"&&a(E),min:-1e3,max:-100,step:10,defaultValue:s}),fe.jsx(bA,{name:"link_distance",label:_("link_distance"),icon:eO,onSubmit:(E,w)=>w&&typeof E=="number"&&l(E),min:10,max:200,step:5,defaultValue:o})]}),fe.jsx("div",{className:"absolute z-9 bottom-0 right-0 p-1 flex flex-row flex-wrap gap-1 items-end justify-end",children:fe.jsx(ts,{title:_("scroll_to_top"),className:"btn btn-primary btn-sm ml-auto",onClick:()=>{window.scrollTo(0,0)},children:fe.jsx(ni,{icon:tO})})})]})}),uX=$.memo(()=>{const{t:i}=xg("network");return fe.jsxs("details",{className:"collapse collapse-arrow bg-white text-black rounded-b-none",children:[fe.jsx("summary",{className:"collapse-title font-semibold",children:i("legend")}),fe.jsxs("div",{className:"collapse-content text-sm",children:[fe.jsxs("div",{className:"flex flex-row flex-wrap gap-3 mb-2",children:[fe.jsxs("div",{children:[fe.jsxs("p",{children:[i("nodes"),":"]}),fe.jsxs("ul",{className:"list-none list-inside",children:[fe.jsxs("li",{style:{color:tm.Coordinator},children:[fe.jsx(ni,{icon:Nv})," Coordinator"]}),fe.jsxs("li",{style:{color:tm.Router},children:[fe.jsx(ni,{icon:Nv})," Router"]}),fe.jsxs("li",{style:{color:tm.EndDevice},children:[fe.jsx(ni,{icon:Nv})," EndDevice"]})]})]}),fe.jsxs("div",{children:[fe.jsxs("p",{children:[i("edges"),":"]}),fe.jsxs("ul",{className:"list-none list-inside",children:[fe.jsxs("li",{style:{color:yl[ti.NeighborIsParent]},children:[fe.jsx(ni,{icon:Qc})," ",i("parent")]}),fe.jsxs("li",{style:{color:yl[ti.NeighborIsAChild]},children:[fe.jsx(ni,{icon:Qc})," ",i("child")]}),fe.jsxs("li",{style:{color:yl[ti.NeighborIsASibling]},children:[fe.jsx(ni,{icon:Qc})," ",i("sibling")]})]})]})]}),fe.jsx("p",{children:i("legend_node_siblings")}),fe.jsx("p",{children:i("legend_node_size")}),fe.jsx("p",{children:i("legend_node_select")}),fe.jsx("p",{children:i("legend_node_fold")}),fe.jsx("p",{children:i("legend_edge_toggle")}),fe.jsx("p",{className:"text-xs mt-2",children:"Known issues:"}),fe.jsxs("ul",{className:"list-disc list-inside text-xs",children:[fe.jsxs("li",{children:['If you cannot see labels (names/LQIs) after the map has finished loading, zoom-in sufficiently, switch the "',i("label_type"),'" value to something else, then back to the one you want']}),fe.jsx("li",{children:"Edge colors are currently not working"})]})]})]})}),MX=$.memo(({map:i})=>{const{t:e}=xg("network"),[t,n]=$.useState(qa.get(HS,"forceDirected2d")),[r,s]=$.useState(qa.get(VS,"all")),[a,o]=$.useState(qa.get(WS,-750)),[l,c]=$.useState(qa.get(XS,50)),[f,d]=$.useState(!0),[p,m]=$.useState(!0),[y,x]=$.useState(!0),_=$.useRef(null),[g,b]=$.useMemo(()=>{var z,L;const I=[],P=[],O=[];for(const F of i.nodes){const V=i.links.find(G=>G.relationship===ti.NeighborIsParent&&G.target.ieeeAddr===F.ieeeAddr);let W=V?(z=i.nodes.find(G=>G.ieeeAddr===V.source.ieeeAddr))==null?void 0:z.friendlyName:void 0;if(!V){const G=i.links.find(Z=>Z.relationship===ti.NeighborIsAChild&&Z.source.ieeeAddr===F.ieeeAddr);W=G?(L=i.nodes.find(Z=>Z.ieeeAddr===G.target.ieeeAddr))==null?void 0:L.friendlyName:void 0,W&&(W+=` - ${e("children")}`)}I.push({id:F.ieeeAddr,data:{...F,parent:W},label:F.friendlyName,labelVisible:!0,fill:tm[F.type]})}const H=new Map;for(const F of i.links){if(!f&&F.relationship===ti.NeighborIsParent||!p&&F.relationship===ti.NeighborIsAChild||!y&&F.relationship===ti.NeighborIsASibling)continue;if(F.relationship===ti.NeighborIsASibling){const W=H.get(F.source.ieeeAddr);(!W||F.depth<W.depth||F.linkquality>W.linkquality||W.linkquality===F.linkquality&&F.depth<W.depth)&&H.set(F.source.ieeeAddr,F);continue}const V=i.links.find(W=>W.source.ieeeAddr===F.target.ieeeAddr&&W.target.ieeeAddr===F.source.ieeeAddr);F.relationship===ti.NeighborIsAChild&&(V==null?void 0:V.relationship)===ti.NeighborIsParent||O.push([F,V])}for(const[,F]of H){const V=i.links.find(W=>W.source.ieeeAddr===F.target.ieeeAddr&&W.target.ieeeAddr===F.source.ieeeAddr);O.push([F,V])}const J=[];for(const[F,V]of O)J.includes(F)||F.relationship===ti.NeighborIsASibling&&((V==null?void 0:V.relationship)===ti.NeighborIsParent||(V==null?void 0:V.relationship)===ti.NeighborIsAChild)||P.push({id:`${F.source.ieeeAddr}-${F.target.ieeeAddr}-${F.relationship}`,data:F,label:V?`${F.linkquality} / ${V.linkquality??"?"}`:`${F.linkquality}`,size:F.relationship===ti.NeighborIsParent||F.relationship===ti.NeighborIsAChild?1.5:.75,labelVisible:!0,source:F.source.ieeeAddr,target:F.target.ieeeAddr,fill:yl[F.relationship]});return[I,P]},[i,f,p,y,e]),{selections:S,actives:E,onNodeClick:w,onCanvasClick:T}=aX({ref:_,nodes:g,type:"single",pathSelectionType:"out",focusOnSelect:!1}),R=$.useCallback(I=>{var P,O,H;I.target.value&&(qa.set(HS,I.target.value),n(I.target.value),(P=_.current)==null||P.resetControls(),(O=_.current)==null||O.centerGraph(),(H=_.current)==null||H.fitNodesInView())},[]),U=$.useCallback(I=>{I.target.value&&(qa.set(VS,I.target.value),s(I.target.value))},[]),C=$.useCallback(I=>{qa.set(WS,I),o(I)},[]),D=$.useCallback(I=>{qa.set(XS,I),c(I)},[]);return fe.jsxs(fe.Fragment,{children:[fe.jsx(uX,{}),fe.jsxs("div",{className:"relative h-screen",children:[fe.jsx(cX,{graphRef:_,layoutType:t,onLayoutTypeChange:R,labelType:r,onLabelTypeChange:U,nodeStrength:a,onNodeStrengthChange:C,linkDistance:l,onLinkDistanceChange:D,nodes:g,showParents:f,setShowParents:d,showChildren:p,setShowChildren:m,showSiblings:y,setShowSiblings:x}),fe.jsx(sX,{ref:_,nodes:g,edges:b,clusterAttribute:t.startsWith("forceDirected")?"parent":void 0,selections:S,actives:E,onCanvasClick:T,onNodeClick:w,layoutType:t,layoutOverrides:{nodeStrength:a,linkDistance:l},sizingType:"centrality",labelType:r,labelFontUrl:oX,edgeLabelPosition:"natural",lassoType:"node",cameraMode:t.endsWith("3d")?"rotate":"pan",draggable:!0,animated:!1,contextMenu:({data:{data:I},onCollapse:P,isCollapsed:O,canCollapse:H,onClose:J})=>I.friendlyName?fe.jsx(lX,{data:I,onCollapse:P,isCollapsed:O,canCollapse:H,onClose:J}):null})]})]})});export{MX as default};