@iobroker/gui-components 10.2.3 → 10.3.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.
- package/README.md +12 -1
- package/build/Components/IconLibrary/classicIcons.d.ts +15 -0
- package/build/Components/IconLibrary/classicIcons.js +1941 -0
- package/build/Components/IconLibrary/classicIcons.js.map +1 -0
- package/build/Components/IconLibrary/iconLibrary.d.ts +32 -0
- package/build/Components/IconLibrary/iconLibrary.js +49 -0
- package/build/Components/IconLibrary/iconLibrary.js.map +1 -0
- package/build/Components/IconLibrary/iconLibraryData.d.ts +3 -0
- package/build/Components/IconLibrary/iconLibraryData.js +452 -0
- package/build/Components/IconLibrary/iconLibraryData.js.map +1 -0
- package/build/Components/IconLibrary/types.d.ts +16 -0
- package/build/Components/IconLibrary/types.js +2 -0
- package/build/Components/IconLibrary/types.js.map +1 -0
- package/build/Components/IconSelector.d.ts +30 -4
- package/build/Components/IconSelector.js +243 -2056
- package/build/Components/IconSelector.js.map +1 -1
- package/build/Components/ObjectBrowser/renderLeaf.js +80 -69
- package/build/Components/ObjectBrowser/renderLeaf.js.map +1 -1
- package/build/Components/ObjectBrowser/styles.js +78 -11
- package/build/Components/ObjectBrowser/styles.js.map +1 -1
- package/build/i18n/de.json +2 -0
- package/build/i18n/en.json +2 -0
- package/build/i18n/es.json +2 -0
- package/build/i18n/fr.json +2 -0
- package/build/i18n/it.json +2 -0
- package/build/i18n/nl.json +2 -0
- package/build/i18n/pl.json +2 -0
- package/build/i18n/pt.json +2 -0
- package/build/i18n/ru.json +2 -0
- package/build/i18n/uk.json +2 -0
- package/build/i18n/zh-cn.json +2 -0
- package/build/index.d.ts +3 -0
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/i18n/de.json +2 -0
- package/i18n/en.json +2 -0
- package/i18n/es.json +2 -0
- package/i18n/fr.json +2 -0
- package/i18n/it.json +2 -0
- package/i18n/nl.json +2 -0
- package/i18n/pl.json +2 -0
- package/i18n/pt.json +2 -0
- package/i18n/ru.json +2 -0
- package/i18n/uk.json +2 -0
- package/i18n/zh-cn.json +2 -0
- package/package.json +16 -14
|
@@ -1,2086 +1,273 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, LinearProgress, List, ListItemButton, ListItemText, TextField, } from '@mui/material';
|
|
3
3
|
import { Close as CloseIcon, Clear as ClearIcon } from '@mui/icons-material';
|
|
4
4
|
import { Icon } from './Icon';
|
|
5
5
|
import { Utils } from './Utils';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
},
|
|
6
|
+
import { getClassicIconTemplates } from './IconLibrary/classicIcons';
|
|
7
|
+
import { getIconLibraryName, getIconLibrarySvg, isIconLibraryMatch, loadIconLibrary } from './IconLibrary/iconLibrary';
|
|
8
|
+
const styles = {
|
|
9
|
+
dialogPaper: {
|
|
10
|
+
height: '80vh',
|
|
11
|
+
},
|
|
12
|
+
title: {
|
|
13
|
+
display: 'flex',
|
|
14
|
+
flexWrap: 'wrap',
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
columnGap: 3,
|
|
17
|
+
},
|
|
18
|
+
filter: {
|
|
19
|
+
flexGrow: 1,
|
|
20
|
+
minWidth: 160,
|
|
21
|
+
},
|
|
22
|
+
content: {
|
|
23
|
+
display: 'flex',
|
|
24
|
+
flexDirection: { xs: 'column', sm: 'row' },
|
|
25
|
+
p: 0,
|
|
26
|
+
overflow: 'hidden',
|
|
27
|
+
},
|
|
28
|
+
categories: (theme) => ({
|
|
29
|
+
width: { xs: '100%', sm: 230 },
|
|
30
|
+
maxHeight: { xs: 150, sm: 'none' },
|
|
31
|
+
flexShrink: 0,
|
|
32
|
+
overflowY: 'auto',
|
|
33
|
+
borderRight: { xs: 0, sm: `1px solid ${theme.palette.divider}` },
|
|
34
|
+
borderBottom: { xs: `1px solid ${theme.palette.divider}`, sm: 0 },
|
|
35
|
+
}),
|
|
36
|
+
count: {
|
|
37
|
+
fontSize: 12,
|
|
38
|
+
opacity: 0.6,
|
|
39
|
+
marginLeft: 8,
|
|
40
|
+
},
|
|
41
|
+
icons: {
|
|
42
|
+
flexGrow: 1,
|
|
43
|
+
overflowY: 'auto',
|
|
44
|
+
display: 'grid',
|
|
45
|
+
gridTemplateColumns: 'repeat(auto-fill, minmax(96px, 1fr))',
|
|
46
|
+
alignContent: 'start',
|
|
47
|
+
gap: 0.5,
|
|
48
|
+
p: 1,
|
|
49
|
+
},
|
|
50
|
+
iconButton: {
|
|
51
|
+
flexDirection: 'column',
|
|
52
|
+
justifyContent: 'flex-start',
|
|
53
|
+
gap: 0.5,
|
|
54
|
+
minWidth: 0,
|
|
55
|
+
p: 1,
|
|
56
|
+
textTransform: 'none',
|
|
57
|
+
},
|
|
58
|
+
icon: {
|
|
59
|
+
width: 32,
|
|
60
|
+
height: 32,
|
|
61
|
+
flexShrink: 0,
|
|
62
|
+
},
|
|
63
|
+
iconName: {
|
|
64
|
+
fontSize: 11,
|
|
65
|
+
lineHeight: 1.2,
|
|
66
|
+
textAlign: 'center',
|
|
67
|
+
wordBreak: 'break-word',
|
|
68
|
+
overflow: 'hidden',
|
|
69
|
+
display: '-webkit-box',
|
|
70
|
+
WebkitLineClamp: 2,
|
|
71
|
+
WebkitBoxOrient: 'vertical',
|
|
72
|
+
},
|
|
73
|
+
empty: {
|
|
74
|
+
gridColumn: '1 / -1',
|
|
75
|
+
textAlign: 'center',
|
|
76
|
+
opacity: 0.6,
|
|
77
|
+
p: 3,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
/** Shown if the icon library cannot be loaded */
|
|
81
|
+
const FALLBACK_CATEGORIES = [
|
|
82
|
+
{ id: 'classic-rooms', builtin: true, name: { en: 'Rooms' } },
|
|
83
|
+
{ id: 'classic-devices', builtin: true, name: { en: 'Devices' } },
|
|
1949
84
|
];
|
|
1950
85
|
export class IconSelector extends Component {
|
|
1951
86
|
constructor(props) {
|
|
1952
87
|
super(props);
|
|
1953
88
|
this.state = {
|
|
1954
89
|
opened: false,
|
|
1955
|
-
names: [],
|
|
1956
90
|
filter: '',
|
|
1957
|
-
icons: null,
|
|
1958
91
|
loading: false,
|
|
1959
|
-
|
|
92
|
+
category: props.onlyDevices ? 'lighting' : 'rooms',
|
|
93
|
+
categories: null,
|
|
94
|
+
libraryIcons: null,
|
|
95
|
+
classicIcons: null,
|
|
96
|
+
ownIcons: null,
|
|
1960
97
|
};
|
|
1961
98
|
}
|
|
1962
|
-
|
|
1963
|
-
if (
|
|
1964
|
-
return;
|
|
99
|
+
getText(name, fallback) {
|
|
100
|
+
if (name && typeof name === 'object') {
|
|
101
|
+
return name[this.props.lang] || name.en || fallback;
|
|
1965
102
|
}
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
103
|
+
return name || fallback;
|
|
104
|
+
}
|
|
105
|
+
getClassicIcons() {
|
|
106
|
+
const result = {};
|
|
107
|
+
const types = [
|
|
108
|
+
['classic-rooms', 'rooms'],
|
|
109
|
+
['classic-devices', 'devices'],
|
|
110
|
+
];
|
|
111
|
+
for (const [category, type] of types) {
|
|
112
|
+
const shown = [];
|
|
113
|
+
result[category] = getClassicIconTemplates(type)
|
|
114
|
+
.map((template, i) => ({
|
|
115
|
+
key: `${type}-${i}`,
|
|
116
|
+
name: this.getText(template.name, template._id),
|
|
117
|
+
src: template.icon,
|
|
118
|
+
}))
|
|
119
|
+
.filter(icon => {
|
|
120
|
+
// some templates share the icon and the name
|
|
121
|
+
const id = `${icon.src}|${icon.name}`;
|
|
122
|
+
if (shown.includes(id)) {
|
|
123
|
+
return false;
|
|
1985
124
|
}
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
});
|
|
125
|
+
shown.push(id);
|
|
126
|
+
return true;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
async readOwnIcons(icons) {
|
|
132
|
+
const result = await Promise.all(icons.map(async (item, i) => {
|
|
133
|
+
let href;
|
|
134
|
+
let name = '';
|
|
135
|
+
if (typeof item === 'object') {
|
|
136
|
+
href = item.icon || item.src || item.href || '';
|
|
137
|
+
name = this.getText(item.name, item._id || '');
|
|
138
|
+
if (!name) {
|
|
139
|
+
const parts = href.split('.');
|
|
140
|
+
parts.pop();
|
|
141
|
+
name = parts[parts.length - 1] || '';
|
|
2004
142
|
}
|
|
2005
|
-
this.setState({
|
|
2006
|
-
icons,
|
|
2007
|
-
loading: false,
|
|
2008
|
-
names,
|
|
2009
|
-
isAnyName: !!names.find(i => i),
|
|
2010
|
-
});
|
|
2011
143
|
}
|
|
2012
144
|
else {
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
145
|
+
href = item;
|
|
146
|
+
}
|
|
147
|
+
let src = href;
|
|
148
|
+
if (href && !href.startsWith('data:')) {
|
|
149
|
+
try {
|
|
150
|
+
src = await Utils.getSvg(href);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error(`Cannot load the icon "${href}":`, error);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return { key: `own-${i}`, name, src };
|
|
157
|
+
}));
|
|
158
|
+
return result.filter(icon => icon.src);
|
|
159
|
+
}
|
|
160
|
+
open() {
|
|
161
|
+
this.setState({ opened: true }, () => {
|
|
162
|
+
if (this.state.loading) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (this.props.icons) {
|
|
166
|
+
if (!this.state.ownIcons) {
|
|
167
|
+
this.setState({ loading: true }, async () => {
|
|
168
|
+
const ownIcons = await this.readOwnIcons(this.props.icons || []);
|
|
169
|
+
this.setState({ ownIcons, loading: false });
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (!this.state.categories) {
|
|
174
|
+
this.setState({ loading: true, classicIcons: this.state.classicIcons || this.getClassicIcons() }, async () => {
|
|
175
|
+
try {
|
|
176
|
+
const library = await loadIconLibrary();
|
|
177
|
+
this.setState({
|
|
178
|
+
categories: library.categories,
|
|
179
|
+
libraryIcons: library.icons,
|
|
180
|
+
loading: false,
|
|
181
|
+
});
|
|
2029
182
|
}
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error('Cannot load the icon library:', error);
|
|
185
|
+
this.setState({
|
|
186
|
+
categories: FALLBACK_CATEGORIES,
|
|
187
|
+
libraryIcons: [],
|
|
188
|
+
category: FALLBACK_CATEGORIES[0].id,
|
|
189
|
+
loading: false,
|
|
190
|
+
});
|
|
2036
191
|
}
|
|
2037
|
-
return Promise.resolve();
|
|
2038
192
|
});
|
|
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
193
|
}
|
|
2048
194
|
});
|
|
2049
195
|
}
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
196
|
+
select(icon) {
|
|
197
|
+
const value = icon.path ? getIconLibrarySvg(icon.path) : icon.src || '';
|
|
198
|
+
this.setState({ opened: false }, () => (this.props.onSelect || this.props.onChange)?.(value));
|
|
199
|
+
}
|
|
200
|
+
getShownIcons() {
|
|
201
|
+
const filter = this.state.filter.trim().toLowerCase();
|
|
202
|
+
if (this.props.icons) {
|
|
203
|
+
const ownIcons = this.state.ownIcons || [];
|
|
204
|
+
return filter ? ownIcons.filter(icon => icon.name.toLowerCase().includes(filter)) : ownIcons;
|
|
205
|
+
}
|
|
206
|
+
const toShown = (icon) => ({
|
|
207
|
+
key: icon.id,
|
|
208
|
+
name: getIconLibraryName(icon, this.props.lang),
|
|
209
|
+
path: icon.p,
|
|
210
|
+
});
|
|
211
|
+
const libraryIcons = this.state.libraryIcons || [];
|
|
212
|
+
const classicIcons = this.state.classicIcons || {};
|
|
213
|
+
if (filter) {
|
|
214
|
+
return [
|
|
215
|
+
...libraryIcons.filter(icon => isIconLibraryMatch(icon, filter, this.props.lang)).map(toShown),
|
|
216
|
+
...[]
|
|
217
|
+
.concat(...Object.values(classicIcons))
|
|
218
|
+
.filter(icon => icon.name.toLowerCase().includes(filter)),
|
|
219
|
+
];
|
|
2053
220
|
}
|
|
221
|
+
if (classicIcons[this.state.category]) {
|
|
222
|
+
return classicIcons[this.state.category];
|
|
223
|
+
}
|
|
224
|
+
return libraryIcons.filter(icon => icon.c === this.state.category).map(toShown);
|
|
225
|
+
}
|
|
226
|
+
getCount(category) {
|
|
227
|
+
if (category.builtin) {
|
|
228
|
+
return this.state.classicIcons?.[category.id]?.length || 0;
|
|
229
|
+
}
|
|
230
|
+
return (this.state.libraryIcons || []).filter(icon => icon.c === category.id).length;
|
|
231
|
+
}
|
|
232
|
+
renderIcon(icon) {
|
|
233
|
+
return (React.createElement(Button, { key: icon.key, color: "grey", title: icon.name, sx: styles.iconButton, onClick: () => this.select(icon) },
|
|
234
|
+
icon.path ? (React.createElement("svg", { viewBox: "0 0 24 24", style: styles.icon },
|
|
235
|
+
React.createElement("path", { fill: "currentColor", d: icon.path }))) : (React.createElement(Icon, { src: icon.src, style: styles.icon })),
|
|
236
|
+
React.createElement("span", { style: styles.iconName }, icon.name)));
|
|
237
|
+
}
|
|
238
|
+
renderCategories() {
|
|
239
|
+
const categories = this.state.categories;
|
|
240
|
+
if (this.props.icons || !categories) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
return (React.createElement(List, { dense: true, sx: styles.categories }, categories.map(category => (React.createElement(ListItemButton, { key: category.id, selected: !this.state.filter && category.id === this.state.category, onClick: () => this.setState({ category: category.id, filter: '' }) },
|
|
244
|
+
React.createElement(ListItemText, { primary: getIconLibraryName(category, this.props.lang) }),
|
|
245
|
+
React.createElement("span", { style: styles.count }, this.getCount(category)))))));
|
|
246
|
+
}
|
|
247
|
+
renderDialog() {
|
|
248
|
+
const icons = this.getShownIcons();
|
|
249
|
+
return (React.createElement(Dialog, { open: !0, maxWidth: "md", fullWidth: true, onClose: () => this.setState({ opened: false }), sx: { '& .MuiDialog-paper': styles.dialogPaper } },
|
|
250
|
+
React.createElement(DialogTitle, { sx: styles.title },
|
|
251
|
+
React.createElement("span", null, this.props.t('ra_Select predefined icon')),
|
|
252
|
+
React.createElement(TextField, { variant: "standard", margin: "dense", autoFocus: true, sx: styles.filter, value: this.state.filter, onChange: e => this.setState({ filter: e.target.value }), placeholder: this.props.t('ra_Filter'), slotProps: {
|
|
253
|
+
input: {
|
|
254
|
+
endAdornment: this.state.filter ? (React.createElement(IconButton, { tabIndex: -1, size: "small", onClick: () => this.setState({ filter: '' }) },
|
|
255
|
+
React.createElement(ClearIcon, null))) : undefined,
|
|
256
|
+
},
|
|
257
|
+
} })),
|
|
258
|
+
this.state.loading ? React.createElement(LinearProgress, null) : null,
|
|
259
|
+
React.createElement(DialogContent, { dividers: true, sx: styles.content },
|
|
260
|
+
this.renderCategories(),
|
|
261
|
+
React.createElement(Box, { sx: styles.icons },
|
|
262
|
+
icons.map(icon => this.renderIcon(icon)),
|
|
263
|
+
!this.state.loading && !icons.length ? (React.createElement(Box, { sx: styles.empty }, this.props.t('ra_No icons found'))) : null)),
|
|
264
|
+
React.createElement(DialogActions, null,
|
|
265
|
+
React.createElement(Button, { color: "grey", variant: "contained", onClick: () => this.setState({ opened: false }), startIcon: React.createElement(CloseIcon, null) }, this.props.t('ra_Close')))));
|
|
266
|
+
}
|
|
267
|
+
render() {
|
|
2054
268
|
return (React.createElement(React.Fragment, null,
|
|
2055
|
-
React.createElement(Button, { color: "grey", variant: "outlined", title: this.props.t('ra_Select predefined icon'), onClick: () => this.
|
|
2056
|
-
this.state.opened ?
|
|
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));
|
|
269
|
+
React.createElement(Button, { color: "grey", variant: "outlined", title: this.props.t('ra_Select predefined icon'), onClick: () => this.open(), style: { minWidth: 40, marginRight: 8 } }, "..."),
|
|
270
|
+
this.state.opened ? this.renderDialog() : null));
|
|
2084
271
|
}
|
|
2085
272
|
}
|
|
2086
273
|
//# sourceMappingURL=IconSelector.js.map
|