iobroker.admin 7.1.1 → 7.1.2

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 (71) hide show
  1. package/README.md +5 -8
  2. package/adminWww/asset-manifest.json +33 -33
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +1 -1
  5. package/adminWww/static/js/2534.d8fd195b.chunk.js +2 -0
  6. package/adminWww/static/js/2534.d8fd195b.chunk.js.map +1 -0
  7. package/adminWww/static/js/2544.047df092.chunk.js +2 -0
  8. package/adminWww/static/js/2544.047df092.chunk.js.map +1 -0
  9. package/adminWww/static/js/2816.f7bf6ba0.chunk.js +2 -0
  10. package/adminWww/static/js/2816.f7bf6ba0.chunk.js.map +1 -0
  11. package/adminWww/static/js/3210.1be726e7.chunk.js +2 -0
  12. package/adminWww/static/js/3210.1be726e7.chunk.js.map +1 -0
  13. package/adminWww/static/js/4112.9b241792.chunk.js +2 -0
  14. package/adminWww/static/js/4112.9b241792.chunk.js.map +1 -0
  15. package/adminWww/static/js/4579.014de1f1.chunk.js +2 -0
  16. package/adminWww/static/js/4579.014de1f1.chunk.js.map +1 -0
  17. package/adminWww/static/js/{5174.60f22386.chunk.js → 5174.f5aa1074.chunk.js} +2 -2
  18. package/adminWww/static/js/5174.f5aa1074.chunk.js.map +1 -0
  19. package/adminWww/static/js/530.cb8dbcf9.chunk.js +2 -0
  20. package/adminWww/static/js/530.cb8dbcf9.chunk.js.map +1 -0
  21. package/adminWww/static/js/6552.0a447e18.chunk.js +2 -0
  22. package/adminWww/static/js/6552.0a447e18.chunk.js.map +1 -0
  23. package/adminWww/static/js/6938.af058182.chunk.js +2 -0
  24. package/adminWww/static/js/6938.af058182.chunk.js.map +1 -0
  25. package/adminWww/static/js/{8038.cacab580.chunk.js → 8038.ae8b7862.chunk.js} +2 -2
  26. package/adminWww/static/js/8038.ae8b7862.chunk.js.map +1 -0
  27. package/adminWww/static/js/858.f34ea2c6.chunk.js +2 -0
  28. package/adminWww/static/js/858.f34ea2c6.chunk.js.map +1 -0
  29. package/adminWww/static/js/9399.5852b7e7.chunk.js +2 -0
  30. package/adminWww/static/js/9399.5852b7e7.chunk.js.map +1 -0
  31. package/adminWww/static/js/9534.2af54084.chunk.js +2 -0
  32. package/adminWww/static/js/9534.2af54084.chunk.js.map +1 -0
  33. package/adminWww/static/js/9917.3662a807.chunk.js +2 -0
  34. package/adminWww/static/js/9917.3662a807.chunk.js.map +1 -0
  35. package/adminWww/static/js/{main.c1384a82.js → main.423e60b6.js} +2 -2
  36. package/adminWww/static/js/main.423e60b6.js.map +1 -0
  37. package/build-backend/lib/passportSocket.js +8 -10
  38. package/build-backend/lib/translations.js +0 -1
  39. package/build-backend/lib/web.js +101 -81
  40. package/build-backend/main.js +173 -184
  41. package/io-package.json +14 -14
  42. package/package.json +97 -96
  43. package/adminWww/static/js/2534.0bc9912f.chunk.js +0 -2
  44. package/adminWww/static/js/2534.0bc9912f.chunk.js.map +0 -1
  45. package/adminWww/static/js/2544.4fa1eef5.chunk.js +0 -2
  46. package/adminWww/static/js/2544.4fa1eef5.chunk.js.map +0 -1
  47. package/adminWww/static/js/2816.cfab0128.chunk.js +0 -2
  48. package/adminWww/static/js/2816.cfab0128.chunk.js.map +0 -1
  49. package/adminWww/static/js/3210.4c1ccdc2.chunk.js +0 -2
  50. package/adminWww/static/js/3210.4c1ccdc2.chunk.js.map +0 -1
  51. package/adminWww/static/js/4112.8c6e6dae.chunk.js +0 -2
  52. package/adminWww/static/js/4112.8c6e6dae.chunk.js.map +0 -1
  53. package/adminWww/static/js/4579.cd86a1cb.chunk.js +0 -2
  54. package/adminWww/static/js/4579.cd86a1cb.chunk.js.map +0 -1
  55. package/adminWww/static/js/5174.60f22386.chunk.js.map +0 -1
  56. package/adminWww/static/js/530.8eed62a7.chunk.js +0 -2
  57. package/adminWww/static/js/530.8eed62a7.chunk.js.map +0 -1
  58. package/adminWww/static/js/6552.29112fa0.chunk.js +0 -2
  59. package/adminWww/static/js/6552.29112fa0.chunk.js.map +0 -1
  60. package/adminWww/static/js/6938.f4331126.chunk.js +0 -2
  61. package/adminWww/static/js/6938.f4331126.chunk.js.map +0 -1
  62. package/adminWww/static/js/8038.cacab580.chunk.js.map +0 -1
  63. package/adminWww/static/js/858.3a130f69.chunk.js +0 -2
  64. package/adminWww/static/js/858.3a130f69.chunk.js.map +0 -1
  65. package/adminWww/static/js/9399.c959c5de.chunk.js +0 -2
  66. package/adminWww/static/js/9399.c959c5de.chunk.js.map +0 -1
  67. package/adminWww/static/js/9534.68ac37f7.chunk.js +0 -2
  68. package/adminWww/static/js/9534.68ac37f7.chunk.js.map +0 -1
  69. package/adminWww/static/js/9917.28c0dbc2.chunk.js +0 -2
  70. package/adminWww/static/js/9917.28c0dbc2.chunk.js.map +0 -1
  71. package/adminWww/static/js/main.c1384a82.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/6938.f4331126.chunk.js","mappings":"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AED,2BAA4B,CAC3B,MACA,KAED,yBAA0B,CACzB,MACA,MAED,4BAA6B,CAC5B,KACA,MAED,yBAA0B,CACzB,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,sBAAuB,CACtB,MACA,KAED,oBAAqB,CACpB,IACA,KAED,4BAA6B,CAC5B,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,0BAA2B,CAC1B,MACA,KAED,uBAAwB,CACvB,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,uBAAwB,CACvB,KACA,MAED,sBAAuB,CACtB,MACA,MAED,0BAA2B,CAC1B,KACA,MAED,yBAA0B,CACzB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,sBAAuB,CACtB,KACA,MAED,0BAA2B,CAC1B,MACA,MAED,qBAAsB,CACrB,MACA,KAED,uBAAwB,CACvB,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,sBAAuB,CACtB,KACA,MAED,+BAAgC,CAC/B,MACA,MAED,uBAAwB,CACvB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,kCAAmC,CAClC,MACA,MAED,wBAAyB,CACxB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,yBAA0B,CACzB,MACA,KAED,wBAAyB,CACxB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,wBAAyB,CACxB,MACA,MAED,wBAAyB,CACxB,KACA,MAED,sBAAuB,CACtB,MACA,MAED,4BAA6B,CAC5B,KACA,MAED,oCAAqC,CACpC,MACA,MAED,mBAAoB,CACnB,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,4BAA6B,CAC5B,KACA,MAED,iCAAkC,CACjC,KACA,MAED,kCAAmC,CAClC,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,uBAAwB,CACvB,KACA,MAED,oBAAqB,CACpB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,mBAAoB,CACnB,MACA,KAED,uBAAwB,CACvB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,qBAAsB,CACrB,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,uBAAwB,CACvB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,yBAA0B,CACzB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,yBAA0B,CACzB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,mBAAoB,CACnB,KACA,MAED,2BAA4B,CAC3B,MACA,KAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,0BAA2B,CAC1B,KACA,MAED,0BAA2B,CAC1B,MACA,KAED,sBAAuB,CACtB,MACA,MAED,qBAAsB,CACrB,MACA,KAED,uBAAwB,CACvB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,mBAAoB,CACnB,MACA,MAED,4BAA6B,CAC5B,MACA,KAED,uBAAwB,CACvB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,wBAAyB,CACxB,MACA,KAED,2BAA4B,CAC3B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,qBAAsB,CACrB,MACA,KAED,qBAAsB,CACrB,KACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAGF,SAASsa,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEza,EAAKua,GAC9B,OAAOlN,QAAQ8I,UAAU5I,MAAK,KAC7B,IAAI7T,EAAI,IAAIghB,MAAM,uBAAyBH,EAAM,KAEjD,MADA7gB,EAAEihB,KAAO,mBACHjhB,CAAC,IAIT,IAAI2Z,EAAMrT,EAAIua,GAAM7Y,EAAK2R,EAAI,GAC7B,OAAOmH,EAAoB9gB,EAAE2Z,EAAI,IAAI9F,MAAK,IAClCiN,EAAoBphB,EAAEsI,EAAI,KAEnC,CACA4Y,EAAoBhH,KAAO,IAAOd,OAAOc,KAAKtT,GAC9Csa,EAAoB5Y,GAAK,MACzBkZ,EAAOC,QAAUP,C","sources":["components/IOFields/Fields.tsx","components/Enums/EnumBlock.tsx","components/Enums/CategoryLabel.tsx","components/Enums/EnumEditDialog.tsx","components/Enums/EnumTemplateDialog.tsx","components/Enums/EnumDeleteDialog.tsx","components/Enums/DragObjectBrowser.tsx","components/Enums/EnumsMain.tsx","tabs/Enums.tsx","assets|lazy|/^/.//.*//.*/.svg$/|groupOptions: {}|namespace object"],"sourcesContent":["import React from 'react';\n\nimport {\n TextField,\n FormControl,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { ColorPicker, type Translate } from '@iobroker/adapter-react-v5';\n\ninterface IOTextFieldProps {\n label: string;\n value: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n error?: string;\n type?: string;\n icon?: React.FC<{ style: React.CSSProperties }>;\n autoComplete?: string;\n styles: Record<string, React.CSSProperties>;\n t: Translate;\n}\n\nexport function IOTextField(props: IOTextFieldProps) {\n const IconCustom = props.icon;\n\n return <div style={props.styles.formContainer}>\n {IconCustom ? <IconCustom style={props.styles.formIcon} /> : null}\n <FormControl style={props.styles.formControl} variant=\"standard\">\n <TextField\n variant=\"standard\"\n label={props.t(props.label)}\n autoComplete={props.autoComplete}\n error={!!props.error}\n helperText={props.error || ''}\n value={props.value}\n onChange={e => props.onChange(e.target.value)}\n disabled={props.disabled}\n type={props.type}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: props.value ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n />\n </FormControl>\n </div>;\n}\n\ninterface IOColorPickerProps {\n label: string;\n value: string;\n onChange: (color: string) => void;\n icon?: React.FC<{ style: React.CSSProperties }>;\n previewStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n styles: Record<string, React.CSSProperties>;\n t: Translate;\n}\n\nfunction IOColorPicker(props: IOColorPickerProps): React.JSX.Element {\n const IconCustom = props.icon;\n\n return <div style={{ width: '100%' }}>\n {IconCustom ? <IconCustom style={props.previewStyle || props.styles.formIcon} /> : null}\n <ColorPicker\n style={{\n ...(props.style || undefined),\n width: IconCustom ? 'calc(100% - 45px)' : '100%',\n display: 'inline-block',\n verticalAlign: 'top',\n }}\n label={props.t(props.label)}\n onChange={props.onChange}\n value={props.value || ''}\n />\n </div>;\n}\n\nexport { IOColorPicker };\n","import React, { useEffect, useRef, Component } from 'react';\nimport {\n type ConnectDragSource, type DragSourceMonitor,\n useDrag, useDrop,\n} from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport type { DropTargetMonitor } from 'react-dnd/src/types';\n\nimport {\n IconButton,\n Typography,\n Card,\n CardContent,\n Tooltip,\n} from '@mui/material';\n\nimport {\n List as ListIcon,\n Clear as ClearIcon,\n Edit as EditIcon,\n Delete as DeleteIcon,\n FileCopy as FileCopyIcon,\n KeyboardArrowDown as DownIcon,\n KeyboardArrowUp as UpIcon,\n Add as AddIcon,\n} from '@mui/icons-material';\nimport {\n FaRegFolder as IconCollapsed,\n FaRegFolderOpen as IconExpanded,\n} from 'react-icons/fa';\n\nimport {\n Utils,\n Icon,\n IconChannel,\n IconDevice,\n IconState, type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { type DragItem } from './DragObjectBrowser';\n\nconst boxShadowHover = '0 1px 1px 0 rgba(0, 0, 0, .4),0 6px 6px 0 rgba(0, 0, 0, .2)';\n\nconst styles: Record<string, any> = {\n enumGroupCard: (theme: IobTheme) => ({\n border: '1px solid #FFF',\n borderColor: theme.palette.divider,\n m: '10px',\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n transition: 'all 200ms ease-out',\n opacity: 1,\n overflow: 'hidden',\n position: 'relative',\n '&:hover': {\n overflowY: 'auto',\n boxShadow: boxShadowHover,\n },\n minHeight: 70,\n }),\n enumGroupCardExpanded:{\n minHeight: 140,\n },\n enumUpdating: {\n opacity: 0.5,\n position: 'relative',\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 100,\n opacity: '.3 !important',\n background: 'repeating-linear-gradient(135deg, #333, #333 10px, #888 10px, #888 20px)',\n },\n },\n enumCardContent: {\n height: '100%',\n opacity: 1,\n },\n right: {\n float: 'right',\n },\n enumGroupTitle: {\n display: 'inline-flex',\n alignItems: 'center',\n cursor: 'pointer',\n },\n icon: {\n height: 32,\n width: 32,\n marginRight: 5,\n cursor: 'grab',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n display: 'inline-block',\n },\n enumGroupName: {\n marginLeft: 5,\n },\n enumGroupEnumName: {\n fontWeight: 900,\n // padding: '0 0 0 5px'\n },\n enumGroupEnumID: {\n opacity: 0.7,\n marginLeft: 5,\n fontSize: 12,\n fontStyle: 'italic',\n },\n enumName: {\n fontSize: 12,\n fontWeight: 700,\n // marginLeft: 30,\n opacity: 0.7,\n marginTop: -4,\n },\n enumGroupMember: (theme: IobTheme) => ({\n display: 'inline-flex',\n m: '4px',\n p: '4px',\n backgroundColor: '#00000010',\n border: '1px solid #FFF',\n borderColor: theme.palette.text.primary, // it was a hint...\n color: theme.palette.text.primary,\n alignItems: 'center',\n position: 'relative',\n }),\n secondLine: {\n fontSize: 9,\n fontStyle: 'italic',\n whiteSpace: 'nowrap',\n opacity: 0.5,\n },\n context: {\n paddingTop: 8,\n paddingLeft: 8,\n paddingRight: 8,\n paddingBottom: '0 !important',\n },\n folderDiv: {\n display: 'inline-block',\n position: 'relative',\n cursor: 'pointer',\n },\n folder: {\n width: 48,\n height: 48,\n },\n folderIcon: {\n position: 'absolute',\n top: 18,\n left: 16,\n width: 18,\n height: 18,\n zIndex: 2,\n },\n folderIconExpanded: {\n transform: 'skew(147deg, 183deg) scale(0.5) translate(6px, 7px)',\n },\n bottomButtons: {\n position: 'absolute',\n right: 0,\n bottom: 0,\n },\n membersNumber: {\n top: 40,\n left: 26,\n fontSize: 18,\n position: 'absolute',\n },\n memberNumberFolder: {\n top: 46,\n left: 26,\n },\n};\n\ndeclare global {\n interface Navigator {\n msMaxTouchPoints: number;\n }\n}\n\nexport function isTouchDevice(): boolean {\n return (('ontouchstart' in window) ||\n (navigator.maxTouchPoints > 0) ||\n (navigator.msMaxTouchPoints > 0));\n}\n\ninterface EnumBlockProps {\n enum: ioBroker.EnumObject | null;\n members: Record<string, ioBroker.Object>;\n removeMemberFromEnum: (id: string, parentId: string) => void;\n showEnumEditDialog: (category: ioBroker.EnumObject, isNew: boolean) => void;\n showEnumDeleteDialog: (category: ioBroker.EnumObject) => void;\n copyEnum: (id: string) => void;\n getName: (name: ioBroker.StringOrTranslated) => string;\n theme: IobTheme;\n closed: boolean;\n collapsed: boolean;\n toggleEnum: (id: string) => void;\n onCollapse: (id: string) => void;\n showEnumTemplateDialog: (id: string) => void;\n currentCategory: string;\n t: Translate;\n socket: AdminConnection;\n updating: boolean;\n id: string;\n childrenCount: number;\n themeType: ThemeType;\n cachedIcons: Record<string, string>;\n iconDragRef?: ConnectDragSource;\n isDragging?: boolean;\n name?: React.JSX.Element[];\n idText?: React.JSX.Element[];\n getEnumTemplate: (prefix: string) => ioBroker.EnumObject;\n}\n\ninterface EnumBlockState {\n icons: string[];\n}\n\nexport interface EnumCommon extends ioBroker.EnumCommon {\n desc?: ioBroker.StringOrTranslated;\n}\n\nclass EnumBlock extends Component<EnumBlockProps, EnumBlockState> {\n constructor(props: EnumBlockProps) {\n super(props);\n\n this.state = {\n icons: props.enum?.common?.members ?\n props.enum.common.members.map((memberId: string) => props.members[memberId]?.common?.icon || '') : [],\n };\n }\n\n async componentDidMount() {\n // find all icons\n const icons = [...this.state.icons];\n let changed = false;\n const memberIds = this.props.enum?.common?.members;\n\n const cachedIcons = this.props.cachedIcons;\n\n try {\n if (memberIds) {\n for (let i = 0; i < icons.length; i++) {\n if (!icons[i]) {\n // check the parent\n const channelId = Utils.getParentId(memberIds[i]);\n\n if (cachedIcons[channelId] !== undefined) {\n if (cachedIcons[channelId]) {\n icons[i] = cachedIcons[channelId];\n changed = true;\n }\n continue;\n }\n\n if (channelId && channelId.split('.').length > 2) {\n const channelObj = await this.props.socket.getObject(channelId);\n if (channelObj && (channelObj.type === 'channel' || channelObj.type === 'device')) {\n if (channelObj.common?.icon) {\n cachedIcons[channelId] = channelObj.common.icon;\n icons[i] = channelObj.common.icon;\n changed = true;\n } else {\n // check the parent\n const deviceId = Utils.getParentId(channelId);\n if (deviceId && deviceId.split('.').length > 2) {\n const deviceObj = await this.props.socket.getObject(deviceId);\n if (deviceObj && (deviceObj.type === 'channel' || deviceObj.type === 'device')) {\n if (deviceObj.common?.icon) {\n cachedIcons[deviceId] = deviceObj.common.icon;\n cachedIcons[channelId] = deviceObj.common.icon;\n icons[i] = deviceObj.common.icon;\n changed = true;\n }\n }\n cachedIcons[deviceId] = cachedIcons[deviceId] || null;\n }\n }\n cachedIcons[channelId] = cachedIcons[channelId] || null;\n }\n }\n }\n }\n }\n } catch (e) {\n window.alert(`Cannot get icons: ${e}`);\n }\n\n const imagePrefix = '.';\n\n if (memberIds) {\n const objects = this.props.members;\n for (let i = 0; i < icons.length; i++) {\n const cIcon = icons[i];\n const id = memberIds[i];\n\n if (cIcon && !cIcon.startsWith('data:image/') && cIcon.includes('.')) {\n let instance;\n if (objects[id] && (objects[id].type === 'instance' || objects[id].type === 'adapter')) {\n icons[i] = `${imagePrefix}/adapter/${objects[id].common.name}/${cIcon}`;\n } else if (id && id.startsWith('system.adapter.')) {\n instance = id.split('.', 3);\n if (cIcon[0] === '/') {\n instance[2] += cIcon;\n } else {\n instance[2] += `/${cIcon}`;\n }\n icons[i] = `${imagePrefix}/adapter/${instance[2]}`;\n } else {\n instance = id.split('.', 2);\n if (cIcon[0] === '/') {\n instance[0] += cIcon;\n } else {\n instance[0] += `/${cIcon}`;\n }\n icons[i] = `${imagePrefix}/adapter/${instance[0]}`;\n }\n changed = true;\n }\n }\n }\n\n if (changed) {\n this.setState({ icons });\n }\n }\n\n render() {\n const props = this.props;\n const common: EnumCommon | null = props.enum?.common as EnumCommon;\n const textColor = Utils.getInvertedColor(common?.color, props.themeType, true);\n\n const style: React.CSSProperties = { opacity: this.props.isDragging ? 0 : 1, color: textColor };\n\n if (common?.color) {\n style.backgroundColor = props.enum.common.color;\n }\n\n let icon = common?.icon ?\n <Icon\n style={{\n ...styles.icon,\n ...(props.childrenCount ? styles.folderIcon : undefined),\n ...(props.childrenCount && !props.closed ? styles.folderIconExpanded : undefined),\n }}\n src={props.enum.common.icon}\n /> :\n <ListIcon\n style={{\n ...styles.icon,\n ...(props.childrenCount ? styles.folderIcon : undefined),\n ...(props.childrenCount && !props.closed ? styles.folderIconExpanded : undefined),\n }}\n />;\n\n icon = props.childrenCount ? <div style={styles.folderDiv} onClick={() => props.toggleEnum(props.id)}>\n {props.closed ? [<IconCollapsed style={styles.folder} key={1} />, <div key={2}>{icon}</div>] : [<IconExpanded style={styles.folder} key={1} />, <div key={2}>{icon}</div>]}\n </div> : icon;\n\n if (this.props.iconDragRef) {\n icon = <span ref={this.props.iconDragRef}>{icon}</span>;\n }\n\n return <Card\n style={style}\n sx={Utils.getStyle(\n this.props.theme,\n styles.enumGroupCard,\n this.props.updating && styles.enumUpdating,\n !props.collapsed && styles.enumGroupCardExpanded,\n )}\n id={props.id}\n >\n <div style={styles.enumCardContent}>\n <div style={styles.right}>\n {props.enum ? <IconButton\n size=\"small\"\n onClick={() => props.showEnumEditDialog(props.enum, false)}\n >\n <Tooltip title={props.t('Edit')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <EditIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton> : null}\n {props.enum ? <IconButton\n size=\"small\"\n onClick={() => props.copyEnum(props.id)}\n >\n <Tooltip title={props.t('Clone')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <FileCopyIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton> : null}\n <IconButton\n size=\"small\"\n onClick={() => props.showEnumDeleteDialog(props.enum)}\n disabled={common?.dontDelete}\n >\n <Tooltip title={props.t('Delete')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <DeleteIcon style={common?.dontDelete ? null : { color: textColor }} />\n </Tooltip>\n </IconButton>\n </div>\n <CardContent style={styles.context}>\n <Typography\n gutterBottom={!props.collapsed}\n component=\"div\"\n style={styles.enumGroupTitle}\n onClick={() => props.onCollapse(props.id)}\n >\n {icon}\n <div style={styles.enumGroupName}>\n <span style={styles.enumGroupEnumName}>\n {props.name || props.getName(common?.name) || props.id.split('.').pop()}\n </span>\n <span style={styles.enumGroupEnumID}>\n {props.idText || props.id}\n </span>\n {common?.desc ?\n <div style={styles.enumName}>\n {props.getName(common.desc)}\n </div> : null}\n </div>\n </Typography>\n <div>\n {!props.collapsed && common?.members ? props.enum.common.members.map((memberId, i) => {\n const member = props.members[memberId];\n if (!member) {\n return null;\n }\n\n const name = member.common?.name && props.getName(member.common?.name);\n\n return <Card\n key={member._id}\n title={name ? `${props.t('Name: %s', name)}\\nID: ${member._id}` : member._id}\n variant=\"outlined\"\n sx={styles.enumGroupMember}\n style={{ color: textColor, borderColor: `${textColor}80` }}\n >\n {\n this.state.icons[i] ?\n <Icon style={styles.icon} src={this.state.icons[i]} />\n :\n (member.type === 'state' ? <IconState style={styles.icon} />\n : (member.type === 'channel' ?\n <IconChannel style={styles.icon} />\n : member.type === 'device' ?\n <IconDevice style={styles.icon} /> :\n <ListIcon style={styles.icon} />\n )\n )\n }\n <div>\n {name || member._id}\n {name ? <div style={styles.secondLine}>{member._id}</div> : null}\n </div>\n <IconButton\n size=\"small\"\n onClick={() => props.removeMemberFromEnum(member._id, props.id)}\n >\n <Tooltip title={props.t('Remove')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <ClearIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n </Card>;\n }) : (common?.members?.length ? <div style={{ ...styles.membersNumber, ...(props.childrenCount ? styles.memberNumberFolder : undefined) }}>{common?.members?.length}</div> : '')}\n </div>\n </CardContent>\n </div>\n <div style={styles.bottomButtons}>\n <IconButton\n size=\"small\"\n onClick={() => {\n if (['functions', 'rooms'].includes(props.currentCategory)) {\n props.showEnumTemplateDialog(props.id);\n } else {\n props.showEnumEditDialog(props.getEnumTemplate(props.id), true);\n }\n }}\n >\n <Tooltip title={props.t('Add child')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <AddIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n <IconButton size=\"small\" onClick={() => props.onCollapse(props.id)}>\n <Tooltip title={props.collapsed ? props.t('Show members') : props.t('Hide members')} placement=\"top\">\n {props.collapsed ? <DownIcon style={{ color: textColor }} /> : <UpIcon style={{ color: textColor }} />}\n </Tooltip>\n </IconButton>\n </div>\n </Card>;\n }\n}\n\ninterface EnumBlockDragProps {\n id: string;\n enum: ioBroker.EnumObject;\n moveEnum: (id: string, moveTo: string) => void;\n cachedIcons: Record<string, string>;\n stylesParent: Record<string, any>;\n closed: boolean;\n collapsed: boolean;\n copyEnum: (enumId: string) => void;\n currentCategory: string;\n getEnumTemplate: (prefix: string) => ioBroker.EnumObject;\n getName: (name: ioBroker.StringOrTranslated) => string;\n idText?: React.JSX.Element[];\n members: Record<string, ioBroker.Object>;\n name?: React.JSX.Element[];\n onCollapse: () => void;\n removeMemberFromEnum: (memberId: string, enumId: string) => void;\n showEnumDeleteDialog: (enumItem: ioBroker.EnumObject) => void;\n showEnumEditDialog: (enumItem: ioBroker.EnumObject, isNew?: boolean) => void;\n showEnumTemplateDialog: (prefix: string) => void;\n socket: AdminConnection;\n t: Translate;\n themeType: ThemeType;\n theme: IobTheme;\n toggleEnum: (enumId: string) => void;\n updating: boolean;\n childrenCount: number;\n}\n\nfunction canMeDrop(monitor: DropTargetMonitor<DragItem, { enumId: string }>, enumItem: ioBroker.EnumObject) {\n if (!monitor.getItem() || !monitor.getItem().data) {\n return true;\n }\n if (!enumItem) {\n return false;\n }\n return enumItem.common?.members ? !enumItem.common.members.includes(monitor.getItem().data.id) : true;\n}\n\nconst EnumBlockDrag = (props: EnumBlockDragProps) => {\n const [{ canDrop, isOver }, drop] = useDrop(() => ({\n accept: ['object', 'enum'],\n drop: () => ({ enumId: props.id }),\n canDrop: (_item, monitor: DropTargetMonitor<DragItem, { enumId: string }>) => canMeDrop(monitor, props.enum),\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n }), [props.enum?.common?.members]);\n\n const widthRef = useRef(null);\n\n const [{ isDragging }, dragRef, preview] = useDrag({\n type: 'enum',\n item: () => ({\n enumId: props.id,\n preview: <div\n style={{\n width: widthRef.current?.offsetWidth || 50,\n }}\n >\n <EnumBlock {...props} />\n </div>,\n }),\n\n end: (draggedItem: { enumId: string; preview: React.JSX.Element }, monitor: DragSourceMonitor<DragItem, { enumId: string }>) => {\n const dropResult = monitor.getDropResult();\n if (!dropResult) {\n // root\n const parts = draggedItem.enumId.split('.');\n props.moveEnum(draggedItem.enumId, `${parts[0]}.${parts[1]}`);\n } else {\n props.moveEnum(draggedItem.enumId, dropResult.enumId);\n }\n },\n\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n handlerId: monitor.getHandlerId(),\n }),\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, []);\n\n if (!props.enum) {\n return <EnumBlock isDragging={isDragging} {...props} />;\n }\n\n return isTouchDevice()\n ? <div ref={drop} style={{ opacity: canDrop && isOver ? 0.5 : 1 }}>\n <div ref={widthRef}>\n <EnumBlock isDragging={isDragging} iconDragRef={dragRef} {...props} />\n </div>\n </div>\n : <div ref={drop} style={{ opacity: canDrop && isOver ? 0.5 : 1 }}>\n <div ref={dragRef}>\n <div ref={widthRef}>\n <EnumBlock isDragging={isDragging} {...props} />\n </div>\n </div>\n </div>;\n};\n\nexport default EnumBlockDrag;\n","import React from 'react';\nimport { useDrop } from 'react-dnd';\n\nimport {\n Tooltip,\n IconButton,\n} from '@mui/material';\n\nimport {\n Edit as EditIcon,\n Delete as DeleteIcon,\n} from '@mui/icons-material';\n\nimport {\n Icon, type ThemeType,\n type Translate, Utils,\n} from '@iobroker/adapter-react-v5';\n\ninterface CategoryLabelProps {\n categoryData: Record<string, any>;\n showEnumEditDialog: (category: Record<string, any>, isNew: boolean) => void;\n showEnumDeleteDialog: (category: Record<string, any>) => void;\n t: Translate;\n lang: ioBroker.Languages;\n styles: Record<string, React.CSSProperties>;\n themeType: ThemeType;\n}\n\nconst CategoryLabel = (props: CategoryLabelProps) => {\n const [, drop] = useDrop(() => ({\n accept: ['enum'],\n drop: () => ({ enumId: props.categoryData._id }),\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n }));\n\n const textColor = Utils.getInvertedColor(props.categoryData.common.color, props.themeType, true);\n\n return <span ref={drop} style={{ ...props.styles.categoryTitle, color: textColor }}>\n {props.categoryData.common.icon ? <Icon\n style={props.styles.icon}\n src={props.categoryData.common.icon}\n /> : null}\n {typeof props.categoryData.common.name === 'string' ? props.categoryData.common.name : (props.categoryData.common.name[props.lang] || props.categoryData.common.name.en)}\n <IconButton\n size=\"small\"\n style={{ color: textColor }}\n onClick={() => { props.showEnumEditDialog(props.categoryData, false); }}\n >\n <Tooltip title={props.t('Edit')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <EditIcon />\n </Tooltip>\n </IconButton>\n {props.categoryData.common.dontDelete ? null : <IconButton\n size=\"small\"\n style={{ color: textColor }}\n onClick={() => props.showEnumDeleteDialog(props.categoryData)}\n >\n <Tooltip title={props.t('Delete')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <DeleteIcon />\n </Tooltip>\n </IconButton>}\n </span>;\n};\n\nexport default CategoryLabel;\n","import React from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid2,\n Button,\n} from '@mui/material';\n\nimport {\n TextFields as TextFieldsIcon,\n Description as DescriptionIcon,\n LocalOffer as LocalOfferIcon,\n Pageview as PageviewIcon,\n ColorLens as ColorLensIcon,\n Image as ImageIcon,\n Close as CloseIcon,\n Check as CheckIcon,\n} from '@mui/icons-material';\n\nimport { Utils, IconPicker, type Translate } from '@iobroker/adapter-react-v5';\nimport { IOTextField, IOColorPicker } from '../IOFields/Fields';\nimport type { EnumCommon } from './EnumBlock';\n\nconst styles: Record<string, React.CSSProperties> = {\n contentRoot: {\n // it is sx\n padding: '16px 24px',\n },\n dialogTitle: {\n borderBottom: '1px solid #00000020',\n padding : 0,\n width:'100%',\n },\n dialogActions: {\n borderTop: '1px solid #00000020',\n width:'100%',\n },\n dialog: {\n },\n iconPreview: {\n height: 32,\n width: 32,\n },\n colorPicker: {\n },\n formIcon : {\n margin: 10,\n opacity: 0.6,\n },\n formContainer : {\n display: 'flex',\n justifyContent:'center',\n alignItems:'center',\n },\n formControl : {\n display: 'flex',\n padding: '0 0 24px 0',\n flexGrow: 1000,\n },\n};\n\ninterface EnumEditDialogProps {\n enum: ioBroker.EnumObject;\n enums: ioBroker.EnumObject[];\n isNew: boolean;\n onChange: (newItem: ioBroker.EnumObject) => void;\n saveData: () => Promise<void>;\n onClose: () => void;\n changed: boolean;\n t: Translate;\n lang: ioBroker.Languages;\n getName: (text: ioBroker.StringOrTranslated) => string;\n innerWidth: number;\n}\n\nfunction EnumEditDialog(props: EnumEditDialogProps) {\n const idExists = props.enums.find(enumItem => enumItem._id === props.enum._id);\n\n let canSave = props.enum._id !== 'system.enum.';\n\n if (props.isNew && idExists) {\n canSave = false;\n }\n\n const getShortId = (_id: string) => _id.split('.').pop();\n\n const name2Id = (name: string) =>\n name.replace(Utils.FORBIDDEN_CHARS, '_').replace(/\\s/g, '_').replace(/\\./g, '_').replace(/,/g, '_')\n .replace(/__/g, '_')\n .replace(/__/g, '_');\n\n const getText = (text: ioBroker.StringOrTranslated): string =>\n (text && typeof text === 'object' ? text[props.lang] || text.en : text as string || '');\n\n const changeShortId = (_id: string, short: string) => {\n const idArray = _id.split('.');\n idArray[idArray.length - 1] = short;\n return idArray.join('.');\n };\n\n return <Dialog\n fullWidth={props.innerWidth < 500}\n open={!0}\n onClose={(_event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n props.onClose();\n }\n }}\n >\n <DialogTitle style={{ ...styles.dialogTitle, padding: 12 }}>\n {props.t('Enum parameters')}\n </DialogTitle>\n <DialogContent sx={{ '&.MuiDialogContent-root': styles.contentRoot }}>\n <Grid2 container spacing={2} style={styles.dialog}>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IOTextField\n label=\"Name\"\n t={props.t}\n value={props.getName(props.enum.common.name)}\n onChange={(value: string) => {\n const newData = props.enum;\n if (\n !props.enum.common.dontDelete &&\n name2Id(props.getName(newData.common.name)) === getShortId(newData._id)\n ) {\n newData._id = changeShortId(newData._id, name2Id(value));\n }\n newData.common.name = value;\n props.onChange(newData);\n }}\n autoComplete=\"off\"\n icon={TextFieldsIcon}\n styles={styles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IOTextField\n label=\"ID edit\"\n t={props.t}\n disabled={props.enum.common.dontDelete}\n value={props.enum._id.split('.')[props.enum._id.split('.').length - 1]}\n onChange={(value: string) => {\n const newData = JSON.parse(JSON.stringify(props.enum));\n newData._id = changeShortId(newData._id, name2Id(value));\n props.onChange(newData);\n }}\n icon={LocalOfferIcon}\n styles={styles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IOTextField\n label=\"ID preview\"\n t={props.t}\n disabled\n value={props.enum._id}\n icon={PageviewIcon}\n styles={styles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IOTextField\n label=\"Description\"\n t={props.t}\n value={getText((props.enum.common as EnumCommon).desc)}\n onChange={(value: string) => {\n const newData = props.enum;\n (newData.common as EnumCommon).desc = value;\n props.onChange(newData);\n }}\n icon={DescriptionIcon}\n styles={styles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IconPicker\n label=\"Icon\"\n onlyDevices={props.enum._id.startsWith('enum.functions.')}\n onlyRooms={props.enum._id.startsWith('enum.rooms.')}\n value={props.enum.common.icon}\n onChange={(fileBlob: string) => {\n const newData = props.enum;\n newData.common.icon = fileBlob;\n props.onChange(newData);\n }}\n previewStyle={styles.iconPreview}\n icon={ImageIcon}\n customStyles={styles}\n />\n </Grid2>\n <Grid2 size={{ xs: 12, md: 6 }}>\n <IOColorPicker\n label=\"Color\"\n value={props.enum.common.color}\n previewStyle={styles.iconPreview}\n onChange={(color: string) => {\n const newData = props.enum;\n newData.common.color = color;\n props.onChange(newData);\n }}\n icon={ColorLensIcon}\n style={styles.colorPicker}\n styles={styles}\n t={props.t}\n />\n </Grid2>\n </Grid2>\n </DialogContent>\n <DialogActions style={styles.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n autoFocus\n onClick={() => props.saveData()}\n disabled={!canSave || !props.changed}\n startIcon={<CheckIcon />}\n >\n {props.t('Save')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={props.onClose}\n startIcon={<CloseIcon />}\n >\n {props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nexport default EnumEditDialog;\n","import React, { Component } from 'react';\n\nimport {\n Dialog,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n TextField,\n LinearProgress,\n IconButton,\n} from '@mui/material';\n\nimport {\n Clear as ClearIcon,\n Brush as CustomGroup,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { Icon, type Translate, Utils } from '@iobroker/adapter-react-v5';\n\nimport devices from '../../assets/devices/list.json';\nimport rooms from '../../assets/rooms/list.json';\n\nimport AdminUtils from '../../AdminUtils';\n\ninterface EnumIcon {\n _id: string;\n name: ioBroker.StringOrTranslated;\n icon: string;\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 32,\n height: 32,\n },\n customGroupButton: {\n\n },\n enumTemplateButton: {\n // width: '100%',\n justifyContent: 'end',\n margin: 4,\n padding: '4px 8px',\n },\n enumTemplateLabel: {\n textAlign: 'right',\n opacity: 0.4,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flexGrow: 1,\n },\n fullHeight: {\n height: 'calc(100% - 32px)',\n maxHeight: 900,\n },\n filter: {\n marginLeft: 16,\n marginTop: 0,\n marginBottom: 0,\n },\n content: {\n display: 'grid',\n width: '100%',\n gridTemplateColumns: 'repeat(4,1fr)',\n },\n title: {\n lineHeight: '45px',\n verticalAlign: 'middle',\n display: 'inline-block',\n },\n};\n\ninterface EnumTemplateDialogProps {\n prefix: string;\n t: Translate;\n lang: ioBroker.Languages;\n enums: Record<string, ioBroker.EnumObject>;\n onClose: () => void;\n createEnumTemplate: (prefix: string, template: ioBroker.EnumObject) => void;\n showEnumEditDialog: (template: ioBroker.EnumObject, isNew: boolean) => void;\n getEnumTemplate: (prefix: string) => ioBroker.EnumObject;\n}\n\ninterface EnumTemplateDialogState {\n icons: string[];\n loading: boolean;\n filter: string;\n}\n\nclass EnumTemplateDialog extends Component<EnumTemplateDialogProps, EnumTemplateDialogState> {\n constructor(props: EnumTemplateDialogProps) {\n super(props);\n\n this.state = {\n icons: [],\n loading: true,\n filter: '',\n };\n }\n\n componentDidMount() {\n this.setState({ loading: true }, () => {\n const templates: EnumIcon[] = this.props.prefix.startsWith('enum.functions') ? devices : rooms;\n const icons: string[] = [];\n\n const promises = templates.map(async (template, i) => {\n try {\n const image: Promise<{ default: string }> = import(\n `../../assets/${this.props.prefix.startsWith('enum.functions') ? 'devices' : 'rooms'}/${template.icon}.svg`\n );\n const im = await image;\n const icon = await Utils.getSvg(im.default);\n return (icons[i] = icon);\n } catch {\n return null;\n }\n });\n\n Promise.all(promises)\n .then(() =>\n this.setState({ icons, loading: false }));\n });\n }\n\n render() {\n const templates = this.props.prefix.startsWith('enum.functions') ? devices : rooms;\n\n return <Dialog\n maxWidth=\"md\"\n fullWidth\n sx={{ '& .MuiPaper-root': styles.fullHeight }}\n open={!0}\n onClose={this.props.onClose}\n >\n <DialogTitle>\n {this.props.t(this.props.prefix.startsWith('enum.functions') ? 'Create new function' : 'Create new room')}\n <TextField\n variant=\"standard\"\n style={styles.filter}\n value={this.state.filter}\n onChange={e => this.setState({ filter: e.target.value.toLowerCase() })}\n placeholder={this.props.t('Filter')}\n margin=\"dense\"\n slotProps={{\n input: {\n endAdornment: this.state.filter ? <IconButton\n size=\"small\"\n onClick={() => this.setState({ filter: '' })}\n >\n <ClearIcon />\n </IconButton> : null,\n },\n }}\n />\n </DialogTitle>\n <DialogContent style={{ textAlign: 'center' }}>\n {this.state.loading && <LinearProgress />}\n <div style={styles.content}>\n {templates.map((template, i) => {\n const name = AdminUtils.getText(template.name, this.props.lang) || template._id;\n\n if (this.props.enums[`${this.props.prefix}.${template._id}`]) {\n return null;\n } if (!this.state.filter || name.toLowerCase().includes(this.state.filter)) {\n return <Button\n color=\"grey\"\n key={i}\n variant=\"outlined\"\n onClick={() => {\n this.props.onClose();\n this.props.createEnumTemplate(this.props.prefix, {\n _id: `${this.props.prefix}.${template._id}`,\n type: 'enum',\n common: {\n name: template.name,\n icon: this.state.icons[i],\n },\n native: {},\n });\n }}\n // startIcon={<Icon src={this.state.icons[i]} style={styles.icon}/>}\n style={styles.enumTemplateButton}\n startIcon={<Icon src={this.state.icons[i]} style={styles.icon} />}\n >\n <span style={styles.enumTemplateLabel}>{AdminUtils.getText(template.name, this.props.lang) || template._id}</span>\n </Button>;\n }\n return null;\n })}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n style={styles.customGroupButton}\n onClick={() => {\n this.props.onClose();\n this.props.showEnumEditDialog(this.props.getEnumTemplate(this.props.prefix), true);\n }}\n startIcon={<CustomGroup />}\n >\n {this.props.prefix === 'enum.rooms' ? this.props.t('Custom room') : (this.props.prefix === 'enum.functions' ? this.props.t('Custom function') : this.props.t('Custom enumeration'))}\n </Button>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={this.props.onClose}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nexport default EnumTemplateDialog;\n","import React from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n} from '@mui/material';\n\nimport {\n Delete as DeleteIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport type { Translate } from '@iobroker/adapter-react-v5';\n\ninterface EnumDeleteDialogProps {\n onClose: () => void;\n enum: ioBroker.EnumObject;\n t: Translate;\n getName: (text: ioBroker.StringOrTranslated) => string;\n deleteEnum: (enumId: string) => void;\n}\n\nfunction EnumDeleteDialog(props: EnumDeleteDialogProps) {\n return <Dialog open={!0} onClose={props.onClose}>\n <DialogTitle>{props.t('Please confirm')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {props.t('Do you want to delete enum \"%s\"?', props.getName(props.enum.common.name))}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n onClick={() => props.deleteEnum(props.enum._id)}\n startIcon={<DeleteIcon />}\n >\n {props.t('Delete')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={props.onClose}\n startIcon={<CloseIcon />}\n >\n {props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nexport default EnumDeleteDialog;\n","import React, { useEffect, useState } from 'react';\n\nimport { useDrag, type DragSourceMonitor } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\n\nimport { Box, Card } from '@mui/material';\n\nimport { List as ListIcon } from '@mui/icons-material';\n\nimport {\n type AdminConnection, Icon,\n type IobTheme, type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport ObjectBrowser, {\n type TreeItemData,\n type TreeItem,\n getSelectIdIconFromObjects, ITEM_IMAGES,\n} from '../ObjectBrowser';\n\nexport interface DragItem {\n data: TreeItemData;\n children: DragItem[];\n // preview: React.JSX.Element | null;\n}\n\ninterface DragWrapperProps {\n item: TreeItem;\n style: React.CSSProperties;\n children: React.JSX.Element | null;\n lang: ioBroker.Languages;\n}\n\ninterface DragSettings {\n type: string;\n end: (item: TreeItem, monitor: any) => void;\n item: { data: TreeItemData; preview: React.JSX.Element | null };\n collect: (monitor: DragSourceMonitor) => ({\n isDragging?: boolean;\n canDrag?: boolean;\n });\n}\n\ninterface DragObjectBrowserProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n addItemToEnum: (id: string, enumId: string) => void;\n stylesParent: Record<string, React.CSSProperties>;\n getName: (name: string | Record<string, string>) => string;\n theme: IobTheme;\n}\n\nconst DragObjectBrowser = (props: DragObjectBrowserProps) => {\n const [wrapperState, setWrapperState] = useState({ DragWrapper: null });\n const objectRef = React.useRef<Record<string, ioBroker.Object> | null>(null);\n\n useEffect(() => {\n // eslint-disable-next-line react/no-unstable-nested-components\n const DragWrapper = (dragProps: DragWrapperProps) => {\n const onDragEnd = (\n item: TreeItem,\n monitor: DragSourceMonitor<TreeItem, { enumId: string }>,\n ) => {\n const dropResult = monitor.getDropResult();\n if (item.data && dropResult) {\n if (item.data.obj) {\n props.addItemToEnum(item.data.obj._id, dropResult.enumId);\n } else {\n // all children ??\n window.alert(`TODO: Add all direct children of ${item.data.id}`);\n }\n }\n };\n\n const dragSettings: DragSettings = {\n type: 'object',\n end: onDragEnd,\n item: {\n data: dragProps.item.data,\n preview: (dragProps.item.data && dragProps.item.data.obj ? <Card\n key={dragProps.item.data.obj._id}\n variant=\"outlined\"\n style={props.stylesParent.enumGroupMember}\n >\n {dragProps.item.data.obj.common?.icon ?\n <Icon\n style={props.stylesParent.icon}\n src={objectRef.current ? getSelectIdIconFromObjects(objectRef.current, dragProps.item.data.obj._id, props.lang) : dragProps.item.data.obj.common.icon}\n />\n :\n (ITEM_IMAGES[dragProps.item.data.obj.type] || <ListIcon style={props.stylesParent.icon} />)}\n <div>\n <div>{dragProps.item.data.obj.common?.name ? props.getName(dragProps.item.data.obj.common?.name) : dragProps.item.data.obj._id}</div>\n {dragProps.item.data.obj.common?.name ? <div\n style={{ fontStyle: 'italic', fontSize: 'smaller', opacity: 0.7 }}\n >\n {dragProps.item.data.obj._id}\n </div> : null}\n </div>\n </Card> : null),\n },\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n }),\n };\n\n const [{ isDragging }, dragRef, preview] = useDrag(dragSettings);\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, []);\n\n return <Box\n key={dragProps.item.data.id}\n sx={dragProps.style}\n ref={dragRef}\n style={{ backgroundColor: isDragging ? 'rgba(100,152,255,0.1)' : undefined }}\n >\n {dragProps.children}\n </Box>;\n };\n setWrapperState({ DragWrapper });\n // eslint-disable-next-line\n }, [props.stylesParent, props.addItemToEnum, props.getName]); // react-hooks/exhaustive-deps\n\n return wrapperState ? <ObjectBrowser\n t={props.t}\n socket={props.socket}\n types={['state', 'channel', 'device']}\n columns={['name', 'type', 'role', 'room', 'func']}\n lang={props.lang}\n dragEnabled\n theme={props.theme}\n DragWrapper={wrapperState.DragWrapper}\n setObjectsReference={(objects: Record<string, ioBroker.Object>) => objectRef.current = objects}\n levelPadding={10}\n /> : null;\n};\n\nexport default DragObjectBrowser;\n","import React, { Component } from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\nimport { usePreview } from 'react-dnd-preview';\nimport ReactSplit, { SplitDirection } from '@devbookhq/splitter';\n\nimport {\n Tooltip,\n LinearProgress,\n Tabs,\n Tab,\n TextField,\n Popover,\n MenuItem,\n MenuList,\n IconButton,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n KeyboardArrowDown as DownIcon,\n KeyboardArrowUp as UpIcon,\n Clear as ClearIcon,\n} from '@mui/icons-material';\nimport { FaRegFolder as IconCollapsed, FaRegFolderOpen as IconExpanded } from 'react-icons/fa';\n\nimport {\n type AdminConnection,\n type IobTheme, type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport EnumBlock, { isTouchDevice } from './EnumBlock';\nimport CategoryLabel from './CategoryLabel';\nimport EnumEditDialog from './EnumEditDialog';\nimport EnumTemplateDialog from './EnumTemplateDialog';\nimport EnumDeleteDialog from './EnumDeleteDialog';\nimport DragObjectBrowser from './DragObjectBrowser';\nimport AdminUtils from '../../AdminUtils';\n\nconst styles: Record<string, any> = {\n mainGridCont: {\n height: '100%',\n overflowY:'auto',\n },\n childGridCont: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n enumGroupMember: {\n display: 'flex',\n gap: 8,\n alignItems: 'center',\n padding: '8px 16px',\n },\n childGridContWide: {\n height: '100%',\n },\n blocksContainer: {\n overflowY: 'auto',\n overflowX: 'hidden',\n },\n canDrop: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.default,\n }),\n icon: {\n height: 32,\n width: 32,\n marginRight: 5,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n display: 'inline-block',\n },\n categoryTitle: {\n flexDirection: 'row',\n alignItems: 'center',\n display: 'inline-flex',\n },\n enumTemplateDialog: {\n overflowY: 'auto',\n textAlign: 'center',\n },\n enumTemplate: {\n display: 'inline-flex',\n padding: 10,\n width: 200,\n },\n toolbarButton: {\n // marginRight: 8,\n // display: 'inline',\n },\n filter: {\n width: '100%',\n paddingRight: 20,\n },\n topPanel: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 20,\n },\n topPanel2: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '4px 20px',\n justifyContent: 'space-between',\n },\n searchText: {\n color: 'orange',\n },\n};\n\nconst DndPreview = () => {\n const preview = usePreview<React.JSX.Element>();\n const display = preview.display;\n\n // TODO: How to fix this?\n const { item, style } = (preview as unknown as { item: { preview: React.JSX.Element }; style: React.CSSProperties });\n if (!display) {\n return null;\n }\n\n return <div style={{ ...style, zIndex: 1000 }}>{item.preview}</div>;\n};\n\n/* function mobileCheck() {\n let check = false;\n (function (a) { if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series([46])0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \\-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0, 4))) check = true; }(navigator.userAgent || navigator.vendor || window.opera));\n return check;\n} */\n\nconst enumTemplates: Record<string, ioBroker.EnumObject> = {\n favorites: {\n _id: 'enum.favorites',\n type: 'enum',\n common: {\n name: {\n en: 'Favorites',\n de: 'Favoriten',\n ru: 'Избранное',\n pt: 'Favoritos',\n nl: 'Favorieten',\n fr: 'Favoris',\n it: 'Preferiti',\n es: 'Favoritos',\n pl: 'Ulubione',\n uk: 'Обране',\n 'zh-cn': '收藏夹',\n },\n },\n native: {},\n },\n};\n\nfunction sort(\n enums: Record<string, ioBroker.EnumObject>,\n getName: (name: ioBroker.StringOrTranslated) => string | undefined,\n): (a: string, b: string) => number {\n return (a: string, b: string): number => {\n let aName = getName(enums[a]?.common?.name || '') || a.split('.').pop();\n let bName = getName(enums[b]?.common?.name || '') || b.split('.').pop();\n aName = aName.toLowerCase();\n bName = bName.toLowerCase();\n if (aName > bName) {\n return 1;\n }\n if (aName < bName) {\n return -1;\n }\n return 0;\n };\n}\n\nconst ENUM_TEMPLATE: ioBroker.EnumObject = {\n _id: '',\n type: 'enum',\n common: {\n name: '',\n color: '',\n desc: '',\n members: [],\n },\n native: {},\n};\n\ninterface TreeItem {\n data: ioBroker.EnumObject | null;\n children: Record<string, TreeItem>;\n id: string;\n}\n\ninterface EnumsListProps {\n socket: AdminConnection;\n t: Translate;\n lang: ioBroker.Languages;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\ninterface EnumEditDialog {\n changed: boolean;\n originalItem?: ioBroker.EnumObject;\n newItem?: ioBroker.EnumObject;\n isNew?: boolean;\n}\n\ninterface EnumsListState {\n enums: Record<string, ioBroker.EnumObject> | null;\n enumsTree: TreeItem | null;\n currentCategory: string;\n search: string;\n enumEditDialog: EnumEditDialog | null;\n enumTemplateDialog: string | null;\n enumDeleteDialog: ioBroker.EnumObject | null;\n members: Record<string, ioBroker.Object>;\n categoryPopoverOpen: boolean;\n enumsClosed: Record<string, boolean>;\n updating: string[];\n enumsCollapsed: string[];\n innerWidth: number;\n splitSizes: [number, number];\n}\n\nclass EnumsList extends Component<EnumsListProps, EnumsListState> {\n private readonly cachedIcons: Record<string, string>;\n\n private fastUpdate: boolean;\n\n private readonly refFilter: React.RefObject<HTMLInputElement>;\n\n private readonly refClearButton: React.RefObject<HTMLButtonElement>;\n\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private changeEnums: Record<string, ioBroker.EnumObject>;\n\n private scrollToItem: string | null;\n\n private searchTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: EnumsListProps) {\n super(props);\n\n const localStorage: Storage = ((window as any)._localStorage as Storage || window.localStorage);\n\n let enumsClosed = {};\n try {\n enumsClosed = localStorage.getItem('enumsClosed') ? JSON.parse(localStorage.getItem('enumsClosed')) : {};\n } catch {\n // ignore\n }\n let enumsCollapsed = [];\n try {\n enumsCollapsed = localStorage.getItem('enumsCollapsed') ? JSON.parse(localStorage.getItem('enumsCollapsed')) : [];\n } catch {\n // ignore\n }\n const splitSizesStr = localStorage.getItem('enumsSplitSizes');\n let splitSizes: [number, number] = [50, 50];\n if (splitSizesStr) {\n try {\n splitSizes = JSON.parse(splitSizesStr) as [number, number];\n } catch {\n // ignore\n }\n if (!Array.isArray(splitSizes) || splitSizes.length !== 2) {\n splitSizes = [50, 50];\n }\n }\n\n this.state = {\n enums: null,\n enumsTree: null,\n currentCategory: localStorage.getItem('enumCurrentCategory') || '',\n search: '',\n enumEditDialog: null,\n enumTemplateDialog: null,\n enumDeleteDialog: null,\n members: {},\n categoryPopoverOpen: false,\n enumsClosed,\n updating: [],\n enumsCollapsed,\n innerWidth: 0,\n splitSizes,\n };\n\n this.cachedIcons = {};\n\n this.fastUpdate = false;\n\n this.refFilter = React.createRef();\n this.refClearButton = React.createRef();\n }\n\n getEnumTemplate = (prefix: string): ioBroker.EnumObject => {\n const enumTemplate: ioBroker.EnumObject = JSON.parse(JSON.stringify(ENUM_TEMPLATE));\n const { _id, name } = EnumsList.findNewUniqueName(prefix, Object.values(this.state.enums), this.props.t('Enum'));\n enumTemplate._id = _id;\n enumTemplate.common.name = name;\n return enumTemplate;\n };\n\n scrollToEnum(enumId: string): void {\n // check that parent is opened\n let parts = enumId.split('.');\n parts.pop();\n let changed = false;\n const enumsClosed = JSON.parse(JSON.stringify(this.state.enumsClosed));\n\n while (parts.length > 2) {\n const parentId = parts.join('.');\n if (enumsClosed[parentId]) {\n delete enumsClosed[parentId];\n changed = true;\n }\n parts = parentId.split('.');\n parts.pop();\n }\n\n if (changed) {\n this.setState({ enumsClosed }, () => {\n setTimeout(() => {\n const el = document.getElementById(enumId);\n el?.scrollIntoView(true);\n }, 400);\n });\n } else {\n setTimeout(() => {\n const el = document.getElementById(enumId);\n el?.scrollIntoView(true);\n }, 400);\n }\n }\n\n addUpdating(id: string): Promise<void> {\n if (!this.state.updating.includes(id)) {\n const updating = [...this.state.updating];\n updating.push(id);\n return new Promise(resolve => {\n this.setState({ updating }, () => resolve());\n });\n }\n return Promise.resolve();\n }\n\n createEnumTemplate = (prefix: string, templateValues: ioBroker.EnumObject) => {\n const enumTemplate = this.getEnumTemplate(prefix);\n enumTemplate._id = templateValues._id;\n enumTemplate.common = { ...enumTemplate.common, ...templateValues.common };\n\n this.scrollToItem = enumTemplate._id;\n\n this.addUpdating(enumTemplate._id)\n .then(() => this.props.socket.setObject(enumTemplate._id, enumTemplate))\n .catch(e => window.alert(`Cannot create enum: ${e}`));\n };\n\n async componentDidMount() {\n await this.updateData();\n await this.props.socket.subscribeObject('enum.*', this.onObjectChange);\n }\n\n componentWillUnmount() {\n this.props.socket.unsubscribeObject('enum.*', this.onObjectChange);\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n }\n\n onObjectChange = (id: string, obj: ioBroker.EnumObject) => {\n let changed;\n\n if (this.state.enums && id.startsWith('enum.')) {\n if (obj) {\n const oldObj = (this.changeEnums && this.changeEnums[id]) || (this.state.enums && this.state.enums[id]);\n if (!oldObj || (oldObj && JSON.stringify(oldObj) !== JSON.stringify(obj))) {\n this.changeEnums = this.changeEnums || JSON.parse(JSON.stringify(this.state.enums));\n this.changeEnums[id] = obj;\n changed = true;\n }\n } else if ((this.changeEnums && this.changeEnums[id]) || (!this.changeEnums && this.state.enums && this.state.enums[id])) {\n this.changeEnums = this.changeEnums || JSON.parse(JSON.stringify(this.state.enums));\n delete this.changeEnums[id];\n changed = true;\n }\n }\n\n if (changed) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n\n // collect events\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n const changeEnums = this.changeEnums;\n this.changeEnums = null;\n this.updateData(changeEnums)\n .then(() => {\n if (this.scrollToItem) {\n this.scrollToEnum(this.scrollToItem);\n this.scrollToItem = null;\n }\n })\n .catch(() => undefined);\n }, this.fastUpdate ? 0 : 200);\n\n this.fastUpdate = false;\n }\n };\n\n updateData = async (enums?: Record<string, ioBroker.EnumObject>) => {\n enums = enums || (await this.props.socket.getForeignObjects('enum.*', 'enum'));\n const members: Record<string, ioBroker.Object> = {};\n\n const ids = Object.keys(enums);\n\n // read all members of all enumerations\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (enums[id].common?.members) {\n for (let j = 0; j < enums[id].common.members.length; j++) {\n const member = enums[id].common.members[j];\n if (!members[member]) {\n try {\n members[member] = await this.props.socket.getObject(member);\n } catch {\n window.alert(`Cannot read member \"${member}\"`);\n }\n }\n }\n }\n }\n\n this.setState({ enums, members, updating: [] }, () =>\n this.buildTree(enums));\n };\n\n buildTree(enums: Record<string, ioBroker.EnumObject>) {\n const enumsTree: TreeItem = {\n data: null,\n children: {},\n id: '',\n };\n\n const ids = Object.keys(enums)\n .sort(sort(enums, this.getName));\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const currentEnum = enums[id];\n const idParts = id.split('.');\n let currentContainer = enumsTree;\n const currentParts = [];\n\n for (let p = 0; p < idParts.length; p++) {\n const currentPart = idParts[p];\n currentParts.push(currentPart);\n if (!currentContainer.children[currentPart]) {\n currentContainer.children[currentPart] = {\n data: null,\n children: {},\n id: currentParts.join('.'),\n };\n }\n currentContainer = currentContainer.children[currentPart];\n }\n currentContainer.data = currentEnum;\n }\n\n this.setCurrentCategory(\n this.state.currentCategory &&\n enumsTree.children.enum.children[this.state.currentCategory] ?\n this.state.currentCategory :\n Object.keys(enumsTree.children.enum.children)[0],\n () => this.setState({ enumsTree }),\n );\n }\n\n setCurrentCategory = (currentCategory: string, cb?: () => void) => {\n if (currentCategory !== this.state.currentCategory) {\n this.setState({ currentCategory }, () => {\n if (cb) {\n cb();\n }\n });\n ((window as any)._localStorage || window.localStorage).setItem('enumCurrentCategory', currentCategory);\n } else if (cb) {\n cb();\n }\n };\n\n addItemToEnum = (itemId: string, enumId: string) => {\n const enumItem = JSON.parse(JSON.stringify(this.state.enums[enumId]));\n if (!enumItem.common?.members) {\n enumItem.common = enumItem.common || {};\n enumItem.common.members = [];\n }\n const members = enumItem.common.members;\n if (!members.includes(itemId)) {\n members.push(itemId);\n\n this.fastUpdate = true;\n this.props.socket.setObject(enumItem._id, enumItem)\n .catch(e => window.alert(`Cannot set enum: ${e}`));\n }\n };\n\n removeMemberFromEnum = (memberId: string, enumId: string) => {\n const enumItem = JSON.parse(JSON.stringify(this.state.enums[enumId]));\n const members = enumItem.common.members;\n const pos = members.indexOf(memberId);\n if (pos !== -1) {\n members.splice(pos, 1);\n\n this.fastUpdate = true;\n this.props.socket.setObject(enumItem._id, enumItem)\n .catch((e: string) => window.alert(`Cannot update enum: ${e}`));\n }\n };\n\n moveEnum = async (fromId: string, toId: string) => {\n if (toId.startsWith(fromId)) {\n return;\n }\n const fromPrefixParts: string[] = fromId.split('.');\n fromPrefixParts.pop();\n const fromPrefix: string = fromPrefixParts.join('.');\n const toPrefix = toId;\n\n if (fromPrefix === toPrefix) {\n return;\n }\n\n const ids = Object.keys(this.state.enums);\n\n const updating = [...this.state.updating];\n\n try {\n for (let i = 0; i < ids.length; i++) {\n const enumItem = this.state.enums[ids[i]];\n if (ids[i].startsWith(fromId)) {\n const newId = ids[i].replace(fromPrefix, toPrefix);\n const newEnum = JSON.parse(JSON.stringify(enumItem));\n newEnum._id = newId;\n if (!updating.includes(ids[i])) {\n updating.push(ids[i]);\n }\n await this.props.socket.setObject(newId, enumItem);\n await this.props.socket.delObject(ids[i]);\n }\n }\n } catch (e) {\n window.alert(`Cannot move enum: ${e}`);\n }\n\n this.setState({ updating });\n };\n\n renderTree(container: TreeItem, key: number, level: number) {\n let ids = null;\n if (!this.state.enumsClosed[container.id]) {\n ids = Object.keys(container.children);\n const enums: Record<string, ioBroker.EnumObject> = {};\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n enums[id] = container.children[id].data;\n }\n ids.sort(sort(enums, this.getName));\n }\n\n const name: string = this.getName(container.data?.common?.name);\n const idText: string = container.id;\n let nameRx: React.JSX.Element[] | null;\n let idRx: React.JSX.Element[] | null;\n if (this.state.search) {\n const search = this.state.search;\n const pos = name.toLowerCase().indexOf(search);\n const posId = idText.toLowerCase().indexOf(search);\n if (pos === -1 && posId === -1) {\n return null;\n }\n if (pos !== -1) {\n nameRx = name ? [\n <span key=\"0\">{name.substring(0, pos)}</span>,\n <span key=\"1\" style={styles.searchText}>{name.substring(pos, pos + this.state.search.length)}</span>,\n <span key=\"2\">{name.substring(pos + this.state.search.length)}</span>,\n ] : null;\n }\n if (posId !== -1) {\n idRx = name ? [\n <span key=\"0\">{idText.substring(0, posId)}</span>,\n <span key=\"1\" style={styles.searchText}>{idText.substring(posId, posId + this.state.search.length)}</span>,\n <span key=\"2\">{idText.substring(posId + this.state.search.length)}</span>,\n ] : null;\n }\n }\n\n return <div style={{ paddingLeft: level ? 32 : 0 }} key={container.id || key}>\n <EnumBlock\n cachedIcons={this.cachedIcons}\n stylesParent={styles}\n closed={this.state.enumsClosed[container.id]}\n collapsed={this.state.enumsCollapsed.includes(container.id)}\n copyEnum={this.copyEnum}\n currentCategory={this.state.currentCategory}\n enum={container.data}\n getEnumTemplate={this.getEnumTemplate}\n getName={this.getName}\n id={container.id}\n idText={idRx}\n members={this.state.members}\n moveEnum={this.moveEnum}\n name={nameRx}\n onCollapse={() => {\n const enumsCollapsed = [...this.state.enumsCollapsed];\n const pos = enumsCollapsed.indexOf(container.id);\n if (pos === -1) {\n enumsCollapsed.push(container.id);\n } else {\n enumsCollapsed.splice(pos, 1);\n }\n this.setState({ enumsCollapsed });\n ((window as any)._localStorage || window.localStorage).setItem('enumsCollapsed', JSON.stringify(enumsCollapsed));\n }}\n removeMemberFromEnum={this.removeMemberFromEnum}\n showEnumDeleteDialog={this.showEnumDeleteDialog}\n showEnumEditDialog={this.showEnumEditDialog}\n showEnumTemplateDialog={this.showEnumTemplateDialog}\n socket={this.props.socket}\n t={this.props.t}\n themeType={this.props.themeType}\n theme={this.props.theme}\n toggleEnum={this.toggleEnum}\n updating={this.state.updating.includes(container.id)}\n childrenCount={container.children ? Object.keys(container.children).length : 0}\n />\n {ids ?\n ids.map((id, index) => <React.Fragment key={index}>{this.renderTree(container.children[id], index, level + 1)}</React.Fragment>)\n : null}\n </div>;\n }\n\n showEnumEditDialog = (enumItem: ioBroker.EnumObject, isNew: boolean) => {\n const enumEditDialog: EnumEditDialog = { changed: false };\n enumEditDialog.newItem = JSON.parse(JSON.stringify(enumItem));\n enumEditDialog.originalItem = JSON.parse(JSON.stringify(enumItem));\n enumEditDialog.isNew = isNew;\n this.setState({ enumEditDialog });\n };\n\n showEnumTemplateDialog = (prefix: string) =>\n this.setState({ enumTemplateDialog: prefix });\n\n showEnumDeleteDialog = (enumItem: ioBroker.EnumObject) =>\n this.setState({ enumDeleteDialog: enumItem });\n\n saveEnum = async () => {\n const newItem = this.state.enumEditDialog.newItem;\n const originalId = this.state.enumEditDialog.originalItem._id;\n\n if (this.state.enumEditDialog.isNew) {\n this.scrollToItem = newItem._id;\n }\n\n const updating = [...this.state.updating];\n\n if (!updating.includes(originalId)) {\n updating.push(originalId);\n }\n\n await this.props.socket.setObject(newItem._id, newItem);\n\n if (originalId !== newItem._id) {\n try {\n await this.props.socket.delObject(originalId);\n\n const ids = Object.keys(this.state.enums);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id.startsWith(`${originalId}.`)) {\n const newEnumChild = JSON.parse(JSON.stringify(this.state.enums[id]));\n newEnumChild._id = newEnumChild._id.replace(`${originalId}.`, `${newItem._id}.`);\n\n if (!updating.includes(id)) {\n updating.push(id);\n }\n await this.props.socket.setObject(newEnumChild._id, newEnumChild);\n await this.props.socket.delObject(id);\n }\n }\n } catch (e) {\n window.alert(`Cannot save enum: ${e}`);\n }\n }\n\n this.setState({ enumEditDialog: null, updating });\n };\n\n deleteEnum = async (enumId: string) => {\n const updating = [...this.state.updating];\n try {\n if (!updating.includes(enumId)) {\n updating.push(enumId);\n }\n\n if (this.state.enums[enumId]) {\n await this.props.socket.delObject(enumId);\n }\n const ids = Object.keys(this.state.enums);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id.startsWith(`${enumId}.`)) {\n if (!updating.includes(id)) {\n updating.push(id);\n }\n if (this.state.enums[enumId]) {\n await this.props.socket.delObject(id);\n }\n }\n }\n } catch (e) {\n window.alert(`Cannot delete enum: ${e}`);\n }\n\n this.setState({ enumDeleteDialog: null, updating });\n };\n\n copyEnum = (enumId: string) => {\n const enumItem = JSON.parse(JSON.stringify(this.state.enums[enumId]));\n let newId;\n let index = 1;\n do {\n newId = enumId + index.toString();\n index++;\n } while (this.state.enums[newId]);\n\n enumItem._id = newId;\n\n this.props.socket.setObject(newId, enumItem)\n .catch(e => window.alert(`Cannot delete enum: ${e}`));\n };\n\n toggleEnum = (enumId: string) => {\n const enumsClosed = JSON.parse(JSON.stringify(this.state.enumsClosed));\n enumsClosed[enumId] = !enumsClosed[enumId];\n this.setState({ enumsClosed });\n ((window as any)._localStorage || window.localStorage).setItem('enumsClosed', JSON.stringify(enumsClosed));\n };\n\n changeEnumFormData = (newItem: ioBroker.EnumObject) => {\n const enumEditDialog = JSON.parse(JSON.stringify(this.state.enumEditDialog));\n enumEditDialog.newItem = JSON.parse(JSON.stringify(newItem));\n enumEditDialog.changed =\n JSON.stringify(enumEditDialog.newItem) !== JSON.stringify(this.state.enums[enumEditDialog.originalItem] || {});\n this.setState({ enumEditDialog });\n };\n\n getName = (name: ioBroker.StringOrTranslated): string => AdminUtils.getText(name, this.props.lang);\n\n static _isUniqueName(prefix: string, list: ioBroker.EnumObject[], word: string, i: number) {\n return !list.find(item =>\n item._id === (`${prefix}.${word.toLowerCase()}_${i}`));\n }\n\n static findNewUniqueName(prefix: string, list: ioBroker.EnumObject[], word: string) {\n let i = 1;\n while (!EnumsList._isUniqueName(prefix, list, word, i)) {\n i++;\n }\n return { _id: `${prefix}.${word.toLowerCase()}_${i}`, name: `${word} ${i}` };\n }\n\n onFilterChanged(filter: string, isClear?: boolean): void {\n if (this.refClearButton.current) {\n if (filter) {\n this.refClearButton.current.style.display = 'block';\n } else {\n this.refClearButton.current.style.display = 'none';\n }\n }\n if (isClear && this.refFilter.current) {\n this.refFilter.current.value = '';\n }\n\n if (this.searchTimer) {\n clearTimeout(this.searchTimer);\n }\n this.searchTimer = setTimeout(_text => {\n this.searchTimer = null;\n this.setState({ search: _text.toLowerCase() });\n }, isClear ? 0 : 300, filter);\n }\n\n renderEditDialog() {\n return this.state.enumEditDialog ? <EnumEditDialog\n onClose={() => this.setState({ enumEditDialog: null })}\n enums={Object.values(this.state.enums)}\n enum={this.state.enumEditDialog.newItem}\n getName={this.getName}\n isNew={this.state.enumEditDialog.isNew}\n t={this.props.t}\n lang={this.props.lang}\n changed={this.state.enumEditDialog.changed}\n onChange={this.changeEnumFormData}\n saveData={this.saveEnum}\n innerWidth={this.state.innerWidth}\n /> : null;\n }\n\n renderDeleteDialog() {\n return this.state.enumDeleteDialog ? <EnumDeleteDialog\n onClose={() => this.setState({ enumDeleteDialog: null })}\n enum={this.state.enumDeleteDialog}\n getName={this.getName}\n t={this.props.t}\n deleteEnum={this.deleteEnum}\n /> : null;\n }\n\n renderTemplateDialog() {\n // eslint-disable-next-line no-extra-boolean-cast\n return !!this.state.enumTemplateDialog ? <EnumTemplateDialog\n prefix={this.state.enumTemplateDialog}\n onClose={() => this.setState({ enumTemplateDialog: null })}\n t={this.props.t}\n lang={this.props.lang}\n createEnumTemplate={this.createEnumTemplate}\n showEnumEditDialog={this.showEnumEditDialog}\n enums={this.state.enums}\n getEnumTemplate={this.getEnumTemplate}\n /> : null;\n }\n\n render() {\n if (!this.state.enumsTree) {\n return <LinearProgress />;\n }\n const enumItems = Object.values(this.state.enumsTree.children.enum.children[this.state.currentCategory].children);\n const showFolderIcons = !!enumItems.find(item => item.children && Object.keys(item.children).length);\n\n return <>\n <DndProvider backend={isTouchDevice() ? TouchBackend : HTML5Backend}>\n <DndPreview />\n <ReactSplit\n direction={SplitDirection.Horizontal}\n initialSizes={this.state.splitSizes}\n minWidths={[450, 450]}\n onResizeFinished={(gutterIdx: number, splitSizes: [number, number]) => {\n this.setState({ splitSizes: splitSizes as [number, number] });\n ((window as any)._localStorage || window.localStorage).setItem('enumsSplitSizes', JSON.stringify(splitSizes));\n }}\n // theme={this.props.themeType === 'dark' ? GutterTheme.Dark : GutterTheme.Light}\n gutterClassName={this.props.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\n >\n <div style={{ ...styles.childGridCont, ...(this.state.innerWidth > 600 ? styles.childGridContWide : undefined) }}>\n <div style={styles.topPanel}>\n <Tooltip title={this.props.t('Add enum')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n id=\"categoryPopoverButton\"\n size=\"small\"\n style={styles.toolbarButton}\n onClick={() =>\n (this.state.enumsTree.children.enum.children.favorites ?\n this.showEnumEditDialog(this.getEnumTemplate('enum'), true)\n :\n this.setState({ categoryPopoverOpen: true }))}\n >\n <AddIcon />\n </IconButton>\n </Tooltip>\n <Popover\n open={this.state.categoryPopoverOpen}\n onClose={() => this.setState({ categoryPopoverOpen: false })}\n anchorEl={() => document.getElementById('categoryPopoverButton')}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n >\n <MenuList>\n {this.state.enumsTree.children.enum.children.favorites ? null :\n <MenuItem onClick={() => this.createEnumTemplate('enum', enumTemplates.favorites)}>\n {this.props.t('Favorites')}\n </MenuItem>}\n <MenuItem onClick={() => this.showEnumEditDialog(this.getEnumTemplate('enum'), true)}>\n {this.props.t('Custom enum')}\n </MenuItem>\n </MenuList>\n </Popover>\n <Tabs\n value={this.state.currentCategory}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n onChange={(e, newTab) => this.setCurrentCategory(newTab)}\n >\n {Object.keys(this.state.enumsTree.children.enum.children).map((category, index) => {\n let categoryData = this.state.enumsTree.children.enum.children[category].data;\n categoryData = categoryData || {\n _id: this.state.enumsTree.children.enum.children[category].id,\n common: {\n name: this.state.enumsTree.children.enum.children[category].id.split('.').pop(),\n },\n type: 'enum',\n native: {},\n };\n return <Tab\n key={index}\n component=\"span\"\n style={{ backgroundColor: categoryData.common?.color || undefined, borderRadius: 4 }}\n label={<CategoryLabel\n themeType={this.props.themeType}\n categoryData={categoryData}\n showEnumEditDialog={this.showEnumEditDialog}\n showEnumDeleteDialog={this.showEnumDeleteDialog}\n styles={styles}\n {...this.props}\n />}\n value={category}\n />;\n })}\n </Tabs>\n </div>\n <div style={styles.topPanel2}>\n <TextField\n variant=\"standard\"\n inputRef={this.refFilter}\n placeholder={this.props.t('Filter')}\n style={styles.filter}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n endAdornment: <IconButton\n ref={this.refClearButton}\n style={{ display: 'none' }}\n size=\"small\"\n onClick={() => this.onFilterChanged('', true)}\n >\n <ClearIcon />\n </IconButton>,\n },\n }}\n onChange={e => this.onFilterChanged(e.target.value)}\n\n />\n <Tooltip title={this.props.t('Narrow all')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n size=\"large\"\n // size=\"small\"\n style={styles.toolbarButton}\n onClick={() => {\n const enumsCollapsed = Object.keys(this.state.enums);\n this.setState({ enumsCollapsed });\n ((window as any)._localStorage || window.localStorage).setItem('enumsCollapsed', JSON.stringify(enumsCollapsed));\n }}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title={this.props.t('Wide all')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n size=\"large\"\n // size=\"small\"\n style={styles.toolbarButton}\n onClick={() => {\n this.setState({ enumsCollapsed: [] });\n ((window as any)._localStorage || window.localStorage).setItem('enumsCollapsed', '[]');\n }}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n {showFolderIcons && <Tooltip title={this.props.t('Collapse all')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n size=\"large\"\n // size=\"small\"\n style={styles.toolbarButton}\n onClick={() => {\n const enumsClosed: Record<string, boolean> = {};\n Object.keys(this.state.enums).forEach(id => enumsClosed[id] = true);\n this.setState({ enumsClosed });\n ((window as any)._localStorage || window.localStorage).setItem('enumsClosed', JSON.stringify(enumsClosed));\n }}\n >\n <IconCollapsed />\n </IconButton>\n </Tooltip>}\n {showFolderIcons && <Tooltip title={this.props.t('Expand all')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n size=\"large\"\n // size=\"small\"\n style={styles.toolbarButton}\n onClick={() => {\n const enumsClosed = {};\n this.setState({ enumsClosed });\n ((window as any)._localStorage || window.localStorage).setItem('enumsClosed', JSON.stringify(enumsClosed));\n }}\n >\n <IconExpanded />\n </IconButton>\n </Tooltip>}\n <Tooltip title={this.props.t('Add group')} placement=\"top\" slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <IconButton\n size=\"large\"\n // size=\"small\"\n onClick={() => {\n if (['functions', 'rooms'].includes(this.state.currentCategory)) {\n this.setState({ enumTemplateDialog: `enum.${this.state.currentCategory}` });\n } else {\n this.showEnumEditDialog(this.getEnumTemplate(`enum.${this.state.currentCategory}`), true);\n }\n }}\n >\n <AddIcon />\n </IconButton>\n </Tooltip>\n </div>\n <div style={styles.blocksContainer}>\n {enumItems.map((enumItem, index) => this.renderTree(enumItem, index, 0))}\n </div>\n </div>\n <div style={{ ...styles.childGridCont, ...(this.state.innerWidth > 600 ? styles.childGridContWide : undefined) }}>\n <div style={styles.blocksContainer}>\n <DragObjectBrowser\n addItemToEnum={this.addItemToEnum}\n getName={this.getName}\n stylesParent={styles}\n t={this.props.t}\n socket={this.props.socket}\n lang={this.props.lang}\n theme={this.props.theme}\n />\n </div>\n </div>\n </ReactSplit>\n </DndProvider>\n {this.renderEditDialog()}\n {this.renderDeleteDialog()}\n {this.renderTemplateDialog()}\n </>;\n }\n}\n\nexport default EnumsList;\n","import React from 'react';\n\nimport {\n type AdminConnection, type IobTheme,\n type ThemeType, type Translate,\n TabContainer, TabContent,\n} from '@iobroker/adapter-react-v5';\n\nimport EnumsMain from '../components/Enums/EnumsMain';\n\ninterface EnumsProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nfunction Enums(props: EnumsProps): React.JSX.Element {\n return <TabContainer>\n <TabContent style={{ display: 'flex', flexDirection: 'column', overflow: 'auto' }}>\n <EnumsMain\n socket={props.socket}\n t={props.t}\n lang={props.lang}\n themeType={props.themeType}\n theme={props.theme}\n />\n </TabContent>\n </TabContainer>;\n}\n\nexport default Enums;\n","var map = {\n\t\"./devices/Alarm Systems.svg\": [\n\t\t96331,\n\t\t6331\n\t],\n\t\"./devices/Amplifier.svg\": [\n\t\t59619,\n\t\t9619\n\t],\n\t\"./devices/Awnings.svg\": [\n\t\t32395,\n\t\t2395\n\t],\n\t\"./devices/Battery Status.svg\": [\n\t\t11117,\n\t\t1117\n\t],\n\t\"./devices/Ceiling Spotlights.svg\": [\n\t\t7026,\n\t\t7026\n\t],\n\t\"./devices/Chandelier.svg\": [\n\t\t48119,\n\t\t8119\n\t],\n\t\"./devices/Climate.svg\": [\n\t\t17991,\n\t\t7991\n\t],\n\t\"./devices/Coffee Makers.svg\": [\n\t\t45097,\n\t\t5097\n\t],\n\t\"./devices/Cold Water.svg\": [\n\t\t80181,\n\t\t181\n\t],\n\t\"./devices/Computer.svg\": [\n\t\t79249,\n\t\t9249\n\t],\n\t\"./devices/Consumption.svg\": [\n\t\t3299,\n\t\t3299\n\t],\n\t\"./devices/Curtains.svg\": [\n\t\t29339,\n\t\t9339\n\t],\n\t\"./devices/Dishwashers.svg\": [\n\t\t94485,\n\t\t4485\n\t],\n\t\"./devices/Doors.svg\": [\n\t\t95009,\n\t\t5009\n\t],\n\t\"./devices/Doorstep.svg\": [\n\t\t55776,\n\t\t5776\n\t],\n\t\"./devices/Dryer.svg\": [\n\t\t40796,\n\t\t796\n\t],\n\t\"./devices/Fan.svg\": [\n\t\t541,\n\t\t541\n\t],\n\t\"./devices/Floor Lamps.svg\": [\n\t\t71857,\n\t\t1857\n\t],\n\t\"./devices/Garage Doors.svg\": [\n\t\t36090,\n\t\t6090\n\t],\n\t\"./devices/Gates.svg\": [\n\t\t48178,\n\t\t8178\n\t],\n\t\"./devices/Hairdryer.svg\": [\n\t\t50276,\n\t\t276\n\t],\n\t\"./devices/Handle.svg\": [\n\t\t36299,\n\t\t8680\n\t],\n\t\"./devices/Hanging Lamps.svg\": [\n\t\t81851,\n\t\t1851\n\t],\n\t\"./devices/Heater.svg\": [\n\t\t3133,\n\t\t3133\n\t],\n\t\"./devices/Hoods.svg\": [\n\t\t14559,\n\t\t4559\n\t],\n\t\"./devices/Hot Water.svg\": [\n\t\t6518,\n\t\t6518\n\t],\n\t\"./devices/Humidity.svg\": [\n\t\t25865,\n\t\t5865\n\t],\n\t\"./devices/Iron.svg\": [\n\t\t16224,\n\t\t6224\n\t],\n\t\"./devices/Irrigation.svg\": [\n\t\t91710,\n\t\t1710\n\t],\n\t\"./devices/Led Strip.svg\": [\n\t\t51275,\n\t\t1275\n\t],\n\t\"./devices/Light.svg\": [\n\t\t5518,\n\t\t5518\n\t],\n\t\"./devices/Lightings.svg\": [\n\t\t49749,\n\t\t9749\n\t],\n\t\"./devices/Lock.svg\": [\n\t\t70211,\n\t\t211\n\t],\n\t\"./devices/Louvre.svg\": [\n\t\t11231,\n\t\t1231\n\t],\n\t\"./devices/Mowing Machine.svg\": [\n\t\t22328,\n\t\t2328\n\t],\n\t\"./devices/Music.svg\": [\n\t\t9135,\n\t\t9135\n\t],\n\t\"./devices/Outdoor Blinds.svg\": [\n\t\t61806,\n\t\t1806\n\t],\n\t\"./devices/People.svg\": [\n\t\t36132,\n\t\t3751\n\t],\n\t\"./devices/Pool.svg\": [\n\t\t54820,\n\t\t4820\n\t],\n\t\"./devices/Power Consumption.svg\": [\n\t\t77612,\n\t\t7612\n\t],\n\t\"./devices/Printer.svg\": [\n\t\t15470,\n\t\t5470\n\t],\n\t\"./devices/Pump.svg\": [\n\t\t92192,\n\t\t2192\n\t],\n\t\"./devices/Receiver.svg\": [\n\t\t96809,\n\t\t6809\n\t],\n\t\"./devices/Sconces.svg\": [\n\t\t46078,\n\t\t6078\n\t],\n\t\"./devices/Security.svg\": [\n\t\t30464,\n\t\t464\n\t],\n\t\"./devices/Shading.svg\": [\n\t\t98008,\n\t\t8008\n\t],\n\t\"./devices/Shutters.svg\": [\n\t\t32668,\n\t\t2668\n\t],\n\t\"./devices/SmokeDetector.svg\": [\n\t\t55095,\n\t\t5095\n\t],\n\t\"./devices/Sockets.svg\": [\n\t\t43015,\n\t\t5396\n\t],\n\t\"./devices/Speaker.svg\": [\n\t\t2333,\n\t\t2333\n\t],\n\t\"./devices/Stove.svg\": [\n\t\t35497,\n\t\t5497\n\t],\n\t\"./devices/Table Lamps.svg\": [\n\t\t3283,\n\t\t3283\n\t],\n\t\"./devices/Temperature Sensors.svg\": [\n\t\t68481,\n\t\t8481\n\t],\n\t\"./devices/Tv.svg\": [\n\t\t27048,\n\t\t7048\n\t],\n\t\"./devices/Vacuum Cleaner.svg\": [\n\t\t98381,\n\t\t8381\n\t],\n\t\"./devices/Ventilation.svg\": [\n\t\t5463,\n\t\t5463\n\t],\n\t\"./devices/Washing Machines.svg\": [\n\t\t4881,\n\t\t4881\n\t],\n\t\"./devices/Water Consumption.svg\": [\n\t\t37858,\n\t\t7858\n\t],\n\t\"./devices/Water Heater.svg\": [\n\t\t95942,\n\t\t5942\n\t],\n\t\"./devices/Water.svg\": [\n\t\t41971,\n\t\t1971\n\t],\n\t\"./devices/Weather.svg\": [\n\t\t38322,\n\t\t8322\n\t],\n\t\"./devices/Window.svg\": [\n\t\t15438,\n\t\t5438\n\t],\n\t\"./groups/group1.svg\": [\n\t\t37255,\n\t\t7255\n\t],\n\t\"./groups/group10.svg\": [\n\t\t14805,\n\t\t4805\n\t],\n\t\"./groups/group2.svg\": [\n\t\t65748,\n\t\t5748\n\t],\n\t\"./groups/group3.svg\": [\n\t\t27029,\n\t\t7029\n\t],\n\t\"./groups/group4.svg\": [\n\t\t55402,\n\t\t5402\n\t],\n\t\"./groups/group5.svg\": [\n\t\t97371,\n\t\t7371\n\t],\n\t\"./groups/group6.svg\": [\n\t\t16008,\n\t\t6008\n\t],\n\t\"./groups/group7.svg\": [\n\t\t81401,\n\t\t1401\n\t],\n\t\"./groups/group8.svg\": [\n\t\t11582,\n\t\t1582\n\t],\n\t\"./groups/group9.svg\": [\n\t\t74159,\n\t\t4159\n\t],\n\t\"./rooms/Anteroom.svg\": [\n\t\t6188,\n\t\t6188\n\t],\n\t\"./rooms/Attic.svg\": [\n\t\t52094,\n\t\t2094\n\t],\n\t\"./rooms/Balcony.svg\": [\n\t\t14147,\n\t\t4147\n\t],\n\t\"./rooms/Barn.svg\": [\n\t\t20762,\n\t\t762\n\t],\n\t\"./rooms/Basement.svg\": [\n\t\t93586,\n\t\t3586\n\t],\n\t\"./rooms/Bathroom.svg\": [\n\t\t99115,\n\t\t9115\n\t],\n\t\"./rooms/Bedroom.svg\": [\n\t\t43011,\n\t\t3011\n\t],\n\t\"./rooms/Boiler Room.svg\": [\n\t\t82695,\n\t\t2695\n\t],\n\t\"./rooms/Carport.svg\": [\n\t\t46708,\n\t\t6708\n\t],\n\t\"./rooms/Cellar.svg\": [\n\t\t25184,\n\t\t5184\n\t],\n\t\"./rooms/Chamber.svg\": [\n\t\t91965,\n\t\t1965\n\t],\n\t\"./rooms/Corridor.svg\": [\n\t\t99239,\n\t\t9239\n\t],\n\t\"./rooms/Dining Area.svg\": [\n\t\t38889,\n\t\t8889\n\t],\n\t\"./rooms/Dining Room.svg\": [\n\t\t59519,\n\t\t9519\n\t],\n\t\"./rooms/Dining.svg\": [\n\t\t49142,\n\t\t9142\n\t],\n\t\"./rooms/Dressing Room.svg\": [\n\t\t24511,\n\t\t4511\n\t],\n\t\"./rooms/Driveway.svg\": [\n\t\t41024,\n\t\t1024\n\t],\n\t\"./rooms/Entrance.svg\": [\n\t\t95451,\n\t\t5451\n\t],\n\t\"./rooms/Equipment Room.svg\": [\n\t\t15080,\n\t\t5080\n\t],\n\t\"./rooms/Front Yard.svg\": [\n\t\t38934,\n\t\t8934\n\t],\n\t\"./rooms/Gallery.svg\": [\n\t\t55442,\n\t\t3061\n\t],\n\t\"./rooms/Garage.svg\": [\n\t\t26826,\n\t\t6826\n\t],\n\t\"./rooms/Garden.svg\": [\n\t\t25338,\n\t\t5338\n\t],\n\t\"./rooms/Ground Floor.svg\": [\n\t\t83446,\n\t\t3446\n\t],\n\t\"./rooms/Guest Bathroom.svg\": [\n\t\t79679,\n\t\t9679\n\t],\n\t\"./rooms/Guest Room.svg\": [\n\t\t18104,\n\t\t8104\n\t],\n\t\"./rooms/Gym.svg\": [\n\t\t54138,\n\t\t4138\n\t],\n\t\"./rooms/Hall.svg\": [\n\t\t7712,\n\t\t7712\n\t],\n\t\"./rooms/Home Theater.svg\": [\n\t\t20395,\n\t\t395\n\t],\n\t\"./rooms/Kitchen.svg\": [\n\t\t97295,\n\t\t7295\n\t],\n\t\"./rooms/Laundry Room.svg\": [\n\t\t58017,\n\t\t8017\n\t],\n\t\"./rooms/Living Area.svg\": [\n\t\t82473,\n\t\t2473\n\t],\n\t\"./rooms/Living Room.svg\": [\n\t\t3103,\n\t\t3103\n\t],\n\t\"./rooms/Locker Room.svg\": [\n\t\t20370,\n\t\t370\n\t],\n\t\"./rooms/Nursery.svg\": [\n\t\t25415,\n\t\t5415\n\t],\n\t\"./rooms/Office.svg\": [\n\t\t90845,\n\t\t845\n\t],\n\t\"./rooms/Outdoors.svg\": [\n\t\t49266,\n\t\t9266\n\t],\n\t\"./rooms/Playroom.svg\": [\n\t\t13754,\n\t\t3754\n\t],\n\t\"./rooms/Pool.svg\": [\n\t\t72643,\n\t\t2643\n\t],\n\t\"./rooms/Rear Wall.svg\": [\n\t\t71869,\n\t\t1869\n\t],\n\t\"./rooms/Second Floor.svg\": [\n\t\t58227,\n\t\t8227\n\t],\n\t\"./rooms/Shed.svg\": [\n\t\t29691,\n\t\t9691\n\t],\n\t\"./rooms/Sleeping Area.svg\": [\n\t\t70881,\n\t\t881\n\t],\n\t\"./rooms/Stairway.svg\": [\n\t\t31341,\n\t\t1341\n\t],\n\t\"./rooms/Stairwell.svg\": [\n\t\t24744,\n\t\t4744\n\t],\n\t\"./rooms/Storeroom.svg\": [\n\t\t60781,\n\t\t781\n\t],\n\t\"./rooms/Summer House.svg\": [\n\t\t76338,\n\t\t6338\n\t],\n\t\"./rooms/Swimming Pool.svg\": [\n\t\t67584,\n\t\t7584\n\t],\n\t\"./rooms/Terrace.svg\": [\n\t\t37665,\n\t\t7665\n\t],\n\t\"./rooms/Toilet.svg\": [\n\t\t93422,\n\t\t3422\n\t],\n\t\"./rooms/Upstairs.svg\": [\n\t\t65088,\n\t\t5088\n\t],\n\t\"./rooms/Wardrobe.svg\": [\n\t\t91653,\n\t\t1653\n\t],\n\t\"./rooms/Washroom.svg\": [\n\t\t26525,\n\t\t6525\n\t],\n\t\"./rooms/Wc.svg\": [\n\t\t64783,\n\t\t4783\n\t],\n\t\"./rooms/Windscreen.svg\": [\n\t\t12243,\n\t\t2243\n\t],\n\t\"./rooms/Workshop.svg\": [\n\t\t41798,\n\t\t1798\n\t],\n\t\"./rooms/Workspace.svg\": [\n\t\t85728,\n\t\t5728\n\t],\n\t\"./users/user1.svg\": [\n\t\t83773,\n\t\t3773\n\t],\n\t\"./users/user10.svg\": [\n\t\t84007,\n\t\t4007\n\t],\n\t\"./users/user11.svg\": [\n\t\t20182,\n\t\t182\n\t],\n\t\"./users/user12.svg\": [\n\t\t8405,\n\t\t8405\n\t],\n\t\"./users/user2.svg\": [\n\t\t55326,\n\t\t5326\n\t],\n\t\"./users/user3.svg\": [\n\t\t34255,\n\t\t4255\n\t],\n\t\"./users/user4.svg\": [\n\t\t16784,\n\t\t6784\n\t],\n\t\"./users/user5.svg\": [\n\t\t15233,\n\t\t7614\n\t],\n\t\"./users/user6.svg\": [\n\t\t33490,\n\t\t3490\n\t],\n\t\"./users/user7.svg\": [\n\t\t82883,\n\t\t2883\n\t],\n\t\"./users/user8.svg\": [\n\t\t25844,\n\t\t5844\n\t],\n\t\"./users/user9.svg\": [\n\t\t70773,\n\t\t773\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 1 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 34549;\nmodule.exports = webpackAsyncContext;"],"names":["IOTextField","props","IconCustom","icon","_jsxs","style","styles","formContainer","children","_jsx","formIcon","FormControl","formControl","variant","TextField","label","t","autoComplete","error","helperText","value","onChange","e","target","disabled","type","slotProps","inputLabel","shrink","input","readOnly","endAdornment","InputAdornment","position","IconButton","size","onClick","CloseIcon","IOColorPicker","width","previewStyle","ColorPicker","undefined","display","verticalAlign","enumGroupCard","theme","border","borderColor","palette","divider","m","backgroundColor","background","default","color","text","primary","transition","opacity","overflow","overflowY","boxShadow","minHeight","enumGroupCardExpanded","enumUpdating","content","top","left","height","zIndex","enumCardContent","right","float","enumGroupTitle","alignItems","cursor","marginRight","backgroundSize","backgroundPosition","enumGroupName","marginLeft","enumGroupEnumName","fontWeight","enumGroupEnumID","fontSize","fontStyle","enumName","marginTop","enumGroupMember","p","secondLine","whiteSpace","context","paddingTop","paddingLeft","paddingRight","paddingBottom","folderDiv","folder","folderIcon","folderIconExpanded","transform","bottomButtons","bottom","membersNumber","memberNumberFolder","isTouchDevice","window","navigator","maxTouchPoints","msMaxTouchPoints","EnumBlock","Component","constructor","_props$enum","_props$enum$common","super","this","state","icons","enum","common","members","map","memberId","_props$members$member","_props$members$member2","componentDidMount","_this$props$enum","_this$props$enum$comm","changed","memberIds","cachedIcons","i","length","channelId","Utils","getParentId","split","channelObj","socket","getObject","_channelObj$common","deviceId","deviceObj","_deviceObj$common","alert","objects","cIcon","id","startsWith","includes","instance","name","setState","render","_props$enum2","_common$members","_common$members2","textColor","getInvertedColor","themeType","isDragging","Icon","childrenCount","closed","src","ListIcon","toggleEnum","IconCollapsed","IconExpanded","iconDragRef","ref","Card","sx","getStyle","updating","collapsed","showEnumEditDialog","Tooltip","title","placement","popper","pointerEvents","EditIcon","copyEnum","FileCopyIcon","showEnumDeleteDialog","dontDelete","DeleteIcon","CardContent","Typography","gutterBottom","component","onCollapse","getName","pop","idText","desc","_member$common","_member$common2","member","_id","IconState","IconChannel","IconDevice","removeMemberFromEnum","ClearIcon","currentCategory","showEnumTemplateDialog","getEnumTemplate","AddIcon","DownIcon","UpIcon","_props$enum3","_props$enum3$common","canDrop","isOver","drop","useDrop","accept","enumId","_item","monitor","enumItem","_enumItem$common","getItem","data","canMeDrop","collect","widthRef","useRef","dragRef","preview","useDrag","item","_widthRef$current","current","offsetWidth","end","draggedItem","dropResult","getDropResult","moveEnum","parts","handlerId","getHandlerId","useEffect","getEmptyImage","captureDraggingState","categoryData","categoryTitle","lang","en","contentRoot","padding","dialogTitle","borderBottom","dialogActions","borderTop","dialog","iconPreview","colorPicker","margin","justifyContent","flexGrow","idExists","enums","find","canSave","isNew","name2Id","replace","FORBIDDEN_CHARS","changeShortId","short","idArray","join","Dialog","fullWidth","innerWidth","open","onClose","_event","reason","DialogTitle","DialogContent","Grid2","container","spacing","xs","md","newData","TextFieldsIcon","JSON","parse","stringify","LocalOfferIcon","PageviewIcon","DescriptionIcon","IconPicker","onlyDevices","onlyRooms","fileBlob","ImageIcon","customStyles","ColorLensIcon","DialogActions","Button","autoFocus","saveData","startIcon","CheckIcon","customGroupButton","enumTemplateButton","enumTemplateLabel","textAlign","textOverflow","fullHeight","maxHeight","filter","marginBottom","gridTemplateColumns","lineHeight","EnumTemplateDialog","loading","templates","prefix","devices","rooms","promises","async","template","image","im","getSvg","Promise","all","then","maxWidth","toLowerCase","placeholder","LinearProgress","AdminUtils","getText","createEnumTemplate","native","CustomGroup","DialogContentText","deleteEnum","wrapperState","setWrapperState","useState","DragWrapper","objectRef","React","dragProps","_dragProps$item$data$","_dragProps$item$data$2","_dragProps$item$data$3","_dragProps$item$data$4","dragSettings","onDragEnd","obj","addItemToEnum","stylesParent","getSelectIdIconFromObjects","ITEM_IMAGES","Box","ObjectBrowser","types","columns","dragEnabled","setObjectsReference","levelPadding","mainGridCont","childGridCont","flexDirection","gap","childGridContWide","blocksContainer","overflowX","enumTemplateDialog","enumTemplate","toolbarButton","topPanel","topPanel2","searchText","DndPreview","usePreview","enumTemplates","de","ru","pt","nl","fr","it","es","pl","uk","sort","a","b","_enums$a","_enums$a$common","_enums$b","_enums$b$common","aName","bName","ENUM_TEMPLATE","EnumsList","fastUpdate","refFilter","refClearButton","updateTimeout","changeEnums","scrollToItem","searchTimer","findNewUniqueName","Object","values","templateValues","addUpdating","setObject","catch","onObjectChange","oldObj","clearTimeout","setTimeout","updateData","scrollToEnum","getForeignObjects","ids","keys","_enums$id$common","j","buildTree","setCurrentCategory","cb","_localStorage","localStorage","setItem","itemId","push","pos","indexOf","splice","fromId","toId","fromPrefixParts","fromPrefix","toPrefix","newId","delObject","enumEditDialog","newItem","originalItem","enumDeleteDialog","saveEnum","originalId","newEnumChild","index","toString","enumsClosed","changeEnumFormData","enumsCollapsed","splitSizesStr","splitSizes","Array","isArray","enumsTree","search","categoryPopoverOpen","parentId","el","document","getElementById","scrollIntoView","resolve","subscribeObject","componentWillUnmount","unsubscribeObject","currentEnum","idParts","currentContainer","currentParts","currentPart","renderTree","key","level","_container$data","_container$data$commo","nameRx","idRx","posId","substring","_isUniqueName","list","word","onFilterChanged","isClear","_text","renderEditDialog","EnumEditDialog","renderDeleteDialog","EnumDeleteDialog","renderTemplateDialog","enumItems","showFolderIcons","_Fragment","DndProvider","backend","TouchBackend","HTML5Backend","ReactSplit","direction","SplitDirection","Horizontal","initialSizes","minWidths","onResizeFinished","gutterIdx","gutterClassName","favorites","Popover","anchorEl","anchorOrigin","vertical","horizontal","MenuList","MenuItem","Tabs","scrollButtons","newTab","category","_categoryData$common","Tab","borderRadius","CategoryLabel","inputRef","forEach","DragObjectBrowser","TabContainer","TabContent","EnumsMain","webpackAsyncContext","req","__webpack_require__","o","Error","code","module","exports"],"sourceRoot":""}