@iobroker/gui-components 8.0.1

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 (368) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +1450 -0
  3. package/build/AdminConnection.d.ts +1 -0
  4. package/build/AdminConnection.js +2 -0
  5. package/build/AdminConnection.js.map +1 -0
  6. package/build/Components/404.d.ts +4 -0
  7. package/build/Components/404.js +97 -0
  8. package/build/Components/404.js.map +1 -0
  9. package/build/Components/ColorPicker.d.ts +86 -0
  10. package/build/Components/ColorPicker.js +222 -0
  11. package/build/Components/ColorPicker.js.map +1 -0
  12. package/build/Components/ComplexCron.d.ts +40 -0
  13. package/build/Components/ComplexCron.js +401 -0
  14. package/build/Components/ComplexCron.js.map +1 -0
  15. package/build/Components/CopyToClipboard.d.ts +14 -0
  16. package/build/Components/CopyToClipboard.js +160 -0
  17. package/build/Components/CopyToClipboard.js.map +1 -0
  18. package/build/Components/CustomModal.d.ts +26 -0
  19. package/build/Components/CustomModal.js +62 -0
  20. package/build/Components/CustomModal.js.map +1 -0
  21. package/build/Components/DeviceType/DeviceTypeIcon.d.ts +29 -0
  22. package/build/Components/DeviceType/DeviceTypeIcon.js +108 -0
  23. package/build/Components/DeviceType/DeviceTypeIcon.js.map +1 -0
  24. package/build/Components/DeviceType/DeviceTypeOptions.d.ts +2 -0
  25. package/build/Components/DeviceType/DeviceTypeOptions.js +69 -0
  26. package/build/Components/DeviceType/DeviceTypeOptions.js.map +1 -0
  27. package/build/Components/DeviceType/DeviceTypeSelector.d.ts +20 -0
  28. package/build/Components/DeviceType/DeviceTypeSelector.js +83 -0
  29. package/build/Components/DeviceType/DeviceTypeSelector.js.map +1 -0
  30. package/build/Components/DeviceType/deviceTypeTranslations.d.ts +1 -0
  31. package/build/Components/DeviceType/deviceTypeTranslations.js +30 -0
  32. package/build/Components/DeviceType/deviceTypeTranslations.js.map +1 -0
  33. package/build/Components/DeviceType/i18n/de.json +46 -0
  34. package/build/Components/DeviceType/i18n/en.json +46 -0
  35. package/build/Components/DeviceType/i18n/fr.json +46 -0
  36. package/build/Components/DeviceType/i18n/it.json +46 -0
  37. package/build/Components/DeviceType/i18n/nl.json +46 -0
  38. package/build/Components/DeviceType/i18n/pl.json +46 -0
  39. package/build/Components/DeviceType/i18n/pt.json +46 -0
  40. package/build/Components/DeviceType/i18n/ru.json +46 -0
  41. package/build/Components/DeviceType/i18n/uk.json +46 -0
  42. package/build/Components/DeviceType/i18n/zh-cn.json +46 -0
  43. package/build/Components/DeviceType/icons/Cleaner.d.ts +3 -0
  44. package/build/Components/DeviceType/icons/Cleaner.js +14 -0
  45. package/build/Components/DeviceType/icons/Cleaner.js.map +1 -0
  46. package/build/Components/DeviceType/icons/DoorClosed.d.ts +3 -0
  47. package/build/Components/DeviceType/icons/DoorClosed.js +7 -0
  48. package/build/Components/DeviceType/icons/DoorClosed.js.map +1 -0
  49. package/build/Components/DeviceType/icons/DoorOpened.d.ts +3 -0
  50. package/build/Components/DeviceType/icons/DoorOpened.js +7 -0
  51. package/build/Components/DeviceType/icons/DoorOpened.js.map +1 -0
  52. package/build/Components/DeviceType/icons/FireOff.d.ts +3 -0
  53. package/build/Components/DeviceType/icons/FireOff.js +8 -0
  54. package/build/Components/DeviceType/icons/FireOff.js.map +1 -0
  55. package/build/Components/DeviceType/icons/FireOn.d.ts +3 -0
  56. package/build/Components/DeviceType/icons/FireOn.js +14 -0
  57. package/build/Components/DeviceType/icons/FireOn.js.map +1 -0
  58. package/build/Components/DeviceType/icons/FloodOff.d.ts +3 -0
  59. package/build/Components/DeviceType/icons/FloodOff.js +11 -0
  60. package/build/Components/DeviceType/icons/FloodOff.js.map +1 -0
  61. package/build/Components/DeviceType/icons/FloodOn.d.ts +3 -0
  62. package/build/Components/DeviceType/icons/FloodOn.js +18 -0
  63. package/build/Components/DeviceType/icons/FloodOn.js.map +1 -0
  64. package/build/Components/DeviceType/icons/Gate.d.ts +3 -0
  65. package/build/Components/DeviceType/icons/Gate.js +8 -0
  66. package/build/Components/DeviceType/icons/Gate.js.map +1 -0
  67. package/build/Components/DeviceType/icons/HeatValve.d.ts +3 -0
  68. package/build/Components/DeviceType/icons/HeatValve.js +6 -0
  69. package/build/Components/DeviceType/icons/HeatValve.js.map +1 -0
  70. package/build/Components/DeviceType/icons/Home.d.ts +3 -0
  71. package/build/Components/DeviceType/icons/Home.js +6 -0
  72. package/build/Components/DeviceType/icons/Home.js.map +1 -0
  73. package/build/Components/DeviceType/icons/Humidity.d.ts +3 -0
  74. package/build/Components/DeviceType/icons/Humidity.js +8 -0
  75. package/build/Components/DeviceType/icons/Humidity.js.map +1 -0
  76. package/build/Components/DeviceType/icons/IconHome.d.ts +5 -0
  77. package/build/Components/DeviceType/icons/IconHome.js +21 -0
  78. package/build/Components/DeviceType/icons/IconHome.js.map +1 -0
  79. package/build/Components/DeviceType/icons/Jalousie.d.ts +3 -0
  80. package/build/Components/DeviceType/icons/Jalousie.js +7 -0
  81. package/build/Components/DeviceType/icons/Jalousie.js.map +1 -0
  82. package/build/Components/DeviceType/icons/Material.d.ts +3 -0
  83. package/build/Components/DeviceType/icons/Material.js +8 -0
  84. package/build/Components/DeviceType/icons/Material.js.map +1 -0
  85. package/build/Components/DeviceType/icons/MotionOff.d.ts +3 -0
  86. package/build/Components/DeviceType/icons/MotionOff.js +11 -0
  87. package/build/Components/DeviceType/icons/MotionOff.js.map +1 -0
  88. package/build/Components/DeviceType/icons/MotionOn.d.ts +3 -0
  89. package/build/Components/DeviceType/icons/MotionOn.js +7 -0
  90. package/build/Components/DeviceType/icons/MotionOn.js.map +1 -0
  91. package/build/Components/DeviceType/icons/PushButton.d.ts +3 -0
  92. package/build/Components/DeviceType/icons/PushButton.js +9 -0
  93. package/build/Components/DeviceType/icons/PushButton.js.map +1 -0
  94. package/build/Components/DeviceType/icons/RGB.d.ts +3 -0
  95. package/build/Components/DeviceType/icons/RGB.js +43 -0
  96. package/build/Components/DeviceType/icons/RGB.js.map +1 -0
  97. package/build/Components/DeviceType/icons/RepairExpert.d.ts +3 -0
  98. package/build/Components/DeviceType/icons/RepairExpert.js +6 -0
  99. package/build/Components/DeviceType/icons/RepairExpert.js.map +1 -0
  100. package/build/Components/DeviceType/icons/Socket.d.ts +3 -0
  101. package/build/Components/DeviceType/icons/Socket.js +8 -0
  102. package/build/Components/DeviceType/icons/Socket.js.map +1 -0
  103. package/build/Components/DeviceType/icons/Thermometer.d.ts +3 -0
  104. package/build/Components/DeviceType/icons/Thermometer.js +7 -0
  105. package/build/Components/DeviceType/icons/Thermometer.js.map +1 -0
  106. package/build/Components/DeviceType/icons/ThermometerSimple.d.ts +3 -0
  107. package/build/Components/DeviceType/icons/ThermometerSimple.js +8 -0
  108. package/build/Components/DeviceType/icons/ThermometerSimple.js.map +1 -0
  109. package/build/Components/DeviceType/icons/Thermostat.d.ts +3 -0
  110. package/build/Components/DeviceType/icons/Thermostat.js +9 -0
  111. package/build/Components/DeviceType/icons/Thermostat.js.map +1 -0
  112. package/build/Components/DeviceType/icons/Valve.d.ts +3 -0
  113. package/build/Components/DeviceType/icons/Valve.js +7 -0
  114. package/build/Components/DeviceType/icons/Valve.js.map +1 -0
  115. package/build/Components/DeviceType/icons/WindowClosed.d.ts +3 -0
  116. package/build/Components/DeviceType/icons/WindowClosed.js +8 -0
  117. package/build/Components/DeviceType/icons/WindowClosed.js.map +1 -0
  118. package/build/Components/DeviceType/icons/WindowOpened.d.ts +3 -0
  119. package/build/Components/DeviceType/icons/WindowOpened.js +9 -0
  120. package/build/Components/DeviceType/icons/WindowOpened.js.map +1 -0
  121. package/build/Components/DeviceType/icons/WindowTilted.d.ts +3 -0
  122. package/build/Components/DeviceType/icons/WindowTilted.js +8 -0
  123. package/build/Components/DeviceType/icons/WindowTilted.js.map +1 -0
  124. package/build/Components/DeviceType/icons/index.d.ts +28 -0
  125. package/build/Components/DeviceType/icons/index.js +28 -0
  126. package/build/Components/DeviceType/icons/index.js.map +1 -0
  127. package/build/Components/FileBrowser.d.ts +187 -0
  128. package/build/Components/FileBrowser.js +1711 -0
  129. package/build/Components/FileBrowser.js.map +1 -0
  130. package/build/Components/FileViewer.d.ts +49 -0
  131. package/build/Components/FileViewer.js +247 -0
  132. package/build/Components/FileViewer.js.map +1 -0
  133. package/build/Components/Icon.d.ts +35 -0
  134. package/build/Components/Icon.js +140 -0
  135. package/build/Components/Icon.js.map +1 -0
  136. package/build/Components/IconPicker.d.ts +25 -0
  137. package/build/Components/IconPicker.js +72 -0
  138. package/build/Components/IconPicker.js.map +1 -0
  139. package/build/Components/IconSelector.d.ts +33 -0
  140. package/build/Components/IconSelector.js +2086 -0
  141. package/build/Components/IconSelector.js.map +1 -0
  142. package/build/Components/Image.d.ts +31 -0
  143. package/build/Components/Image.js +126 -0
  144. package/build/Components/Image.js.map +1 -0
  145. package/build/Components/InfoBox.d.ts +37 -0
  146. package/build/Components/InfoBox.js +115 -0
  147. package/build/Components/InfoBox.js.map +1 -0
  148. package/build/Components/IobUri.d.ts +14 -0
  149. package/build/Components/IobUri.js +168 -0
  150. package/build/Components/IobUri.js.map +1 -0
  151. package/build/Components/Loader.d.ts +31 -0
  152. package/build/Components/Loader.js +265 -0
  153. package/build/Components/Loader.js.map +1 -0
  154. package/build/Components/Loaders/MV.d.ts +17 -0
  155. package/build/Components/Loaders/MV.js +61 -0
  156. package/build/Components/Loaders/MV.js.map +1 -0
  157. package/build/Components/Loaders/PT.d.ts +27 -0
  158. package/build/Components/Loaders/PT.js +150 -0
  159. package/build/Components/Loaders/PT.js.map +1 -0
  160. package/build/Components/Loaders/Vendor.d.ts +22 -0
  161. package/build/Components/Loaders/Vendor.js +52 -0
  162. package/build/Components/Loaders/Vendor.js.map +1 -0
  163. package/build/Components/Logo.d.ts +18 -0
  164. package/build/Components/Logo.js +109 -0
  165. package/build/Components/Logo.js.map +1 -0
  166. package/build/Components/MDUtils.d.ts +11 -0
  167. package/build/Components/MDUtils.js +99 -0
  168. package/build/Components/MDUtils.js.map +1 -0
  169. package/build/Components/ObjectBrowser.d.ts +665 -0
  170. package/build/Components/ObjectBrowser.js +6245 -0
  171. package/build/Components/ObjectBrowser.js.map +1 -0
  172. package/build/Components/Router.d.ts +21 -0
  173. package/build/Components/Router.js +77 -0
  174. package/build/Components/Router.js.map +1 -0
  175. package/build/Components/SaveCloseButtons.d.ts +20 -0
  176. package/build/Components/SaveCloseButtons.js +65 -0
  177. package/build/Components/SaveCloseButtons.js.map +1 -0
  178. package/build/Components/Schedule.d.ts +62 -0
  179. package/build/Components/Schedule.js +1266 -0
  180. package/build/Components/Schedule.js.map +1 -0
  181. package/build/Components/SelectWithIcon.d.ts +37 -0
  182. package/build/Components/SelectWithIcon.js +139 -0
  183. package/build/Components/SelectWithIcon.js.map +1 -0
  184. package/build/Components/SimpleCron/cronText.d.ts +10 -0
  185. package/build/Components/SimpleCron/cronText.js +14 -0
  186. package/build/Components/SimpleCron/cronText.js.map +1 -0
  187. package/build/Components/SimpleCron/index.d.ts +55 -0
  188. package/build/Components/SimpleCron/index.js +698 -0
  189. package/build/Components/SimpleCron/index.js.map +1 -0
  190. package/build/Components/TabContainer.d.ts +15 -0
  191. package/build/Components/TabContainer.js +23 -0
  192. package/build/Components/TabContainer.js.map +1 -0
  193. package/build/Components/TabContent.d.ts +11 -0
  194. package/build/Components/TabContent.js +20 -0
  195. package/build/Components/TabContent.js.map +1 -0
  196. package/build/Components/TabHeader.d.ts +6 -0
  197. package/build/Components/TabHeader.js +6 -0
  198. package/build/Components/TabHeader.js.map +1 -0
  199. package/build/Components/TableResize.d.ts +45 -0
  200. package/build/Components/TableResize.js +204 -0
  201. package/build/Components/TableResize.js.map +1 -0
  202. package/build/Components/TextWithIcon.d.ts +21 -0
  203. package/build/Components/TextWithIcon.js +113 -0
  204. package/build/Components/TextWithIcon.js.map +1 -0
  205. package/build/Components/ToggleThemeMenu.d.ts +12 -0
  206. package/build/Components/ToggleThemeMenu.js +13 -0
  207. package/build/Components/ToggleThemeMenu.js.map +1 -0
  208. package/build/Components/TreeTable.d.ts +79 -0
  209. package/build/Components/TreeTable.js +538 -0
  210. package/build/Components/TreeTable.js.map +1 -0
  211. package/build/Components/UploadImage.d.ts +23 -0
  212. package/build/Components/UploadImage.js +516 -0
  213. package/build/Components/UploadImage.js.map +1 -0
  214. package/build/Components/Utils.d.ts +331 -0
  215. package/build/Components/Utils.js +1605 -0
  216. package/build/Components/Utils.js.map +1 -0
  217. package/build/Components/withWidth.d.ts +2 -0
  218. package/build/Components/withWidth.js +22 -0
  219. package/build/Components/withWidth.js.map +1 -0
  220. package/build/Connection.d.ts +1 -0
  221. package/build/Connection.js +2 -0
  222. package/build/Connection.js.map +1 -0
  223. package/build/Dialogs/ComplexCron.d.ts +24 -0
  224. package/build/Dialogs/ComplexCron.js +85 -0
  225. package/build/Dialogs/ComplexCron.js.map +1 -0
  226. package/build/Dialogs/Confirm.d.ts +39 -0
  227. package/build/Dialogs/Confirm.js +83 -0
  228. package/build/Dialogs/Confirm.js.map +1 -0
  229. package/build/Dialogs/Cron.d.ts +29 -0
  230. package/build/Dialogs/Cron.js +72 -0
  231. package/build/Dialogs/Cron.js.map +1 -0
  232. package/build/Dialogs/Error.d.ts +18 -0
  233. package/build/Dialogs/Error.js +27 -0
  234. package/build/Dialogs/Error.js.map +1 -0
  235. package/build/Dialogs/Message.d.ts +20 -0
  236. package/build/Dialogs/Message.js +29 -0
  237. package/build/Dialogs/Message.js.map +1 -0
  238. package/build/Dialogs/SelectFile.d.ts +85 -0
  239. package/build/Dialogs/SelectFile.js +115 -0
  240. package/build/Dialogs/SelectFile.js.map +1 -0
  241. package/build/Dialogs/SelectID.d.ts +102 -0
  242. package/build/Dialogs/SelectID.js +151 -0
  243. package/build/Dialogs/SelectID.js.map +1 -0
  244. package/build/Dialogs/SimpleCron.d.ts +19 -0
  245. package/build/Dialogs/SimpleCron.js +46 -0
  246. package/build/Dialogs/SimpleCron.js.map +1 -0
  247. package/build/Dialogs/TextInput.d.ts +2 -0
  248. package/build/Dialogs/TextInput.js +31 -0
  249. package/build/Dialogs/TextInput.js.map +1 -0
  250. package/build/GenericApp.d.ts +209 -0
  251. package/build/GenericApp.js +842 -0
  252. package/build/GenericApp.js.map +1 -0
  253. package/build/LegacyConnection.d.ts +938 -0
  254. package/build/LegacyConnection.js +2849 -0
  255. package/build/LegacyConnection.js.map +1 -0
  256. package/build/Prompt.d.ts +5 -0
  257. package/build/Prompt.js +19 -0
  258. package/build/Prompt.js.map +1 -0
  259. package/build/Theme.d.ts +5 -0
  260. package/build/Theme.js +344 -0
  261. package/build/Theme.js.map +1 -0
  262. package/build/assets/devices/parseNames.d.ts +0 -0
  263. package/build/assets/devices/parseNames.js +35 -0
  264. package/build/assets/devices/parseNames.js.map +1 -0
  265. package/build/assets/devices.json +1 -0
  266. package/build/assets/lamp_ceiling.svg +9 -0
  267. package/build/assets/lamp_table.svg +8 -0
  268. package/build/assets/no_icon.svg +9 -0
  269. package/build/assets/rooms/parseNames.d.ts +0 -0
  270. package/build/assets/rooms/parseNames.js +35 -0
  271. package/build/assets/rooms/parseNames.js.map +1 -0
  272. package/build/assets/rooms.json +1 -0
  273. package/build/dictionary.d.ts +1 -0
  274. package/build/dictionary.js +25 -0
  275. package/build/dictionary.js.map +1 -0
  276. package/build/globals.d.ts +19 -0
  277. package/build/i18n/de.json +480 -0
  278. package/build/i18n/en.json +480 -0
  279. package/build/i18n/es.json +480 -0
  280. package/build/i18n/fr.json +480 -0
  281. package/build/i18n/it.json +475 -0
  282. package/build/i18n/nl.json +475 -0
  283. package/build/i18n/pl.json +475 -0
  284. package/build/i18n/pt.json +475 -0
  285. package/build/i18n/ru.json +475 -0
  286. package/build/i18n/uk.json +475 -0
  287. package/build/i18n/zh-cn.json +475 -0
  288. package/build/i18n.d.ts +84 -0
  289. package/build/i18n.js +224 -0
  290. package/build/i18n.js.map +1 -0
  291. package/build/icons/IconAdapter.d.ts +3 -0
  292. package/build/icons/IconAdapter.js +7 -0
  293. package/build/icons/IconAdapter.js.map +1 -0
  294. package/build/icons/IconAlias.d.ts +3 -0
  295. package/build/icons/IconAlias.js +7 -0
  296. package/build/icons/IconAlias.js.map +1 -0
  297. package/build/icons/IconButtonImage.d.ts +3 -0
  298. package/build/icons/IconButtonImage.js +9 -0
  299. package/build/icons/IconButtonImage.js.map +1 -0
  300. package/build/icons/IconChannel.d.ts +3 -0
  301. package/build/icons/IconChannel.js +10 -0
  302. package/build/icons/IconChannel.js.map +1 -0
  303. package/build/icons/IconClearFilter.d.ts +3 -0
  304. package/build/icons/IconClearFilter.js +8 -0
  305. package/build/icons/IconClearFilter.js.map +1 -0
  306. package/build/icons/IconClosed.d.ts +3 -0
  307. package/build/icons/IconClosed.js +7 -0
  308. package/build/icons/IconClosed.js.map +1 -0
  309. package/build/icons/IconCopy.d.ts +3 -0
  310. package/build/icons/IconCopy.js +6 -0
  311. package/build/icons/IconCopy.js.map +1 -0
  312. package/build/icons/IconDevice.d.ts +3 -0
  313. package/build/icons/IconDevice.js +16 -0
  314. package/build/icons/IconDevice.js.map +1 -0
  315. package/build/icons/IconDocument.d.ts +3 -0
  316. package/build/icons/IconDocument.js +7 -0
  317. package/build/icons/IconDocument.js.map +1 -0
  318. package/build/icons/IconDocumentReadOnly.d.ts +3 -0
  319. package/build/icons/IconDocumentReadOnly.js +8 -0
  320. package/build/icons/IconDocumentReadOnly.js.map +1 -0
  321. package/build/icons/IconExpert.d.ts +3 -0
  322. package/build/icons/IconExpert.js +7 -0
  323. package/build/icons/IconExpert.js.map +1 -0
  324. package/build/icons/IconFx.d.ts +3 -0
  325. package/build/icons/IconFx.js +6 -0
  326. package/build/icons/IconFx.js.map +1 -0
  327. package/build/icons/IconInstance.d.ts +3 -0
  328. package/build/icons/IconInstance.js +7 -0
  329. package/build/icons/IconInstance.js.map +1 -0
  330. package/build/icons/IconLogout.d.ts +3 -0
  331. package/build/icons/IconLogout.js +7 -0
  332. package/build/icons/IconLogout.js.map +1 -0
  333. package/build/icons/IconNoIcon.d.ts +3 -0
  334. package/build/icons/IconNoIcon.js +6 -0
  335. package/build/icons/IconNoIcon.js.map +1 -0
  336. package/build/icons/IconOpen.d.ts +3 -0
  337. package/build/icons/IconOpen.js +7 -0
  338. package/build/icons/IconOpen.js.map +1 -0
  339. package/build/icons/IconState.d.ts +3 -0
  340. package/build/icons/IconState.js +7 -0
  341. package/build/icons/IconState.js.map +1 -0
  342. package/build/icons/IconVacuum.d.ts +3 -0
  343. package/build/icons/IconVacuum.js +12 -0
  344. package/build/icons/IconVacuum.js.map +1 -0
  345. package/build/index.css +56 -0
  346. package/build/index.d.ts +87 -0
  347. package/build/index.js +85 -0
  348. package/build/index.js.map +1 -0
  349. package/build/modulefederation.admin.config.d.ts +13 -0
  350. package/build/modulefederation.admin.config.js +45 -0
  351. package/build/modulefederation.admin.config.js.map +1 -0
  352. package/build/types.d.ts +236 -0
  353. package/i18n/de.json +480 -0
  354. package/i18n/en.json +480 -0
  355. package/i18n/es.json +480 -0
  356. package/i18n/fr.json +480 -0
  357. package/i18n/it.json +475 -0
  358. package/i18n/nl.json +475 -0
  359. package/i18n/pl.json +475 -0
  360. package/i18n/pt.json +475 -0
  361. package/i18n/ru.json +475 -0
  362. package/i18n/uk.json +475 -0
  363. package/i18n/zh-cn.json +475 -0
  364. package/index.css +56 -0
  365. package/modulefederation.admin.config.d.ts +20 -0
  366. package/modulefederation.admin.config.js +54 -0
  367. package/package.json +86 -0
  368. package/tasksExample.js +91 -0
@@ -0,0 +1,2086 @@
1
+ import React, { Component } from 'react';
2
+ import { Dialog, DialogTitle, DialogActions, DialogContent, Button, IconButton, TextField, Tooltip, CircularProgress, } from '@mui/material';
3
+ import { Close as CloseIcon, Clear as ClearIcon } from '@mui/icons-material';
4
+ import { Icon } from './Icon';
5
+ import { Utils } from './Utils';
6
+ import devicesIcons from '../assets/devices.json';
7
+ import roomsIcons from '../assets/rooms.json';
8
+ // import devices from '../assets/devices/list.json';
9
+ const devices = [
10
+ {
11
+ _id: 'hood',
12
+ name: {
13
+ en: 'Hood',
14
+ ru: 'Вытяжка',
15
+ de: 'Abzugshaube',
16
+ fr: 'Capot',
17
+ it: 'Cappe',
18
+ nl: 'Hood',
19
+ pl: 'Okapy',
20
+ pt: 'Hood',
21
+ es: 'Campana',
22
+ 'zh-cn': '抽油烟机',
23
+ },
24
+ icon: 'Hoods.svg',
25
+ },
26
+ {
27
+ _id: 'alarm_system',
28
+ name: {
29
+ en: 'Alarm System',
30
+ ru: 'Сигнализация',
31
+ de: 'Alarmanlage',
32
+ fr: "Systèmes D'Alarme",
33
+ it: 'Sistemi Di Allarme',
34
+ nl: 'Alarm Systems',
35
+ pl: 'Systemy Alarmowe',
36
+ pt: 'Sistemas De Alarme',
37
+ es: 'Sistemas De Alarma',
38
+ 'zh-cn': '报警系统',
39
+ },
40
+ icon: 'Alarm Systems.svg',
41
+ },
42
+ {
43
+ _id: 'battery_status',
44
+ name: {
45
+ en: 'Battery Status',
46
+ ru: 'Заряд батареи',
47
+ de: 'Batteriestatus',
48
+ fr: 'État De La Batterie',
49
+ it: 'Stato Della Batteria',
50
+ nl: 'Batterij Status',
51
+ pl: 'Stan Baterii',
52
+ pt: 'Estado Da Bateria',
53
+ es: 'Estado De La Batería',
54
+ 'zh-cn': '电池状态',
55
+ },
56
+ icon: 'Battery Status.svg',
57
+ },
58
+ {
59
+ _id: 'lighting',
60
+ name: {
61
+ en: 'Lighting',
62
+ ru: 'Светильник',
63
+ de: 'Beleuchtung',
64
+ fr: 'Éclairages',
65
+ it: 'Illuminazione',
66
+ nl: 'Verlichting',
67
+ pl: 'Oprawy Oświetleniowe',
68
+ pt: 'Iluminações',
69
+ es: 'Iluminaciones',
70
+ 'zh-cn': '照明',
71
+ },
72
+ icon: 'Lightings.svg',
73
+ },
74
+ {
75
+ _id: 'shading',
76
+ name: {
77
+ en: 'Shading',
78
+ ru: 'Затенение',
79
+ de: 'Beschattungen',
80
+ fr: 'Ombres',
81
+ it: 'Ombreggiatura',
82
+ nl: 'Shading',
83
+ pl: 'Zacienienie',
84
+ pt: 'Shading',
85
+ es: 'Sombreado',
86
+ 'zh-cn': '底纹',
87
+ },
88
+ icon: 'Shading.svg',
89
+ },
90
+ {
91
+ _id: 'irrigation',
92
+ name: {
93
+ en: 'Irrigation',
94
+ ru: 'Орошение',
95
+ de: 'Bewässerung',
96
+ fr: 'Irrigation',
97
+ it: 'Irrigazione',
98
+ nl: 'Irrigatie',
99
+ pl: 'Nawadnianie',
100
+ pt: 'Irrigação',
101
+ es: 'Irrigación',
102
+ 'zh-cn': '灌溉',
103
+ },
104
+ icon: 'Irrigation.svg',
105
+ },
106
+ {
107
+ _id: 'iron',
108
+ name: {
109
+ en: 'Iron',
110
+ ru: 'Утюг',
111
+ de: 'Bügeleisen',
112
+ fr: 'Le Fer',
113
+ it: 'Ferro',
114
+ nl: 'Ijzer',
115
+ pl: 'Żelazo',
116
+ pt: 'Ferro',
117
+ es: 'Hierro',
118
+ 'zh-cn': '铁',
119
+ },
120
+ icon: 'Iron.svg',
121
+ },
122
+ {
123
+ _id: 'computer',
124
+ name: {
125
+ en: 'Computer',
126
+ ru: 'Компьютер',
127
+ de: 'Rechner',
128
+ fr: "L'Ordinateur",
129
+ it: 'Computer',
130
+ nl: 'Computer',
131
+ pl: 'Komputer',
132
+ pt: 'Computador',
133
+ es: 'Ordenador',
134
+ 'zh-cn': '电脑',
135
+ },
136
+ icon: 'Computer.svg',
137
+ },
138
+ {
139
+ _id: 'ceiling_spotlight',
140
+ name: {
141
+ en: 'Ceiling Spotlight',
142
+ ru: 'Потолочный прожектор',
143
+ de: 'Deckenspot',
144
+ fr: 'Plafond Spotlight',
145
+ it: 'Faretti A Soffitto',
146
+ nl: 'Plafond Spotlight',
147
+ pl: 'Reflektory Sufitowe',
148
+ pt: 'Tecto Foco',
149
+ es: 'Focos De Techo',
150
+ 'zh-cn': '天花射灯',
151
+ },
152
+ icon: 'Ceiling Spotlights.svg',
153
+ },
154
+ {
155
+ _id: 'printer',
156
+ name: {
157
+ en: 'Printer',
158
+ de: 'Drucker',
159
+ ru: 'Принтер',
160
+ pt: 'Impressora',
161
+ nl: 'Printer',
162
+ fr: 'Imprimante',
163
+ it: 'Stampante',
164
+ es: 'Impresora',
165
+ pl: 'Drukarka',
166
+ 'zh-cn': '打印机',
167
+ },
168
+ icon: 'Printer.svg',
169
+ },
170
+ {
171
+ _id: 'power_consumption',
172
+ name: {
173
+ en: 'Power Consumption',
174
+ ru: 'Потребляемая мощность',
175
+ de: 'Stromverbrauch',
176
+ fr: "Consommation D'Énergie",
177
+ it: 'Consumo Di Energia',
178
+ nl: 'Energieverbruik',
179
+ pl: 'Pobór Energii',
180
+ pt: 'Consumo De Energia',
181
+ es: 'El Consumo De Energía',
182
+ 'zh-cn': '能量消耗',
183
+ },
184
+ icon: 'Power Consumption.svg',
185
+ },
186
+ {
187
+ _id: 'window',
188
+ name: {
189
+ en: 'Window',
190
+ ru: 'Окно',
191
+ de: 'Fenster',
192
+ fr: 'La Fenêtre',
193
+ it: 'Finestra',
194
+ nl: 'Venster',
195
+ pl: 'Okno',
196
+ pt: 'Janela',
197
+ es: 'Ventana',
198
+ 'zh-cn': '窗户',
199
+ },
200
+ icon: 'Window.svg',
201
+ },
202
+ {
203
+ _id: 'garage_door',
204
+ name: {
205
+ en: 'Garage Door',
206
+ ru: 'Гаражные Ворота',
207
+ de: 'Garagentor',
208
+ fr: 'Portes De Garage',
209
+ it: 'Garage Door',
210
+ nl: 'Garage Door',
211
+ pl: 'Bramy Garażowe',
212
+ pt: 'Portas De Garagem',
213
+ es: 'Las Puertas De Garaje',
214
+ 'zh-cn': '车库门',
215
+ },
216
+ icon: 'Garage Doors.svg',
217
+ },
218
+ {
219
+ _id: 'hairdryer',
220
+ name: {
221
+ en: 'Hairdryer',
222
+ ru: 'Фен',
223
+ de: 'Haartrockner',
224
+ fr: 'Sèche-Cheveux',
225
+ it: 'Asciugacapelli',
226
+ nl: 'Haardroger',
227
+ pl: 'Suszarka Do Włosów',
228
+ pt: 'Secador De Cabelo',
229
+ es: 'Secador De Pelo',
230
+ 'zh-cn': '电吹风',
231
+ },
232
+ icon: 'Hairdryer.svg',
233
+ },
234
+ {
235
+ _id: 'hanging_lamp',
236
+ name: {
237
+ en: 'Hanging Lamp',
238
+ ru: 'Подвесной светильник',
239
+ de: 'Hängelampe',
240
+ fr: 'Lampes Suspendues',
241
+ it: 'Lampade A Sospensione',
242
+ nl: 'Opknoping Lampen',
243
+ pl: 'Lampy Wiszące',
244
+ pt: 'Lâmpadas De Suspensão',
245
+ es: 'Lámparas Colgantes',
246
+ 'zh-cn': '挂灯',
247
+ },
248
+ icon: 'Hanging Lamps.svg',
249
+ },
250
+ {
251
+ _id: 'doorstep',
252
+ name: {
253
+ en: 'Enterance',
254
+ ru: 'Входная дверь',
255
+ de: 'Haustür',
256
+ fr: 'Seuil De Porte',
257
+ it: 'Gradino Della Porta',
258
+ nl: 'Drempel',
259
+ pl: 'Próg',
260
+ pt: 'Porta',
261
+ es: 'Peldaño',
262
+ 'zh-cn': '门阶',
263
+ },
264
+ icon: 'Doorstep.svg',
265
+ },
266
+ {
267
+ _id: 'hot_water',
268
+ name: {
269
+ en: 'Hot Water',
270
+ ru: 'Горячая вода',
271
+ de: 'Heißwasser',
272
+ fr: 'Eau Chaude',
273
+ it: 'Acqua Calda',
274
+ nl: 'Heet Water',
275
+ pl: 'Gorąca Woda',
276
+ pt: 'Água Quente',
277
+ es: 'Agua Caliente',
278
+ 'zh-cn': '热水',
279
+ },
280
+ icon: 'Hot Water.svg',
281
+ },
282
+ {
283
+ _id: 'heating',
284
+ name: {
285
+ en: 'Heating',
286
+ ru: 'Отопление',
287
+ de: 'Heizung',
288
+ fr: 'Chauffe-Eau',
289
+ it: 'Riscaldatore',
290
+ nl: 'Verwarmer',
291
+ pl: 'Podgrzewacz',
292
+ pt: 'Aquecedor',
293
+ es: 'Calentador',
294
+ 'zh-cn': '加热器',
295
+ },
296
+ icon: 'Heater.svg',
297
+ },
298
+ {
299
+ _id: 'stove',
300
+ name: {
301
+ en: 'Stove',
302
+ ru: 'Печь',
303
+ de: 'Herd',
304
+ fr: 'Le Fourneau',
305
+ it: 'Stufa',
306
+ nl: 'Fornuis',
307
+ pl: 'Kuchenka',
308
+ pt: 'Forno',
309
+ es: 'Cocina',
310
+ 'zh-cn': '火炉',
311
+ },
312
+ icon: 'Stove.svg',
313
+ },
314
+ {
315
+ _id: 'louvre',
316
+ name: {
317
+ en: 'Louvre',
318
+ ru: 'Жалюзи',
319
+ de: 'Jalousie',
320
+ fr: 'Persienne',
321
+ it: 'Persiana Di Ventilazione',
322
+ nl: 'Louvre',
323
+ pl: 'Żaluzja',
324
+ pt: 'Trapeira',
325
+ es: 'Lumbrera',
326
+ 'zh-cn': '卢浮宫',
327
+ },
328
+ icon: 'Louvre.svg',
329
+ },
330
+ {
331
+ _id: 'coffee_maker',
332
+ name: {
333
+ en: 'Coffee Maker',
334
+ ru: 'Кофеварка',
335
+ de: 'Kaffemaschine',
336
+ fr: 'Cafetière',
337
+ it: 'Macchine Da Caffè',
338
+ nl: 'Koffie Maker',
339
+ pl: 'Ekspresy Do Kawy',
340
+ pt: 'Cafeteira',
341
+ es: 'Cafetera',
342
+ 'zh-cn': '咖啡壶',
343
+ },
344
+ icon: 'Coffee Makers.svg',
345
+ },
346
+ {
347
+ _id: 'cold_water',
348
+ name: {
349
+ en: 'Cold Water',
350
+ ru: 'Холодная вода',
351
+ de: 'Kaltwasser',
352
+ fr: 'Eau Froide',
353
+ it: 'Acqua Fredda',
354
+ nl: 'Koud Water',
355
+ pl: 'Zimna Woda',
356
+ pt: 'Água Fria',
357
+ es: 'Agua Fría',
358
+ 'zh-cn': '冷水',
359
+ },
360
+ icon: 'Cold Water.svg',
361
+ },
362
+ {
363
+ _id: 'climate',
364
+ name: {
365
+ en: 'Climate',
366
+ ru: 'Климат',
367
+ de: 'Klima',
368
+ fr: 'Climat',
369
+ it: 'Clima',
370
+ nl: 'Klimaat',
371
+ pl: 'Klimat',
372
+ pt: 'Clima',
373
+ es: 'Clima',
374
+ 'zh-cn': '气候',
375
+ },
376
+ icon: 'Climate.svg',
377
+ },
378
+ {
379
+ _id: 'speaker',
380
+ name: {
381
+ en: 'Speaker',
382
+ ru: 'Звуковая система',
383
+ de: 'Lautsprecher',
384
+ fr: 'Orateur',
385
+ it: 'Altoparlante',
386
+ nl: 'Spreker',
387
+ pl: 'Głośnik',
388
+ pt: 'Palestrante',
389
+ es: 'Altavoz',
390
+ 'zh-cn': '扬声器',
391
+ },
392
+ icon: 'Speaker.svg',
393
+ },
394
+ {
395
+ _id: 'led_strip',
396
+ name: {
397
+ en: 'Led Strip',
398
+ ru: 'Светодиодная лента',
399
+ de: 'LED Leiste',
400
+ fr: 'Led Strip',
401
+ it: 'Led Strip',
402
+ nl: 'Loden Strip',
403
+ pl: 'Pasek Ledowy',
404
+ pt: 'Led Faixa',
405
+ es: 'Tira Llevada',
406
+ 'zh-cn': '灯带',
407
+ },
408
+ icon: 'Led Strip.svg',
409
+ },
410
+ {
411
+ _id: 'light',
412
+ name: {
413
+ en: 'Light',
414
+ ru: 'Свет',
415
+ de: 'Licht',
416
+ fr: 'Lumière',
417
+ it: 'Leggero',
418
+ nl: 'Licht',
419
+ pl: 'Lekki',
420
+ pt: 'Luz',
421
+ es: 'Luz',
422
+ 'zh-cn': '光',
423
+ },
424
+ icon: 'Light.svg',
425
+ },
426
+ {
427
+ _id: 'fan',
428
+ name: {
429
+ en: 'Fan',
430
+ ru: 'Вентилятор',
431
+ de: 'Lüfter',
432
+ fr: 'Ventilateur',
433
+ it: 'Fan',
434
+ nl: 'Ventilator',
435
+ pl: 'Wentylator',
436
+ pt: 'Ventilador',
437
+ es: 'Ventilador',
438
+ 'zh-cn': '扇子',
439
+ },
440
+ icon: 'Fan.svg',
441
+ },
442
+ {
443
+ _id: 'humidity',
444
+ name: {
445
+ en: 'Humidity',
446
+ ru: 'Влажность',
447
+ de: 'Luftfeuchtigkeit',
448
+ fr: 'Humidité',
449
+ it: 'Umidità',
450
+ nl: 'Vochtigheid',
451
+ pl: 'Wilgotność',
452
+ pt: 'Umidade',
453
+ es: 'Humedad',
454
+ 'zh-cn': '湿度',
455
+ },
456
+ icon: 'Humidity.svg',
457
+ },
458
+ {
459
+ _id: 'ventilation',
460
+ name: {
461
+ en: 'Ventilation',
462
+ ru: 'Вентиляция',
463
+ de: 'Lüftung',
464
+ fr: 'Ventilation',
465
+ it: 'Ventilazione',
466
+ nl: 'Ventilatie',
467
+ pl: 'Wentylacja',
468
+ pt: 'Ventilação',
469
+ es: 'Ventilación',
470
+ 'zh-cn': '通风',
471
+ },
472
+ icon: 'Ventilation.svg',
473
+ },
474
+ {
475
+ _id: 'chandelier',
476
+ name: {
477
+ en: 'Chandelier',
478
+ ru: 'Люстра',
479
+ de: 'Kronleuchter',
480
+ fr: 'Lustre',
481
+ it: 'Lampadario',
482
+ nl: 'Kroonluchter',
483
+ pl: 'Żyrandol',
484
+ pt: 'Lustre',
485
+ es: 'Candelabro',
486
+ 'zh-cn': '枝形吊灯',
487
+ },
488
+ icon: 'Chandelier.svg',
489
+ },
490
+ {
491
+ _id: 'awning',
492
+ name: {
493
+ en: 'Awning',
494
+ ru: 'Маркиза',
495
+ de: 'Markise',
496
+ fr: 'Auvents',
497
+ it: 'Tende',
498
+ nl: 'Luifels',
499
+ pl: 'Okrycia',
500
+ pt: 'Toldos',
501
+ es: 'Toldos',
502
+ 'zh-cn': '遮阳篷',
503
+ },
504
+ icon: 'Awnings.svg',
505
+ },
506
+ {
507
+ _id: 'music',
508
+ name: {
509
+ en: 'Music',
510
+ ru: 'Музыка',
511
+ de: 'Musik',
512
+ fr: 'Musique',
513
+ it: 'Musica',
514
+ nl: 'Muziek',
515
+ pl: 'Muzyka',
516
+ pt: 'Música',
517
+ es: 'Música',
518
+ 'zh-cn': '音乐',
519
+ },
520
+ icon: 'Music.svg',
521
+ },
522
+ {
523
+ _id: 'people',
524
+ name: {
525
+ en: 'People',
526
+ ru: 'Люди',
527
+ de: 'Personen',
528
+ fr: 'Gens',
529
+ it: 'Persone',
530
+ nl: 'Mensen',
531
+ pl: 'Ludzie',
532
+ pt: 'Pessoas',
533
+ es: 'Personas',
534
+ 'zh-cn': '人们',
535
+ },
536
+ icon: 'People.svg',
537
+ },
538
+ {
539
+ _id: 'pool',
540
+ name: {
541
+ en: 'Pool',
542
+ ru: 'Бассейн',
543
+ de: 'Pool',
544
+ fr: 'Piscine',
545
+ it: 'Piscina',
546
+ nl: 'Zwembad',
547
+ pl: 'Basen',
548
+ pt: 'Piscina',
549
+ es: 'Piscina',
550
+ 'zh-cn': '水池',
551
+ },
552
+ icon: 'Pool.svg',
553
+ },
554
+ {
555
+ _id: 'pump',
556
+ name: {
557
+ en: 'Pump',
558
+ ru: 'Насос',
559
+ de: 'Pumpe',
560
+ fr: 'Pompe',
561
+ it: 'Pompa',
562
+ nl: 'Pomp',
563
+ pl: 'Pompa',
564
+ pt: 'Bombear',
565
+ es: 'Bomba',
566
+ 'zh-cn': '泵',
567
+ },
568
+ icon: 'Pump.svg',
569
+ },
570
+ {
571
+ _id: 'outdoor_blinds',
572
+ name: {
573
+ en: 'Outdoor Blinds',
574
+ ru: 'Внещгте жалюзи',
575
+ de: 'Raffstore',
576
+ fr: 'Volets',
577
+ it: 'Tende Da Esterni',
578
+ nl: 'Outdoor Blinds',
579
+ pl: 'Rolety Zewnętrzne',
580
+ pt: 'Estores Exteriores',
581
+ es: 'Persianas Exteriores',
582
+ 'zh-cn': '室外百叶窗',
583
+ },
584
+ icon: 'Outdoor Blinds.svg',
585
+ },
586
+ {
587
+ _id: 'mowing_machine',
588
+ name: {
589
+ en: 'Mowing Machine',
590
+ ru: 'Газонокосилка',
591
+ de: 'Rasenmäher',
592
+ fr: 'Machine De Fauchage',
593
+ it: 'Macchina Di Falciatura',
594
+ nl: 'Maaimachine',
595
+ pl: 'Kosiarka',
596
+ pt: 'Roçada Máquina',
597
+ es: 'Segadora',
598
+ 'zh-cn': '割草机',
599
+ },
600
+ icon: 'Mowing Machine.svg',
601
+ },
602
+ {
603
+ _id: 'receiver',
604
+ name: {
605
+ en: 'Receiver',
606
+ ru: 'Приставка',
607
+ de: 'Receiver',
608
+ fr: 'Destinataire',
609
+ it: 'Ricevitore',
610
+ nl: 'Ontvanger',
611
+ pl: 'Odbiorca',
612
+ pt: 'Recebedor',
613
+ es: 'Receptor',
614
+ 'zh-cn': '接收者',
615
+ },
616
+ icon: 'Receiver.svg',
617
+ },
618
+ {
619
+ _id: 'shutters',
620
+ name: {
621
+ en: 'Shutters',
622
+ ru: 'Ставни',
623
+ de: 'Rollladen',
624
+ fr: 'Volets',
625
+ it: 'Persiane',
626
+ nl: 'Shutters',
627
+ pl: 'Żaluzje',
628
+ pt: 'Persianas',
629
+ es: 'Persianas',
630
+ 'zh-cn': '百叶窗',
631
+ },
632
+ icon: 'Shutters.svg',
633
+ },
634
+ {
635
+ _id: 'smoke_detector',
636
+ name: {
637
+ en: 'Smoke detector',
638
+ de: 'Rauchmelder',
639
+ ru: 'Детектор дыма',
640
+ pt: 'Detector de fumaça',
641
+ nl: 'Rookdetector',
642
+ fr: 'Détecteur de fumée',
643
+ it: 'Rilevatore di fumo',
644
+ es: 'Detector de humo',
645
+ pl: 'Wykrywacz dymu',
646
+ 'zh-cn': '烟雾探测器',
647
+ },
648
+ icon: 'SmokeDetector.svg',
649
+ },
650
+ {
651
+ _id: 'lock',
652
+ name: {
653
+ en: 'Lock',
654
+ ru: 'Замок',
655
+ de: 'Schloß',
656
+ fr: 'Fermer À Clé',
657
+ it: 'Serratura',
658
+ nl: 'Slot',
659
+ pl: 'Zamek',
660
+ pt: 'Trancar',
661
+ es: 'Cerrar Con Llave',
662
+ 'zh-cn': '锁',
663
+ },
664
+ icon: 'Lock.svg',
665
+ },
666
+ {
667
+ _id: 'security',
668
+ name: {
669
+ en: 'Security',
670
+ ru: 'Безопасность',
671
+ de: 'Sicherheit',
672
+ fr: 'Sécurité',
673
+ it: 'Sicurezza',
674
+ nl: 'Veiligheid',
675
+ pl: 'Bezpieczeństwo',
676
+ pt: 'Segurança',
677
+ es: 'Seguridad',
678
+ 'zh-cn': '安全',
679
+ },
680
+ icon: 'Security.svg',
681
+ },
682
+ {
683
+ _id: 'dishwasher',
684
+ name: {
685
+ en: 'Dishwasher',
686
+ ru: 'Посудомоечная машина',
687
+ de: 'Spülmaschine',
688
+ fr: 'Lave-Vaisselles',
689
+ it: 'Lavastoviglie',
690
+ nl: 'Vaatwassers',
691
+ pl: 'Zmywarki',
692
+ pt: 'Máquinas De Lavar Louça',
693
+ es: 'Lavaplatos',
694
+ 'zh-cn': '洗碗机',
695
+ },
696
+ icon: 'Dishwashers.svg',
697
+ },
698
+ {
699
+ _id: 'vacuum_cleaner',
700
+ name: {
701
+ en: 'Vacuum Cleaner',
702
+ ru: 'Пылесос',
703
+ de: 'Staubsauger',
704
+ fr: 'Aspirateur',
705
+ it: 'Aspirapolvere',
706
+ nl: 'Stofzuiger',
707
+ pl: 'Odkurzacz',
708
+ pt: 'Aspirador De Pó',
709
+ es: 'Aspiradora',
710
+ 'zh-cn': '吸尘器',
711
+ },
712
+ icon: 'Vacuum Cleaner.svg',
713
+ },
714
+ {
715
+ _id: 'socket',
716
+ name: {
717
+ en: 'Socket',
718
+ ru: 'Розетка',
719
+ de: 'Steckdose',
720
+ fr: 'Prise',
721
+ it: 'Socket',
722
+ nl: 'Socket',
723
+ pl: 'Gniazdka',
724
+ pt: 'Tomada',
725
+ es: 'Zócalo',
726
+ 'zh-cn': '套接字',
727
+ },
728
+ icon: 'Sockets.svg',
729
+ },
730
+ {
731
+ _id: 'floor_lamp',
732
+ name: {
733
+ en: 'Floor Lamp',
734
+ ru: 'Торшер',
735
+ de: 'Stehlampe',
736
+ fr: 'Lampes Pour Plancher',
737
+ it: 'Lampade A Stelo',
738
+ nl: 'Vloerlampen',
739
+ pl: 'Lampy Podłogowe',
740
+ pt: 'Lâmpadas Chão',
741
+ es: 'Lámparas De Pie',
742
+ 'zh-cn': '落地灯',
743
+ },
744
+ icon: 'Floor Lamps.svg',
745
+ },
746
+ {
747
+ _id: 'power_consumption',
748
+ name: {
749
+ en: 'Power Consumption',
750
+ ru: 'Потребляемая мощность',
751
+ de: 'Stromverbrauch',
752
+ fr: "Consommation D'Énergie",
753
+ it: 'Consumo Di Energia',
754
+ nl: 'Energieverbruik',
755
+ pl: 'Pobór Energii',
756
+ pt: 'Consumo De Energia',
757
+ es: 'El Consumo De Energía',
758
+ 'zh-cn': '能量消耗',
759
+ },
760
+ icon: 'Power Consumption.svg',
761
+ },
762
+ {
763
+ _id: 'temperature_sensor',
764
+ name: {
765
+ en: 'Temperature Sensor',
766
+ ru: 'Температурный датчик',
767
+ de: 'Temperatur-Sensor',
768
+ fr: 'Capteur De Température',
769
+ it: 'Sensori Di Temperatura',
770
+ nl: 'Temperatuursensor',
771
+ pl: 'Czujniki Temperatury',
772
+ pt: 'Sensores De Temperatura',
773
+ es: 'Sensores De Temperatura',
774
+ 'zh-cn': '温度传感器',
775
+ },
776
+ icon: 'Temperature Sensors.svg',
777
+ },
778
+ {
779
+ _id: 'table_lamp',
780
+ name: {
781
+ en: 'Table Lamp',
782
+ ru: 'Настольная лампа',
783
+ de: 'Tischlampe',
784
+ fr: 'Lampe De Chevet',
785
+ it: 'Lampade Da Tavolo',
786
+ nl: 'Tafellampen',
787
+ pl: 'Lampy Stołowe',
788
+ pt: 'Lâmpadas De Mesa',
789
+ es: 'Lámparas De Mesa',
790
+ 'zh-cn': '台灯',
791
+ },
792
+ icon: 'Table Lamps.svg',
793
+ },
794
+ {
795
+ _id: 'gate',
796
+ name: {
797
+ en: 'Gate',
798
+ ru: 'Ворота',
799
+ de: 'Tor',
800
+ fr: 'Porte',
801
+ it: 'Gate',
802
+ nl: 'Gate',
803
+ pl: 'Bramy',
804
+ pt: 'Portões',
805
+ es: 'Puertas',
806
+ 'zh-cn': '盖茨',
807
+ },
808
+ icon: 'Gates.svg',
809
+ },
810
+ {
811
+ _id: 'dryer',
812
+ name: {
813
+ en: 'Dryer',
814
+ ru: 'Сушилка',
815
+ de: 'Trockner',
816
+ fr: 'Séchoir',
817
+ it: 'Asciugatrice',
818
+ nl: 'Droger',
819
+ pl: 'Suszarka',
820
+ pt: 'Secador',
821
+ es: 'Secadora',
822
+ 'zh-cn': '烘干机',
823
+ },
824
+ icon: 'Dryer.svg',
825
+ },
826
+ {
827
+ _id: 'door',
828
+ name: {
829
+ en: 'Door',
830
+ ru: 'Дверь',
831
+ de: 'Tür',
832
+ fr: 'Des Portes',
833
+ it: 'Porte',
834
+ nl: 'Deuren',
835
+ pl: 'Drzwi',
836
+ pt: 'Portas',
837
+ es: 'Puertas',
838
+ 'zh-cn': '门',
839
+ },
840
+ icon: 'Doors.svg',
841
+ },
842
+ {
843
+ _id: 'tv',
844
+ name: {
845
+ en: 'Tv',
846
+ ru: 'Телевизор',
847
+ de: 'TV',
848
+ fr: 'La Télé',
849
+ it: 'Tv',
850
+ nl: 'Tv',
851
+ pl: 'Telewizja',
852
+ pt: 'Televisão',
853
+ es: 'Televisor',
854
+ 'zh-cn': '电视',
855
+ },
856
+ icon: 'Tv.svg',
857
+ },
858
+ {
859
+ _id: 'consumption',
860
+ name: {
861
+ en: 'Consumption',
862
+ ru: 'Потребление',
863
+ de: 'Verbrauch',
864
+ fr: 'Consommation',
865
+ it: 'Consumo',
866
+ nl: 'Consumptie',
867
+ pl: 'Konsumpcja',
868
+ pt: 'Consumo',
869
+ es: 'Consumo',
870
+ 'zh-cn': '消费',
871
+ },
872
+ icon: 'Consumption.svg',
873
+ },
874
+ {
875
+ _id: 'amplifier',
876
+ name: {
877
+ en: 'Amplifier',
878
+ ru: 'Усилитель звука',
879
+ de: 'Verstärker',
880
+ fr: 'Amplificateur',
881
+ it: 'Amplificatore',
882
+ nl: 'Versterker',
883
+ pl: 'Wzmacniacz',
884
+ pt: 'Amplificador',
885
+ es: 'Amplificador',
886
+ 'zh-cn': '放大器',
887
+ },
888
+ icon: 'Amplifier.svg',
889
+ },
890
+ {
891
+ _id: 'curtains',
892
+ name: {
893
+ en: 'Curtains',
894
+ ru: 'Шторы',
895
+ de: 'Vorhänge',
896
+ fr: 'Des Rideaux',
897
+ it: 'Le Tende',
898
+ nl: 'Gordijnen',
899
+ pl: 'Zasłony',
900
+ pt: 'Cortinas',
901
+ es: 'Cortinas',
902
+ 'zh-cn': '窗帘',
903
+ },
904
+ icon: 'Curtains.svg',
905
+ },
906
+ {
907
+ _id: 'sconce',
908
+ name: {
909
+ en: 'Sconce',
910
+ ru: 'Настенный светильник',
911
+ de: 'Wandlampe',
912
+ fr: 'Sconce',
913
+ it: 'Sconce',
914
+ nl: 'Sconce',
915
+ pl: 'Kinkiety',
916
+ pt: 'Arandelas',
917
+ es: 'Los Apliques',
918
+ 'zh-cn': '壁灯',
919
+ },
920
+ icon: 'Sconces.svg',
921
+ },
922
+ {
923
+ _id: 'washing_machine',
924
+ name: {
925
+ en: 'Washing Machine',
926
+ ru: 'Стиральная машина',
927
+ de: 'Waschmaschine',
928
+ fr: 'Machines À Laver',
929
+ it: 'Lavatrici',
930
+ nl: 'Wasmachines',
931
+ pl: 'Pralki',
932
+ pt: 'Máquinas De Lavar Roupas',
933
+ es: 'Lavadoras',
934
+ 'zh-cn': '洗衣机',
935
+ },
936
+ icon: 'Washing Machines.svg',
937
+ },
938
+ {
939
+ _id: 'water',
940
+ name: {
941
+ en: 'Water',
942
+ ru: 'Вода',
943
+ de: 'Wasser',
944
+ fr: "L'Eau",
945
+ it: 'Acqua',
946
+ nl: 'Water',
947
+ pl: 'Woda',
948
+ pt: 'Água',
949
+ es: 'Agua',
950
+ 'zh-cn': '水',
951
+ },
952
+ icon: 'Water.svg',
953
+ },
954
+ {
955
+ _id: 'water_heater',
956
+ name: {
957
+ en: 'Water Heater',
958
+ ru: 'Нагреватель воды',
959
+ de: 'Wasserkocher',
960
+ fr: 'Chauffe-Eau',
961
+ it: 'Scaldabagno',
962
+ nl: 'Waterkoker',
963
+ pl: 'Podgrzewacz Wody',
964
+ pt: 'Aquecedor De Água',
965
+ es: 'Calentador De Agua',
966
+ 'zh-cn': '热水器',
967
+ },
968
+ icon: 'Water Heater.svg',
969
+ },
970
+ {
971
+ _id: 'water_consumption',
972
+ name: {
973
+ en: 'Water Consumption',
974
+ ru: 'Потребление воды',
975
+ de: 'Wasserverbrauch',
976
+ fr: "Consommation D'Eau",
977
+ it: "Consumo D'Acqua",
978
+ nl: 'Waterverbruik',
979
+ pl: 'Konsumpcja Wody',
980
+ pt: 'Consumo De Água',
981
+ es: 'Consumo De Agua',
982
+ 'zh-cn': '耗水量',
983
+ },
984
+ icon: 'Water Consumption.svg',
985
+ },
986
+ {
987
+ _id: 'weather',
988
+ name: {
989
+ en: 'Weather',
990
+ ru: 'Погода',
991
+ de: 'Wetter',
992
+ fr: 'La Météo',
993
+ it: 'Tempo Metereologico',
994
+ nl: 'Weer',
995
+ pl: 'Pogoda',
996
+ pt: 'Clima',
997
+ es: 'Tiempo',
998
+ 'zh-cn': '天气',
999
+ },
1000
+ icon: 'Weather.svg',
1001
+ },
1002
+ ];
1003
+ // import rooms from '../assets/rooms/list.json';
1004
+ const rooms = [
1005
+ {
1006
+ _id: 'storeroom',
1007
+ name: {
1008
+ en: 'Storeroom',
1009
+ ru: 'Кладовая',
1010
+ de: 'Abstellraum',
1011
+ fr: 'Débarras',
1012
+ it: 'Dispensa',
1013
+ nl: 'Bergplaats',
1014
+ pl: 'Magazyn',
1015
+ pt: 'Despensa',
1016
+ es: 'Trastero',
1017
+ 'zh-cn': '库房',
1018
+ },
1019
+ icon: 'Storeroom.svg',
1020
+ },
1021
+ {
1022
+ _id: 'second_floor',
1023
+ name: {
1024
+ en: 'Second floor',
1025
+ ru: 'Второй этаж',
1026
+ de: 'Erster OG',
1027
+ pt: 'Primeiro andar',
1028
+ nl: 'Eerste verdieping',
1029
+ fr: 'Premier étage',
1030
+ it: 'Primo piano',
1031
+ es: 'Primer piso',
1032
+ pl: 'Pierwsze piętro',
1033
+ 'zh-cn': '第一层',
1034
+ },
1035
+ icon: 'Second Floor.svg',
1036
+ },
1037
+ {
1038
+ _id: 'dressing_room',
1039
+ name: {
1040
+ en: 'Dressing Room',
1041
+ ru: 'Гардеробная',
1042
+ de: 'Ankleide',
1043
+ fr: 'Vestiaire',
1044
+ it: 'Camerino',
1045
+ nl: 'Kleedkamer',
1046
+ pl: 'Przebieralnia',
1047
+ pt: 'Provador',
1048
+ es: 'Vestidor',
1049
+ 'zh-cn': '更衣室',
1050
+ },
1051
+ icon: 'Dressing Room.svg',
1052
+ },
1053
+ {
1054
+ _id: 'workspace',
1055
+ name: {
1056
+ en: 'Workspace',
1057
+ ru: 'Рабочая Среда',
1058
+ de: 'Arbeitszimmer',
1059
+ fr: 'Espace De Travail',
1060
+ it: 'Area Di Lavoro',
1061
+ nl: 'Workspace',
1062
+ pl: 'Workspace',
1063
+ pt: 'Área De Trabalho',
1064
+ es: 'Espacio De Trabajo',
1065
+ 'zh-cn': '工作区',
1066
+ },
1067
+ icon: 'Workspace.svg',
1068
+ },
1069
+ {
1070
+ _id: 'driveway',
1071
+ name: {
1072
+ en: 'Driveway',
1073
+ ru: 'Дорога',
1074
+ de: 'Auffahrt',
1075
+ fr: 'Allée',
1076
+ it: 'Viale',
1077
+ nl: 'Pad',
1078
+ pl: 'Podjazd',
1079
+ pt: 'Entrada Da Garagem',
1080
+ es: 'Entrada De Coches',
1081
+ 'zh-cn': '车道',
1082
+ },
1083
+ icon: 'Driveway.svg',
1084
+ },
1085
+ {
1086
+ _id: 'outdoors',
1087
+ name: {
1088
+ en: 'Outdoors',
1089
+ ru: 'На Улице',
1090
+ de: 'Außenbereich',
1091
+ fr: 'En Plein Air',
1092
+ it: "All'Aperto",
1093
+ nl: 'Buitenshuis',
1094
+ pl: 'Na Dworze',
1095
+ pt: 'Ao Ar Livre',
1096
+ es: 'Al Aire Libre',
1097
+ 'zh-cn': '户外',
1098
+ },
1099
+ icon: 'Outdoors.svg',
1100
+ },
1101
+ {
1102
+ _id: 'bathroom',
1103
+ name: {
1104
+ en: 'Bathroom',
1105
+ ru: 'Ванная Комната',
1106
+ de: 'Badezimmer',
1107
+ fr: 'Salle De Bains',
1108
+ it: 'Bagno',
1109
+ nl: 'Badkamer',
1110
+ pl: 'Łazienka',
1111
+ pt: 'Banheiro',
1112
+ es: 'Baño',
1113
+ 'zh-cn': '浴室',
1114
+ },
1115
+ icon: 'Bathroom.svg',
1116
+ },
1117
+ {
1118
+ _id: 'balcony',
1119
+ name: {
1120
+ en: 'Balcony',
1121
+ ru: 'Балкон',
1122
+ de: 'Balkon',
1123
+ fr: 'Balcon',
1124
+ it: 'Balcone',
1125
+ nl: 'Balkon',
1126
+ pl: 'Balkon',
1127
+ pt: 'Sacada',
1128
+ es: 'Balcón',
1129
+ 'zh-cn': '阳台',
1130
+ },
1131
+ icon: 'Balcony.svg',
1132
+ },
1133
+ {
1134
+ _id: 'office',
1135
+ name: {
1136
+ en: 'Office',
1137
+ ru: 'Офис',
1138
+ de: 'Office',
1139
+ fr: 'Bureau',
1140
+ it: 'Ufficio',
1141
+ nl: 'Kantoor',
1142
+ pl: 'Gabinet',
1143
+ pt: 'Escritório',
1144
+ es: 'Oficina',
1145
+ 'zh-cn': '办公室',
1146
+ },
1147
+ icon: 'Office.svg',
1148
+ },
1149
+ {
1150
+ _id: 'carport',
1151
+ name: {
1152
+ en: 'Carport',
1153
+ ru: 'Навес',
1154
+ de: 'Carport',
1155
+ fr: 'Carport',
1156
+ it: 'Posto Auto Coperto',
1157
+ nl: 'Carport',
1158
+ pl: 'Wiata',
1159
+ pt: 'Telheiro',
1160
+ es: 'Cochera',
1161
+ 'zh-cn': '车棚',
1162
+ },
1163
+ icon: 'Carport.svg',
1164
+ },
1165
+ {
1166
+ _id: 'attic',
1167
+ name: {
1168
+ en: 'Attic',
1169
+ ru: 'Чердак',
1170
+ de: 'Dachgeschoss',
1171
+ fr: 'Grenier',
1172
+ it: 'Attico',
1173
+ nl: 'Zolder',
1174
+ pl: 'Poddasze',
1175
+ pt: 'Sótão',
1176
+ es: 'Ático',
1177
+ 'zh-cn': '阁楼',
1178
+ },
1179
+ icon: 'Attic.svg',
1180
+ },
1181
+ {
1182
+ _id: 'hall',
1183
+ name: {
1184
+ en: 'Hall',
1185
+ ru: 'Зал',
1186
+ de: 'Diele',
1187
+ fr: 'Salle',
1188
+ it: 'Sala',
1189
+ nl: 'Hal',
1190
+ pl: 'Sala',
1191
+ pt: 'Corredor',
1192
+ es: 'Sala',
1193
+ 'zh-cn': '大厅',
1194
+ },
1195
+ icon: 'Hall.svg',
1196
+ },
1197
+ {
1198
+ _id: 'entrance',
1199
+ name: {
1200
+ en: 'Entrance',
1201
+ ru: 'Вход',
1202
+ de: 'Eingang',
1203
+ fr: 'Entrée',
1204
+ it: 'Ingresso',
1205
+ nl: 'Ingang',
1206
+ pl: 'Wejście',
1207
+ pt: 'Entrada',
1208
+ es: 'Entrada',
1209
+ 'zh-cn': '入口',
1210
+ },
1211
+ icon: 'Entrance.svg',
1212
+ },
1213
+ {
1214
+ _id: 'ground_floor',
1215
+ name: {
1216
+ en: 'Ground Floor',
1217
+ ru: 'Первый Этаж',
1218
+ de: 'Erdgeschoss',
1219
+ fr: 'Rez-De-Chaussée',
1220
+ it: 'Piano Terra',
1221
+ nl: 'Begane Grond',
1222
+ pl: 'Parter',
1223
+ pt: 'Térreo',
1224
+ es: 'Planta Baja',
1225
+ 'zh-cn': '一楼',
1226
+ },
1227
+ icon: 'Ground Floor.svg',
1228
+ },
1229
+ {
1230
+ _id: 'dining_area',
1231
+ name: {
1232
+ en: 'Dining Area',
1233
+ ru: 'Столовая',
1234
+ de: 'Essbereich',
1235
+ fr: 'Salle À Manger',
1236
+ it: 'Zona Pranzo',
1237
+ nl: 'Eethoek',
1238
+ pl: 'Jadalnia',
1239
+ pt: 'Área De Refeições',
1240
+ es: 'Comedor',
1241
+ 'zh-cn': '用餐区',
1242
+ },
1243
+ icon: 'Dining Area.svg',
1244
+ },
1245
+ {
1246
+ _id: 'dining_room',
1247
+ name: {
1248
+ en: 'Dining Room',
1249
+ ru: 'Столовая',
1250
+ de: 'Esszimmer',
1251
+ fr: 'Salle À Manger',
1252
+ it: 'Sala Da Pranzo',
1253
+ nl: 'Eetkamer',
1254
+ pl: 'Jadalnia',
1255
+ pt: 'Sala De Jantar',
1256
+ es: 'Comedor',
1257
+ 'zh-cn': '饭厅',
1258
+ },
1259
+ icon: 'Dining Room.svg',
1260
+ },
1261
+ {
1262
+ _id: 'gym',
1263
+ name: {
1264
+ en: 'Gym',
1265
+ ru: 'Спортзал',
1266
+ de: 'Fitnessraum',
1267
+ fr: 'Gym',
1268
+ it: 'Palestra',
1269
+ nl: 'Sportschool',
1270
+ pl: 'Siłownia',
1271
+ pt: 'Ginásio',
1272
+ es: 'Gimnasio',
1273
+ 'zh-cn': '健身房',
1274
+ },
1275
+ icon: 'Gym.svg',
1276
+ },
1277
+ {
1278
+ _id: 'gallery',
1279
+ name: {
1280
+ en: 'Gallery',
1281
+ ru: 'Галерея',
1282
+ de: 'Galerie',
1283
+ fr: 'Galerie',
1284
+ it: 'Galleria',
1285
+ nl: 'Galerij',
1286
+ pl: 'Galeria',
1287
+ pt: 'Galeria',
1288
+ es: 'Galería',
1289
+ 'zh-cn': '画廊',
1290
+ },
1291
+ icon: 'Gallery.svg',
1292
+ },
1293
+ {
1294
+ _id: 'garage',
1295
+ name: {
1296
+ en: 'Garage',
1297
+ ru: 'Гараж',
1298
+ de: 'Garage',
1299
+ fr: 'Garage',
1300
+ it: 'Box Auto',
1301
+ nl: 'Garage',
1302
+ pl: 'Garaż',
1303
+ pt: 'Garagem',
1304
+ es: 'Garaje',
1305
+ 'zh-cn': '车库',
1306
+ },
1307
+ icon: 'Garage.svg',
1308
+ },
1309
+ {
1310
+ _id: 'wardrobe',
1311
+ name: {
1312
+ en: 'Wardrobe',
1313
+ ru: 'Гардероб',
1314
+ de: 'Garderobe',
1315
+ fr: 'Penderie',
1316
+ it: 'Armadio',
1317
+ nl: 'Garderobe',
1318
+ pl: 'Szafa',
1319
+ pt: 'Guarda Roupa',
1320
+ es: 'Armario',
1321
+ 'zh-cn': '衣柜',
1322
+ },
1323
+ icon: 'Wardrobe.svg',
1324
+ },
1325
+ {
1326
+ _id: 'garden',
1327
+ name: {
1328
+ en: 'Garden',
1329
+ ru: 'Сад',
1330
+ de: 'Garten',
1331
+ fr: 'Jardin',
1332
+ it: 'Giardino',
1333
+ nl: 'Tuin',
1334
+ pl: 'Ogród',
1335
+ pt: 'Jardim',
1336
+ es: 'Jardín',
1337
+ 'zh-cn': '花园',
1338
+ },
1339
+ icon: 'Garden.svg',
1340
+ },
1341
+ {
1342
+ _id: 'summer_house',
1343
+ name: {
1344
+ en: 'Summer House',
1345
+ ru: 'Дача',
1346
+ de: 'Gartenhaus',
1347
+ fr: "Maison D'Été",
1348
+ it: 'Casa Estiva',
1349
+ nl: 'Zomerhuis',
1350
+ pl: 'Domek Letniskowy',
1351
+ pt: 'Summer House',
1352
+ es: 'Casa De Verano',
1353
+ 'zh-cn': '凉亭',
1354
+ },
1355
+ icon: 'Summer House.svg',
1356
+ },
1357
+ {
1358
+ _id: 'guest_bathroom',
1359
+ name: {
1360
+ en: 'Guest Bathroom',
1361
+ ru: 'Гостевая Комната',
1362
+ de: 'Gäste-WC',
1363
+ fr: 'Salle De Bains Invité',
1364
+ it: 'Guest Bathroom',
1365
+ nl: 'Gastenbadkamer',
1366
+ pl: 'Łazienka Gościnna',
1367
+ pt: 'Banheiro De Hóspedes',
1368
+ es: 'Baño De Visitas',
1369
+ 'zh-cn': '客用浴室',
1370
+ },
1371
+ icon: 'Guest Bathroom.svg',
1372
+ },
1373
+ {
1374
+ _id: 'guest_room',
1375
+ name: {
1376
+ en: 'Guest Room',
1377
+ ru: 'Гостевая Комната',
1378
+ de: 'Gästezimmer',
1379
+ fr: "Chambre D'Amis",
1380
+ it: 'Stanza Degli Ospiti',
1381
+ nl: 'Guest Room',
1382
+ pl: 'Pokój Gościnny',
1383
+ pt: 'Quarto De Hóspedes',
1384
+ es: 'Habitación De Huéspedes',
1385
+ 'zh-cn': '客房',
1386
+ },
1387
+ icon: 'Guest Room.svg',
1388
+ },
1389
+ {
1390
+ _id: 'laundry_room',
1391
+ name: {
1392
+ en: 'Laundry Room',
1393
+ ru: 'Прачечная',
1394
+ de: 'Hauswirtschaftsraum',
1395
+ fr: 'Buanderie',
1396
+ it: 'Lavanderia',
1397
+ nl: 'Wasruimte',
1398
+ pl: 'Pralnia',
1399
+ pt: 'Lavandaria',
1400
+ es: 'Cuarto De Lavado',
1401
+ 'zh-cn': '洗衣房',
1402
+ },
1403
+ icon: 'Laundry Room.svg',
1404
+ },
1405
+ {
1406
+ _id: 'home_theater',
1407
+ name: {
1408
+ en: 'Home Theater',
1409
+ ru: 'Домашний Театр',
1410
+ de: 'Heimkino',
1411
+ fr: 'Cinéma Maison',
1412
+ it: 'Home Theater',
1413
+ nl: 'Thuisbioscoop',
1414
+ pl: 'Kino Domowe',
1415
+ pt: 'Cinema Em Casa',
1416
+ es: 'Cine En Casa',
1417
+ 'zh-cn': '家庭电影院',
1418
+ },
1419
+ icon: 'Home Theater.svg',
1420
+ },
1421
+ {
1422
+ _id: 'boiler_room',
1423
+ name: {
1424
+ en: 'Boiler Room',
1425
+ ru: 'Бойлерная',
1426
+ de: 'Heizungsraum',
1427
+ fr: 'Chaufferie',
1428
+ it: 'Locale Caldaia',
1429
+ nl: 'Boiler Room',
1430
+ pl: 'Kotłownia',
1431
+ pt: 'Sala Da Caldeira',
1432
+ es: 'Sala De Calderas',
1433
+ 'zh-cn': '锅炉房',
1434
+ },
1435
+ icon: 'Boiler Room.svg',
1436
+ },
1437
+ {
1438
+ _id: 'chamber',
1439
+ name: {
1440
+ en: 'Chamber',
1441
+ ru: 'Камера',
1442
+ de: 'Kammer',
1443
+ fr: 'Chambre',
1444
+ it: 'Camera',
1445
+ nl: 'Kamer',
1446
+ pl: 'Izba',
1447
+ pt: 'Câmara',
1448
+ es: 'Cámara',
1449
+ 'zh-cn': '商会',
1450
+ },
1451
+ icon: 'Chamber.svg',
1452
+ },
1453
+ {
1454
+ _id: 'basement,_cellar',
1455
+ name: {
1456
+ en: 'Basement, Cellar',
1457
+ ru: 'Подвал, Погреб',
1458
+ de: 'Keller',
1459
+ fr: 'Sous-Sol, Cave',
1460
+ it: 'Taverna, Cantina',
1461
+ nl: 'Kelder, Kelder',
1462
+ pl: 'Piwnica, Piwnica',
1463
+ pt: 'Porão, Adega',
1464
+ es: 'Sótano, Bodega',
1465
+ 'zh-cn': '地下室,地窖',
1466
+ },
1467
+ icon: 'Basement.svg',
1468
+ },
1469
+ {
1470
+ _id: 'nursery',
1471
+ name: {
1472
+ en: 'Nursery',
1473
+ ru: 'Питомник',
1474
+ de: 'Kinderzimmer',
1475
+ fr: 'Garderie',
1476
+ it: 'Asilo',
1477
+ nl: 'Kinderkamer',
1478
+ pl: 'Żłobek',
1479
+ pt: 'Berçário',
1480
+ es: 'Guardería',
1481
+ 'zh-cn': '苗圃',
1482
+ },
1483
+ icon: 'Nursery.svg',
1484
+ },
1485
+ {
1486
+ _id: 'corridor',
1487
+ name: {
1488
+ en: 'Corridor',
1489
+ ru: 'Коридор',
1490
+ de: 'Korridor',
1491
+ fr: 'Couloir',
1492
+ it: 'Corridoio',
1493
+ nl: 'Gang',
1494
+ pl: 'Korytarz',
1495
+ pt: 'Corredor',
1496
+ es: 'Corredor',
1497
+ 'zh-cn': '走廊',
1498
+ },
1499
+ icon: 'Corridor.svg',
1500
+ },
1501
+ {
1502
+ _id: 'kitchen',
1503
+ name: {
1504
+ en: 'Kitchen',
1505
+ ru: 'Кухня',
1506
+ de: 'Küche',
1507
+ fr: 'Cuisine',
1508
+ it: 'Cucina',
1509
+ nl: 'Keuken',
1510
+ pl: 'Kuchnia',
1511
+ pt: 'Cozinha',
1512
+ es: 'Cocina',
1513
+ 'zh-cn': '厨房',
1514
+ },
1515
+ icon: 'Kitchen.svg',
1516
+ },
1517
+ {
1518
+ _id: 'upstairs',
1519
+ name: {
1520
+ en: 'Upstairs',
1521
+ ru: 'Вверх По Лестнице',
1522
+ de: 'Obergeschoss',
1523
+ fr: 'En Haut',
1524
+ it: 'Di Sopra',
1525
+ nl: 'Boven',
1526
+ pl: 'Na Górę',
1527
+ pt: 'Andar De Cima',
1528
+ es: 'Piso Superior',
1529
+ 'zh-cn': '楼上',
1530
+ },
1531
+ icon: 'Upstairs.svg',
1532
+ },
1533
+ {
1534
+ _id: 'office',
1535
+ name: {
1536
+ en: 'Office',
1537
+ ru: 'Офис',
1538
+ de: 'Office',
1539
+ fr: 'Bureau',
1540
+ it: 'Ufficio',
1541
+ nl: 'Kantoor',
1542
+ pl: 'Gabinet',
1543
+ pt: 'Escritório',
1544
+ es: 'Oficina',
1545
+ 'zh-cn': '办公室',
1546
+ },
1547
+ icon: 'Office.svg',
1548
+ },
1549
+ {
1550
+ _id: 'pool',
1551
+ name: {
1552
+ en: 'Pool',
1553
+ ru: 'Бассейн',
1554
+ de: 'Pool',
1555
+ fr: 'Piscine',
1556
+ it: 'Piscina',
1557
+ nl: 'Zwembad',
1558
+ pl: 'Basen',
1559
+ pt: 'Piscina',
1560
+ es: 'Piscina',
1561
+ 'zh-cn': '水池',
1562
+ },
1563
+ icon: 'Pool.svg',
1564
+ },
1565
+ {
1566
+ _id: 'rear_wall',
1567
+ name: {
1568
+ en: 'Rear Wall',
1569
+ ru: 'Задняя Стенка',
1570
+ de: 'Rückwand',
1571
+ fr: 'Paroi Arrière',
1572
+ it: 'Parete Posteriore',
1573
+ nl: 'Achterwand',
1574
+ pl: 'Tylna Ściana',
1575
+ pt: 'Parede Traseira',
1576
+ es: 'Pared Posterior',
1577
+ 'zh-cn': '后墙',
1578
+ },
1579
+ icon: 'Rear Wall.svg',
1580
+ },
1581
+ {
1582
+ _id: 'barn',
1583
+ name: {
1584
+ en: 'Barn',
1585
+ ru: 'Амбар',
1586
+ de: 'Scheune',
1587
+ fr: 'Grange',
1588
+ it: 'Fienile',
1589
+ nl: 'Schuur',
1590
+ pl: 'Stodoła',
1591
+ pt: 'Celeiro',
1592
+ es: 'Granero',
1593
+ 'zh-cn': '谷仓',
1594
+ },
1595
+ icon: 'Barn.svg',
1596
+ },
1597
+ {
1598
+ _id: 'sleeping_area',
1599
+ name: {
1600
+ en: 'Sleeping Area',
1601
+ ru: 'Спальное Место',
1602
+ de: 'Schlafbereich',
1603
+ fr: 'Coin Montagne',
1604
+ it: 'Area Sleeping',
1605
+ nl: 'Sleeping Area',
1606
+ pl: 'Powierzchnia Spania',
1607
+ pt: 'Sleeping Area',
1608
+ es: 'Área De Dormir',
1609
+ 'zh-cn': '睡眠区',
1610
+ },
1611
+ icon: 'Sleeping Area.svg',
1612
+ },
1613
+ {
1614
+ _id: 'bedroom',
1615
+ name: {
1616
+ en: 'Bedroom',
1617
+ ru: 'Спальная Комната',
1618
+ de: 'Schlafzimmer',
1619
+ fr: 'Chambre',
1620
+ it: 'Camera Da Letto',
1621
+ nl: 'Slaapkamer',
1622
+ pl: 'Sypialnia',
1623
+ pt: 'Quarto',
1624
+ es: 'Cuarto',
1625
+ 'zh-cn': '卧室',
1626
+ },
1627
+ icon: 'Bedroom.svg',
1628
+ },
1629
+ {
1630
+ _id: 'shed',
1631
+ name: {
1632
+ en: 'Shed',
1633
+ ru: 'Сбрасывать',
1634
+ de: 'Schuppen',
1635
+ fr: 'Hangar',
1636
+ it: 'Capannone',
1637
+ nl: 'Schuur',
1638
+ pl: 'Budka',
1639
+ pt: 'Cabana',
1640
+ es: 'Cobertizo',
1641
+ 'zh-cn': '棚',
1642
+ },
1643
+ icon: 'Shed.svg',
1644
+ },
1645
+ {
1646
+ _id: 'swimming_pool',
1647
+ name: {
1648
+ en: 'Swimming Pool',
1649
+ ru: 'Плавательный Бассейн',
1650
+ de: 'Schwimmbad',
1651
+ fr: 'Piscine',
1652
+ it: 'Piscina',
1653
+ nl: 'Zwembad',
1654
+ pl: 'Basen',
1655
+ pt: 'Piscina',
1656
+ es: 'Piscina',
1657
+ 'zh-cn': '游泳池',
1658
+ },
1659
+ icon: 'Swimming Pool.svg',
1660
+ },
1661
+ {
1662
+ _id: 'dining',
1663
+ name: {
1664
+ en: 'Dining',
1665
+ ru: 'Обеденный',
1666
+ de: 'Speis',
1667
+ fr: 'À Manger',
1668
+ it: 'Cenare',
1669
+ nl: 'Dining',
1670
+ pl: 'Jadalnia',
1671
+ pt: 'Jantar',
1672
+ es: 'Comida',
1673
+ 'zh-cn': '用餐',
1674
+ },
1675
+ icon: 'Dining.svg',
1676
+ },
1677
+ {
1678
+ _id: 'playroom',
1679
+ name: {
1680
+ en: 'Playroom',
1681
+ ru: 'Игровая Комната',
1682
+ de: 'Spielzimmer',
1683
+ fr: 'Salle De Jeux',
1684
+ it: 'Stanza Dei Giochi',
1685
+ nl: 'Speelkamer',
1686
+ pl: 'Pokój Zabaw',
1687
+ pt: 'Sala De Jogos',
1688
+ es: 'Cuarto De Jugar',
1689
+ 'zh-cn': '游戏室',
1690
+ },
1691
+ icon: 'Playroom.svg',
1692
+ },
1693
+ {
1694
+ _id: 'stairway',
1695
+ name: {
1696
+ en: 'Stairway',
1697
+ ru: 'Лестница',
1698
+ de: 'Treppe',
1699
+ fr: 'Escalier',
1700
+ it: 'Scala',
1701
+ nl: 'Trap',
1702
+ pl: 'Klatka Schodowa',
1703
+ pt: 'Escada',
1704
+ es: 'Escalera',
1705
+ 'zh-cn': '楼梯',
1706
+ },
1707
+ icon: 'Stairway.svg',
1708
+ },
1709
+ {
1710
+ _id: 'equipment_room',
1711
+ name: {
1712
+ en: 'Equipment Room',
1713
+ ru: 'Оборудование Номера',
1714
+ de: 'Technikraum',
1715
+ fr: "Salle D'Équipement",
1716
+ it: 'Stanza Degli Attrezzi',
1717
+ nl: 'Technische Ruimte',
1718
+ pl: 'Wyposażenie Pokoi',
1719
+ pt: 'Sala De Equipamentos',
1720
+ es: 'Cuarto De Equipos',
1721
+ 'zh-cn': '机房',
1722
+ },
1723
+ icon: 'Equipment Room.svg',
1724
+ },
1725
+ {
1726
+ _id: 'terrace',
1727
+ name: {
1728
+ en: 'Terrace',
1729
+ ru: 'Терраса',
1730
+ de: 'Terrasse',
1731
+ fr: 'Terrasse',
1732
+ it: 'Terrazza',
1733
+ nl: 'Terras',
1734
+ pl: 'Taras',
1735
+ pt: 'Terraço',
1736
+ es: 'Terraza',
1737
+ 'zh-cn': '阳台',
1738
+ },
1739
+ icon: 'Terrace.svg',
1740
+ },
1741
+ {
1742
+ _id: 'toilet',
1743
+ name: {
1744
+ en: 'Toilet',
1745
+ ru: 'Туалет',
1746
+ de: 'Toilette',
1747
+ fr: 'Toilette',
1748
+ it: 'Gabinetto',
1749
+ nl: 'Toilet',
1750
+ pl: 'Toaleta',
1751
+ pt: 'Banheiro',
1752
+ es: 'Inodoro',
1753
+ 'zh-cn': '洗手间',
1754
+ },
1755
+ icon: 'Toilet.svg',
1756
+ },
1757
+ {
1758
+ _id: 'stairwell',
1759
+ name: {
1760
+ en: 'Stairwell',
1761
+ ru: 'Лестничная клетка',
1762
+ de: 'Treppenhaus',
1763
+ fr: "Cage D'Escalier",
1764
+ it: 'Tromba Delle Scale',
1765
+ nl: 'Trappenhuis',
1766
+ pl: 'Klatka Schodowa',
1767
+ pt: 'Caixa De Escada',
1768
+ es: 'Hueco De Escalera',
1769
+ 'zh-cn': '楼梯间',
1770
+ },
1771
+ icon: 'Stairwell.svg',
1772
+ },
1773
+ {
1774
+ _id: 'locker_room',
1775
+ name: {
1776
+ en: 'Locker Room',
1777
+ ru: 'Камера Хранения',
1778
+ de: 'Umkleideraum',
1779
+ fr: 'Vestiaire',
1780
+ it: 'Spogliatoio',
1781
+ nl: 'Kleedkamer',
1782
+ pl: 'Szatnia',
1783
+ pt: 'Vestiário',
1784
+ es: 'Vestuario',
1785
+ 'zh-cn': '更衣室',
1786
+ },
1787
+ icon: 'Locker Room.svg',
1788
+ },
1789
+ {
1790
+ _id: 'basement',
1791
+ name: {
1792
+ en: 'Basement',
1793
+ ru: 'Подвал',
1794
+ de: 'Untergeschoss',
1795
+ fr: 'Sous-Sol',
1796
+ it: 'Seminterrato',
1797
+ nl: 'Kelder',
1798
+ pl: 'Piwnica',
1799
+ pt: 'Porão',
1800
+ es: 'Sótano',
1801
+ 'zh-cn': '地下室',
1802
+ },
1803
+ icon: 'Basement.svg',
1804
+ },
1805
+ {
1806
+ _id: 'front_yard',
1807
+ name: {
1808
+ en: 'Front Yard',
1809
+ ru: 'Передний Двор',
1810
+ de: 'Vorgarten',
1811
+ fr: 'Front Yard',
1812
+ it: 'Cortile',
1813
+ nl: 'Voortuin',
1814
+ pl: 'Podwórko',
1815
+ pt: 'Jardim Da Frente',
1816
+ es: 'Patio Delantero',
1817
+ 'zh-cn': '前院',
1818
+ },
1819
+ icon: 'Front Yard.svg',
1820
+ },
1821
+ {
1822
+ _id: 'anteroom',
1823
+ name: {
1824
+ en: 'Anteroom',
1825
+ ru: 'Передняя',
1826
+ de: 'Vorraum',
1827
+ fr: 'Antichambre',
1828
+ it: 'Anticamera',
1829
+ nl: 'Voorkamer',
1830
+ pl: 'Przedpokój',
1831
+ pt: 'Ante-Sala',
1832
+ es: 'Antesala',
1833
+ 'zh-cn': '接待室',
1834
+ },
1835
+ icon: 'Anteroom.svg',
1836
+ },
1837
+ {
1838
+ _id: 'washroom',
1839
+ name: {
1840
+ en: 'Washroom',
1841
+ ru: 'Уборная',
1842
+ de: 'Waschraum',
1843
+ fr: 'Toilettes',
1844
+ it: 'Bagno',
1845
+ nl: 'Waskamer',
1846
+ pl: 'Umywalnia',
1847
+ pt: 'Banheiro',
1848
+ es: 'Baño',
1849
+ 'zh-cn': '卫生间',
1850
+ },
1851
+ icon: 'Washroom.svg',
1852
+ },
1853
+ {
1854
+ _id: 'wc',
1855
+ name: {
1856
+ en: 'Wc',
1857
+ ru: 'Туалет',
1858
+ de: 'WC',
1859
+ fr: 'Toilettes',
1860
+ it: 'Bagno',
1861
+ nl: 'Wc',
1862
+ pl: 'Toaleta',
1863
+ pt: 'Banheiro',
1864
+ es: 'Wc',
1865
+ 'zh-cn': '厕所',
1866
+ },
1867
+ icon: 'Wc.svg',
1868
+ },
1869
+ {
1870
+ _id: 'workshop',
1871
+ name: {
1872
+ en: 'Workshop',
1873
+ ru: 'Мастерская',
1874
+ de: 'Werkstatt',
1875
+ fr: 'Atelier',
1876
+ it: 'Laboratorio',
1877
+ nl: 'Werkplaats',
1878
+ pl: 'Warsztat',
1879
+ pt: 'Oficina',
1880
+ es: 'Taller',
1881
+ 'zh-cn': '作坊',
1882
+ },
1883
+ icon: 'Workshop.svg',
1884
+ },
1885
+ {
1886
+ _id: 'windscreen',
1887
+ name: {
1888
+ en: 'Windscreen',
1889
+ ru: 'Ветровое Стекло',
1890
+ de: 'Windfang',
1891
+ fr: 'Pare-Brise',
1892
+ it: 'Parabrezza',
1893
+ nl: 'Voorruit',
1894
+ pl: 'Szyba Przednia',
1895
+ pt: 'Pára-Brisas',
1896
+ es: 'Parabrisas',
1897
+ 'zh-cn': '风档',
1898
+ },
1899
+ icon: 'Windscreen.svg',
1900
+ },
1901
+ {
1902
+ _id: 'living_area',
1903
+ name: {
1904
+ en: 'Living Area',
1905
+ ru: 'Жилая Площадь',
1906
+ de: 'Wohnbereich',
1907
+ fr: 'Salon',
1908
+ it: 'Zona Giorno',
1909
+ nl: 'Living Area',
1910
+ pl: 'Powierzchnia Mieszkalna',
1911
+ pt: 'Sala-De-Estar',
1912
+ es: 'Sala De Estar',
1913
+ 'zh-cn': '生活区域',
1914
+ },
1915
+ icon: 'Living Area.svg',
1916
+ },
1917
+ {
1918
+ _id: 'living_room',
1919
+ name: {
1920
+ en: 'Living Room',
1921
+ ru: 'Гостинная',
1922
+ de: 'Wohnzimmer',
1923
+ fr: 'Le Salon',
1924
+ it: 'Soggiorno',
1925
+ nl: 'Woonkamer',
1926
+ pl: 'Salon',
1927
+ pt: 'Sala De Estar',
1928
+ es: 'Sala De Estar',
1929
+ 'zh-cn': '客厅',
1930
+ },
1931
+ icon: 'Living Room.svg',
1932
+ },
1933
+ {
1934
+ _id: 'living_room',
1935
+ name: {
1936
+ en: 'Living Room',
1937
+ ru: 'Гостинная',
1938
+ de: 'Wohnzimmer',
1939
+ fr: 'Le Salon',
1940
+ it: 'Soggiorno',
1941
+ nl: 'Woonkamer',
1942
+ pl: 'Salon',
1943
+ pt: 'Sala De Estar',
1944
+ es: 'Sala De Estar',
1945
+ 'zh-cn': '客厅',
1946
+ },
1947
+ icon: 'Living Room.svg',
1948
+ },
1949
+ ];
1950
+ export class IconSelector extends Component {
1951
+ constructor(props) {
1952
+ super(props);
1953
+ this.state = {
1954
+ opened: false,
1955
+ names: [],
1956
+ filter: '',
1957
+ icons: null,
1958
+ loading: false,
1959
+ isAnyName: false,
1960
+ };
1961
+ }
1962
+ loadAllIcons() {
1963
+ if (this.state.loading || this.state.icons) {
1964
+ return;
1965
+ }
1966
+ this.setState({ loading: true }, () => {
1967
+ const icons = [];
1968
+ const names = [];
1969
+ if (!this.props.icons) {
1970
+ // load rooms
1971
+ let templates = this.props.onlyRooms || (!this.props.onlyRooms && !this.props.onlyDevices) ? rooms : null;
1972
+ if (templates) {
1973
+ templates.forEach(item => {
1974
+ if (item.name && typeof item.name === 'object') {
1975
+ item.name = item.name[this.props.lang] || item.name.en || item._id;
1976
+ }
1977
+ item.name = item.name || item._id;
1978
+ });
1979
+ templates = templates.filter((item, i) => !templates?.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));
1980
+ templates.forEach((template, i) => {
1981
+ names[i] = template.name;
1982
+ icons[i] =
1983
+ `data:image/svg+xml;base64,${roomsIcons[template.icon.replace(/\.svg$/, '')]}`;
1984
+ });
1985
+ }
1986
+ // load devices
1987
+ templates =
1988
+ this.props.onlyDevices || (!this.props.onlyRooms && !this.props.onlyDevices) ? devices : null;
1989
+ if (templates) {
1990
+ const offset = icons.length;
1991
+ templates &&
1992
+ templates.forEach(item => {
1993
+ if (item.name && typeof item.name === 'object') {
1994
+ item.name = item.name[this.props.lang] || item.name.en || item._id;
1995
+ }
1996
+ item.name = item.name || item._id;
1997
+ });
1998
+ templates = templates.filter((item, i) => !templates?.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));
1999
+ templates.forEach((template, i) => {
2000
+ names[i + offset] = template.name;
2001
+ icons[i + offset] =
2002
+ `data:image/svg+xml;base64,${devicesIcons[template.icon.replace(/\.svg$/, '')]}`;
2003
+ });
2004
+ }
2005
+ this.setState({
2006
+ icons,
2007
+ loading: false,
2008
+ names,
2009
+ isAnyName: !!names.find(i => i),
2010
+ });
2011
+ }
2012
+ else {
2013
+ const promises = this.props.icons.map((item, i) => {
2014
+ let href;
2015
+ if (typeof item === 'object') {
2016
+ href = item.icon || item.src || item.href || '';
2017
+ names[i] =
2018
+ typeof item.name === 'object'
2019
+ ? item.name[this.props.lang] || item.name.en || item._id || ''
2020
+ : item.name || '';
2021
+ if (!names[i]) {
2022
+ const parts = href.split('.');
2023
+ parts.pop();
2024
+ names[i] = parts[parts.length - 1];
2025
+ }
2026
+ }
2027
+ else {
2028
+ href = item;
2029
+ }
2030
+ if (href) {
2031
+ if (href.startsWith('data:')) {
2032
+ icons[i] = href;
2033
+ return Promise.resolve();
2034
+ }
2035
+ return Utils.getSvg(href).then(icon => (icons[i] = icon));
2036
+ }
2037
+ return Promise.resolve();
2038
+ });
2039
+ void Promise.all(promises)
2040
+ .catch((e) => console.error(e))
2041
+ .then(() => this.setState({
2042
+ icons,
2043
+ loading: false,
2044
+ names,
2045
+ isAnyName: !!names.find(i => i),
2046
+ }));
2047
+ }
2048
+ });
2049
+ }
2050
+ render() {
2051
+ if (this.state.loading) {
2052
+ return React.createElement(CircularProgress, null);
2053
+ }
2054
+ return (React.createElement(React.Fragment, null,
2055
+ React.createElement(Button, { color: "grey", variant: "outlined", title: this.props.t('ra_Select predefined icon'), onClick: () => this.setState({ opened: true }, () => this.loadAllIcons()), style: { minWidth: 40, marginRight: 8 } }, "..."),
2056
+ this.state.opened ? (React.createElement(Dialog, { onClose: () => this.setState({ opened: false }), open: !0 },
2057
+ React.createElement(DialogTitle, null,
2058
+ this.props.t('ra_Select predefined icon'),
2059
+ this.state.isAnyName ? (React.createElement(TextField, { variant: "standard", margin: "dense", style: { marginLeft: 20 }, value: this.state.filter, onChange: e => this.setState({ filter: e.target.value.toLowerCase() }), placeholder: this.props.t('ra_Filter'), slotProps: {
2060
+ input: {
2061
+ endAdornment: this.state.filter ? (React.createElement(IconButton, { tabIndex: -1, size: "small", onClick: () => this.setState({ filter: '' }) },
2062
+ React.createElement(ClearIcon, null))) : undefined,
2063
+ },
2064
+ } })) : null),
2065
+ React.createElement(DialogContent, null,
2066
+ React.createElement("div", { style: { width: '100%', textAlign: 'center' } }, this.state.icons &&
2067
+ this.state.icons.map((icon, i) => {
2068
+ if (!this.state.filter ||
2069
+ (this.state.names[i] &&
2070
+ this.state.names[i].toLowerCase().includes(this.state.filter))) {
2071
+ return (React.createElement(Tooltip, { title: this.state.names[i] || '', key: i, slotProps: { popper: { sx: { pointerEvents: 'none' } } } },
2072
+ React.createElement(IconButton, { onClick: () => this.setState({ opened: false }, () => {
2073
+ const onApply = this.props.onSelect || this.props.onChange;
2074
+ if (onApply) {
2075
+ onApply(icon);
2076
+ }
2077
+ }), size: "large" },
2078
+ React.createElement(Icon, { src: icon, alt: i.toString(), style: { width: 32, height: 32, borderRadius: 5 } }))));
2079
+ }
2080
+ return null;
2081
+ }))),
2082
+ React.createElement(DialogActions, null,
2083
+ React.createElement(Button, { color: "grey", variant: "contained", onClick: () => this.setState({ opened: false }), startIcon: React.createElement(CloseIcon, null) }, this.props.t('ra_Close'))))) : null));
2084
+ }
2085
+ }
2086
+ //# sourceMappingURL=IconSelector.js.map