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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/6938.af058182.chunk.js","mappings":"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C5B,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,SAASwa,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE3a,EAAKya,GAC9B,OAAOlN,QAAQ8I,UAAU5I,MAAK,KAC7B,IAAI1T,EAAI,IAAI6gB,MAAM,uBAAyBH,EAAM,KAEjD,MADA1gB,EAAE8gB,KAAO,mBACH9gB,CAAC,IAIT,IAAIwZ,EAAMvT,EAAIya,GAAM9Y,EAAK4R,EAAI,GAC7B,OAAOmH,EAAoB3gB,EAAEwZ,EAAI,IAAI9F,MAAK,IAClCiN,EAAoBjhB,EAAEkI,EAAI,KAEnC,CACA6Y,EAAoBhH,KAAO,IAAOd,OAAOc,KAAKxT,GAC9Cwa,EAAoB7Y,GAAK,MACzBmZ,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, { type JSX } from 'react';\n\nimport { TextField, FormControl, InputAdornment, IconButton } 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): JSX.Element {\n const IconCustom = props.icon;\n\n return (\n <div style={props.styles.formContainer}>\n {IconCustom ? <IconCustom style={props.styles.formIcon} /> : null}\n <FormControl\n style={props.styles.formControl}\n variant=\"standard\"\n >\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 ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </div>\n );\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): JSX.Element {\n const IconCustom = props.icon;\n\n return (\n <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}\n\nexport { IOColorPicker };\n","import React, { useEffect, useRef, Component, type JSX } from 'react';\nimport { type ConnectDragSource, type DragSourceMonitor, useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport type { DropTargetMonitor } from 'react-dnd/src/types';\n\nimport { IconButton, Typography, Card, CardContent, Tooltip } 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 { FaRegFolder as IconCollapsed, FaRegFolderOpen as IconExpanded } from 'react-icons/fa';\n\nimport {\n Utils,\n Icon,\n IconChannel,\n IconDevice,\n IconState,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { isTouchDevice } from '@/helpers/utils';\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\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?: JSX.Element[];\n idText?: 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\n async componentDidMount(): Promise<void> {\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 (\n deviceObj &&\n (deviceObj.type === 'channel' || deviceObj.type === 'device')\n ) {\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(): JSX.Element {\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 ) : (\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\n icon = props.childrenCount ? (\n <div\n style={styles.folderDiv}\n onClick={() => props.toggleEnum(props.id)}\n >\n {props.closed\n ? [\n <IconCollapsed\n style={styles.folder}\n key={1}\n />,\n <div key={2}>{icon}</div>,\n ]\n : [\n <IconExpanded\n style={styles.folder}\n key={1}\n />,\n <div key={2}>{icon}</div>,\n ]}\n </div>\n ) : (\n icon\n );\n\n if (this.props.iconDragRef) {\n icon = <span ref={this.props.iconDragRef}>{icon}</span>;\n }\n\n return (\n <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 ? (\n <IconButton\n size=\"small\"\n onClick={() => props.showEnumEditDialog(props.enum, false)}\n >\n <Tooltip\n title={props.t('Edit')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <EditIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n ) : null}\n {props.enum ? (\n <IconButton\n size=\"small\"\n onClick={() => props.copyEnum(props.id)}\n >\n <Tooltip\n title={props.t('Clone')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FileCopyIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n ) : null}\n <IconButton\n size=\"small\"\n onClick={() => props.showEnumDeleteDialog(props.enum)}\n disabled={common?.dontDelete}\n >\n <Tooltip\n title={props.t('Delete')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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}>{props.idText || props.id}</span>\n {common?.desc ? <div style={styles.enumName}>{props.getName(common.desc)}</div> : null}\n </div>\n </Typography>\n <div>\n {!props.collapsed && common?.members ? (\n 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 (\n <Card\n key={member._id}\n title={\n name ? `${props.t('Name: %s', name)}\\nID: ${member._id}` : member._id\n }\n variant=\"outlined\"\n sx={styles.enumGroupMember}\n style={{ color: textColor, borderColor: `${textColor}80` }}\n >\n {this.state.icons[i] ? (\n <Icon\n style={styles.icon}\n src={this.state.icons[i]}\n />\n ) : member.type === 'state' ? (\n <IconState style={styles.icon} />\n ) : member.type === 'channel' ? (\n <IconChannel style={styles.icon} />\n ) : member.type === 'device' ? (\n <IconDevice style={styles.icon} />\n ) : (\n <ListIcon style={styles.icon} />\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\n title={props.t('Remove')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <ClearIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n </Card>\n );\n })\n ) : common?.members?.length ? (\n <div\n style={{\n ...styles.membersNumber,\n ...(props.childrenCount ? styles.memberNumberFolder : undefined),\n }}\n >\n {common?.members?.length}\n </div>\n ) : (\n ''\n )}\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\n title={props.t('Add child')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <AddIcon style={{ color: textColor }} />\n </Tooltip>\n </IconButton>\n <IconButton\n size=\"small\"\n onClick={() => props.onCollapse(props.id)}\n >\n <Tooltip\n title={props.collapsed ? props.t('Show members') : props.t('Hide members')}\n placement=\"top\"\n >\n {props.collapsed ? (\n <DownIcon style={{ color: textColor }} />\n ) : (\n <UpIcon style={{ color: textColor }} />\n )}\n </Tooltip>\n </IconButton>\n </div>\n </Card>\n );\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?: JSX.Element[];\n members: Record<string, ioBroker.Object>;\n name?: 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): boolean {\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): JSX.Element => {\n const [{ canDrop, isOver }, drop] = useDrop(\n () => ({\n accept: ['object', 'enum'],\n drop: () => ({ enumId: props.id }),\n canDrop: (_item, monitor: DropTargetMonitor<DragItem, { enumId: string }>) =>\n canMeDrop(monitor, props.enum),\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n }),\n [props.enum?.common?.members],\n );\n\n const widthRef = useRef(null);\n\n const [{ isDragging }, dragRef, preview] = useDrag({\n type: 'enum',\n item: () => ({\n enumId: props.id,\n preview: (\n <div\n style={{\n width: widthRef.current?.offsetWidth || 50,\n }}\n >\n <EnumBlock {...props} />\n </div>\n ),\n }),\n\n end: (\n draggedItem: { enumId: string; preview: JSX.Element },\n monitor: DragSourceMonitor<DragItem, { enumId: string }>,\n ) => {\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 }, [preview]);\n\n if (!props.enum) {\n return (\n <EnumBlock\n isDragging={isDragging}\n {...props}\n />\n );\n }\n\n return isTouchDevice() ? (\n <div\n ref={drop}\n style={{ opacity: canDrop && isOver ? 0.5 : 1 }}\n >\n <div ref={widthRef}>\n <EnumBlock\n isDragging={isDragging}\n iconDragRef={dragRef}\n {...props}\n />\n </div>\n </div>\n ) : (\n <div\n ref={drop}\n style={{ opacity: canDrop && isOver ? 0.5 : 1 }}\n >\n <div ref={dragRef}>\n <div ref={widthRef}>\n <EnumBlock\n isDragging={isDragging}\n {...props}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default EnumBlockDrag;\n","import React, { type JSX } from 'react';\nimport { useDrop } from 'react-dnd';\n\nimport { Tooltip, IconButton } from '@mui/material';\n\nimport { Edit as EditIcon, Delete as DeleteIcon } from '@mui/icons-material';\n\nimport { Icon, type ThemeType, type Translate, Utils } 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): JSX.Element => {\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 (\n <span\n ref={drop}\n style={{ ...props.styles.categoryTitle, color: textColor }}\n >\n {props.categoryData.common.icon ? (\n <Icon\n style={props.styles.icon}\n src={props.categoryData.common.icon}\n />\n ) : null}\n {typeof props.categoryData.common.name === 'string'\n ? props.categoryData.common.name\n : props.categoryData.common.name[props.lang] || props.categoryData.common.name.en}\n <IconButton\n size=\"small\"\n style={{ color: textColor }}\n onClick={() => {\n props.showEnumEditDialog(props.categoryData, false);\n }}\n >\n <Tooltip\n title={props.t('Edit')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <EditIcon />\n </Tooltip>\n </IconButton>\n {props.categoryData.common.dontDelete ? null : (\n <IconButton\n size=\"small\"\n style={{ color: textColor }}\n onClick={() => props.showEnumDeleteDialog(props.categoryData)}\n >\n <Tooltip\n title={props.t('Delete')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <DeleteIcon />\n </Tooltip>\n </IconButton>\n )}\n </span>\n );\n};\n\nexport default CategoryLabel;\n","import React, { type JSX } from 'react';\n\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Grid2, Button } 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 iconPreview: {\n height: 32,\n width: 32,\n },\n colorPicker: {},\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): JSX.Element {\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): string => _id.split('.').pop();\n\n const name2Id = (name: string): string =>\n name\n .replace(Utils.FORBIDDEN_CHARS, '_')\n .replace(/\\s/g, '_')\n .replace(/\\./g, '_')\n .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): string => {\n const idArray = _id.split('.');\n idArray[idArray.length - 1] = short;\n return idArray.join('.');\n };\n\n return (\n <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 }}>{props.t('Enum parameters')}</DialogTitle>\n <DialogContent sx={{ '&.MuiDialogContent-root': styles.contentRoot }}>\n <Grid2\n container\n spacing={2}\n style={styles.dialog}\n >\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}\n\nexport default EnumEditDialog;\n","import React, { Component, type JSX } 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 { Clear as ClearIcon, Brush as CustomGroup, Close as CloseIcon } 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 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(): void {\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 void Promise.all(promises).then(() => this.setState({ icons, loading: false }));\n });\n }\n\n render(): JSX.Element {\n const templates = this.props.prefix.startsWith('enum.functions') ? devices : rooms;\n\n return (\n <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(\n this.props.prefix.startsWith('enum.functions') ? 'Create new function' : 'Create new room',\n )}\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 ? (\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ filter: '' })}\n >\n <ClearIcon />\n </IconButton>\n ) : 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 }\n if (!this.state.filter || name.toLowerCase().includes(this.state.filter)) {\n return (\n <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={\n <Icon\n src={this.state.icons[i]}\n style={styles.icon}\n />\n }\n >\n <span style={styles.enumTemplateLabel}>\n {AdminUtils.getText(template.name, this.props.lang) || template._id}\n </span>\n </Button>\n );\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'\n ? this.props.t('Custom room')\n : this.props.prefix === 'enum.functions'\n ? this.props.t('Custom function')\n : 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}\n\nexport default EnumTemplateDialog;\n","import React, { type JSX } from 'react';\n\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\n\nimport { Delete as DeleteIcon, Close as CloseIcon } 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): JSX.Element {\n return (\n <Dialog\n open={!0}\n onClose={props.onClose}\n >\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}\n\nexport default EnumDeleteDialog;\n","import React, { useEffect, useState, type JSX } 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 { type AdminConnection, Icon, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nimport ObjectBrowser, {\n type TreeItemData,\n type TreeItem,\n getSelectIdIconFromObjects,\n ITEM_IMAGES,\n} from '../ObjectBrowser';\n\nexport interface DragItem {\n data: TreeItemData;\n children: DragItem[];\n // preview: JSX.Element | null;\n}\n\ninterface DragWrapperProps {\n item: TreeItem;\n style: React.CSSProperties;\n children: 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: 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): JSX.Element => {\n const [wrapperState, setWrapperState] = useState({ DragWrapper: null });\n const objectRef = React.useRef<Record<string, ioBroker.Object> | null>(null);\n\n useEffect(() => {\n const DragWrapper = (dragProps: DragWrapperProps): JSX.Element => {\n const onDragEnd = (item: TreeItem, monitor: DragSourceMonitor<TreeItem, { enumId: string }>): void => {\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:\n dragProps.item.data && dragProps.item.data.obj ? (\n <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={\n objectRef.current\n ? getSelectIdIconFromObjects(\n objectRef.current,\n dragProps.item.data.obj._id,\n props.lang,\n )\n : dragProps.item.data.obj.common.icon\n }\n />\n ) : (\n ITEM_IMAGES[dragProps.item.data.obj.type] || (\n <ListIcon style={props.stylesParent.icon} />\n )\n )}\n <div>\n <div>\n {dragProps.item.data.obj.common?.name\n ? props.getName(dragProps.item.data.obj.common?.name)\n : dragProps.item.data.obj._id}\n </div>\n {dragProps.item.data.obj.common?.name ? (\n <div style={{ fontStyle: 'italic', fontSize: 'smaller', opacity: 0.7 }}>\n {dragProps.item.data.obj._id}\n </div>\n ) : null}\n </div>\n </Card>\n ) : 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 }, [preview]);\n\n return (\n <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 };\n setWrapperState({ DragWrapper });\n // eslint-disable-next-line\n }, [props.stylesParent, props.addItemToEnum, props.getName]); // react-hooks/exhaustive-deps\n\n return wrapperState ? (\n <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 />\n ) : null;\n};\n\nexport default DragObjectBrowser;\n","import React, { Component, type JSX } 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 { Tooltip, LinearProgress, Tabs, Tab, TextField, Popover, MenuItem, MenuList, IconButton } 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 { type AdminConnection, type IobTheme, type ThemeType, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { isTouchDevice } from '@/helpers/utils';\nimport EnumBlock 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 = (): JSX.Element | null => {\n const preview = usePreview<JSX.Element>();\n const display = preview.display;\n\n // TODO: How to fix this?\n const { item, style } = preview as unknown as { item: { preview: 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 EnumEditDialogProps {\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: EnumEditDialogProps | 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')\n ? JSON.parse(localStorage.getItem('enumsCollapsed'))\n : [];\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(\n prefix,\n Object.values(this.state.enums),\n this.props.t('Enum'),\n );\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): void => {\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(): Promise<void> {\n await this.updateData();\n await this.props.socket.subscribeObject('enum.*', this.onObjectChange);\n }\n\n componentWillUnmount(): void {\n void 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): void => {\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 (\n (this.changeEnums && this.changeEnums[id]) ||\n (!this.changeEnums && this.state.enums && this.state.enums[id])\n ) {\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 () => {\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 },\n this.fastUpdate ? 0 : 200,\n );\n\n this.fastUpdate = false;\n }\n };\n\n updateData = async (enums?: Record<string, ioBroker.EnumObject>): Promise<void> => {\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: [] }, () => this.buildTree(enums));\n };\n\n buildTree(enums: Record<string, ioBroker.EnumObject>): void {\n const enumsTree: TreeItem = {\n data: null,\n children: {},\n id: '',\n };\n\n const ids = Object.keys(enums).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 && 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): 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): void => {\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).catch(e => window.alert(`Cannot set enum: ${e}`));\n }\n };\n\n removeMemberFromEnum = (memberId: string, enumId: string): void => {\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\n .setObject(enumItem._id, enumItem)\n .catch((e: string) => window.alert(`Cannot update enum: ${e}`));\n }\n };\n\n moveEnum = async (fromId: string, toId: string): Promise<void> => {\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): JSX.Element | null {\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: JSX.Element[] | null;\n let idRx: 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 ? [\n <span key=\"0\">{name.substring(0, pos)}</span>,\n <span\n key=\"1\"\n style={styles.searchText}\n >\n {name.substring(pos, pos + this.state.search.length)}\n </span>,\n <span key=\"2\">{name.substring(pos + this.state.search.length)}</span>,\n ]\n : null;\n }\n if (posId !== -1) {\n idRx = name\n ? [\n <span key=\"0\">{idText.substring(0, posId)}</span>,\n <span\n key=\"1\"\n style={styles.searchText}\n >\n {idText.substring(posId, posId + this.state.search.length)}\n </span>,\n <span key=\"2\">{idText.substring(posId + this.state.search.length)}</span>,\n ]\n : null;\n }\n }\n\n return (\n <div\n style={{ paddingLeft: level ? 32 : 0 }}\n key={container.id || key}\n >\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(\n 'enumsCollapsed',\n JSON.stringify(enumsCollapsed),\n );\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) => (\n <React.Fragment key={index}>\n {this.renderTree(container.children[id], index, level + 1)}\n </React.Fragment>\n ))\n : null}\n </div>\n );\n }\n\n showEnumEditDialog = (enumItem: ioBroker.EnumObject, isNew: boolean): void => {\n const enumEditDialog: EnumEditDialogProps = { 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): void => this.setState({ enumTemplateDialog: prefix });\n\n showEnumDeleteDialog = (enumItem: ioBroker.EnumObject): void => this.setState({ enumDeleteDialog: enumItem });\n\n saveEnum = async (): Promise<void> => {\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): Promise<void> => {\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): void => {\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).catch(e => window.alert(`Cannot delete enum: ${e}`));\n };\n\n toggleEnum = (enumId: string): void => {\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): void => {\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) !==\n 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): boolean {\n return !list.find(item => item._id === `${prefix}.${word.toLowerCase()}_${i}`);\n }\n\n static findNewUniqueName(prefix: string, list: ioBroker.EnumObject[], word: string): { _id: string; name: 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(\n _text => {\n this.searchTimer = null;\n this.setState({ search: _text.toLowerCase() });\n },\n isClear ? 0 : 300,\n filter,\n );\n }\n\n renderEditDialog(): JSX.Element | null {\n return this.state.enumEditDialog ? (\n <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 />\n ) : null;\n }\n\n renderDeleteDialog(): JSX.Element | null {\n return this.state.enumDeleteDialog ? (\n <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 />\n ) : null;\n }\n\n renderTemplateDialog(): JSX.Element | null {\n // eslint-disable-next-line no-extra-boolean-cast\n return !!this.state.enumTemplateDialog ? (\n <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 />\n ) : null;\n }\n\n render(): JSX.Element {\n if (!this.state.enumsTree) {\n return <LinearProgress />;\n }\n const enumItems = Object.values(\n this.state.enumsTree.children.enum.children[this.state.currentCategory].children,\n );\n const showFolderIcons = !!enumItems.find(item => item.children && Object.keys(item.children).length);\n\n return (\n <>\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 });\n ((window as any)._localStorage || window.localStorage).setItem(\n 'enumsSplitSizes',\n JSON.stringify(splitSizes),\n );\n }}\n // theme={this.props.themeType === 'dark' ? GutterTheme.Dark : GutterTheme.Light}\n gutterClassName={this.props.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\n >\n <div\n style={{\n ...styles.childGridCont,\n ...(this.state.innerWidth > 600 ? styles.childGridContWide : undefined),\n }}\n >\n <div style={styles.topPanel}>\n <Tooltip\n title={this.props.t('Add enum')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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 : this.setState({ categoryPopoverOpen: true })\n }\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\n onClick={() => this.createEnumTemplate('enum', enumTemplates.favorites)}\n >\n {this.props.t('Favorites')}\n </MenuItem>\n )}\n <MenuItem\n onClick={() => this.showEnumEditDialog(this.getEnumTemplate('enum'), true)}\n >\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\n .split('.')\n .pop(),\n },\n type: 'enum',\n native: {},\n };\n return (\n <Tab\n key={index}\n component=\"span\"\n style={{\n backgroundColor: categoryData.common?.color || undefined,\n borderRadius: 4,\n }}\n label={\n <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 }\n value={category}\n />\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: (\n <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 }}\n onChange={e => this.onFilterChanged(e.target.value)}\n />\n <Tooltip\n title={this.props.t('Narrow all')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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(\n 'enumsCollapsed',\n JSON.stringify(enumsCollapsed),\n );\n }}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n <Tooltip\n title={this.props.t('Wide all')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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(\n 'enumsCollapsed',\n '[]',\n );\n }}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n {showFolderIcons && (\n <Tooltip\n title={this.props.t('Collapse all')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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(\n 'enumsClosed',\n JSON.stringify(enumsClosed),\n );\n }}\n >\n <IconCollapsed />\n </IconButton>\n </Tooltip>\n )}\n {showFolderIcons && (\n <Tooltip\n title={this.props.t('Expand all')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\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(\n 'enumsClosed',\n JSON.stringify(enumsClosed),\n );\n }}\n >\n <IconExpanded />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={this.props.t('Add group')}\n placement=\"top\"\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n size=\"large\"\n // size=\"small\"\n onClick={() => {\n if (['functions', 'rooms'].includes(this.state.currentCategory)) {\n this.setState({\n enumTemplateDialog: `enum.${this.state.currentCategory}`,\n });\n } else {\n this.showEnumEditDialog(\n this.getEnumTemplate(`enum.${this.state.currentCategory}`),\n true,\n );\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\n style={{\n ...styles.childGridCont,\n ...(this.state.innerWidth > 600 ? styles.childGridContWide : undefined),\n }}\n >\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}\n\nexport default EnumsList;\n","import React, { type JSX } from 'react';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n TabContainer,\n 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): JSX.Element {\n return (\n <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}\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","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","window","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","isTouchDevice","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":""}