{"version":3,"file":"static/js/main-11db8724.ccda69a6.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 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 as globalColors } 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 = \"Color\",\r\n isEdge = false,\r\n edge,\r\n bgColorFromDom,\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 const { a } = 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 // opacity: a,\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 if (node.data?.style?.background) {\r\n node.data?.style?.background &&\r\n initializeSelectedColor(\r\n node.data.style.background,\r\n setSelectedColor\r\n );\r\n } else {\r\n bgColorFromDom &&\r\n initializeSelectedColor(bgColorFromDom, setSelectedColor);\r\n }\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 updateNodeBackground(\r\n node,\r\n {\r\n ...selectedColor,\r\n a: value.rgb.a,\r\n },\r\n setNodes\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 {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, useRef, 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 as globalColors } 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, hideBorderFeature }) => {\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 colorPickerContainerRef = useRef(null);\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 setAllCustomColors((prev) => {\r\n const transparentColor = { rgb: \"rgba(0,0,0,0)\", r: 0, g: 0, b: 0, a: 0 };\r\n return [...prev, transparentColor];\r\n });\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 const handleChangeColorPicker = (value) => {\r\n setCustomColor(value);\r\n\r\n setAllCustomColors((prev) => {\r\n const { r, g, b } = parseRGBColor(value);\r\n const updatedColor = { rgb: value, r, g, b, a: 1 };\r\n\r\n const updatedColors = [...prev.slice(0, -1), updatedColor];\r\n\r\n localStorage.setItem(\"customColors\", JSON.stringify(updatedColors));\r\n return updatedColors;\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 border: {\r\n ...nd.data.border,\r\n borderColor: value,\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 CustomColorPopover = useMemo(() => {\r\n return (\r\n \r\n \r\n {\r\n handleChangeColorPicker(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 {!hideBorderFeature && (\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 {!hideBorderFeature && (\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 {!hideBorderFeature && (\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\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 { CircularProgress, 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 checkNodeContainment,\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 [downLoadImageLoading, setDownloadImageLoading] = useState(null);\r\n const [copyImageLoading, setCopyImageLoading] = 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 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 setDownloadImageLoading(null);\r\n }\r\n };\r\n\r\n const handleCopyImage = async (format = \"png\", isPdf = false) => {\r\n localStorage.removeItem(\"frameCopiedImage\");\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 }\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 }\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 } 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 localStorage.removeItem(\"frameCopiedImage\");\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 }\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({\r\n \"image/png\": blob, // Image content\r\n \"text/plain\": new Blob([\"frameImg\"], { type: \"text/plain\" }),\r\n }),\r\n ]);\r\n\r\n const currentNode = getNode(node.id);\r\n\r\n localStorage.setItem(\r\n \"frameCopiedImage\",\r\n JSON.stringify({\r\n width: currentNode?.width,\r\n height: currentNode?.height,\r\n })\r\n );\r\n dispatch(successToast({ message: \"Image copied\" }));\r\n } catch (clipboardError) {}\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 } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n setCopyImageLoading(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, // Image content\r\n \"text/plain\": new Blob([\"frameImg\"], {\r\n type: \"text/plain\",\r\n }),\r\n }),\r\n ]);\r\n const currentNode = getNode(node.id);\r\n\r\n localStorage.setItem(\r\n \"frameCopiedImage\",\r\n JSON.stringify({\r\n width: currentNode?.width,\r\n height: currentNode?.height,\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 setCopyImageLoading(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 ...frameNode,\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 ];\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:\r\n val?.style?.zIndex > 1000\r\n ? val?.style?.zIndex + 10\r\n : 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 currentFrameNode = getNode(node.id);\r\n const fullyIntersectedNodesId = interSectedNodes\r\n .filter((nd) => checkNodeContainment(currentFrameNode, nd))\r\n .map((nd) => nd.id);\r\n const nodesToBeMoveBack = interSectedNodes.filter(\r\n (nd) => !fullyIntersectedNodesId.includes(nd.id)\r\n );\r\n\r\n const tempNode = {\r\n ...val,\r\n ...(node?.type !== \"group\" && {\r\n style: {\r\n ...val?.style,\r\n ...(node.type === \"frame\"\r\n ? {\r\n zIndex: fullyIntersectedNodesId.includes(val.id)\r\n ? 1020\r\n : nodesToBeMoveBack.includes(val.id)\r\n ? 1000\r\n : val?.style?.zIndex || 1,\r\n }\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.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 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 ...(currentNode.type === \"group\" ? node?.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 }\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 } 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 } 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 setDownloadImageLoading(null);\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 }\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 } 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 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 } finally {\r\n setCopyAsImage(false);\r\n setIsDownload(false);\r\n setShowExportOptions(false);\r\n setShowFrameMoreOptions(false);\r\n handleIsCapturing(false);\r\n setDownloadImageLoading(null);\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 }\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 } 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\r\n shortCut: type === \"list\" ? \"\" : \"Ctrl + X\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (type === \"list\" || type === \"poll\") {\r\n handleCut();\r\n } else {\r\n cut();\r\n }\r\n },\r\n },\r\n {\r\n mainLabel: \"Copy\",\r\n\r\n shortCut: type === \"list\" ? \"\" : \"Ctrl + C\",\r\n onClick: () => {\r\n setShowFrameMoreOptions(false);\r\n if (type === \"list\" || type === \"poll\") {\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 setCopyAsImage(true);\r\n setCopyImageLoading(true);\r\n\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: type === \"list\" ? \"\" : \"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 if (node.type === \"frame\") {\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 - 10,\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 } 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 setDownloadImageLoading(\"png\");\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 setDownloadImageLoading(\"svg\");\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 setDownloadImageLoading(\"jpg\");\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 setDownloadImageLoading(\"pdf\");\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: type === \"list\" ? \"\" : \"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.mainLabel === \"Copy as Image\" &&\r\n copyImageLoading ? (\r\n \r\n ) : (\r\n child.shortCut\r\n )}\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 {subChild?.value === downLoadImageLoading ? (\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 \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, checked, setChecked }) => {\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 ? isNaN(selectedNode[0].data.sizeRatio)\r\n ? 1\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:\r\n variant === \"phone\" ||\r\n variant === \"tablet\" ||\r\n variant === \"browser\"\r\n ? checked\r\n : 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 setChecked(\r\n variant === \"phone\" || variant === \"tablet\" || variant === \"browser\"\r\n ? checked\r\n : false\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\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 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 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$data5","node","colorTitle","isEdge","edge","bgColorFromDom","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","_node$data4","_node$data4$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","globalColors","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$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","hideBorderFeature","updateNodeBorderColor","borderColor","updateNodeBorderStyle","_parsedData3","_nd$data2","_node$data2$border","showBorder","_node$data3$border","_node$data4$border","handleClose","CustomColorPopover","_parsedData4","updatedColor","handleChangeColorPicker","CustomSwitch","checked","_parsedData5","visibility","px","IcSolidBorder","IcDashedBorder","IcDottedBorder","mb","Slider","size","valueLabelDisplay","max","min","updateNodeBorderThickness","thickness","_nd$data","primaryColorRGBA","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","downLoadImageLoading","setDownloadImageLoading","copyImageLoading","setCopyImageLoading","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","removeItem","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","Blob","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","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","_val$style","_val$style2","_val$data16","_val$data17","_val$data18","_val$data18$tempStyle","_val$data19","_val$data19$tempStyle","_val$data20","_val$data20$tempStyle","tempNode","_val$style3","currentFrameNode","fullyIntersectedNodesId","checkNodeContainment","nodesToBeMoveBack","_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","minZIndex","getMaxAndMinZIndex","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","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","CircularProgress","subCI","LimitModal","content","heading","setShowFrameTypes","setChecked","isFrameSelected","framesData","lightPrimary","handleChangeFrameType","sizeRatio","isNaN","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","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":""}