{"version":3,"file":"static/js/main-11db8724.d99e5706.js","mappings":"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","sources":["Components/Node/frameNode/FrameBackgroundToolbar.js","Components/Node/frameNode/FrameBorderToolbar.js","Components/Node/frameNode/FrameMoreMenus.js","Components/Node/frameNode/FrameTypesPopup.js","Components/Node/frameNode/FrameToolbar.js"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { Box, Popover, Stack, Typography } from \"@mui/material\";\r\nimport { AlphaPicker } from \"react-color\";\r\nimport {\r\n IcCloseThin,\r\n IcPlusCircleOutlined,\r\n} from \"../../../assets/icon-components\";\r\nimport ColorPicker from \"react-best-gradient-color-picker\";\r\nimport { useReactFlow } from \"reactflow\";\r\nimport {\r\n convertToRgba,\r\n parseRGBColor,\r\n parseRGBColorConverter,\r\n toRgba,\r\n updateJson,\r\n} from \"../../../CommanFunctions/commanFunctions\";\r\nimport { useLocation, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useUndoRedo } from \"../../DrawBoard/dndUndoRedo/UndoRedoProvider\";\r\nimport { debounce } from \"lodash\";\r\nimport IcHighlightCircleTransparent from \"../../../assets/icon-components/IcHighlightCircleTransparent\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\n\r\nconst getColorString = ({ r, g, b, a = 1 }) => `rgba(${r}, ${g}, ${b}, ${a})`;\r\n\r\nconst FrameBackgroundToolbar = ({\r\n node,\r\n colorTitle = \"Pen Color\",\r\n isEdge = false,\r\n edge,\r\n}) => {\r\n const opacity = parseRGBColor(\r\n convertToRgba(node?.data?.style?.background, 1)\r\n );\r\n const { setNodes, getNodes, setEdges } = useReactFlow();\r\n const [selectedColor, setSelectedColor] = useState({\r\n rgb: null,\r\n r: opacity.r,\r\n g: opacity.g,\r\n b: opacity.b,\r\n a: 1,\r\n });\r\n const transparentColorss = borderTransparentColors[0];\r\n const [allCustomColors, setAllCustomColors] = useState([]);\r\n const [activeDot, setActiveDot] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [customColor, setCustomColor] = useState(null);\r\n const [editCustomColor, setEditCustomColor] = useState(false);\r\n const [colorsCustom, setColorsCustom] = useState(false);\r\n const location = useLocation();\r\n const { id } = useParams();\r\n const dispatch = useDispatch();\r\n const { undo, takeSnapshot } = useUndoRedo();\r\n const colorPickerContainerRef = useRef(null);\r\n const user_data = localStorage.getItem(\"user_data\");\r\n\r\n const debouncedUpdateJson = useCallback(\r\n debounce((updatedNodes) => {\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n ...(isEdge ? { edges: updatedNodes } : { nodes: updatedNodes }),\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n }, 250),\r\n [updateJson, user_data, dispatch, undo]\r\n );\r\n\r\n const updateNodeBackground = (node, selectedColor, setNodes) => {\r\n const newColor = getColorString(selectedColor);\r\n\r\n let updatedNodes = getNodes();\r\n let updatedNode = [];\r\n if (isEdge) {\r\n setEdges((edges) => {\r\n updatedNodes = edges?.map((val) => {\r\n if (val?.id === node?.id) {\r\n return {\r\n ...val,\r\n style: {\r\n ...(val.style || {}),\r\n stroke: newColor,\r\n },\r\n };\r\n } else {\r\n return val;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n } else {\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n style: {\r\n ...nd?.style,\r\n background: \"transparent\",\r\n },\r\n data: {\r\n ...nd.data,\r\n style: { ...nd.data.style, background: newColor },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n }\r\n debouncedUpdateJson(updatedNodes);\r\n };\r\n\r\n const initializeSelectedColor = (background, setSelectedColor) => {\r\n const {\r\n r,\r\n g,\r\n b,\r\n a = 1,\r\n } = background\r\n ? parseRGBColorConverter(background)\r\n : { r: 255, g: 255, b: 255, a: 1 };\r\n setSelectedColor({ r, g, b, a, rgb: getColorString({ r, g, b, a }) });\r\n };\r\n\r\n useEffect(() => {\r\n if (selectedColor.rgb !== null) {\r\n if (isEdge) {\r\n if (node?.style?.stroke !== getColorString(selectedColor)) {\r\n updateNodeBackground(node, selectedColor, setNodes);\r\n }\r\n } else {\r\n setActiveDot(false);\r\n if (node?.data?.style?.background !== getColorString(selectedColor)) {\r\n if (activeDot) {\r\n updateNodeBackground(node, selectedColor, setNodes);\r\n }\r\n }\r\n }\r\n } else {\r\n if (isEdge) {\r\n if (selectedColor?.rgb) {\r\n initializeSelectedColor(edge?.style?.stroke, setSelectedColor);\r\n }\r\n } else {\r\n node.data?.style?.background &&\r\n initializeSelectedColor(node.data.style.background, setSelectedColor);\r\n }\r\n }\r\n }, [node, selectedColor, setNodes]);\r\n\r\n const open = Boolean(anchorEl);\r\n const popoverId = open ? \"simple-popover\" : undefined;\r\n\r\n const handleChangeColorPicker = (value) => {\r\n setCustomColor(value);\r\n if (!colorsCustom) {\r\n const { r, g, b } = parseRGBColor(value);\r\n\r\n let updatedNodes = getNodes();\r\n let updatedNode = [];\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n style: {\r\n ...nd?.style,\r\n background: \"transparent\",\r\n },\r\n data: {\r\n ...nd.data,\r\n style: { ...nd.data.style, background: value },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n setAllCustomColors((prev) => {\r\n const updatedColors = [\r\n ...prev,\r\n {\r\n rgb: value,\r\n r,\r\n g,\r\n b,\r\n a: 1,\r\n },\r\n ];\r\n localStorage.setItem(\"customColors\", JSON.stringify(updatedColors));\r\n\r\n return updatedColors;\r\n });\r\n debouncedUpdateJson(updatedNodes);\r\n } else {\r\n const { r, g, b } = parseRGBColor(value);\r\n let updatedNodes = getNodes();\r\n let updatedNode = [];\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n style: {\r\n ...nd?.style,\r\n background: \"transparent\",\r\n },\r\n data: {\r\n ...nd.data,\r\n style: { ...nd.data.style, background: value },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n debouncedUpdateJson(updatedNodes);\r\n setAllCustomColors((prev) => {\r\n const updatedColors = [\r\n ...prev.slice(0, prev.length - 1),\r\n {\r\n rgb: value,\r\n r,\r\n g,\r\n b,\r\n a: 1,\r\n },\r\n ];\r\n localStorage.setItem(\"customColors\", JSON.stringify(updatedColors));\r\n\r\n return updatedColors;\r\n });\r\n }\r\n setColorsCustom(true);\r\n };\r\n\r\n useEffect(() => {\r\n const localCustomColors = localStorage.getItem(\"customColors\");\r\n\r\n if (localCustomColors && localCustomColors !== null) {\r\n const parsedCustomColors = JSON.parse(localCustomColors);\r\n setAllCustomColors(parsedCustomColors);\r\n }\r\n }, []);\r\n\r\n const handleClose = (e) => {\r\n e.stopPropagation();\r\n setAnchorEl(null);\r\n setColorsCustom(false);\r\n };\r\n\r\n const handleClick = (event) => {\r\n event?.stopPropagation();\r\n setCustomColor(selectedColor.rgb);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const colorPickerAnchorPosition = useMemo(() => {\r\n if (anchorEl && colorPickerContainerRef.current) {\r\n const rect = colorPickerContainerRef.current.getBoundingClientRect();\r\n return { top: rect.top + 30, left: rect.left + rect.width };\r\n }\r\n }, [anchorEl]);\r\n\r\n return (\r\n <>\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n {/* {((node?.type !== \"resizable\" && node?.type !== \"shape\") ||\r\n node?.data?.provider !== \"shapes\") && ( */}\r\n <>\r\n \r\n \r\n Opacity\r\n \r\n \r\n {Math.round(selectedColor.a * 100)}%\r\n \r\n \r\n div\": {\r\n \"& > div:nth-of-type(1), & > div:nth-of-type(2)\": {\r\n borderRadius: \"100px !important\",\r\n overflow: \"hidden\",\r\n },\r\n\r\n \"& div:nth-of-type(3) div div\": {\r\n width: \"11px !important\",\r\n height: \"11px !important\",\r\n transform: \"translate(-6px, 0px) !important\",\r\n border: \"2px solid #FFFFFF !important\",\r\n boxShadow: \"0px 0px 5.7px 0px #28282859 !important\",\r\n background: \"transparent !important\",\r\n },\r\n },\r\n }}\r\n >\r\n {\r\n setSelectedColor({\r\n ...selectedColor,\r\n a: value.rgb.a,\r\n });\r\n setActiveDot(true);\r\n }}\r\n />\r\n \r\n \r\n {/* )} */}\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n {colorTitle}\r\n \r\n \r\n \r\n {node?.type === \"simpleText\" &&\r\n borderTransparentColors.map((color, i) => {\r\n return (\r\n {\r\n setSelectedColor(transparentColorss);\r\n setActiveDot(true);\r\n }}\r\n >\r\n \r\n \r\n );\r\n })}\r\n {borderColors.map((color, i) => {\r\n return (\r\n {\r\n if (node?.type === \"frame\") {\r\n const updatedData = getNodes().map((node) => {\r\n return {\r\n ...node,\r\n data: {\r\n ...node.data,\r\n defaultColor: true,\r\n },\r\n };\r\n });\r\n setNodes(updatedData);\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedData,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n }\r\n setSelectedColor(color);\r\n setActiveDot(true);\r\n }}\r\n >\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n Custom Color\r\n \r\n {(allCustomColors.length > 0 || editCustomColor) &&\r\n (editCustomColor ? (\r\n setEditCustomColor(false)}\r\n >\r\n Done\r\n \r\n ) : (\r\n setEditCustomColor(true)}\r\n >\r\n Edit\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* CUSTOM COLOR LIVE CHANGE SHOW*/}\r\n {/* {customColor && (\r\n \r\n \r\n \r\n )} */}\r\n\r\n {allCustomColors.map((color, i) => {\r\n return (\r\n {\r\n setSelectedColor(color);\r\n setActiveDot(true);\r\n }}\r\n >\r\n {editCustomColor && (\r\n {\r\n e.stopPropagation();\r\n setAllCustomColors((prev) => {\r\n const updatedColors = prev.filter(\r\n (_, ci) => ci !== i\r\n );\r\n\r\n localStorage.setItem(\r\n \"customColors\",\r\n JSON.stringify(updatedColors)\r\n );\r\n\r\n return updatedColors;\r\n });\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {\r\n setSelectedColor(color.rgb);\r\n setActiveDot(true);\r\n }}\r\n sx={{\r\n background: color.rgb,\r\n width: \"19px\",\r\n height: \"19px\",\r\n borderRadius: \"50%\",\r\n border: \"1px solid rgba(142, 152, 171, 0.3)\",\r\n position: \"absolute\",\r\n left: \"50%\",\r\n top: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n {\r\n // setCustomColor(value);\r\n // }}\r\n onChange={handleChangeColorPicker}\r\n hideOpacity\r\n hideGradientStop={true}\r\n hideAdvancedSliders={true}\r\n hideColorGuide={true}\r\n hideColorTypeBtns={true}\r\n hideControls={true}\r\n hidePresets={true}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FrameBackgroundToolbar;\r\n\r\nconst borderTransparentColors = [\r\n {\r\n rgb: \"rgba(0, 0, 0, 0)\",\r\n r: 0,\r\n g: 0,\r\n b: 0,\r\n a: 0,\r\n },\r\n];\r\n\r\nconst borderColors = [\r\n {\r\n rgb: \"rgba(255, 255, 255, 1)\",\r\n r: 255,\r\n g: 255,\r\n b: 255,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(142, 152, 171, 1)\",\r\n r: 142,\r\n g: 152,\r\n b: 171,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(3, 11, 22, 1)\",\r\n r: 3,\r\n g: 11,\r\n b: 22,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(65, 215, 251, 1)\",\r\n r: 65,\r\n g: 215,\r\n b: 251,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(183, 136, 114, 1)\",\r\n r: 183,\r\n g: 136,\r\n b: 114,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(255, 205, 153, 1)\",\r\n r: 255,\r\n g: 205,\r\n b: 153,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(245, 220, 78, 1)\",\r\n r: 245,\r\n g: 220,\r\n b: 78,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(85, 243, 188, 1)\",\r\n r: 85,\r\n g: 243,\r\n b: 188,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(173, 220, 255, 1)\",\r\n r: 173,\r\n g: 220,\r\n b: 255,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(248, 196, 237, 1)\",\r\n r: 248,\r\n g: 196,\r\n b: 237,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(236, 72, 153, 1)\",\r\n r: 236,\r\n g: 72,\r\n b: 153,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(244, 63, 94, 1)\",\r\n r: 244,\r\n g: 63,\r\n b: 94,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(139, 92, 246, 1)\",\r\n r: 139,\r\n g: 92,\r\n b: 246,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(0, 150, 242, 1)\",\r\n r: 0,\r\n g: 150,\r\n b: 242,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(246, 154, 24, 1)\",\r\n r: 246,\r\n g: 154,\r\n b: 24,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(249, 115, 22, 1)\",\r\n r: 249,\r\n g: 115,\r\n b: 22,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(250, 204, 21, 1)\",\r\n r: 250,\r\n g: 204,\r\n b: 21,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(16, 185, 129, 1)\",\r\n r: 16,\r\n g: 185,\r\n b: 129,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(14, 165, 233, 1)\",\r\n r: 14,\r\n g: 165,\r\n b: 233,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(238, 73, 214, 1)\",\r\n r: 238,\r\n g: 73,\r\n b: 214,\r\n a: 1,\r\n },\r\n];\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Box, Popover, Slider, Stack, Typography } from \"@mui/material\";\r\nimport { AlphaPicker } from \"react-color\";\r\nimport {\r\n IcCloseThin,\r\n IcDashedBorder,\r\n IcDottedBorder,\r\n IcPlusCircleOutlined,\r\n IcSolidBorder,\r\n} from \"../../../assets/icon-components\";\r\nimport ColorPicker from \"react-best-gradient-color-picker\";\r\nimport CustomSwitch from \"../../../common-components/CustomSwitch\";\r\nimport { useReactFlow } from \"reactflow\";\r\nimport { useLocation, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport {\r\n parseRGBColor,\r\n toRgba,\r\n updateJson,\r\n} from \"../../../CommanFunctions/commanFunctions\";\r\nimport { useUndoRedo } from \"../../DrawBoard/dndUndoRedo/UndoRedoProvider\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\n\r\nconst getColorString = ({ r, g, b, a = 1 }) => `rgba(${r}, ${g}, ${b}, ${a})`;\r\n\r\nconst FrameBorderToolbar = ({ node }) => {\r\n const { setNodes, getNodes } = useReactFlow();\r\n const [selectedColor, setSelectedColor] = useState({\r\n rgb: \"rgba(3, 11, 22, 1)\",\r\n r: 3,\r\n g: 11,\r\n b: 22,\r\n a: 1,\r\n });\r\n const [allCustomColors, setAllCustomColors] = useState([]);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [customColor, setCustomColor] = useState(null);\r\n const [editCustomColor, setEditCustomColor] = useState(false);\r\n const location = useLocation();\r\n const { id } = useParams();\r\n const dispatch = useDispatch();\r\n const { undo, takeSnapshot } = useUndoRedo();\r\n const user_data = localStorage.getItem(\"user_data\");\r\n\r\n const open = Boolean(anchorEl);\r\n const popoverId = open ? \"simple-popover\" : undefined;\r\n\r\n useMemo(() => {\r\n if (!open && customColor !== null) {\r\n const { r, g, b } = parseRGBColor(customColor);\r\n setAllCustomColors((prev) => {\r\n const updatedColors = [\r\n {\r\n rgb: customColor,\r\n r,\r\n g,\r\n b,\r\n a: 1,\r\n },\r\n ...prev,\r\n ];\r\n\r\n localStorage.setItem(\"customColors\", JSON.stringify(updatedColors));\r\n\r\n return updatedColors;\r\n });\r\n setCustomColor(null);\r\n }\r\n }, [customColor, open]);\r\n\r\n useEffect(() => {\r\n const localCustomColors = localStorage.getItem(\"customColors\");\r\n\r\n if (localCustomColors && localCustomColors !== null) {\r\n const parsedCustomColors = JSON.parse(localCustomColors);\r\n setAllCustomColors(parsedCustomColors);\r\n }\r\n }, []);\r\n\r\n const updateNodeBorderColor = (node, selectedColor) => {\r\n const newColor = getColorString(selectedColor);\r\n const { a } = selectedColor;\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n border: {\r\n ...nd.data.border,\r\n borderColor: newColor,\r\n opacity: a,\r\n },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const updateNodeBorderThickness = (node, thickness) => {\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n border: {\r\n ...nd.data?.border,\r\n width: thickness,\r\n },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const updateNodeBorderStyle = (node, style) => {\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n border: {\r\n ...nd.data?.border,\r\n type: style,\r\n },\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (\r\n node.data?.showBorder &&\r\n selectedColor.rgb !== node?.data?.border?.borderColor\r\n ) {\r\n const { r, g, b, a } = parseRGBColor(node?.data?.border?.borderColor);\r\n setSelectedColor({\r\n rgb: node?.data?.border?.borderColor,\r\n r,\r\n g,\r\n b,\r\n a: a || 1,\r\n });\r\n }\r\n }, [node, selectedColor]);\r\n\r\n // useEffect(() => {\r\n // if (selectedColor.rgb !== null) {\r\n // if (node.data.style.background !== getColorString(selectedColor)) {\r\n // updateNodeBorderColor(node, selectedColor, setNodes);\r\n // }\r\n // }\r\n // }, [node, selectedColor, setNodes]);\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const CustomColorPopover = useMemo(() => {\r\n return (\r\n \r\n \r\n {\r\n setCustomColor(value);\r\n }}\r\n hideOpacity\r\n hideGradientStop={true}\r\n hideAdvancedSliders={true}\r\n hideColorGuide={true}\r\n hideColorTypeBtns={true}\r\n hideControls={true}\r\n hidePresets={true}\r\n />\r\n \r\n \r\n );\r\n }, [anchorEl, open, popoverId]);\r\n\r\n const borderColors = [\r\n {\r\n rgb: \"rgba(255, 255, 255, 1)\",\r\n r: 255,\r\n g: 255,\r\n b: 255,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(142, 152, 171, 1)\",\r\n r: 142,\r\n g: 152,\r\n b: 171,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(3, 11, 22, 1)\",\r\n r: 3,\r\n g: 11,\r\n b: 22,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(65, 215, 251, 1)\",\r\n r: 65,\r\n g: 215,\r\n b: 251,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(183, 136, 114, 1)\",\r\n r: 183,\r\n g: 136,\r\n b: 114,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(255, 205, 153, 1)\",\r\n r: 255,\r\n g: 205,\r\n b: 153,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(245, 220, 78, 1)\",\r\n r: 245,\r\n g: 220,\r\n b: 78,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(85, 243, 188, 1)\",\r\n r: 85,\r\n g: 243,\r\n b: 188,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(173, 220, 255, 1)\",\r\n r: 173,\r\n g: 220,\r\n b: 255,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(248, 196, 237, 1)\",\r\n r: 248,\r\n g: 196,\r\n b: 237,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(236, 72, 153, 1)\",\r\n r: 236,\r\n g: 72,\r\n b: 153,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(244, 63, 94, 1)\",\r\n r: 244,\r\n g: 63,\r\n b: 94,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(139, 92, 246, 1)\",\r\n r: 139,\r\n g: 92,\r\n b: 246,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(0, 150, 242, 1)\",\r\n r: 0,\r\n g: 150,\r\n b: 242,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(246, 154, 24, 1)\",\r\n r: 246,\r\n g: 154,\r\n b: 24,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(249, 115, 22, 1)\",\r\n r: 249,\r\n g: 115,\r\n b: 22,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(250, 204, 21, 1)\",\r\n r: 250,\r\n g: 204,\r\n b: 21,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(16, 185, 129, 1)\",\r\n r: 16,\r\n g: 185,\r\n b: 129,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(14, 165, 233, 1)\",\r\n r: 14,\r\n g: 165,\r\n b: 233,\r\n a: 1,\r\n },\r\n {\r\n rgb: \"rgba(238, 73, 214, 1)\",\r\n r: 238,\r\n g: 73,\r\n b: 214,\r\n a: 1,\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Show Border\r\n \r\n {\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((nodes) => {\r\n updatedNodes = nodes.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data, \r\n showBorder: value,\r\n // border: nd?.data?.borderColor || {\r\n // \"type\": \"solid\",\r\n // \"width\": 1,\r\n // \"opacity\": 1,\r\n // \"borderColor\": \"rgba(3, 11, 22, 1)\"\r\n // }\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Border Style\r\n \r\n \r\n updateNodeBorderStyle(node, \"solid\")}\r\n >\r\n \r\n \r\n updateNodeBorderStyle(node, \"dashed\")}\r\n >\r\n \r\n \r\n updateNodeBorderStyle(node, \"dotted\")}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Border Thickness\r\n \r\n \r\n \r\n {node.data?.border?.width}\r\n \r\n \r\n \r\n \r\n {\r\n updateNodeBorderThickness(node, value);\r\n }}\r\n />\r\n \r\n \r\n \r\n Opacity\r\n \r\n \r\n {Math.round(selectedColor.a * 100)}%\r\n \r\n \r\n div\": {\r\n \"& > div:nth-of-type(1), & > div:nth-of-type(2)\": {\r\n borderRadius: \"100px !important\",\r\n overflow: \"hidden\",\r\n },\r\n\r\n \"& div:nth-of-type(3) div div\": {\r\n width: \"11px !important\",\r\n height: \"11px !important\",\r\n transform: \"translate(-6px, 0px) !important\",\r\n border: \"2px solid #FFFFFF !important\",\r\n boxShadow: \"0px 0px 5.7px 0px #28282859 !important\",\r\n background: \"transparent !important\",\r\n },\r\n },\r\n }}\r\n >\r\n {\r\n setSelectedColor({\r\n ...selectedColor,\r\n a: value.rgb.a,\r\n });\r\n updateNodeBorderColor(node, {\r\n ...selectedColor,\r\n a: value.rgb.a,\r\n });\r\n }}\r\n />\r\n \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n Border Color\r\n \r\n \r\n \r\n {borderColors.map((color, i) => {\r\n return (\r\n {\r\n setSelectedColor(color);\r\n updateNodeBorderColor(node, color);\r\n }}\r\n >\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n Custom Color\r\n \r\n {(allCustomColors.length > 0 || editCustomColor) &&\r\n (editCustomColor ? (\r\n setEditCustomColor(false)}\r\n >\r\n Done\r\n \r\n ) : (\r\n setEditCustomColor(true)}\r\n >\r\n Edit\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {allCustomColors.map((color, i) => {\r\n return (\r\n {\r\n setSelectedColor(color);\r\n updateNodeBorderColor(node, color);\r\n }}\r\n >\r\n {editCustomColor && (\r\n {\r\n e.stopPropagation();\r\n setAllCustomColors((prev) => {\r\n const updatedColors = prev.filter(\r\n (_, ci) => ci !== i\r\n );\r\n\r\n localStorage.setItem(\r\n \"customColors\",\r\n JSON.stringify(updatedColors)\r\n );\r\n\r\n return updatedColors;\r\n });\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {CustomColorPopover}\r\n \r\n );\r\n};\r\n\r\nexport default FrameBorderToolbar;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Stack, Typography } from \"@mui/material\";\r\nimport { IcRightSingleArrowBoard } from \"../../../assets/icon-components\";\r\nimport { getConnectedEdges, useReactFlow } from \"reactflow\";\r\nimport useCopyPaste from \"../../DrawBoard/dndCopyPaste/useCopyPaste\";\r\nimport LimitModal from \"../../../common-components/modals/LimitModal\";\r\nimport commanService from \"../../../CommanFunctions/commanService\";\r\nimport { useSelector } from \"react-redux\";\r\nimport {\r\n base64ToBlob,\r\n getId,\r\n getMaxAndMinZIndex,\r\n updateJson,\r\n} from \"../../../CommanFunctions/commanFunctions\";\r\nimport { useLocation, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport html2canvas from \"html2canvas\";\r\nimport SimpleCircularProgress from \"../../../common-components/SimpleCircularProgress\";\r\nimport jsPDF from \"jspdf\";\r\nimport { elementToSVG } from \"dom-to-svg\";\r\nimport { successToast } from \"../../../Redux/toastSlice\";\r\nimport html2pdf from \"html2pdf.js\";\r\nimport { errorToast } from \"../../../Redux/toastSlice\";\r\nimport { useUndoRedo } from \"../../DrawBoard/dndUndoRedo/UndoRedoProvider\";\r\nimport {\r\n updateCopyAsImage,\r\n updateIsDownload,\r\n} from \"../../../Redux/mindMapSlice\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\nimport { generateFontEmbedCss } from \"../../DrawBoard/utils\";\r\nimport { toSvg } from \"html-to-image\";\r\n\r\nconst FrameMoreMenus = ({\r\n node,\r\n height,\r\n edit,\r\n width,\r\n handleCut,\r\n download,\r\n handleDuplicate,\r\n setShowFrameMoreOptions,\r\n showRename,\r\n handleClickRename,\r\n showDuplicate,\r\n handleClickEdit,\r\n handleClickDeleteRowCol,\r\n showDeleteColumn,\r\n showDeleteRow,\r\n showCopyAsImage,\r\n showAddComment,\r\n cardDuplicate,\r\n showLockUnlock,\r\n simpleRef,\r\n showCopyLink,\r\n showLinkTo,\r\n exportShow,\r\n showFrame,\r\n handleClickCopyLink,\r\n handleHideImage,\r\n handleClickDownload,\r\n showBringToFrontAndBack,\r\n saveFile,\r\n originalSize,\r\n handleClickOriginalImage,\r\n hideImage,\r\n showDelete,\r\n handleDelete,\r\n type,\r\n showCutCopyPaste = true,\r\n handleIsCapturing = () => {},\r\n}) => {\r\n const {\r\n setNodes,\r\n getNodes,\r\n getNode,\r\n getIntersectingNodes,\r\n getEdges,\r\n setEdges,\r\n fitView,\r\n } = useReactFlow();\r\n const [copyAsImage, setCopyAsImage] = useState(false);\r\n const [showExportOptions, setShowExportOptions] = useState(false);\r\n const [showShapesLimitModal, setShowShapesLimitModal] = useState(false);\r\n const { cut, copy, paste } = useCopyPaste({\r\n setShowShapesLimitModal,\r\n });\r\n const user_data = localStorage.getItem(\"user_data\");\r\n const location = useLocation();\r\n const { undo, takeSnapshot } = useUndoRedo();\r\n const dispatch = useDispatch();\r\n const { id } = useParams();\r\n const [isDownload, setIsDownload] = useState(false);\r\n\r\n useEffect(() => {\r\n dispatch(updateCopyAsImage(copyAsImage));\r\n }, [copyAsImage, dispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(updateIsDownload(isDownload));\r\n }, [dispatch, isDownload]);\r\n\r\n const exportFileName =\r\n node.type === \"frame\"\r\n ? node.data?.frameName || \"Frame\"\r\n : node.type === \"chart\"\r\n ? node?.data?.label || \"Chart\"\r\n : \"Cloudairy node\";\r\n\r\n const downloadClipboardImage = async (format) => {\r\n try {\r\n // Check if Clipboard API is available\r\n if (!navigator.clipboard || !navigator.clipboard.read) {\r\n dispatch(\r\n errorToast({\r\n message: \"Clipboard API not supported in this browser.\",\r\n })\r\n );\r\n return;\r\n }\r\n\r\n // Read clipboard items\r\n const clipboardItems = await navigator.clipboard.read();\r\n for (const item of clipboardItems) {\r\n // Find an image in clipboard\r\n const type = item.types.find((t) => t.startsWith(\"image/\"));\r\n if (!type) continue;\r\n\r\n // Get image as blob\r\n const blob = await item.getType(type);\r\n\r\n // Create a temporary URL\r\n const url = URL.createObjectURL(blob);\r\n\r\n // Create a download link and trigger click\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `${exportFileName}.${format}`;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n\r\n // Revoke URL to free memory\r\n URL.revokeObjectURL(url);\r\n handleIsCapturing(false);\r\n return;\r\n }\r\n dispatch(\r\n errorToast({\r\n message: \"No image found!\",\r\n })\r\n );\r\n } catch (error) {\r\n console.error(\"Error accessing clipboard:\", error);\r\n dispatch(\r\n errorToast({\r\n message:\r\n \"Failed to download image. Make sure clipboard access is allowed.\",\r\n })\r\n );\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n setCopyAsImage(false);\r\n }\r\n };\r\n\r\n const handleCopyImage = async (format = \"png\", isPdf = false) => {\r\n if (node?.type === \"chart\") {\r\n try {\r\n if (simpleRef.current) {\r\n const options = {\r\n scale: 5.0,\r\n useCORS: true,\r\n allowTaint: true,\r\n antialias: \"subpixel\",\r\n logging: false,\r\n backgroundColor: null,\r\n };\r\n\r\n const originalCanvas = await html2canvas(simpleRef.current, options);\r\n\r\n const currentNode = getNode(node.id);\r\n const desiredHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const desiredWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const fixedCanvas = document.createElement(\"canvas\");\r\n const aspectRatio = originalCanvas.width / originalCanvas.height;\r\n fixedCanvas.width = desiredWidth;\r\n fixedCanvas.height = desiredHeight;\r\n\r\n const ctx = fixedCanvas.getContext(\"2d\");\r\n\r\n let drawWidth = desiredWidth;\r\n let drawHeight = desiredWidth / aspectRatio;\r\n\r\n if (drawHeight > desiredHeight) {\r\n drawHeight = desiredHeight;\r\n drawWidth = desiredHeight * aspectRatio;\r\n }\r\n\r\n ctx.drawImage(\r\n originalCanvas,\r\n 0,\r\n 0,\r\n originalCanvas.width,\r\n originalCanvas.height,\r\n 0,\r\n 0,\r\n drawWidth,\r\n drawHeight\r\n );\r\n\r\n fixedCanvas.toBlob(async (blob) => {\r\n try {\r\n // Copy the Blob image to the clipboard\r\n await navigator.clipboard.write([\r\n new ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n } catch (err) {}\r\n }, \"image/png\");\r\n\r\n // const dataUrl = fixedCanvas.toDataURL(\"image/png\", 1.0);\r\n // const link = document.createElement(\"a\");\r\n // link.href = dataUrl;\r\n // link.download = `${\"card\" || \"Cloudairy card\"}.png`;\r\n // link.click();\r\n }\r\n if (isPdf) {\r\n handlePdfDownload();\r\n } else {\r\n downloadClipboardImage(format);\r\n }\r\n } catch (error) {\r\n } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n } else if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(`[data-id='${node.id}']`);\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Convert external images to base64\r\n const images = reactFlowContainer.querySelectorAll(\"img\");\r\n const originalSrcs = []; // Store original src attributes\r\n\r\n await Promise.all(\r\n Array.from(images).map(async (img) => {\r\n if (img.src.startsWith(\"http\")) {\r\n // Store the original src\r\n originalSrcs.push({ img, src: img.src });\r\n\r\n // Fetch the image and convert it to base64\r\n try {\r\n const response = await fetch(img.src);\r\n const blob = await response.blob();\r\n const base64 = await new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n img.src = base64; // Replace src with base64 data URL\r\n } catch (error) {\r\n console.error(\"Failed to convert image to base64:\", error);\r\n }\r\n }\r\n })\r\n );\r\n\r\n // Get frame position relative to React Flow container\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n // Calculate cropping coordinates\r\n const cropX = frameRect.left - containerRect.left + 2.2;\r\n const cropY = frameRect.top - containerRect.top + 2.2;\r\n const cropWidth = frameRect.width;\r\n const cropHeight = frameRect.height;\r\n\r\n // Capture entire React Flow area\r\n const canvas = await html2canvas(reactFlowContainer, {\r\n ignoreElements: (element) =>\r\n element.classList.contains(\"MuiTooltip-popper\") ||\r\n element.classList.contains(\"react-flow__background\"),\r\n useCORS: true, // Enable CORS for external images\r\n allowTaint: true, // Allow tainted canvases\r\n scale: 2,\r\n backgroundColor: null,\r\n foreignObjectRendering: true,\r\n logging: false,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: reactFlowContainer.scrollWidth,\r\n height: reactFlowContainer.scrollHeight,\r\n });\r\n\r\n // Create a new canvas for cropping\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const ctx = croppedCanvas.getContext(\"2d\");\r\n\r\n croppedCanvas.width = cropWidth * 2;\r\n croppedCanvas.height = cropHeight * 2;\r\n\r\n ctx.drawImage(\r\n canvas,\r\n cropX * 2,\r\n cropY * 2,\r\n cropWidth * 2,\r\n cropHeight * 2,\r\n 0,\r\n 0,\r\n cropWidth * 2,\r\n cropHeight * 2\r\n );\r\n\r\n // Convert to clipboard image\r\n croppedCanvas.toBlob(async (blob) => {\r\n if (blob) {\r\n try {\r\n await navigator.clipboard.write([\r\n new ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n if (isPdf) {\r\n handlePdfDownload();\r\n } else {\r\n downloadClipboardImage(format);\r\n }\r\n } catch (clipboardError) {\r\n console.error(\"Clipboard write error:\", clipboardError);\r\n }\r\n }\r\n }, \"image/png\");\r\n\r\n // Restore original image src attributes\r\n originalSrcs.forEach(({ img, src }) => {\r\n img.src = src;\r\n });\r\n } catch (error) {\r\n console.error(\"Screenshot error:\", error);\r\n } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n handleIsCapturing(false);\r\n }\r\n return;\r\n } else {\r\n const allNodes = getNodes();\r\n const selectedNode = allNodes.find((node) => node.selected);\r\n\r\n if (selectedNode) {\r\n const selectedNodeElement = document.querySelector(\r\n `[data-id='${selectedNode.id}']`\r\n );\r\n\r\n if (selectedNodeElement) {\r\n const applyComputedStyles = (originalElement, clonedElement) => {\r\n const computedStyles = window.getComputedStyle(originalElement);\r\n for (let key of computedStyles) {\r\n clonedElement.style[key] = computedStyles[key];\r\n }\r\n };\r\n\r\n const getChildNodes = (nodeId) => {\r\n const children = allNodes.filter(\r\n (node) => node.parentNode === nodeId\r\n );\r\n\r\n return children.reduce((acc, child) => {\r\n const childElement = document.querySelector(\r\n `[data-id='${child.id}']`\r\n );\r\n\r\n if (childElement) {\r\n const clonedChild = childElement.cloneNode(true);\r\n applyComputedStyles(childElement, clonedChild);\r\n clonedChild.style.position = \"absolute\";\r\n clonedChild.style.left = child.position.x + \"px\";\r\n clonedChild.style.top = child.position.y + \"px\";\r\n clonedChild.style.transform = \"none\";\r\n const nestedChildNodes = getChildNodes(child.id);\r\n nestedChildNodes.forEach((nestedChild) => {\r\n clonedChild.appendChild(nestedChild);\r\n });\r\n acc.push(clonedChild);\r\n }\r\n return acc;\r\n }, []);\r\n };\r\n\r\n const clonedSelectedNode = selectedNodeElement.cloneNode(true);\r\n // applyComputedStyles(selectedNodeElement, clonedSelectedNode);\r\n\r\n const childNodes = getChildNodes(selectedNode.id);\r\n\r\n childNodes.forEach((child) => {\r\n clonedSelectedNode.appendChild(child);\r\n });\r\n\r\n clonedSelectedNode.style.position = \"absolute\";\r\n clonedSelectedNode.style.top = \"0px\";\r\n clonedSelectedNode.style.left = \"0px\";\r\n clonedSelectedNode.style.zIndex = \"-999999999999\";\r\n\r\n document.body.appendChild(clonedSelectedNode);\r\n\r\n try {\r\n const canvas = await html2canvas(clonedSelectedNode, {\r\n useCORS: true,\r\n scale: 2,\r\n backgroundColor: null,\r\n });\r\n\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (blob) {\r\n try {\r\n await navigator.clipboard.write([\r\n new ClipboardItem({\r\n \"image/png\": blob,\r\n }),\r\n ]);\r\n if (isPdf) {\r\n handlePdfDownload();\r\n } else {\r\n downloadClipboardImage(format);\r\n }\r\n } catch (error) {}\r\n } else {\r\n }\r\n document.body.removeChild(clonedSelectedNode);\r\n },\r\n \"image/png\",\r\n 1.0\r\n );\r\n } catch (error) {\r\n } finally {\r\n setCopyAsImage(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n } else {\r\n }\r\n } else {\r\n }\r\n }\r\n };\r\n\r\n const handleCopyAsImage = async () => {\r\n // if (node.type === \"frame\") {\r\n // const { x, y, width, height } = simpleRef.current.getBoundingClientRect();\r\n\r\n // html2canvas(document.body, {\r\n // x,\r\n // y,\r\n // width,\r\n // height,\r\n // scrollX: -window.scrollX,\r\n // scrollY: -window.scrollY,\r\n // })\r\n // .then((canvas) => {\r\n // canvas.toBlob(async (blob) => {\r\n // await navigator.clipboard.write([\r\n // new ClipboardItem({ \"image/png\": blob }),\r\n // ]);\r\n // }, \"image/png\");\r\n // dispatch(\r\n // successToast({\r\n // message: \"Image copied\",\r\n // })\r\n // );\r\n // })\r\n // .catch((error) => {})\r\n // .finally(() => {\r\n // setCopyAsImage(false);\r\n // setIsDownload(false);\r\n // setShowExportOptions(false);\r\n // setShowFrameMoreOptions(false);\r\n // });\r\n\r\n // return;\r\n // }\r\n\r\n if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(`[data-id='${node.id}']`);\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Convert external images to base64\r\n const images = reactFlowContainer.querySelectorAll(\"img\");\r\n const originalSrcs = []; // Store original src attributes\r\n\r\n await Promise.all(\r\n Array.from(images).map(async (img) => {\r\n if (img.src.startsWith(\"http\")) {\r\n // Store the original src\r\n originalSrcs.push({ img, src: img.src });\r\n\r\n // Fetch the image and convert it to base64\r\n try {\r\n const response = await fetch(img.src);\r\n const blob = await response.blob();\r\n const base64 = await new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n img.src = base64; // Replace src with base64 data URL\r\n } catch (error) {\r\n console.error(\"Failed to convert image to base64:\", error);\r\n }\r\n }\r\n })\r\n );\r\n\r\n // Get frame position relative to React Flow container\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n // Calculate cropping coordinates\r\n const cropX = frameRect.left - containerRect.left + 2.2;\r\n const cropY = frameRect.top - containerRect.top + 2.2;\r\n const cropWidth = frameRect.width;\r\n const cropHeight = frameRect.height;\r\n\r\n // Capture entire React Flow area\r\n const canvas = await html2canvas(reactFlowContainer, {\r\n ignoreElements: (element) =>\r\n element.classList.contains(\"MuiTooltip-popper\") ||\r\n element.classList.contains(\"react-flow__background\"),\r\n useCORS: true, // Enable CORS for external images\r\n allowTaint: true, // Allow tainted canvases\r\n scale: 2,\r\n backgroundColor: null,\r\n foreignObjectRendering: true,\r\n logging: false,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: reactFlowContainer.scrollWidth,\r\n height: reactFlowContainer.scrollHeight,\r\n });\r\n\r\n // Create a new canvas for cropping\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const ctx = croppedCanvas.getContext(\"2d\");\r\n\r\n croppedCanvas.width = cropWidth * 2;\r\n croppedCanvas.height = cropHeight * 2;\r\n\r\n ctx.drawImage(\r\n canvas,\r\n cropX * 2,\r\n cropY * 2,\r\n cropWidth * 2,\r\n cropHeight * 2,\r\n 0,\r\n 0,\r\n cropWidth * 2,\r\n cropHeight * 2\r\n );\r\n\r\n // Convert to clipboard image\r\n croppedCanvas.toBlob(async (blob) => {\r\n if (blob) {\r\n try {\r\n await navigator.clipboard.write([\r\n new ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n dispatch(successToast({ message: \"Image copied\" }));\r\n } catch (clipboardError) {\r\n console.error(\"Clipboard write error:\", clipboardError);\r\n }\r\n }\r\n }, \"image/png\");\r\n\r\n // Restore original image src attributes\r\n originalSrcs.forEach(({ img, src }) => {\r\n img.src = src;\r\n });\r\n } catch (error) {\r\n console.error(\"Screenshot error:\", error);\r\n } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n }\r\n\r\n if (node?.type === \"chart\") {\r\n try {\r\n if (simpleRef.current) {\r\n const options = {\r\n scale: 5.0,\r\n useCORS: true,\r\n allowTaint: true,\r\n antialias: \"subpixel\",\r\n logging: false,\r\n backgroundColor: null,\r\n };\r\n\r\n const originalCanvas = await html2canvas(simpleRef.current, options);\r\n\r\n const currentNode = getNode(node.id);\r\n const desiredHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const desiredWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const fixedCanvas = document.createElement(\"canvas\");\r\n const aspectRatio = originalCanvas.width / originalCanvas.height;\r\n fixedCanvas.width = desiredWidth;\r\n fixedCanvas.height = desiredHeight;\r\n\r\n const ctx = fixedCanvas.getContext(\"2d\");\r\n\r\n let drawWidth = desiredWidth;\r\n let drawHeight = desiredWidth / aspectRatio;\r\n\r\n if (drawHeight > desiredHeight) {\r\n drawHeight = desiredHeight;\r\n drawWidth = desiredHeight * aspectRatio;\r\n }\r\n\r\n ctx.drawImage(\r\n originalCanvas,\r\n 0,\r\n 0,\r\n originalCanvas.width,\r\n originalCanvas.height,\r\n 0,\r\n 0,\r\n drawWidth,\r\n drawHeight\r\n );\r\n\r\n fixedCanvas.toBlob(async (blob) => {\r\n try {\r\n // Copy the Blob image to the clipboard\r\n await navigator.clipboard.write([\r\n new ClipboardItem({ \"image/png\": blob }),\r\n ]);\r\n } catch (err) {}\r\n }, \"image/png\");\r\n\r\n // const dataUrl = fixedCanvas.toDataURL(\"image/png\", 1.0);\r\n // const link = document.createElement(\"a\");\r\n // link.href = dataUrl;\r\n // link.download = `${\"card\" || \"Cloudairy card\"}.png`;\r\n // link.click();\r\n }\r\n dispatch(\r\n successToast({\r\n message: \"Image copied\",\r\n })\r\n );\r\n } catch (error) {\r\n } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n }\r\n\r\n const allNodes = getNodes();\r\n const selectedNode = allNodes.find((node) => node.selected);\r\n\r\n if (selectedNode) {\r\n const selectedNodeElement = document.querySelector(\r\n `[data-id='${selectedNode.id}']`\r\n );\r\n\r\n if (selectedNodeElement) {\r\n const applyComputedStyles = (originalElement, clonedElement) => {\r\n const computedStyles = window.getComputedStyle(originalElement);\r\n for (let key of computedStyles) {\r\n clonedElement.style[key] = computedStyles[key];\r\n }\r\n };\r\n\r\n const getChildNodes = (nodeId) => {\r\n const children = allNodes.filter(\r\n (node) => node.parentNode === nodeId\r\n );\r\n\r\n return children.reduce((acc, child) => {\r\n const childElement = document.querySelector(\r\n `[data-id='${child.id}']`\r\n );\r\n\r\n if (childElement) {\r\n const clonedChild = childElement.cloneNode(true);\r\n applyComputedStyles(childElement, clonedChild);\r\n clonedChild.style.position = \"absolute\";\r\n clonedChild.style.left = child.position.x + \"px\";\r\n clonedChild.style.top = child.position.y + \"px\";\r\n clonedChild.style.transform = \"none\";\r\n const nestedChildNodes = getChildNodes(child.id);\r\n nestedChildNodes.forEach((nestedChild) => {\r\n clonedChild.appendChild(nestedChild);\r\n });\r\n acc.push(clonedChild);\r\n }\r\n return acc;\r\n }, []);\r\n };\r\n\r\n const clonedSelectedNode = selectedNodeElement.cloneNode(true);\r\n // applyComputedStyles(selectedNodeElement, clonedSelectedNode);\r\n\r\n const childNodes = getChildNodes(selectedNode.id);\r\n\r\n childNodes.forEach((child) => {\r\n clonedSelectedNode.appendChild(child);\r\n });\r\n\r\n clonedSelectedNode.style.position = \"absolute\";\r\n clonedSelectedNode.style.top = \"0px\";\r\n clonedSelectedNode.style.left = \"0px\";\r\n clonedSelectedNode.style.zIndex = \"-999999999999\";\r\n\r\n document.body.appendChild(clonedSelectedNode);\r\n\r\n try {\r\n const canvas = await html2canvas(clonedSelectedNode, {\r\n useCORS: true,\r\n scale: 2,\r\n backgroundColor: null,\r\n });\r\n\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (blob) {\r\n try {\r\n await navigator.clipboard.write([\r\n new ClipboardItem({\r\n \"image/png\": blob,\r\n }),\r\n ]);\r\n } catch (error) {}\r\n } else {\r\n }\r\n document.body.removeChild(clonedSelectedNode);\r\n },\r\n \"image/png\",\r\n 1.0\r\n );\r\n dispatch(\r\n successToast({\r\n message: \"Image copied\",\r\n })\r\n );\r\n } catch (error) {\r\n } finally {\r\n setCopyAsImage(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n } else {\r\n }\r\n } else {\r\n }\r\n };\r\n\r\n const userData = useSelector((state) => state.common.userData);\r\n\r\n const getTimeDifference = (commentTimestamp) => {\r\n const currentTime = Date.now();\r\n const differenceInMs = currentTime - commentTimestamp;\r\n\r\n const differenceInMinutes = Math.floor(differenceInMs / (1000 * 60));\r\n\r\n if (differenceInMinutes === 0) {\r\n return currentTime;\r\n } else {\r\n return currentTime - commentTimestamp;\r\n }\r\n };\r\n\r\n function findChildNodeIds(data, parentId) {\r\n const childIds = [];\r\n\r\n data.forEach((item) => {\r\n if (item?.parentNode === parentId) {\r\n childIds.push(item.id);\r\n childIds.push(...findChildNodeIds(data, item.id)); // Recursive call for nested nodes\r\n }\r\n });\r\n\r\n return childIds;\r\n }\r\n\r\n const getChildren = (array, itemId) => {\r\n const directChildren = array.filter((i) => i.parentNode === itemId);\r\n let allChildren = [...directChildren];\r\n\r\n directChildren.forEach((child) => {\r\n allChildren = [...allChildren, ...getChildren(array, child.id)];\r\n });\r\n\r\n return allChildren;\r\n };\r\n\r\n const moveItemAndChildrenToEnd = (array, itemId) => {\r\n // Find item and its children\r\n const item = array.find((i) => i.id === itemId);\r\n const children = getChildren(array, itemId);\r\n\r\n // Remove item and its children from original array\r\n const newArray = array.filter(\r\n (i) => i.id !== itemId && !children.includes(i)\r\n );\r\n\r\n // Append item and its children to the end\r\n newArray.push(item, ...children);\r\n\r\n return newArray;\r\n };\r\n\r\n // const handleBringToFrontGroup = () => {\r\n // const interSectedNodes = getIntersectingNodes(node, true);\r\n // const { maxZIndex } = getMaxAndMinZIndex(interSectedNodes);\r\n // setNodes((prevNodes) => {\r\n // const updatedNodes = prevNodes.map((nd) => {\r\n // if (nd.id === node?.id) {\r\n // return {\r\n // ...nd,\r\n // style: {\r\n // ...nd.style,\r\n // zIndex: maxZIndex + 1,\r\n // }\r\n // }\r\n // }\r\n // return nd;\r\n // })\r\n // const search = new URLSearchParams(location.search);\r\n // const a_id = search.get(\"a_id\");\r\n // updateJson({\r\n // json: {\r\n // architecture_json: {\r\n // nodes: updatedNodes\r\n // },\r\n // },\r\n // id,\r\n // dispatch,\r\n // undo,\r\n // takeSnapshot,\r\n // a_id,\r\n // });\r\n // return updatedNodes;\r\n // })\r\n // };\r\n\r\n // const handleSendToBackGroup = () => {\r\n // const interSectedNodes = getIntersectingNodes(node, true);\r\n // const { minZIndex } = getMaxAndMinZIndex(interSectedNodes);\r\n // setNodes((prevNodes) => {\r\n // const updatedNodes = prevNodes.map((nd) => {\r\n // if (nd.id === node?.id) {\r\n // return {\r\n // ...nd,\r\n // style: {\r\n // ...nd.style,\r\n // zIndex: minZIndex - 1,\r\n // }\r\n // }\r\n // }\r\n // return nd;\r\n // })\r\n // const search = new URLSearchParams(location.search);\r\n // const a_id = search.get(\"a_id\");\r\n // updateJson({\r\n // json: {\r\n // architecture_json: {\r\n // nodes: updatedNodes\r\n // },\r\n // },\r\n // id,\r\n // dispatch,\r\n // undo,\r\n // takeSnapshot,\r\n // a_id,\r\n // });\r\n // return updatedNodes;\r\n // })\r\n // };\r\n\r\n const handleBringToFrontGroup = (node) => {\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: getNodes(),\r\n // lastUpdatedBy: userData?.user_id,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n let updatedNodes = getNodes();\r\n const interSectedNodes = getIntersectingNodes(node);\r\n const isParentGroupNode = node?.type === \"group\" && !node?.parentNode;\r\n if (node && interSectedNodes?.[0]) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n return {\r\n ...val,\r\n data: {\r\n ...val?.data,\r\n isHidden: false,\r\n },\r\n ...(node?.type !== \"group\"\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1010,\r\n },\r\n }\r\n : {\r\n ...(val?.data?.tempStyle && {\r\n // style: val?.data?.tempStyle,\r\n style: {\r\n ...val?.data?.tempStyle,\r\n border: `${val?.data?.tempStyle?.borderWidth} ${val?.data?.tempStyle?.borderStyle} ${val?.data?.tempStyle?.borderColor}`,\r\n },\r\n }),\r\n }),\r\n };\r\n } else if (val?.id === interSectedNodes?.[0]?.id) {\r\n return {\r\n ...val,\r\n ...(node?.type !== \"group\" && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1000,\r\n },\r\n }),\r\n };\r\n } else {\r\n return val;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n }\r\n\r\n // for hiding all subchilds\r\n const childrenToHide = findChildNodeIds(updatedNodes, node?.id);\r\n if (isParentGroupNode) {\r\n updatedNodes = updatedNodes?.map((data) => {\r\n if (data?.id !== node?.id && childrenToHide?.includes(data?.id)) {\r\n return {\r\n ...data,\r\n data: {\r\n ...data?.data,\r\n isHidden: true,\r\n tempStyle: data?.style,\r\n },\r\n ...(data?.type === \"group\" && {\r\n style: {\r\n ...data?.style,\r\n border: \"none !important\",\r\n background: \"transparent\",\r\n },\r\n }),\r\n };\r\n } else {\r\n return data;\r\n }\r\n });\r\n }\r\n\r\n updatedNodes = moveItemAndChildrenToEnd(updatedNodes, node?.id);\r\n setNodes(updatedNodes);\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n };\r\n\r\n const handleSendToBackGroup = (node) => {\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n const interSectedNodes = getIntersectingNodes(node);\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: getNodes(),\r\n // lastUpdatedBy: userData?.user_id,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n let updatedNodes = getNodes();\r\n const isParentGroupNode = node?.type === \"group\" && !node?.parentNode;\r\n if (node && interSectedNodes?.[0]) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n return {\r\n ...val,\r\n ...(node?.type !== \"group\"\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1000,\r\n },\r\n }\r\n : {\r\n data: {\r\n ...val?.data,\r\n ...(!isParentGroupNode && { isHidden: true }),\r\n tempStyle: val?.style,\r\n },\r\n style: {\r\n ...val?.style,\r\n ...(!isParentGroupNode && {\r\n border: \"none !important\",\r\n background: \"transparent\",\r\n }),\r\n },\r\n }),\r\n };\r\n } else if (val?.id === interSectedNodes?.[0]?.id) {\r\n return {\r\n ...val,\r\n ...(node?.type !== \"group\" && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1010,\r\n },\r\n }),\r\n };\r\n } else {\r\n return val;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n // all child id's to show\r\n const childIdsToShow = findChildNodeIds(updatedNodes, node?.id);\r\n if (isParentGroupNode) {\r\n updatedNodes = updatedNodes?.map((data) => {\r\n if (data?.id !== node?.id && childIdsToShow?.includes(data?.id)) {\r\n return {\r\n ...data,\r\n data: {\r\n ...data?.data,\r\n isHidden: false,\r\n tempStyle: data?.style,\r\n },\r\n style: {\r\n ...data?.style,\r\n ...data?.tempStyle,\r\n ...(data?.type === \"group\" && {\r\n border: `${data?.data?.borderWidth} ${data?.data?.borderStyle} ${data?.data?.borderColor}`,\r\n background: data?.data?.background,\r\n }),\r\n },\r\n };\r\n } else {\r\n return data;\r\n }\r\n });\r\n }\r\n setNodes(updatedNodes);\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n edges: getEdges(),\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n }\r\n };\r\n\r\n const handleBringToBack = () => {\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: getNodes(),\r\n // lastUpdatedBy: userData?.user_id,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n let updatedNodes = getNodes();\r\n const updatedNode = [];\r\n const interSectedNodes = getIntersectingNodes(node);\r\n const isParentGroupNode = node?.type === \"group\" && !node?.parentNode;\r\n\r\n if (node && interSectedNodes?.length > 1) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n const tempNode = {\r\n ...val,\r\n data: {\r\n ...val?.data,\r\n isHidden: false,\r\n },\r\n ...(node?.type !== \"group\" &&\r\n node.type !== \"frame\" &&\r\n (node.type !== \"shapeTable\" ||\r\n (node.key !== \"Erd_Field_22\" &&\r\n node.key !== \"Erd_Field_23\" &&\r\n node.key !== \"Erd_Field_24\" &&\r\n node.key !== \"Erd_Field_25\"))\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1010,\r\n },\r\n }\r\n : {\r\n ...(val?.data?.tempStyle && {\r\n // style: val?.data?.tempStyle,\r\n style: {\r\n ...val?.data?.tempStyle,\r\n border: `${val?.data?.tempStyle?.borderWidth} ${val?.data?.tempStyle?.borderStyle} ${val?.data?.tempStyle?.borderColor}`,\r\n },\r\n }),\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n const tempNode = {\r\n ...val,\r\n ...(node?.type !== \"group\" &&\r\n node.type !== \"frame\" &&\r\n node.type !== \"uploadImage\" &&\r\n (node.type !== \"shapeTable\" ||\r\n (node.key !== \"Erd_Field_22\" &&\r\n node.key !== \"Erd_Field_23\" &&\r\n node.key !== \"Erd_Field_24\" &&\r\n node.key !== \"Erd_Field_25\")) && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 99999999,\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n } else if (node && interSectedNodes?.[0]) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n const tempNode = {\r\n ...val,\r\n data: {\r\n ...val?.data,\r\n isHidden: false,\r\n },\r\n ...(node?.type !== \"group\" &&\r\n node.type !== \"frame\" &&\r\n (node.type !== \"shapeTable\" ||\r\n (node.key !== \"Erd_Field_22\" &&\r\n node.key !== \"Erd_Field_23\" &&\r\n node.key !== \"Erd_Field_24\" &&\r\n node.key !== \"Erd_Field_25\"))\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 100,\r\n },\r\n }\r\n : {\r\n ...(val?.data?.tempStyle && {\r\n // style: val?.data?.tempStyle,\r\n style: {\r\n ...val?.data?.tempStyle,\r\n border: `${val?.data?.tempStyle?.borderWidth} ${val?.data?.tempStyle?.borderStyle} ${val?.data?.tempStyle?.borderColor}`,\r\n },\r\n }),\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else if (\r\n prev?.length <= 2 &&\r\n val?.id === interSectedNodes?.[0]?.id\r\n ) {\r\n const tempNode = {\r\n ...val,\r\n ...(node?.type !== \"group\" &&\r\n node.type !== \"frame\" &&\r\n (node.type !== \"shapeTable\" ||\r\n (node.key !== \"Erd_Field_22\" &&\r\n node.key !== \"Erd_Field_23\" &&\r\n node.key !== \"Erd_Field_24\" &&\r\n node.key !== \"Erd_Field_25\")) && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 99999999,\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n return val;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n }\r\n\r\n const childrenToHide = findChildNodeIds(updatedNodes, node?.id);\r\n if (isParentGroupNode) {\r\n updatedNodes = updatedNodes?.map((data) => {\r\n if (data?.id !== node?.id && childrenToHide?.includes(data?.id)) {\r\n const tempNode = {\r\n ...data,\r\n data: {\r\n ...data?.data,\r\n isHidden: true,\r\n tempStyle: data?.style,\r\n },\r\n ...(data?.type === \"group\" && {\r\n style: {\r\n ...data?.style,\r\n border: \"none !important\",\r\n background: \"transparent\",\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n return data;\r\n }\r\n });\r\n }\r\n\r\n updatedNodes = moveItemAndChildrenToEnd(updatedNodes, node?.id);\r\n setNodes(updatedNodes);\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n };\r\n\r\n const handleCreateFrame = () => {\r\n const currentNode = getNode(node.id);\r\n const currentNodeHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const currentNodeWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const getAllFrames = getNodes()\r\n .filter((node) => node.type === \"frame\")\r\n .map((node) => node.data.frameNo);\r\n\r\n const maxFrameNumber = Math.max(...getAllFrames);\r\n\r\n const newFrameId = getId();\r\n\r\n const frameNode = [\r\n {\r\n id: newFrameId,\r\n type: \"frame\",\r\n variant: \"custom\",\r\n selected: true,\r\n style: {\r\n height: currentNodeHeight + 50,\r\n width: currentNodeWidth + 50,\r\n zIndex: -1,\r\n },\r\n data: {\r\n type: \"frame\",\r\n variant: \"custom\",\r\n style: {\r\n background: \"rgba(255, 255, 255, 1)\",\r\n },\r\n label: \"frame\",\r\n hide: false,\r\n locked: false,\r\n isShadow: false,\r\n showBorder: false,\r\n border: {\r\n width: 1,\r\n type: \"solid\",\r\n borderColor: \"rgba(3, 11, 22, 1)\",\r\n opacity: 1,\r\n },\r\n frameNo: isFinite(maxFrameNumber) ? maxFrameNumber + 1 : 1,\r\n frameName: isFinite(maxFrameNumber)\r\n ? `Frame ${maxFrameNumber + 1}`\r\n : `Frame 1`,\r\n },\r\n position: {\r\n x: currentNode.position.x - 25,\r\n y: currentNode.position.y - 25,\r\n },\r\n positionAbsolute: {\r\n x: currentNode.position.x - 25,\r\n y: currentNode.position.y - 25,\r\n },\r\n zIndex: -1,\r\n draggable: true,\r\n ...(currentNode.parentNode\r\n ? {\r\n parentNode: currentNode.parentNode,\r\n }\r\n : {}),\r\n },\r\n ];\r\n\r\n const updatedNodes = [\r\n ...getNodes().map((nd) =>\r\n nd.id === node.id\r\n ? {\r\n ...nd,\r\n parentNode: newFrameId,\r\n position: {\r\n x: 25,\r\n y: 25,\r\n },\r\n positionAbsolute: {\r\n x: 25,\r\n y: 25,\r\n },\r\n selected: false,\r\n }\r\n : nd\r\n ),\r\n ...frameNode,\r\n ];\r\n\r\n setNodes(updatedNodes);\r\n\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const handleBringToFront = () => {\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: getNodes(),\r\n // lastUpdatedBy: userData?.user_id,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n let updatedNodes = getNodes();\r\n const updatedNode = [];\r\n const interSectedNodes = getIntersectingNodes(node);\r\n const isParentGroupNode = node?.type === \"group\" && !node?.parentNode;\r\n if (node && interSectedNodes?.length > 1) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n const tempNode = {\r\n ...val,\r\n data: {\r\n ...val?.data,\r\n isHidden: false,\r\n },\r\n ...(node?.type !== \"group\"\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1010,\r\n },\r\n }\r\n : {\r\n ...(val?.data?.tempStyle && {\r\n // style: val?.data?.tempStyle,\r\n style: {\r\n ...val?.data?.tempStyle,\r\n border: `${val?.data?.tempStyle?.borderWidth} ${val?.data?.tempStyle?.borderStyle} ${val?.data?.tempStyle?.borderColor}`,\r\n },\r\n }),\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n const tempNode = {\r\n ...val,\r\n ...(node?.type !== \"group\" && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1000,\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n } else if (node && interSectedNodes?.[0]) {\r\n setNodes((prev) => {\r\n updatedNodes = prev?.map((val, ind) => {\r\n if (val?.id === node?.id) {\r\n const tempNode = {\r\n ...val,\r\n data: {\r\n ...val?.data,\r\n isHidden: false,\r\n },\r\n ...(node?.type !== \"group\"\r\n ? {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1010,\r\n },\r\n }\r\n : {\r\n ...(val?.data?.tempStyle && {\r\n // style: val?.data?.tempStyle,\r\n style: {\r\n ...val?.data?.tempStyle,\r\n border: `${val?.data?.tempStyle?.borderWidth} ${val?.data?.tempStyle?.borderStyle} ${val?.data?.tempStyle?.borderColor}`,\r\n },\r\n }),\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else if (\r\n prev?.length <= 2 ||\r\n val?.id === interSectedNodes?.[0]?.id\r\n ) {\r\n const tempNode = {\r\n ...val,\r\n ...(node?.type !== \"group\" && {\r\n style: {\r\n ...val?.style,\r\n zIndex: 1000,\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n return val;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n }\r\n\r\n // for hiding all subchilds\r\n const childrenToHide = findChildNodeIds(updatedNodes, node?.id);\r\n if (isParentGroupNode) {\r\n updatedNodes = updatedNodes?.map((data) => {\r\n if (data?.id !== node?.id && childrenToHide?.includes(data?.id)) {\r\n const tempNode = {\r\n ...data,\r\n data: {\r\n ...data?.data,\r\n isHidden: true,\r\n tempStyle: data?.style,\r\n },\r\n ...(data?.type === \"group\" && {\r\n style: {\r\n ...data?.style,\r\n border: \"none !important\",\r\n background: \"transparent\",\r\n },\r\n }),\r\n };\r\n updatedNode.push(tempNode);\r\n return tempNode;\r\n } else {\r\n return data;\r\n }\r\n });\r\n }\r\n\r\n updatedNodes = moveItemAndChildrenToEnd(updatedNodes, node?.id);\r\n setNodes(updatedNodes);\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n // edges: getEdges(),\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n };\r\n\r\n const handleDeleteNode = () => {\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: getNodes(),\r\n // lastUpdatedBy: parsedData?.user_id,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n\r\n const updatedNodes = getNodes().filter((n) =>\r\n n.id !== node.id\r\n ? n.parentNode\r\n ? n.parentNode !== node.id\r\n : true\r\n : false\r\n );\r\n\r\n setNodes(updatedNodes);\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n let parsedData = {};\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n should_delete: !updatedNodes || updatedNodes?.length === 0,\r\n isDeleted: true,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const handleClickDuplicate = () => {\r\n if (!cardDuplicate) {\r\n const currentNode = getNode(node.id);\r\n\r\n // Normal duplication logic for other node types\r\n const currentNodeHeight =\r\n typeof currentNode?.style?.height === \"string\"\r\n ? Number(currentNode?.style?.height.replace(\"px\", \"\"))\r\n : currentNode?.style?.height || currentNode?.height || 100;\r\n const currentNodeWidth =\r\n typeof currentNode?.style?.width === \"string\"\r\n ? Number(currentNode?.style?.width.replace(\"px\", \"\"))\r\n : currentNode?.style?.width || currentNode?.width || 100;\r\n\r\n const allNodes = getNodes();\r\n const duplicateNodes = allNodes.filter((nd) =>\r\n nd.data.frameName?.includes(currentNode.data.frameName)\r\n );\r\n const lastDuplicate = duplicateNodes.length\r\n ? duplicateNodes[duplicateNodes.length - 1]\r\n : currentNode;\r\n const xOffset =\r\n Number(lastDuplicate.xPos || lastDuplicate.position?.x) +\r\n Number(lastDuplicate.width || currentNodeWidth) +\r\n 20;\r\n const yOffset = lastDuplicate.yPos || lastDuplicate.position?.y;\r\n\r\n let duplicatedFrame = {\r\n ...node,\r\n data: {\r\n ...node.data,\r\n height: Number(currentNodeHeight) || currentNode.height,\r\n width: Number(currentNodeWidth) || currentNode.width,\r\n ...(currentNode.type === \"frame\"\r\n ? {\r\n frameName: currentNode.data.frameName.includes(\"(Copy)\")\r\n ? currentNode.data.frameName\r\n : `${currentNode.data.frameName} (Copy)`,\r\n }\r\n : {}),\r\n },\r\n xPos: xOffset,\r\n id: getId(),\r\n position: { x: xOffset, y: yOffset },\r\n positionAbsolute: { x: xOffset, y: yOffset },\r\n ...(currentNode.type === \"frame\" ? { zIndex: -1 } : {}),\r\n height: Number(currentNodeHeight) || currentNode.height,\r\n width: Number(currentNodeWidth) || currentNode.width,\r\n style: {\r\n height: Number(currentNodeHeight) || currentNode.height,\r\n width: Number(currentNodeWidth) || currentNode.width,\r\n ...(currentNode.type === \"frame\" ? { zIndex: -1 } : {}),\r\n },\r\n };\r\n\r\n const idMapping = {};\r\n\r\n const duplicateChildNodesRecursive = (parentId, parentDuplicateId) => {\r\n const childNodes = getNodes().filter(\r\n (nd) => nd.parentNode === parentId\r\n );\r\n\r\n return childNodes.flatMap((cNode) => {\r\n const newId = getId();\r\n idMapping[cNode.id] = newId;\r\n\r\n let duplicatedChild = {\r\n ...cNode,\r\n id: newId,\r\n parentNode: parentDuplicateId,\r\n data: { ...cNode.data },\r\n };\r\n\r\n const mapChildNodes = (childArray) =>\r\n (childArray || []).map((child) => ({\r\n ...child,\r\n id: idMapping[child.id] || getId(),\r\n parentNode: idMapping[child.parentNode] || newId,\r\n }));\r\n\r\n if (cNode.type === \"TreeView\" && cNode.data?.type === \"parent\") {\r\n duplicatedChild = {\r\n ...duplicatedChild,\r\n data: {\r\n ...cNode.data,\r\n rootParentId: idMapping[cNode.data?.rootParentId] || newId,\r\n leftChildrenOrder: mapChildNodes(cNode.data?.leftChildrenOrder),\r\n rightChildrenOrder: mapChildNodes(\r\n cNode.data?.rightChildrenOrder\r\n ),\r\n topChildrenOrder: mapChildNodes(cNode.data?.topChildrenOrder),\r\n bottomChildrenOrder: mapChildNodes(\r\n cNode.data?.bottomChildrenOrder\r\n ),\r\n },\r\n };\r\n } else if (\r\n cNode.type === \"TreeView\" &&\r\n cNode.data?.type === \"child\"\r\n ) {\r\n duplicatedChild = {\r\n ...duplicatedChild,\r\n data: {\r\n ...cNode.data,\r\n rootParentId: idMapping[cNode.data?.rootParentId] || newId,\r\n childrenOrder: mapChildNodes(cNode.data?.childrenOrder),\r\n },\r\n hiddenBy: cNode.hiddenBy\r\n ? idMapping[cNode.hiddenBy] || null\r\n : null,\r\n parentNode: idMapping[cNode.parentNode] || newId,\r\n };\r\n }\r\n\r\n return [\r\n duplicatedChild,\r\n ...duplicateChildNodesRecursive(cNode.id, newId),\r\n ];\r\n });\r\n };\r\n\r\n const duplicateChildNodes = duplicateChildNodesRecursive(\r\n node.id,\r\n duplicatedFrame.id\r\n );\r\n\r\n const selectedEdges = getConnectedEdges(getNodes(), getEdges()).filter(\r\n (edge) => idMapping[edge.source] && idMapping[edge.target]\r\n );\r\n\r\n const now = Date.now();\r\n const newEdges = selectedEdges\r\n .filter((edge) => idMapping[edge.source] && idMapping[edge.target])\r\n .map((edge) => {\r\n const id = `${edge.id}-${now}`;\r\n const source = idMapping[edge.source] || edge.source;\r\n const target = idMapping[edge.target] || edge.target;\r\n const edgeDataPoints = edge?.data?.points?.map((val) => ({\r\n ...val,\r\n x: val.x + Number(currentNodeWidth) + 20,\r\n }));\r\n\r\n return {\r\n ...edge,\r\n id,\r\n source,\r\n target,\r\n data: { ...edge?.data, points: edgeDataPoints },\r\n selected: false,\r\n };\r\n });\r\n\r\n let updatedNodes = [\r\n ...getNodes().map((nd) => ({ ...nd, selected: false })),\r\n duplicatedFrame,\r\n ...duplicateChildNodes,\r\n ];\r\n\r\n const updatedEdges = [...getEdges(), ...newEdges];\r\n\r\n setEdges((edges) => updatedEdges);\r\n setNodes((nds) => {\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: nds,\r\n edges: updatedEdges,\r\n lastEvent: \"\",\r\n },\r\n })\r\n );\r\n return updatedNodes;\r\n });\r\n\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = user_data ? JSON.parse(user_data) : {};\r\n\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n edges: updatedEdges,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n } else {\r\n handleDuplicate();\r\n }\r\n };\r\n\r\n const handleAddComment = () => {\r\n const currentNode = getNode(node.id);\r\n\r\n const widthN = width;\r\n const heightN = height;\r\n\r\n const x = currentNode?.position?.x + widthN || node?.xPos + widthN;\r\n const y = currentNode?.position?.y + heightN || node?.yPos + heightN;\r\n\r\n const timeNow = Date.now();\r\n const newComment = {\r\n id: `comment-${Date.now()}`,\r\n type: \"comment\",\r\n key: \"comment\",\r\n data: {\r\n label: \"New Comment\",\r\n ...userData,\r\n timestamp: timeNow,\r\n replyData: [],\r\n emoji: [],\r\n maxPosition: {\r\n x: x - currentNode?.position?.x || x - node?.xPos,\r\n y: y - currentNode?.position?.y || y - node?.yPos,\r\n },\r\n new: true,\r\n resolved: false,\r\n read: false,\r\n replyTimeStamp: null,\r\n },\r\n style: {\r\n zIndex: 999999999999,\r\n background: \"transparent\",\r\n border: 0,\r\n outline: \"none\",\r\n },\r\n parentNode: node?.id,\r\n position: {\r\n x: x - currentNode?.position?.x || x - node?.xPos,\r\n y: y - currentNode?.position?.y || y - node?.yPos,\r\n },\r\n positionAbsolute: {\r\n x: x - currentNode?.position?.x || x - node?.xPos,\r\n y: y - currentNode?.position?.y || y - node?.yPos,\r\n },\r\n dragging: true,\r\n selected: false,\r\n selectable: false,\r\n };\r\n\r\n setNodes((prevNodes) => {\r\n const updatedNodes = getNodes().map((node) => {\r\n if (!node.data.timestamp) {\r\n return {\r\n ...node,\r\n data: {\r\n ...node.data,\r\n timestamp: getTimeDifference(node.data.timestamp),\r\n replyTimeStamp: getTimeDifference(node?.data?.replyTimeStamp),\r\n },\r\n };\r\n }\r\n return node;\r\n });\r\n const newCommentWithCurrentTime = {\r\n ...newComment,\r\n data: {\r\n ...newComment.data,\r\n timestamp: timeNow,\r\n },\r\n };\r\n const finalUpdatedNodes = [...updatedNodes, newCommentWithCurrentTime];\r\n localStorage.setItem(\r\n \"architectureJson\",\r\n JSON.stringify({\r\n architecture_json: {\r\n nodes: finalUpdatedNodes,\r\n lastEvent: ``,\r\n },\r\n })\r\n );\r\n\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: finalUpdatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n\r\n return finalUpdatedNodes;\r\n });\r\n };\r\n\r\n const handleCaptureImagePng = async () => {\r\n try {\r\n if (simpleRef.current) {\r\n if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(\r\n `[data-id='${node.id}']`\r\n );\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Convert external images to base64\r\n const images = reactFlowContainer.querySelectorAll(\"img\");\r\n const originalSrcs = []; // Store original src attributes\r\n\r\n await Promise.all(\r\n Array.from(images).map(async (img) => {\r\n if (img.src.startsWith(\"http\")) {\r\n // Store the original src\r\n originalSrcs.push({ img, src: img.src });\r\n\r\n // Fetch the image and convert it to base64\r\n try {\r\n const response = await fetch(img.src);\r\n const blob = await response.blob();\r\n const base64 = await new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n img.src = base64; // Replace src with base64 data URL\r\n } catch (error) {\r\n console.error(\"Failed to convert image to base64:\", error);\r\n }\r\n }\r\n })\r\n );\r\n\r\n // Get frame position relative to React Flow container\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n // Calculate cropping coordinates\r\n const cropX = frameRect.left - containerRect.left + 2.2;\r\n const cropY = frameRect.top - containerRect.top + 2.2;\r\n const cropWidth = frameRect.width;\r\n const cropHeight = frameRect.height;\r\n\r\n // Capture entire React Flow area\r\n const canvas = await html2canvas(reactFlowContainer, {\r\n ignoreElements: (element) =>\r\n element.classList.contains(\"MuiTooltip-popper\") ||\r\n element.classList.contains(\"react-flow__background\"),\r\n useCORS: true, // Enable CORS for external images\r\n allowTaint: true, // Allow tainted canvases\r\n scale: 2,\r\n backgroundColor: null,\r\n foreignObjectRendering: true,\r\n logging: false,\r\n allowTaint: true,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: reactFlowContainer.scrollWidth,\r\n height: reactFlowContainer.scrollHeight,\r\n });\r\n\r\n // Create a new canvas for cropping\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const ctx = croppedCanvas.getContext(\"2d\");\r\n\r\n croppedCanvas.width = cropWidth * 2;\r\n croppedCanvas.height = cropHeight * 2;\r\n\r\n ctx.drawImage(\r\n canvas,\r\n cropX * 2,\r\n cropY * 2,\r\n cropWidth * 2,\r\n cropHeight * 2,\r\n 0,\r\n 0,\r\n cropWidth * 2,\r\n cropHeight * 2\r\n );\r\n\r\n // Convert to clipboard image\r\n const dataUrl = croppedCanvas.toDataURL(\"image/png\", 1.0);\r\n const link = document.createElement(\"a\");\r\n link.href = dataUrl;\r\n link.download = `${exportFileName}.png`;\r\n link.click();\r\n } catch (error) {\r\n console.error(\"error:\", error);\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n } else {\r\n const options = {\r\n scale: 5.0,\r\n useCORS: true,\r\n allowTaint: true,\r\n antialias: \"subpixel\",\r\n logging: false,\r\n backgroundColor: null,\r\n };\r\n\r\n const originalCanvas = await html2canvas(simpleRef.current, options);\r\n\r\n const currentNode = getNode(node.id);\r\n const desiredHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const desiredWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const fixedCanvas = document.createElement(\"canvas\");\r\n const aspectRatio = originalCanvas.width / originalCanvas.height;\r\n fixedCanvas.width = desiredWidth;\r\n fixedCanvas.height = desiredHeight;\r\n\r\n const ctx = fixedCanvas.getContext(\"2d\");\r\n\r\n let drawWidth = desiredWidth;\r\n let drawHeight = desiredWidth / aspectRatio;\r\n\r\n if (drawHeight > desiredHeight) {\r\n drawHeight = desiredHeight;\r\n drawWidth = desiredHeight * aspectRatio;\r\n }\r\n\r\n ctx.drawImage(\r\n originalCanvas,\r\n 0,\r\n 0,\r\n originalCanvas.width,\r\n originalCanvas.height,\r\n 0,\r\n 0,\r\n drawWidth,\r\n drawHeight\r\n );\r\n\r\n const dataUrl = fixedCanvas.toDataURL(\"image/png\", 1.0);\r\n const link = document.createElement(\"a\");\r\n link.href = dataUrl;\r\n link.download = `${exportFileName}.png`;\r\n link.click();\r\n }\r\n }\r\n } catch (error) {\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n };\r\n\r\n const handleCaptureImageSvg = async () => {\r\n try {\r\n if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(`[data-id='${node.id}']`);\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Get frame position relative to React Flow container\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n // Calculate cropping coordinates\r\n const cropBox = {\r\n startX: frameRect.left - containerRect.left + 2.2,\r\n startY: frameRect.top - containerRect.top + 2.2,\r\n width: frameRect.width,\r\n height: frameRect.height,\r\n };\r\n\r\n // Clone React Flow wrapper and apply cropping transformation\r\n const tempContainer = document.createElement(\"div\");\r\n tempContainer.style.position = \"absolute\";\r\n tempContainer.style.overflow = \"hidden\";\r\n tempContainer.style.left = `0px`;\r\n tempContainer.style.top = `0px`;\r\n tempContainer.style.zIndex = `-99999999999999999`;\r\n tempContainer.style.width = `${cropBox.width}px`;\r\n tempContainer.style.height = `${cropBox.height}px`;\r\n tempContainer.style.pointerEvents = \"none\";\r\n tempContainer.style.margin = \"auto\";\r\n\r\n const clonedElement = reactFlowContainer.cloneNode(true);\r\n clonedElement.style.position = \"relative\";\r\n clonedElement.style.transform = `translate(-${cropBox.startX}px, -${cropBox.startY}px)`;\r\n clonedElement.style.width = `100svw`;\r\n clonedElement.style.height = `100svh`;\r\n clonedElement.style.margin = \"auto\";\r\n\r\n // **Remove unwanted elements before appending**\r\n clonedElement\r\n .querySelectorAll(\".MuiTooltip-popper, .react-flow__background\")\r\n .forEach((el) => el.remove());\r\n\r\n tempContainer.appendChild(clonedElement);\r\n document.body.appendChild(tempContainer);\r\n\r\n const fontEmbedCSS = await generateFontEmbedCss();\r\n const dataUrl = await toSvg(tempContainer, {\r\n width: cropBox.width,\r\n height: cropBox.height,\r\n quality: 0,\r\n skipFonts: true,\r\n skipAutoScale: true,\r\n fontEmbedCSS: fontEmbedCSS,\r\n });\r\n\r\n document.body.removeChild(tempContainer);\r\n\r\n // Create and trigger download\r\n const svgText = decodeURIComponent(dataUrl.split(\",\")[1]);\r\n const blob = new Blob([svgText], { type: \"image/svg+xml\" });\r\n const link = document.createElement(\"a\");\r\n link.href = URL.createObjectURL(blob);\r\n link.download = `${exportFileName}.svg`;\r\n link.click();\r\n URL.revokeObjectURL(link.href);\r\n } catch (error) {\r\n console.error(\"Error capturing SVG:\", error);\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n }\r\n\r\n const element = simpleRef.current;\r\n\r\n if (element) {\r\n const svgSerializer = new XMLSerializer();\r\n const svg = elementToSVG(element);\r\n const svgString = svgSerializer.serializeToString(svg);\r\n const blob = new Blob([svgString], {\r\n type: \"image/svg+xml;charset=utf-8\",\r\n });\r\n\r\n const link = document.createElement(\"a\");\r\n const url = URL.createObjectURL(blob);\r\n link.href = url;\r\n link.download = `${exportFileName}.svg`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n }\r\n } catch (error) {\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n handleIsCapturing(false);\r\n }\r\n };\r\n\r\n const handleCaptureImageJpg = async () => {\r\n try {\r\n if (simpleRef.current) {\r\n if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(\r\n `[data-id='${node.id}']`\r\n );\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Convert external images to base64\r\n const images = reactFlowContainer.querySelectorAll(\"img\");\r\n const originalSrcs = []; // Store original src attributes\r\n\r\n await Promise.all(\r\n Array.from(images).map(async (img) => {\r\n if (img.src.startsWith(\"http\")) {\r\n // Store the original src\r\n originalSrcs.push({ img, src: img.src });\r\n\r\n // Fetch the image and convert it to base64\r\n try {\r\n const response = await fetch(img.src);\r\n const blob = await response.blob();\r\n const base64 = await new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n img.src = base64; // Replace src with base64 data URL\r\n } catch (error) {\r\n console.error(\"Failed to convert image to base64:\", error);\r\n }\r\n }\r\n })\r\n );\r\n\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n const cropX = frameRect.left - containerRect.left + 2.2;\r\n const cropY = frameRect.top - containerRect.top + 2.2;\r\n const cropWidth = frameRect.width;\r\n const cropHeight = frameRect.height;\r\n\r\n const canvas = await html2canvas(reactFlowContainer, {\r\n ignoreElements: (element) =>\r\n element.classList.contains(\"MuiTooltip-popper\") ||\r\n element.classList.contains(\"react-flow__background\"),\r\n useCORS: true, // Enable CORS for external images\r\n allowTaint: true, // Allow tainted canvases\r\n scale: 2,\r\n backgroundColor: \"#FFFFFF\", // Ensuring a white background\r\n foreignObjectRendering: true,\r\n logging: false,\r\n allowTaint: true,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: reactFlowContainer.scrollWidth,\r\n height: reactFlowContainer.scrollHeight,\r\n });\r\n\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const ctx = croppedCanvas.getContext(\"2d\");\r\n\r\n croppedCanvas.width = cropWidth * 2;\r\n croppedCanvas.height = cropHeight * 2;\r\n\r\n // Fill with white background before drawing image (for JPG)\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(0, 0, croppedCanvas.width, croppedCanvas.height);\r\n\r\n ctx.drawImage(\r\n canvas,\r\n cropX * 2,\r\n cropY * 2,\r\n cropWidth * 2,\r\n cropHeight * 2,\r\n 0,\r\n 0,\r\n cropWidth * 2,\r\n cropHeight * 2\r\n );\r\n\r\n const dataUrl = croppedCanvas.toDataURL(\"image/jpeg\", 1.0);\r\n const link = document.createElement(\"a\");\r\n link.href = dataUrl;\r\n link.download = `${exportFileName}.jpg`;\r\n link.click();\r\n } catch (error) {\r\n console.error(\"error:\", error);\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n } else {\r\n const options = {\r\n scale: 5.0,\r\n useCORS: true,\r\n allowTaint: true,\r\n antialias: \"subpixel\",\r\n logging: false,\r\n };\r\n\r\n const originalCanvas = await html2canvas(simpleRef.current, options);\r\n\r\n const currentNode = getNode(node.id);\r\n const desiredHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const desiredWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const fixedCanvas = document.createElement(\"canvas\");\r\n const aspectRatio = originalCanvas.width / originalCanvas.height;\r\n fixedCanvas.width = desiredWidth;\r\n fixedCanvas.height = desiredHeight;\r\n\r\n const ctx = fixedCanvas.getContext(\"2d\");\r\n\r\n let drawWidth = desiredWidth;\r\n let drawHeight = desiredWidth / aspectRatio;\r\n\r\n if (drawHeight > desiredHeight) {\r\n drawHeight = desiredHeight;\r\n drawWidth = desiredHeight * aspectRatio;\r\n }\r\n\r\n ctx.drawImage(\r\n originalCanvas,\r\n 0,\r\n 0,\r\n originalCanvas.width,\r\n originalCanvas.height,\r\n 0,\r\n 0,\r\n drawWidth,\r\n drawHeight\r\n );\r\n\r\n const dataUrl = fixedCanvas.toDataURL(\"image/jpeg\", 1.0);\r\n const link = document.createElement(\"a\");\r\n link.href = dataUrl;\r\n link.download = `${exportFileName}.jpg`;\r\n link.click();\r\n }\r\n }\r\n } catch (error) {\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n };\r\n\r\n const handleExportToDoc = async () => {\r\n try {\r\n const css = `\r\n \r\n `;\r\n const header = `\r\n ${css}`;\r\n\r\n // const updatedContent = await updateImageSizes(node.data.editorHTML);\r\n const docContent = header + node.data.editorHTML + \"\";\r\n const blob = new Blob([docContent], {\r\n type: \"application/msword\",\r\n });\r\n\r\n const link = document.createElement(\"a\");\r\n link.href = URL.createObjectURL(blob);\r\n link.download = `${node?.data?.title}.doc`;\r\n link.click();\r\n } catch (error) {\r\n dispatch(\r\n errorToast({\r\n message: \"Oops! Something went wrong\",\r\n })\r\n );\r\n }\r\n };\r\n\r\n async function handlePdfDownload() {\r\n try {\r\n if (!navigator.clipboard || !window.Image) {\r\n console.error(\"Clipboard API or Image not supported.\");\r\n return;\r\n }\r\n\r\n const clipboardItems = await navigator.clipboard.read();\r\n for (const item of clipboardItems) {\r\n if (\r\n item.types.includes(\"image/png\") ||\r\n item.types.includes(\"image/jpeg\")\r\n ) {\r\n const imageBlob = await item.getType(\"image/png\");\r\n const imageUrl = URL.createObjectURL(imageBlob);\r\n\r\n const img = new Image();\r\n img.src = imageUrl;\r\n\r\n img.onload = () => {\r\n const doc = new jsPDF();\r\n const pdfWidth = doc.internal.pageSize.width;\r\n const pdfHeight = doc.internal.pageSize.height;\r\n const padding = 10; // Adjust this value for more/less padding\r\n\r\n // Calculate available space after padding\r\n const availableWidth = pdfWidth - 2 * padding;\r\n const availableHeight = pdfHeight - 2 * padding;\r\n const ratio = Math.min(\r\n availableWidth / img.width,\r\n availableHeight / img.height\r\n );\r\n\r\n const imgWidth = img.width * ratio;\r\n const imgHeight = img.height * ratio;\r\n\r\n // Center the image within the padded area\r\n const x = (pdfWidth - imgWidth) / 2;\r\n const y = (pdfHeight - imgHeight) / 3.5;\r\n doc.addImage(img, \"PNG\", x, y, imgWidth, imgHeight);\r\n\r\n doc.save(\"pdf_download.pdf\");\r\n };\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error accessing clipboard:\", error);\r\n } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n handleIsCapturing(false);\r\n }\r\n }\r\n\r\n const handleExportToPdf = async () => {\r\n try {\r\n const options = {\r\n margin: 1,\r\n filename: \"document.pdf\",\r\n image: { type: \"jpeg\", quality: 0.98 },\r\n html2canvas: { scale: 2 },\r\n jsPDF: { unit: \"in\", format: \"letter\", orientation: \"portrait\" },\r\n };\r\n\r\n // Create a temporary element to hold HTML content\r\n const tempElement = document.createElement(\"div\");\r\n tempElement.innerHTML = node?.data?.editorHTML;\r\n\r\n html2pdf().set(options).from(tempElement).save();\r\n } catch (error) {\r\n dispatch(\r\n errorToast({\r\n message: \"Oops! Something went wrong\",\r\n })\r\n );\r\n }\r\n };\r\n\r\n const handleCaptureImagePdf = async () => {\r\n try {\r\n if (simpleRef.current) {\r\n if (\r\n node.type === \"frame\" ||\r\n node.type === \"group\" ||\r\n node.type === \"shapeTable\"\r\n ) {\r\n try {\r\n const reactFlowContainer = document.querySelector(\".react-flow\");\r\n const frameElement = document.querySelector(\r\n `[data-id='${node.id}']`\r\n );\r\n\r\n if (!reactFlowContainer || !frameElement) return;\r\n\r\n // Convert external images to base64\r\n const images = reactFlowContainer.querySelectorAll(\"img\");\r\n const originalSrcs = []; // Store original src attributes\r\n\r\n await Promise.all(\r\n Array.from(images).map(async (img) => {\r\n if (img.src.startsWith(\"http\")) {\r\n // Store the original src\r\n originalSrcs.push({ img, src: img.src });\r\n\r\n // Fetch the image and convert it to base64\r\n try {\r\n const response = await fetch(img.src);\r\n const blob = await response.blob();\r\n const base64 = await new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.readAsDataURL(blob);\r\n });\r\n img.src = base64; // Replace src with base64 data URL\r\n } catch (error) {\r\n console.error(\"Failed to convert image to base64:\", error);\r\n }\r\n }\r\n })\r\n );\r\n\r\n // Get frame position relative to React Flow container\r\n const containerRect = reactFlowContainer.getBoundingClientRect();\r\n const frameRect = frameElement.getBoundingClientRect();\r\n\r\n // Calculate cropping coordinates\r\n const cropX = frameRect.left - containerRect.left + 2.2;\r\n const cropY = frameRect.top - containerRect.top + 2.2;\r\n const cropWidth = frameRect.width;\r\n const cropHeight = frameRect.height;\r\n\r\n // Capture entire React Flow area\r\n const canvas = await html2canvas(reactFlowContainer, {\r\n ignoreElements: (element) =>\r\n element.classList.contains(\"MuiTooltip-popper\") ||\r\n element.classList.contains(\"react-flow__background\"),\r\n useCORS: true, // Enable CORS for external images\r\n allowTaint: true, // Allow tainted canvases\r\n scale: 2,\r\n backgroundColor: null,\r\n foreignObjectRendering: true,\r\n logging: false,\r\n allowTaint: true,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: reactFlowContainer.scrollWidth,\r\n height: reactFlowContainer.scrollHeight,\r\n });\r\n\r\n // Create a new canvas for cropping\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const ctx = croppedCanvas.getContext(\"2d\");\r\n\r\n croppedCanvas.width = cropWidth * 2;\r\n croppedCanvas.height = cropHeight * 2;\r\n\r\n ctx.drawImage(\r\n canvas,\r\n cropX * 2,\r\n cropY * 2,\r\n cropWidth * 2,\r\n cropHeight * 2,\r\n 0,\r\n 0,\r\n cropWidth * 2,\r\n cropHeight * 2\r\n );\r\n\r\n // Convert to image\r\n const dataUrl = croppedCanvas.toDataURL(\"image/png\", 1.0);\r\n const pdf = new jsPDF();\r\n const imgProps = pdf.getImageProperties(dataUrl);\r\n const pdfWidth = pdf.internal.pageSize.getWidth();\r\n const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n\r\n pdf.addImage(dataUrl, \"PNG\", 0, 0, pdfWidth, pdfHeight);\r\n pdf.save(`${exportFileName}.pdf`);\r\n } catch (error) {\r\n console.error(\"error:\", error);\r\n } finally {\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n return;\r\n } else {\r\n const options = {\r\n scale: 5.0,\r\n useCORS: true,\r\n allowTaint: true,\r\n antialias: \"subpixel\",\r\n logging: false,\r\n };\r\n\r\n const originalCanvas = await html2canvas(simpleRef.current, options);\r\n\r\n const currentNode = getNode(node.id);\r\n const desiredHeight = currentNode.style.height\r\n ? typeof currentNode.style.height === \"string\"\r\n ? Number(currentNode.style.height.replace(\"px\", \"\"))\r\n : currentNode.style.height\r\n : currentNode.height || 100;\r\n\r\n const desiredWidth = currentNode.style.width\r\n ? typeof currentNode.style.width === \"string\"\r\n ? Number(currentNode.style.width.replace(\"px\", \"\"))\r\n : currentNode.style.width\r\n : currentNode.width || 100;\r\n\r\n const fixedCanvas = document.createElement(\"canvas\");\r\n const aspectRatio = originalCanvas.width / originalCanvas.height;\r\n fixedCanvas.width = desiredWidth;\r\n fixedCanvas.height = desiredHeight;\r\n\r\n const ctx = fixedCanvas.getContext(\"2d\");\r\n\r\n let drawWidth = desiredWidth;\r\n let drawHeight = desiredWidth / aspectRatio;\r\n\r\n if (drawHeight > desiredHeight) {\r\n drawHeight = desiredHeight;\r\n drawWidth = desiredHeight * aspectRatio;\r\n }\r\n\r\n ctx.drawImage(\r\n originalCanvas,\r\n 0,\r\n 0,\r\n originalCanvas.width,\r\n originalCanvas.height,\r\n 0,\r\n 0,\r\n drawWidth,\r\n drawHeight\r\n );\r\n\r\n const dataUrl = fixedCanvas.toDataURL(\"image/png\", 1.0);\r\n const pdf = new jsPDF();\r\n\r\n const imgProps = pdf.getImageProperties(dataUrl);\r\n const pdfWidth = pdf.internal.pageSize.getWidth();\r\n const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n\r\n pdf.addImage(dataUrl, \"PNG\", 0, 0, pdfWidth, pdfHeight);\r\n\r\n pdf.save(`${exportFileName}.pdf`);\r\n // const link = document.createElement(\"a\");\r\n // link.href = dataUrl;\r\n // link.download = `${\"card\" || \"Cloudairy card\"}.jpg`;\r\n // link.click();\r\n }\r\n }\r\n } catch (error) {\r\n } finally {\r\n // setDownloadLoading(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n handleIsCapturing(false);\r\n }\r\n };\r\n\r\n const moreMenusData = [\r\n {\r\n id: \"child\",\r\n children: [\r\n ...(edit\r\n ? [\r\n {\r\n mainLabel: \"Edit\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickEdit();\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(saveFile\r\n ? [\r\n {\r\n mainLabel: \"Add to Saved files\",\r\n // onClick: () => {\r\n // setShowFrameMoreOptions(false);\r\n // handleClickRename();\r\n // },\r\n },\r\n ]\r\n : []),\r\n ...(originalSize\r\n ? [\r\n {\r\n mainLabel: \"Scale to original size\",\r\n shortCut: \"\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickOriginalImage();\r\n },\r\n disabled: !node.data.scale,\r\n },\r\n ]\r\n : []),\r\n ...(download\r\n ? [\r\n {\r\n mainLabel: \"Download\",\r\n shortCut: \"\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickDownload();\r\n },\r\n disabled: !node.data.imageShow,\r\n },\r\n ]\r\n : []),\r\n ...(hideImage\r\n ? [\r\n {\r\n mainLabel: !node.data.imageShow ? \"Show Image\" : \"Hide Image\",\r\n shortCut: \"\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleHideImage();\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n {\r\n id: \"child1\",\r\n children: [\r\n ...(showRename\r\n ? [\r\n {\r\n mainLabel: \"Rename\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickRename();\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(showCutCopyPaste\r\n ? [\r\n {\r\n mainLabel: \"Cut\",\r\n shortCut: \"Ctrl + X\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (type === \"list\") {\r\n handleCut();\r\n } else {\r\n cut();\r\n }\r\n },\r\n },\r\n {\r\n mainLabel: \"Copy\",\r\n shortCut: \"Ctrl + C\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (type === \"list\") {\r\n handleCut(\"copy\");\r\n } else {\r\n copy();\r\n }\r\n },\r\n },\r\n // {\r\n // mainLabel: \"Paste\",\r\n // shortCut: \"Ctrl + V\",\r\n // onClick: () => {\r\n // setShowFrameMoreOptions(false);\r\n // paste();\r\n // },\r\n // },\r\n ]\r\n : []),\r\n ...(showCopyAsImage\r\n ? [\r\n {\r\n mainLabel: \"Copy as Image\",\r\n shortCut: \"Ctrl + shift + C\",\r\n onClick: () => {\r\n const selectedNode = getNode(node.id);\r\n if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n }\r\n\r\n setCopyAsImage(true);\r\n // setShowFrameMoreOptions(false);\r\n setTimeout(() => {\r\n handleCopyAsImage();\r\n }, 100);\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(showDuplicate\r\n ? [\r\n {\r\n mainLabel: \"Duplicate\",\r\n shortCut: \"Ctrl + D\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickDuplicate();\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(showFrame\r\n ? [\r\n {\r\n mainLabel: \"Create Frame\",\r\n shortCut: \" \",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleCreateFrame();\r\n },\r\n disabled: node.data.frame,\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n {\r\n id: \"child2\",\r\n children: [\r\n // {\r\n // mainLabel: \"Add Comment\",\r\n // shortCut: \"C\",\r\n // },\r\n ...(showAddComment\r\n ? [\r\n {\r\n mainLabel: \"Add Comment\",\r\n shortCut: \"C\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleAddComment();\r\n },\r\n },\r\n ]\r\n : []),\r\n // {\r\n // mainLabel: \"Add Note\",\r\n // },\r\n ],\r\n },\r\n {\r\n id: \"child3\",\r\n children: [\r\n ...(showLockUnlock\r\n ? [\r\n {\r\n mainLabel: node?.data?.locked ? \"Unlock\" : \"Lock\",\r\n shortCut: \"Ctrl + shift + L\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n toggleLockedFrame();\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(showDeleteColumn\r\n ? [\r\n {\r\n mainLabel: \"Delete Column\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickDeleteRowCol();\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(showDeleteRow\r\n ? [\r\n {\r\n mainLabel: \"Delete Row\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n handleClickDeleteRowCol();\r\n },\r\n },\r\n ]\r\n : []),\r\n // {\r\n // mainLabel: node.data.locked ? \"Unlock\" : \"Lock\",\r\n // shortCut: \"Ctrl + shift + L\",\r\n // onClick: () => toggleLockedFrame(),\r\n // },\r\n ],\r\n },\r\n // {\r\n // id: \"child3\",\r\n // children: [\r\n // {\r\n // mainLabel: \"Copy Style\",\r\n // shortCut: \"Ctrl + Alt + C\",\r\n // },\r\n // {\r\n // mainLabel: \"Paste Style\",\r\n // shortCut: \"Ctrl + Alt + V\",\r\n // },\r\n // ],\r\n // },\r\n\r\n // {\r\n // id: \"child4\",\r\n // children: [\r\n // ...(showCopyLink\r\n // ? [\r\n // {\r\n // mainLabel: \"Copy Link\",\r\n // shortCut: \"Ctrl + Alt + shift + C\",\r\n // onClick: () => {\r\n // setShowFrameMoreOptions(false);\r\n // handleClickCopyLink();\r\n // // const url = node?.data?.data?.url;\r\n // // if (url) {\r\n // // navigator.clipboard.writeText(url);\r\n // // }\r\n // },\r\n // },\r\n // ]\r\n // : []),\r\n // // {\r\n // // mainLabel: \"Copy Link\",\r\n // // shortCut: \"Ctrl + Alt + shift + C\",\r\n // // },\r\n // ...(showLinkTo\r\n // ? [\r\n // {\r\n // mainLabel: \"Link to\",\r\n // shortCut: \"Alt + Ctrl + K\",\r\n // onClick: () => {\r\n // setShowFrameMoreOptions(false);\r\n // handleClickCopyLink();\r\n // // const url = node?.data?.data?.url;\r\n // // if (url) {\r\n // // navigator.clipboard.writeText(url);\r\n // // }\r\n // },\r\n // },\r\n // ]\r\n // : []),\r\n // ],\r\n // },\r\n {\r\n id: \"child6\",\r\n children: [\r\n ...(showBringToFrontAndBack\r\n ? [\r\n {\r\n mainLabel: \"Bring to front\",\r\n shortCut: \"Ctrl + shift + F\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (node.type === \"group\") {\r\n const currentNode = getNode(node.id);\r\n handleBringToFrontGroup(currentNode);\r\n } else {\r\n handleBringToFront();\r\n }\r\n },\r\n },\r\n {\r\n mainLabel: \"Send to back\",\r\n shortCut: \"Ctrl + shift + B\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (node.type === \"group\") {\r\n const currentNode = getNode(node.id);\r\n handleSendToBackGroup(currentNode);\r\n } else {\r\n handleBringToBack();\r\n }\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n {\r\n id: \"child9\",\r\n children: [\r\n ...(exportShow\r\n ? [\r\n {\r\n mainLabel: \"Export\",\r\n rightArrowIcons: (\r\n \r\n ),\r\n onClick: (event) => {\r\n setShowExportOptions(!showExportOptions);\r\n },\r\n activeState: showExportOptions,\r\n subChild: [\r\n {\r\n label: \"PNG\",\r\n value: \"png\",\r\n onClick: (event) => {\r\n event.stopPropagation();\r\n setIsDownload(true);\r\n handleIsCapturing(true);\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n setCopyAsImage(true);\r\n setTimeout(() => {\r\n // handleCaptureImagePng();\r\n\r\n handleCopyImage(\"png\");\r\n }, 200);\r\n },\r\n },\r\n ...(node.type !== \"chart\" && node.type !== \"resizeLink\"\r\n ? [\r\n {\r\n label: \"SVG\",\r\n value: \"svg\",\r\n onClick: (event) => {\r\n event.stopPropagation();\r\n handleIsCapturing(true);\r\n setIsDownload(true);\r\n setTimeout(() => {\r\n handleCaptureImageSvg();\r\n }, 200);\r\n },\r\n },\r\n ]\r\n : []),\r\n {\r\n label: \"JPG\",\r\n value: \"jpg\",\r\n onClick: (event) => {\r\n setIsDownload(true);\r\n event.stopPropagation();\r\n handleIsCapturing(true);\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n setCopyAsImage(true);\r\n setTimeout(() => {\r\n // handleCaptureImageJpg();\r\n handleCopyImage(\"jpg\");\r\n }, 200);\r\n },\r\n },\r\n {\r\n label: \"PDF\",\r\n value: \"pdf\",\r\n onClick: (event) => {\r\n handleIsCapturing(true);\r\n if (node.type === \"document\") {\r\n event.stopPropagation();\r\n handleExportToPdf();\r\n } else {\r\n setIsDownload(true);\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n event.stopPropagation();\r\n setCopyAsImage(true);\r\n setTimeout(() => {\r\n // handleCaptureImagePdf();\r\n handleCopyImage(undefined, true);\r\n }, 200);\r\n }\r\n },\r\n },\r\n ...(node.type === \"document\"\r\n ? [\r\n {\r\n label: \"Word Document\",\r\n value: \"word\",\r\n onClick: (event) => {\r\n event.stopPropagation();\r\n handleExportToDoc();\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n ]\r\n : [\r\n // {\r\n // label: \"PNG\",\r\n // value: \"png\",\r\n // onClick: (event) => {\r\n // event.stopPropagation();\r\n // setIsDownload(true);\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n // setTimeout(() => {\r\n // handleCaptureImagePng();\r\n // }, 200);\r\n // },\r\n // },\r\n // ...(node.type !== \"frame\"\r\n // ? [\r\n // {\r\n // label: \"SVG\",\r\n // value: \"svg\",\r\n // onClick: (event) => {\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n // event.stopPropagation();\r\n // setIsDownload(true);\r\n // setTimeout(() => {\r\n // handleCaptureImageSvg();\r\n // }, 200);\r\n // },\r\n // },\r\n // ]\r\n // : []),\r\n // {\r\n // label: \"JPG\",\r\n // value: \"jpg\",\r\n // onClick: (event) => {\r\n // setIsDownload(true);\r\n // event.stopPropagation();\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n // setTimeout(() => {\r\n // handleCaptureImageJpg();\r\n // }, 200);\r\n // },\r\n // },\r\n // {\r\n // label: \"PDF\",\r\n // value: \"pdf\",\r\n // onClick: (event) => {\r\n // setIsDownload(true);\r\n // const selectedNode = getNode(node.id);\r\n // if (selectedNode.type === \"frame\") {\r\n // fitView({\r\n // nodes: [selectedNode],\r\n // padding: 1,\r\n // duration: 50,\r\n // });\r\n // }\r\n // event.stopPropagation();\r\n // setTimeout(() => {\r\n // handleCaptureImagePdf();\r\n // }, 200);\r\n // },\r\n // },\r\n ]),\r\n ],\r\n },\r\n {\r\n id: \"child7\",\r\n children: [\r\n ...(showDelete\r\n ? [\r\n {\r\n mainLabel: \"Delete\",\r\n shortCut: \"Delete\",\r\n onClick: () => {\r\n if (type === \"list\") {\r\n setShowFrameMoreOptions(false);\r\n handleDelete();\r\n } else {\r\n setShowFrameMoreOptions(false);\r\n handleDeleteNode();\r\n }\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n ];\r\n\r\n const toggleLockedFrame = () => {\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n setNodes((n) => {\r\n const updatedNodes = n.map((nd) =>\r\n nd.id === node.id\r\n ? {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n locked: !nd.data.locked,\r\n data: {\r\n ...(nd?.data?.data || {}),\r\n locked: !nd?.data?.data?.locked,\r\n },\r\n },\r\n }\r\n : nd\r\n );\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n return updatedNodes;\r\n });\r\n };\r\n\r\n const finalMenu = moreMenusData.filter(\r\n (moreMenu) => moreMenu.children.length > 0\r\n );\r\n\r\n return (\r\n <>\r\n \r\n {/* {moreMenusData.map((moreMenu, mainIndex) => {\r\n return (\r\n \r\n {moreMenu.children.map((child, i) => {\r\n return (\r\n {\r\n child.onClick && child.onClick(event);\r\n }}\r\n >\r\n \r\n {child.mainLabel}\r\n \r\n {child.shortCut && (\r\n \r\n {child.shortCut}\r\n \r\n )}\r\n {child.rightArrowIcons && child.rightArrowIcons}\r\n {child.subChild && (\r\n \r\n {child.subChild.map((subChild, subCI) => {\r\n return (\r\n {\r\n subChild.onClick && subChild.onClick(event);\r\n }}\r\n >\r\n \r\n {subChild.label}\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })} */}\r\n {finalMenu.map((moreMenu, mainIndex) => {\r\n return (\r\n \r\n {moreMenu.children.map((child, i) => {\r\n const isDisabled = child.disabled;\r\n\r\n return (\r\n {\r\n if (!isDisabled && child.onClick) {\r\n // Only execute if not disabled\r\n event.stopPropagation();\r\n child.onClick(event);\r\n }\r\n }}\r\n >\r\n {/* {copyAsImage && child.mainLabel === \"Copy as Image\" ? (\r\n \r\n ) : ( */}\r\n \r\n {child.mainLabel}\r\n \r\n {/* )} */}\r\n {child.shortCut && (\r\n \r\n {child.shortCut}\r\n \r\n )}\r\n {child.rightArrowIcons && child.rightArrowIcons}\r\n {child.subChild && (\r\n \r\n {child.subChild.map((subChild, subCI) => {\r\n return (\r\n {\r\n if (!isDisabled && subChild.onClick) {\r\n event.stopPropagation();\r\n subChild.onClick(event);\r\n }\r\n }}\r\n >\r\n \r\n {subChild.label}\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n {\r\n setShowShapesLimitModal(false);\r\n }}\r\n open={showShapesLimitModal}\r\n content=\"You’ve reached the shape limit for your current plan. Upgrade to unlock unlimited shapes and enhance your diagramming experience.\"\r\n heading=\"Upgrade for Unlimited Shapes\"\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default FrameMoreMenus;\r\n","import { Stack, Typography } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport { framesData } from \"./FrameToolbar\";\r\nimport { useReactFlow } from \"reactflow\";\r\nimport { updateJson } from \"../../../CommanFunctions/commanFunctions\";\r\nimport { useLocation, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useUndoRedo } from \"../../DrawBoard/dndUndoRedo/UndoRedoProvider\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\n\r\nconst FrameTypesPopup = ({ setShowFrameTypes, node }) => {\r\n const location = useLocation();\r\n const { id } = useParams();\r\n const dispatch = useDispatch();\r\n const { undo, takeSnapshot } = useUndoRedo();\r\n const user_data = localStorage.getItem(\"user_data\");\r\n const { setNodes, getNodes } = useReactFlow();\r\n\r\n const selectedNode = getNodes().filter((node) => node.selected === true);\r\n\r\n const handleChangeFrameType = (height, width, variant) => {\r\n const sizeRatio =\r\n selectedNode[0].data.sizeRatio !== undefined\r\n ? typeof selectedNode[0].data.sizeRatio === \"number\"\r\n ? selectedNode[0].data.sizeRatio\r\n : 1\r\n : 1;\r\n\r\n const newWidth =\r\n typeof width === \"string\"\r\n ? `${Number(width.replaceAll(\"px\", \"\")) * sizeRatio}px`\r\n : width * sizeRatio;\r\n\r\n const newHeight =\r\n typeof height === \"string\"\r\n ? `${Number(height.replaceAll(\"px\", \"\")) * sizeRatio}px`\r\n : height * sizeRatio;\r\n\r\n setNodes((prevNodes) => {\r\n let updatedNode;\r\n const updatedNodes = prevNodes.map((node) => {\r\n if (node.id === selectedNode[0]?.id) {\r\n updatedNode = {\r\n ...node,\r\n data: {\r\n ...node.data,\r\n variant,\r\n showDevice: false,\r\n style: {\r\n ...node.data.style,\r\n width: newWidth,\r\n height: newHeight,\r\n },\r\n },\r\n style: {\r\n ...node.style,\r\n width: newWidth,\r\n height: newHeight,\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return node;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n\r\n return updatedNodes;\r\n });\r\n setShowFrameTypes(false);\r\n };\r\n\r\n const isFrameSelected = (frame) => {\r\n if (!selectedNode[0]) return false;\r\n\r\n const selectedLabel = node?.data?.variant;\r\n\r\n return selectedLabel === frame.variant;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {framesData.map((frame, i) => {\r\n return (\r\n \r\n handleChangeFrameType(frame.height, frame.width, frame.variant)\r\n }\r\n >\r\n \r\n \r\n {frame.label}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FrameTypesPopup;\r\n","import {\r\n Box,\r\n Stack,\r\n styled,\r\n Switch,\r\n Tooltip,\r\n tooltipClasses,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { NodeToolbar, Position, useReactFlow } from \"reactflow\";\r\nimport {\r\n Ic16_9FrameOutlined,\r\n Ic1_1FrameOutlined,\r\n Ic3_4FrameOutlined,\r\n Ic4_3FrameOutlined,\r\n IcBorderStyle,\r\n IcBrowserOutlined,\r\n IcCustomFrameOutlined,\r\n IcDownArrow,\r\n IcEyeClose2,\r\n IcEyeOpen,\r\n IcFileOutlined,\r\n IcLockLocked,\r\n IcLockUnLocked,\r\n IcMenuDotsVertical,\r\n IcPhoneOutlined,\r\n IcSectionOutlined,\r\n IcShadowOffOutlined,\r\n IcShadowOnOutlined,\r\n IcTabletOutlined,\r\n} from \"../../../assets/icon-components\";\r\nimport {\r\n CustomNameTooltip,\r\n CustomTooltip,\r\n} from \"../../DrawBoard/top-toolbar/components/CustomTooltip\";\r\nimport FrameBorderToolbar from \"./FrameBorderToolbar\";\r\nimport FrameTypesPopup from \"./FrameTypesPopup\";\r\nimport FrameBackgroundToolbar from \"./FrameBackgroundToolbar\";\r\nimport FrameMoreMenus from \"./FrameMoreMenus\";\r\nimport { updateJson } from \"../../../CommanFunctions/commanFunctions\";\r\nimport { useLocation, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useUndoRedo } from \"../../DrawBoard/dndUndoRedo/UndoRedoProvider\";\r\nimport { useSelector } from \"react-redux\";\r\nimport CustomSwitch from \"../../../common-components/CustomSwitch\";\r\n\r\nexport const framesData = [\r\n {\r\n Icon: IcCustomFrameOutlined,\r\n label: \"Custom\",\r\n variant: \"custom\",\r\n width: \"675px\",\r\n height: \"325px\",\r\n },\r\n {\r\n Icon: IcSectionOutlined,\r\n label: \"Section\",\r\n variant: \"section\",\r\n width: \"675px\",\r\n height: \"325px\",\r\n },\r\n {\r\n Icon: Ic16_9FrameOutlined,\r\n label: \"16 : 9\",\r\n variant: \"16:9\",\r\n width: \"675px\",\r\n height: \"379.69px\",\r\n },\r\n {\r\n Icon: Ic4_3FrameOutlined,\r\n label: \"4 : 3\",\r\n variant: \"4:3\",\r\n width: \"675px\",\r\n height: \"506.25px\",\r\n },\r\n {\r\n Icon: Ic1_1FrameOutlined,\r\n label: \"1 : 1\",\r\n variant: \"1:1\",\r\n width: \"675px\",\r\n height: \"675px\",\r\n },\r\n {\r\n Icon: Ic3_4FrameOutlined,\r\n label: \"3 : 4\",\r\n variant: \"3:4\",\r\n width: \"506.25px\",\r\n height: \"675px\",\r\n },\r\n {\r\n Icon: IcFileOutlined,\r\n label: \"A4\",\r\n variant: \"A4\",\r\n width: \"500px\",\r\n height: \"707.01px\",\r\n },\r\n {\r\n Icon: IcPhoneOutlined,\r\n label: \"Phone\",\r\n variant: \"phone\",\r\n width: \"381.37px\",\r\n height: \"800px\",\r\n },\r\n {\r\n Icon: IcTabletOutlined,\r\n label: \"Tablet\",\r\n variant: \"tablet\",\r\n width: \"572.2px\",\r\n height: \"800px\",\r\n },\r\n {\r\n Icon: IcBrowserOutlined,\r\n label: \"Browser\",\r\n variant: \"browser\",\r\n width: \"1349.94px\",\r\n height: \"850px\",\r\n },\r\n];\r\n\r\nconst FrameToolbar = ({\r\n node,\r\n isShowToolsPop,\r\n setIsShowToolsPop,\r\n handleClickRename,\r\n handleClickDuplicate,\r\n simpleRef,\r\n}) => {\r\n const { setNodes, getNodes, getNode } = useReactFlow();\r\n\r\n const currentNode = getNode(node.id);\r\n const [showBorderPopup, setShowBorderPopup] = useState(false);\r\n const [showBackgroundPopup, setShowBackgroundPopup] = useState(false);\r\n const [showFrameTypes, setShowFrameTypes] = useState(false);\r\n const [showFrameMoreOptions, setShowFrameMoreOptions] = useState(false);\r\n const location = useLocation();\r\n const { id } = useParams();\r\n const dispatch = useDispatch();\r\n const { undo, takeSnapshot } = useUndoRedo();\r\n const user_data = localStorage.getItem(\"user_data\");\r\n const [checked, setChecked] = useState(node?.data?.showDevice || false);\r\n\r\n const handleSwitchChange = (event) => {\r\n\r\n let updatedNodes = [];\r\n setNodes((n) => {\r\n updatedNodes = n.map((nd) => {\r\n if (nd.id === node.id) {\r\n return {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n showDevice: !checked,\r\n isShadow: false,\r\n },\r\n };\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n setChecked(!checked);\r\n };\r\n // useEffect(() => {\r\n // setChecked(node?.data?.showDevice);\r\n // }, [node]);\r\n\r\n const SelectedFrameIcon = useMemo(\r\n () =>\r\n framesData.filter((frame) => frame.variant === node.data.variant)[0]\r\n ?.Icon,\r\n [node]\r\n );\r\n\r\n const toggleHideShowFrame = () => {\r\n const childNodes = getNodes()\r\n .filter((nd) => nd.parentNode === node.id)\r\n .map((nd) => nd.id);\r\n\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(false);\r\n setShowFrameMoreOptions(false);\r\n let updatedNodes = getNodes();\r\n const updatedNode = [];\r\n setNodes((n) => {\r\n updatedNodes = n.map((nd) => {\r\n if (nd.id === node.id) {\r\n let temp = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n hide: !nd.data.hide,\r\n },\r\n };\r\n updatedNode.push(temp);\r\n return temp;\r\n } else {\r\n if (childNodes.includes(nd.id)) {\r\n let temp = {\r\n ...nd,\r\n hidden: !node?.data?.hide,\r\n };\r\n updatedNode.push(temp);\r\n return temp;\r\n }\r\n return nd;\r\n }\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const toggleLockedFrame = () => {\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(false);\r\n setShowFrameMoreOptions(false);\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((n) => {\r\n updatedNodes = n.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n locked: !nd.data.locked,\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n takeSnapshot,\r\n });\r\n };\r\n\r\n const toggleShadow = () => {\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(false);\r\n setShowFrameMoreOptions(false);\r\n let updatedNodes = getNodes();\r\n let updatedNode;\r\n setNodes((n) => {\r\n updatedNodes = n.map((nd) => {\r\n if (nd.id === node.id) {\r\n updatedNode = {\r\n ...nd,\r\n data: {\r\n ...nd.data,\r\n isShadow: !nd.data.isShadow,\r\n },\r\n };\r\n return updatedNode;\r\n }\r\n return nd;\r\n });\r\n return updatedNodes;\r\n });\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n let parsedData = {};\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n updateJson({\r\n json: {\r\n architecture_json: {\r\n nodes: updatedNodes,\r\n lastUpdatedBy: parsedData?.user_id,\r\n },\r\n },\r\n id,\r\n dispatch,\r\n undo,\r\n takeSnapshot,\r\n a_id,\r\n });\r\n };\r\n const frameTypesRef = useRef(null);\r\n const backgroundPopupRef = useRef(null);\r\n const borderPopupRef = useRef(null);\r\n const frameMoreOptionsRef = useRef(null);\r\n\r\n // const handleClickOutside = (event) => {\r\n // if (\r\n // frameTypesRef.current &&\r\n // !frameTypesRef.current.contains(event.target)\r\n // ) {\r\n // setShowFrameTypes(false);\r\n // }\r\n // if (\r\n // backgroundPopupRef.current &&\r\n // !backgroundPopupRef.current.contains(event.target)\r\n // ) {\r\n // setShowBackgroundPopup(false);\r\n // }\r\n // if (\r\n // borderPopupRef.current &&\r\n // !borderPopupRef.current.contains(event.target)\r\n // ) {\r\n // setShowBorderPopup(false);\r\n // }\r\n // if (\r\n // frameMoreOptionsRef.current &&\r\n // !frameMoreOptionsRef.current.contains(event.target)\r\n // ) {\r\n // setShowFrameMoreOptions(false);\r\n // }\r\n // };\r\n\r\n useEffect(() => {\r\n if (!isShowToolsPop) {\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(false);\r\n setShowFrameMoreOptions(false);\r\n }\r\n }, [isShowToolsPop]);\r\n\r\n // useEffect(() => {\r\n // document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return () => {\r\n // document.removeEventListener(\"mousedown\", handleClickOutside);\r\n // };\r\n // }, []);\r\n\r\n // const SwitchBox = styled((props) => (\r\n // {\r\n // }}\r\n // />\r\n // ))(({ theme }) => ({\r\n // width: 28,\r\n // height: 17,\r\n // padding: 0,\r\n // \"& .MuiSwitch-switchBase\": {\r\n // padding: 0,\r\n // margin: 3,\r\n // transitionDuration: \"300ms\",\r\n // \"&.Mui-checked\": {\r\n // transform: \"translateX(11px)\",\r\n // color: \"#fff\",\r\n // \"& + .MuiSwitch-track\": {\r\n // backgroundColor: color?.primaryColor,\r\n // opacity: 1,\r\n // border: 0,\r\n // ...theme.applyStyles(\"dark\", {\r\n // backgroundColor: \"#2ECA45\",\r\n // }),\r\n // },\r\n // \"&.Mui-disabled + .MuiSwitch-track\": {\r\n // opacity: 0.5,\r\n // },\r\n // },\r\n // \"&.Mui-focusVisible .MuiSwitch-thumb\": {\r\n // color: \"#33cf4d\",\r\n // border: \"6px solid #fff\",\r\n // },\r\n // \"&.Mui-disabled .MuiSwitch-thumb\": {\r\n // color: theme.palette.grey[100],\r\n // ...theme.applyStyles(\"dark\", {\r\n // color: theme.palette.grey[600],\r\n // }),\r\n // },\r\n // \"&.Mui-disabled + .MuiSwitch-track\": {\r\n // opacity: 0.7,\r\n // ...theme.applyStyles(\"dark\", {\r\n // opacity: 0.3,\r\n // }),\r\n // },\r\n // },\r\n // \"& .MuiSwitch-thumb\": {\r\n // boxSizing: \"border-box\",\r\n // width: 11,\r\n // height: 11,\r\n // },\r\n // \"& .MuiSwitch-track\": {\r\n // borderRadius: 17 / 2,\r\n // backgroundColor: \"#E9E9EA\",\r\n // opacity: 1,\r\n // transition: theme.transitions.create([\"background-color\"], {\r\n // duration: 500,\r\n // }),\r\n // ...theme.applyStyles(\"dark\", {\r\n // backgroundColor: \"#39393D\",\r\n // }),\r\n // },\r\n // }));\r\n\r\n return (\r\n <>\r\n \r\n \r\n {!node.data.locked && (\r\n <>\r\n {!node?.data?.isOrgChartFrame && (\r\n <>\r\n \r\n setShowFrameTypes(false)}\r\n open={showFrameTypes}\r\n disableFocusListener\r\n disableHoverListener\r\n disableTouchListener\r\n title={\r\n \r\n }\r\n >\r\n \r\n \r\n {\r\n setShowBorderPopup(false);\r\n setShowFrameTypes(!showFrameTypes);\r\n setShowBackgroundPopup(false);\r\n setShowFrameMoreOptions(false);\r\n setIsShowToolsPop(true);\r\n }}\r\n >\r\n {SelectedFrameIcon && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {(node?.data?.variant === \"phone\" ||\r\n node?.data?.variant === \"tablet\" ||\r\n node?.data?.variant === \"browser\") && (\r\n <>\r\n \r\n \r\n Show Device\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n setShowBackgroundPopup(false)}\r\n open={showBackgroundPopup}\r\n disableFocusListener\r\n disableHoverListener\r\n disableTouchListener\r\n title={\r\n \r\n }\r\n >\r\n \r\n \r\n {\r\n setShowBorderPopup(false);\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(!showBackgroundPopup);\r\n setShowFrameMoreOptions(false);\r\n setIsShowToolsPop(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {node.data?.variant !== \"section\" && !node?.data?.showDevice && (\r\n \r\n setShowBorderPopup(false)}\r\n open={showBorderPopup}\r\n disableFocusListener\r\n disableHoverListener\r\n disableTouchListener\r\n title={}\r\n >\r\n \r\n \r\n {\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(!showBorderPopup);\r\n setShowFrameMoreOptions(false);\r\n setIsShowToolsPop(true);\r\n }}\r\n >\r\n {node?.data?.showBorder ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {!node?.data?.showDevice && (\r\n \r\n \r\n {node.data.isShadow ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n {node.data.locked ? : }\r\n \r\n \r\n \r\n \r\n \r\n {node.data.hide ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n setShowFrameMoreOptions(false)}\r\n open={showFrameMoreOptions}\r\n disableFocusListener\r\n disableHoverListener\r\n disableTouchListener\r\n title={\r\n \r\n }\r\n >\r\n \r\n \r\n {\r\n setShowFrameTypes(false);\r\n setShowBackgroundPopup(false);\r\n setShowBorderPopup(false);\r\n setShowFrameMoreOptions(!showFrameMoreOptions);\r\n setIsShowToolsPop(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FrameToolbar;\r\n"],"names":["getColorString","_ref","r","g","b","concat","a","_ref2","_node$data","_node$data$style","_node$data4","node","colorTitle","isEdge","edge","opacity","parseRGBColor","convertToRgba","data","style","background","setNodes","getNodes","setEdges","useReactFlow","selectedColor","setSelectedColor","useState","rgb","transparentColorss","borderTransparentColors","allCustomColors","setAllCustomColors","activeDot","setActiveDot","anchorEl","setAnchorEl","customColor","setCustomColor","editCustomColor","setEditCustomColor","colorsCustom","setColorsCustom","location","useLocation","id","useParams","dispatch","useDispatch","undo","takeSnapshot","useUndoRedo","colorPickerContainerRef","useRef","user_data","localStorage","getItem","debouncedUpdateJson","useCallback","debounce","updatedNodes","_parsedData","a_id","URLSearchParams","search","get","parsedData","JSON","parse","updateJson","json","architecture_json","_objectSpread","edges","nodes","lastUpdatedBy","user_id","updateNodeBackground","newColor","updatedNode","map","val","stroke","nd","initializeSelectedColor","parseRGBColorConverter","useEffect","_node$style","_node$data2","_node$data2$style","_edge$style","_node$data3","_node$data3$style","open","Boolean","popoverId","undefined","localCustomColors","parsedCustomColors","colorPickerAnchorPosition","useMemo","current","rect","getBoundingClientRect","top","left","width","_jsxs","_Fragment","children","_jsx","Stack","ref","sx","p","borderRadius","boxShadow","border","onClick","e","stopPropagation","direction","alignItems","justifyContent","Typography","fontSize","color","Math","round","mt","position","overflow","height","transform","AlphaPicker","onChange","value","type","provider","maxHeight","onWheelCapture","gap","flexWrap","i","cursor","IcHighlightCircleTransparent","borderColors","_parsedData2","updatedData","defaultColor","Box","length","transition","primaryColor","event","currentTarget","IcPlusCircleOutlined","fill","right","prev","updatedColors","filter","_","ci","setItem","stringify","IcCloseThin","Popover","onClose","anchorPosition","anchorReference","anchorOrigin","vertical","horizontal","xs","xl","ml","bgcolor","display","flexDirection","minWidth","ColorPicker","slice","hideOpacity","hideGradientStop","hideAdvancedSliders","hideColorGuide","hideColorTypeBtns","hideControls","hidePresets","_node$data5","_node$data5$border","_node$data6","_node$data6$border","_node$data7","_node$data7$border","_node$data8","_node$data8$border","_node$data9","_node$data9$border","_node$data10","_node$data10$border","_node$data11","_node$data11$border","_node$data12","_node$data12$border","_node$data13","_node$data13$border","_node$data14","_node$data14$border","_node$data15","_node$data15$border","updateNodeBorderColor","borderColor","updateNodeBorderStyle","_parsedData3","_nd$data2","_node$data2$border","showBorder","_node$data3$border","_node$data4$border","handleClose","CustomColorPopover","CustomSwitch","checked","_parsedData4","visibility","px","IcSolidBorder","IcDashedBorder","IcDottedBorder","mb","Slider","size","valueLabelDisplay","max","min","updateNodeBorderThickness","thickness","_nd$data","toRgba","edit","handleCut","download","handleDuplicate","setShowFrameMoreOptions","showRename","handleClickRename","showDuplicate","handleClickEdit","handleClickDeleteRowCol","showDeleteColumn","showDeleteRow","showCopyAsImage","showAddComment","cardDuplicate","showLockUnlock","simpleRef","showCopyLink","showLinkTo","exportShow","showFrame","handleClickCopyLink","handleHideImage","handleClickDownload","showBringToFrontAndBack","saveFile","originalSize","handleClickOriginalImage","hideImage","showDelete","handleDelete","showCutCopyPaste","handleIsCapturing","getNode","getIntersectingNodes","getEdges","fitView","copyAsImage","setCopyAsImage","showExportOptions","setShowExportOptions","showShapesLimitModal","setShowShapesLimitModal","cut","copy","paste","useCopyPaste","isDownload","setIsDownload","updateCopyAsImage","updateIsDownload","exportFileName","frameName","label","downloadClipboardImage","async","navigator","clipboard","read","errorToast","message","clipboardItems","item","types","find","t","startsWith","blob","getType","url","URL","createObjectURL","document","createElement","href","format","body","appendChild","click","removeChild","revokeObjectURL","error","handleCopyImage","arguments","isPdf","allNodes","selectedNode","selected","selectedNodeElement","querySelector","applyComputedStyles","originalElement","clonedElement","computedStyles","window","getComputedStyle","key","getChildNodes","nodeId","parentNode","reduce","acc","child","childElement","clonedChild","cloneNode","x","y","forEach","nestedChild","push","clonedSelectedNode","zIndex","html2canvas","useCORS","scale","backgroundColor","toBlob","write","ClipboardItem","handlePdfDownload","reactFlowContainer","frameElement","images","querySelectorAll","originalSrcs","Promise","all","Array","from","img","src","response","fetch","base64","resolve","reader","FileReader","onload","result","readAsDataURL","containerRect","frameRect","cropX","cropY","cropWidth","cropHeight","canvas","ignoreElements","element","classList","contains","allowTaint","foreignObjectRendering","logging","scrollX","scrollY","scrollWidth","scrollHeight","croppedCanvas","ctx","getContext","drawImage","clipboardError","options","antialias","originalCanvas","currentNode","desiredHeight","Number","replace","desiredWidth","fixedCanvas","aspectRatio","drawWidth","drawHeight","err","userData","useSelector","state","common","getTimeDifference","commentTimestamp","currentTime","Date","now","differenceInMs","floor","findChildNodeIds","parentId","childIds","getChildren","array","itemId","directChildren","allChildren","moveItemAndChildrenToEnd","newArray","includes","Image","imageBlob","imageUrl","doc","jsPDF","pdfWidth","internal","pageSize","pdfHeight","availableWidth","availableHeight","ratio","imgWidth","imgHeight","addImage","save","moreMenusData","mainLabel","shortCut","disabled","imageShow","setTimeout","successToast","_ref3","handleCopyAsImage","handleClickDuplicate","_currentNode$style","_currentNode$style2","_currentNode$style3","_currentNode$style4","_currentNode$style5","_currentNode$style6","_lastDuplicate$positi","_lastDuplicate$positi2","currentNodeHeight","currentNodeWidth","duplicateNodes","_nd$data$frameName","lastDuplicate","xOffset","xPos","yOffset","yPos","duplicatedFrame","getId","positionAbsolute","idMapping","duplicateChildNodesRecursive","parentDuplicateId","flatMap","cNode","_cNode$data","_cNode$data7","newId","duplicatedChild","mapChildNodes","childArray","_cNode$data2","_cNode$data3","_cNode$data4","_cNode$data5","_cNode$data6","rootParentId","leftChildrenOrder","rightChildrenOrder","topChildrenOrder","bottomChildrenOrder","_cNode$data8","_cNode$data9","childrenOrder","hiddenBy","duplicateChildNodes","selectedEdges","getConnectedEdges","source","target","newEdges","_edge$data","_edge$data$points","edgeDataPoints","points","updatedEdges","nds","lastEvent","handleCreateFrame","getAllFrames","frameNo","maxFrameNumber","newFrameId","frameNode","variant","hide","locked","isShadow","isFinite","draggable","frame","handleAddComment","_currentNode$position","_currentNode$position2","_currentNode$position3","_currentNode$position4","_currentNode$position5","_currentNode$position6","_currentNode$position7","_currentNode$position8","widthN","heightN","timeNow","newComment","timestamp","replyData","emoji","maxPosition","new","resolved","replyTimeStamp","outline","dragging","selectable","prevNodes","_parsedData7","finalUpdatedNodes","toggleLockedFrame","interSectedNodes","isParentGroupNode","ind","_interSectedNodes$","_val$data","_val$data2","_val$data3","_val$data3$tempStyle","_val$data4","_val$data4$tempStyle","_val$data5","_val$data5$tempStyle","isHidden","tempStyle","borderWidth","borderStyle","childrenToHide","_updatedNodes","handleBringToFrontGroup","handleBringToFront","_parsedData5","_val$data16","_val$data17","_val$data18","_val$data18$tempStyle","_val$data19","_val$data19$tempStyle","_val$data20","_val$data20$tempStyle","tempNode","_interSectedNodes$4","_val$data21","_val$data22","_val$data23","_val$data23$tempStyle","_val$data24","_val$data24$tempStyle","_val$data25","_val$data25$tempStyle","_updatedNodes4","_interSectedNodes$2","childIdsToShow","_updatedNodes2","_data$data","_data$data2","_data$data3","_data$data4","handleSendToBackGroup","handleBringToBack","_val$data6","_val$data7","_val$data8","_val$data8$tempStyle","_val$data9","_val$data9$tempStyle","_val$data10","_val$data10$tempStyle","_interSectedNodes$3","_val$data11","_val$data12","_val$data13","_val$data13$tempStyle","_val$data14","_val$data14$tempStyle","_val$data15","_val$data15$tempStyle","_updatedNodes3","rightArrowIcons","IcRightSingleArrowBoard","activeState","subChild","cropBox","startX","startY","tempContainer","pointerEvents","margin","el","remove","fontEmbedCSS","generateFontEmbedCss","dataUrl","toSvg","quality","skipFonts","skipAutoScale","svgText","decodeURIComponent","split","Blob","link","svgSerializer","XMLSerializer","svg","elementToSVG","svgString","serializeToString","handleCaptureImageSvg","filename","image","unit","orientation","tempElement","innerHTML","editorHTML","html2pdf","set","handleExportToPdf","docContent","title","handleExportToDoc","handleDeleteNode","_parsedData6","n","should_delete","isDeleted","_parsedData8","_nd$data2$data","finalMenu","moreMenu","mainIndex","borderBottom","isDisabled","subCI","LimitModal","content","heading","setShowFrameTypes","isFrameSelected","framesData","lightPrimary","handleChangeFrameType","sizeRatio","newWidth","replaceAll","newHeight","_selectedNode$","showDevice","Icon","IcCustomFrameOutlined","IcSectionOutlined","Ic16_9FrameOutlined","Ic4_3FrameOutlined","Ic1_1FrameOutlined","Ic3_4FrameOutlined","IcFileOutlined","IcPhoneOutlined","IcTabletOutlined","IcBrowserOutlined","_node$data7$style","isShowToolsPop","setIsShowToolsPop","showBorderPopup","setShowBorderPopup","showBackgroundPopup","setShowBackgroundPopup","showFrameTypes","showFrameMoreOptions","setChecked","SelectedFrameIcon","_framesData$filter$","frameTypesRef","backgroundPopupRef","borderPopupRef","frameMoreOptionsRef","NodeToolbar","Position","Top","isOrgChartFrame","CustomTooltip","PopperProps","disablePortal","disableFocusListener","disableHoverListener","disableTouchListener","FrameTypesPopup","CustomNameTooltip","placement","arrow","IcDownArrow","fontWeight","FrameBackgroundToolbar","FrameBorderToolbar","IcBorderStyle","toggleShadow","IcShadowOnOutlined","IcShadowOffOutlined","IcLockLocked","IcLockUnLocked","toggleHideShowFrame","childNodes","temp","hidden","IcEyeClose2","IcEyeOpen","FrameMoreMenus","IcMenuDotsVertical"],"sourceRoot":""}