@argusoft/medplat-core 1.0.24 → 1.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AddFeatures-CTVs_Gr9.js → AddFeatures-CqE3v0BN.js} +2 -2
- package/dist/{AddFeatures-CTVs_Gr9.js.map → AddFeatures-CqE3v0BN.js.map} +1 -1
- package/dist/AddMenuConfiguration-BSQLl88V.js +6570 -0
- package/dist/AddMenuConfiguration-BSQLl88V.js.map +1 -0
- package/dist/{ChangePasswordModalCore-Czu7OZe6.js → ChangePasswordModalCore-DTYWRTa-.js} +3 -3
- package/dist/{ChangePasswordModalCore-Czu7OZe6.js.map → ChangePasswordModalCore-DTYWRTa-.js.map} +1 -1
- package/dist/{ConditionConfig-BECSbvY2.js → ConditionConfig-DSsgGEXS.js} +2 -2
- package/dist/{ConditionConfig-BECSbvY2.js.map → ConditionConfig-DSsgGEXS.js.map} +1 -1
- package/dist/{ManageEventConfiguration-CBi2KMB1.js → ManageEventConfiguration-DV3I5POA.js} +4 -4
- package/dist/{ManageEventConfiguration-CBi2KMB1.js.map → ManageEventConfiguration-DV3I5POA.js.map} +1 -1
- package/dist/{ManageRole-CZAk-IlM.js → ManageRole-B9bs_T00.js} +116 -116
- package/dist/ManageRole-B9bs_T00.js.map +1 -0
- package/dist/{ManageUser-BnEPFSPT.js → ManageUser-AB3_Vfp_.js} +34 -33
- package/dist/{ManageUser-BnEPFSPT.js.map → ManageUser-AB3_Vfp_.js.map} +1 -1
- package/dist/{MobileTypeEventConfigModal-C34AN-IJ.js → MobileTypeEventConfigModal-BxLympIO.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-C34AN-IJ.js.map → MobileTypeEventConfigModal-BxLympIO.js.map} +1 -1
- package/dist/{OtherTypeEventConfigModal-BYjMFl0-.js → OtherTypeEventConfigModal-BeG1GrUi.js} +3 -2
- package/dist/{OtherTypeEventConfigModal-BYjMFl0-.js.map → OtherTypeEventConfigModal-BeG1GrUi.js.map} +1 -1
- package/dist/{RoleManagement-B9WgZGEj.js → RoleManagement-BIiW9uTq.js} +2 -2
- package/dist/{RoleManagement-B9WgZGEj.js.map → RoleManagement-BIiW9uTq.js.map} +1 -1
- package/dist/{TypeConfiguration-Bs5WkIa2.js → TypeConfiguration-37wp-gsl.js} +2 -2
- package/dist/{TypeConfiguration-Bs5WkIa2.js.map → TypeConfiguration-37wp-gsl.js.map} +1 -1
- package/dist/{UserList-BzHsbYel.js → UserList-2gGuDgNa.js} +38 -37
- package/dist/{UserList-BzHsbYel.js.map → UserList-2gGuDgNa.js.map} +1 -1
- package/dist/{UserListSkeleton-DhIJ5X3y.js → UserListSkeleton-BMKANCtW.js} +57 -93
- package/dist/UserListSkeleton-BMKANCtW.js.map +1 -0
- package/dist/Users-CsJ08Kjm.js +40 -0
- package/dist/Users-CsJ08Kjm.js.map +1 -0
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/dist/AddMenuConfiguration-m3R8FDhj.js +0 -5570
- package/dist/AddMenuConfiguration-m3R8FDhj.js.map +0 -1
- package/dist/ManageRole-CZAk-IlM.js.map +0 -1
- package/dist/UserListSkeleton-DhIJ5X3y.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AddMenuConfiguration-m3R8FDhj.js","sources":["../src/views/MobileMenuManagement/MenuDragContext.js","../src/views/MobileMenuManagement/MobileDisplay.jsx","../src/views/MobileMenuManagement/AddMenuConfiguration.jsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const MenuDragContext = createContext();\nexport const useMenuDragContext = () => useContext(MenuDragContext);\n","import {\n Box,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState } from 'react';\nimport './MobileScreen.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBatteryFull,\n faChevronDown,\n faChevronRight,\n faCircleInfo,\n faLocationDot,\n faMagnifyingGlass,\n faMagnifyingGlassPlus,\n faPen,\n faTrashCan,\n faRotate,\n faSignal,\n faTimes,\n faWifi,\n} from '@fortawesome/free-solid-svg-icons';\nimport HomeIcon from '@/assets/img/home.svg';\nimport ProgramsIcon from '@/assets/img/programs.svg';\nimport AnalyticsIcon from '@/assets/img/analytics.svg';\nimport FamilyManagementIcon from '@/assets/img/family-management.svg';\nimport { DndContext, useDraggable, useDroppable } from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { Grid } from '@mui/system';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n DASHBOARD_COMPONENT_TYPES,\n DASHBOARD_NODE_DROP_ZONE as NODE_DROP_ZONE,\n} from '@/utils/FormConstants';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { findNodeById } from './dashboardLayoutUtils';\n\nconst DASHBOARD_NODE_TARGET = 'DASHBOARD_NODE_TARGET';\n\nconst SortableComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id,\n data: { sortable: true, type: componentType },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n dnd: { listeners, attributes },\n });\n};\nconst DraggableFixedComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: {\n type: componentType,\n deletable: true,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...listeners,\n ...attributes,\n });\n};\nconst FeatureSortableWrapper = ({ id, children, sectionId, featureName }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id: id,\n data: {\n sortable: true,\n type: 'FEATURE_TILE',\n sectionId: sectionId,\n name: featureName,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...attributes,\n ...listeners,\n });\n};\n\nconst MobileSearchBar = React.forwardRef(\n ({ id, style, handleSectionClick, ...props }, ref) => {\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n return (\n <Box\n id={id}\n ref={ref}\n onContextMenu={handleContextMenu}\n sx={{\n ...style,\n width: '100%',\n minHeight: '50px',\n p: 1.5,\n border: '1px solid #ccc',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n mt: 1,\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n mb: 3,\n }}\n {...props}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: '8px', color: 'var(--color-text)' }}\n />\n <Typography variant='body2' color='textSecondary' sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n },\n);\nMobileSearchBar.displayName = 'MobileSearchBar';\nMobileSearchBar.propTypes = {\n id: PropTypes.any,\n style: PropTypes.any,\n handleSectionClick: PropTypes.any,\n};\n\nconst MobileSection = React.forwardRef(\n (\n {\n id,\n arrayIndex,\n sectionTitle,\n handleSectionClick,\n dnd,\n sectionFeatures,\n SvgIconBox,\n onGroupClick,\n activeGroupId,\n ...props\n },\n ref,\n ) => {\n const { listeners, attributes } = dnd || {};\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n const handleTileClick = (e) => {\n e.stopPropagation();\n };\n const handleGroupContextMenu = (e, feature) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onGroupClick) {\n onGroupClick(e, feature);\n }\n };\n const { setNodeRef: setFeatureContainerRef, isOver } = useDroppable({\n id: `section-drop-zone-${id}`,\n data: {\n type: 'SECTION_DROP_ZONE',\n sectionId: id,\n },\n });\n return (\n <Box\n id={id}\n ref={ref}\n {...listeners}\n {...attributes}\n onContextMenu={handleContextMenu}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 1,\n border: isOver\n ? '1px dashed var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n cursor: 'pointer',\n backgroundColor: 'var(--color-background2)',\n borderRadius: '14px',\n mt: 1,\n }}\n {...props}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n mb: 0.5,\n }}\n >\n <Typography\n variant='body2'\n sx={{ fontWeight: 'bold', color: 'var(--color-text)', flexGrow: 1 }}\n >\n {sectionTitle || `Section ${arrayIndex + 1}`}\n </Typography>\n </Box>\n\n <Box\n ref={setFeatureContainerRef}\n sx={{\n width: '100%',\n minHeight: '40px',\n border: `${isOver ? '1px dashed var(--color-tableHeader)' : ''}`,\n borderRadius: '4px',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent:\n sectionFeatures?.length > 0 ? 'flex-start' : 'center',\n transition: 'background-color 0.1s',\n }}\n >\n {sectionFeatures?.length > 0 ? (\n <SortableContext\n items={sectionFeatures.map((f) => f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {sectionFeatures.map((feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen =\n isGroup && activeGroupId === feature.instanceId;\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={id}\n featureName={feature.name}\n >\n <Grid\n item\n xs={3}\n sm={3}\n sx={{\n flexBasis: 'calc(25% - 8px)',\n maxWidth: 'calc(25% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) =>\n feature.type === 'FEATURE' && handleTileClick(e)\n }\n onContextMenu={(e) =>\n feature.type === 'GROUP' &&\n handleGroupContextMenu(e, feature)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(\n feature,\n 'icon',\n )\n ? feature.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box\n sx={{\n ml: 0.5,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen\n ? 'rotate(180deg)'\n : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n })}\n </Grid>\n </SortableContext>\n ) : (\n <Typography variant='caption' color='textSecondary'>\n {isOver ? 'Drop Feature Here' : 'Drag features here later.'}\n </Typography>\n )}\n </Box>\n </Box>\n );\n },\n);\nMobileSection.displayName = 'MobileSection';\nMobileSection.propTypes = {\n id: PropTypes.any,\n arrayIndex: PropTypes.any,\n sectionTitle: PropTypes.any,\n handleSectionClick: PropTypes.any,\n dnd: PropTypes.any,\n sectionFeatures: PropTypes.any,\n SvgIconBox: PropTypes.any,\n onGroupClick: PropTypes.any,\n activeGroupId: PropTypes.any,\n};\nconst GroupFeatureSortableItem = ({\n feature,\n SvgIconBox,\n handleFeatureClick,\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: feature.uuid || feature.id,\n });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 2000 : 1,\n opacity: isDragging ? 0.8 : 1,\n boxShadow: isDragging ? '0px 4px 10px rgba(0,0,0,0.1)' : 'none',\n };\n\n const handleClick = (e) => {\n e.stopPropagation();\n if (handleFeatureClick) {\n handleFeatureClick();\n }\n };\n\n const renderIconInPopover = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n } else if (typeof feature.icon === 'object' && feature.icon !== null) {\n svgContent = feature.icon.content || feature.icon.svg;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n\n if (svgContent) {\n return (\n <Box\n sx={{\n height: '24px',\n width: '24px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n height: '24px',\n width: '24px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '4px',\n fontSize: '0.8rem',\n }}\n >\n ?\n </Box>\n );\n };\n\n return (\n <Grid\n item\n xs={4}\n ref={setNodeRef}\n style={style}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n p: 0.5,\n }}\n >\n <Box\n onClick={handleClick}\n {...listeners}\n {...attributes}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: 'grab',\n minWidth: 0,\n overflow: 'hidden',\n borderRadius: '8px',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n <Box sx={{ mt: 0.5, mb: 0.5, display: 'flex', alignItems: 'center' }}>\n {renderIconInPopover(feature.icon, SvgIconBox)}\n </Box>\n\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n p: '0 4px',\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n};\nGroupFeatureSortableItem.propTypes = {\n feature: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\nconst DashboardNodeDropZone = ({ node, children }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: `${NODE_DROP_ZONE}-${node.id}`,\n data: {\n type: NODE_DROP_ZONE,\n parentId: node.id,\n parentType: node.type,\n parentNode: node,\n },\n });\n\n return (\n <Box\n ref={setNodeRef}\n sx={{\n width: '100%',\n minHeight:\n node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD\n ? 72\n : node.type === DASHBOARD_COMPONENT_TYPES.COLUMN\n ? 112\n : 42,\n border: isOver\n ? '1px dashed var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n borderRadius: '6px',\n p:\n node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD\n ? 0.5\n : node.type === DASHBOARD_COMPONENT_TYPES.COLUMN\n ? 0.75\n : 0.5,\n backgroundColor: isOver ? 'rgba(25, 118, 210, 0.08)' : 'transparent',\n transition: 'background-color 120ms ease, border-color 120ms ease',\n }}\n >\n {children}\n <Box\n sx={{\n mt: (node.children || []).length > 0 ? 0.75 : 0,\n minHeight: 28,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px dashed var(--color-gray3)',\n borderRadius: '4px',\n backgroundColor: isOver ? 'rgba(25, 118, 210, 0.12)' : 'transparent',\n color: 'text.secondary',\n }}\n >\n <Typography variant='caption' color='textSecondary'>\n {isOver ? 'Drop here' : 'Drop here'}\n </Typography>\n </Box>\n </Box>\n );\n};\nDashboardNodeDropZone.propTypes = {\n node: PropTypes.any,\n children: PropTypes.node,\n};\n\nconst DashboardSortableNode = ({ node, children }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id: node.instanceId || node.id,\n data: { sortable: true, type: node.type },\n });\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, opacity: isDragging ? 0.35 : 1 },\n dnd: { attributes, listeners },\n });\n};\nDashboardSortableNode.propTypes = {\n node: PropTypes.any,\n children: PropTypes.node,\n};\n\nconst DashboardLayoutNode = React.forwardRef(\n (\n {\n node,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n style,\n zoomedNodeId,\n setZoomedNodeId,\n },\n ref,\n ) => {\n const nodeKey = node.instanceId || node.id;\n const {\n attributes,\n listeners,\n setNodeRef: setDraggableRef,\n transform,\n isDragging,\n } = useDraggable({\n id: nodeKey,\n data: {\n type: node.type,\n node,\n fromDashboardLayout: true,\n },\n });\n const { setNodeRef: setDropTargetRef, isOver: isNodeOver } = useDroppable({\n id: `dashboard-node-target-${nodeKey}`,\n data: {\n type: DASHBOARD_NODE_TARGET,\n targetId: nodeKey,\n targetNode: node,\n },\n });\n const setCombinedRef = useCallback(\n (element) => {\n setDraggableRef(element);\n setDropTargetRef(element);\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n },\n [ref, setDraggableRef, setDropTargetRef],\n );\n const dragHandleProps = { ...listeners, ...attributes };\n const draggableStyle = {\n ...style,\n ...(transform\n ? { transform: CSS.Translate.toString(transform), zIndex: 1000 }\n : {}),\n opacity: isDragging ? 0.45 : style?.opacity,\n };\n\n const handleContextMenu = (e) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const ActionButtons = () => (\n <Box\n className='dashboard-node-actions'\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n display: 'flex',\n gap: 0.25,\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '12px',\n boxShadow: '0 1px 4px rgba(15, 23, 42, 0.18)',\n zIndex: 3,\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n >\n {node.type !== DASHBOARD_COMPONENT_TYPES.FEATURE && setZoomedNodeId && (\n <Tooltip title={`Zoom Into ${node.type}`}>\n <IconButton\n size='small'\n onClick={() => setZoomedNodeId(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlassPlus}\n style={{ fontSize: '0.7rem' }}\n />\n </IconButton>\n </Tooltip>\n )}\n {node.type !== DASHBOARD_COMPONENT_TYPES.FEATURE && (\n <Tooltip title='Configure'>\n <IconButton\n size='small'\n onClick={() => handleSectionClick(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon icon={faPen} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title='Delete'>\n <IconButton\n size='small'\n color='error'\n onClick={() => onDeleteNode?.(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon icon={faTrashCan} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n </Tooltip>\n </Box>\n );\n\n const TypeLabel = () => (\n <Typography\n {...dragHandleProps}\n variant='caption'\n sx={{\n display: 'inline-block',\n cursor: 'grab',\n mb: 0.5,\n px: 0.75,\n py: 0.1,\n borderRadius: '4px',\n backgroundColor: 'var(--color-gray4)',\n color: 'var(--color-text)',\n fontWeight: 700,\n fontSize: '0.58rem',\n letterSpacing: 0.2,\n touchAction: 'none',\n }}\n >\n {node.type}\n </Typography>\n );\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SEARCH_BAR) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n minHeight: '44px',\n p: 1.25,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid #cbd5e1',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <Box sx={{ display: 'flex', flexDirection: 'column', flexGrow: 1 }}>\n <TypeLabel />\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: '8px', color: 'var(--color-text)' }}\n />\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ flexGrow: 1 }}\n >\n Search...\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n textAlign: 'center',\n p: 0.5,\n pt: 2.5,\n minHeight: 58,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(node, 'icon')\n ? node.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='caption'\n sx={{ display: 'block', fontWeight: 600, lineHeight: 1.1 }}\n >\n {renderFeatureName(node.name || node.menuName || 'Feature')}\n </Typography>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SECTION) {\n const sectionChildren = node.children || [];\n\n const sectionBackground =\n node.background?.type === 'GRADIENT'\n ? `linear-gradient(135deg, ${node.background?.gradientStartColor || '#fff'}, ${node.background?.gradientEndColor || '#e5e7eb'})`\n : node.background?.solidLightModeColor || 'transparent';\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n p: 1,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n borderRadius: '10px',\n backgroundColor: 'var(--color-background)',\n opacity: node.background?.opacity ?? 1,\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography\n variant='body2'\n sx={{\n fontWeight: node.header?.fontWeight || 600,\n fontSize: node.header?.fontSize || 16,\n color: node.header?.foreground?.lightMode || 'var(--color-text)',\n mb: 0.5,\n }}\n >\n {node.header?.title || 'Section'}\n </Typography>\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n width: '100%',\n }}\n >\n {sectionChildren.map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const feature = (node.children || []).find(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n const shadowElevation = node.shadow?.elevation ?? 0;\n const shadowOpacity = node.shadow?.opacity ?? 0;\n const boxShadow =\n shadowElevation > 0\n ? `0px ${shadowElevation}px ${shadowElevation * 2}px rgba(0,0,0,${shadowOpacity})`\n : 'none';\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: node.style?.cardWidth ? `${node.style.cardWidth}%` : '100%',\n minHeight: node.style?.cardHeight || 86,\n p: 1,\n borderRadius: `${node.style?.borderRadius || 12}px`,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n background:\n node.background?.type === 'GRADIENT'\n ? `linear-gradient(135deg, ${node.background?.gradientStartColor || '#fff'}, ${node.background?.gradientEndColor || '#e5e7eb'})`\n : node.background?.solidLightModeColor ||\n 'var(--color-background2)',\n backgroundColor: 'var(--color-background)',\n opacity: node.background?.opacity ?? 1,\n boxShadow,\n display: 'flex',\n alignItems:\n node.style?.contentAlignment === 'START'\n ? 'flex-start'\n : 'center',\n justifyContent: 'center',\n flexDirection:\n node.style?.layoutType === 'HORIZONTAL' ? 'row' : 'column',\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection:\n node.style?.layoutType === 'HORIZONTAL' ? 'row' : 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n }}\n >\n <DashboardNodeDropZone node={node}>\n {feature && (\n <DashboardLayoutNode\n node={feature}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n )}\n {(node.content?.title ||\n node.content?.subTitle ||\n node.content?.customTitle ||\n node.content?.customSubtitle) && (\n <Box sx={{ mt: 0.5 }}>\n {(node.content?.title || node.content?.customTitle) && (\n <Typography\n variant='caption'\n sx={{\n fontSize: node.style?.titleFontSize || 14,\n fontWeight: 700,\n }}\n >\n {node.content.title || node.content.customTitle}\n </Typography>\n )}\n {(node.content?.subTitle || node.content?.customSubtitle) && (\n <Typography\n variant='caption'\n sx={{\n display: 'block',\n fontSize: node.style?.subtitleFontSize || 12,\n }}\n >\n {node.content.subTitle || node.content.customSubtitle}\n </Typography>\n )}\n </Box>\n )}\n </DashboardNodeDropZone>\n </Box>\n {node.showLeadingArrow && (\n <Box\n sx={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n color: node.foreground?.lightMode || '#6b7280',\n }}\n >\n <FontAwesomeIcon\n icon={faChevronRight}\n style={{ fontSize: '0.75rem' }}\n />\n </Box>\n )}\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.ROW) {\n const rowChildren = node.children || [];\n const visibleColumns = Math.min(Math.max(rowChildren.length, 1), 4);\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n p: 0.5,\n pt: 2.5,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-background)',\n mb: 1,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: `repeat(${visibleColumns}, minmax(0, 1fr))`,\n gap: 1,\n width: '100%',\n }}\n >\n {rowChildren.map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.COLUMN) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n flex: node.style?.flex || 1,\n width: '100%',\n minHeight: 140,\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n p: 0.75,\n pt: 2.75,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n borderLeft: '4px solid var(--color-tableHeader)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-background)',\n mb: 1,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n width: '100%',\n }}\n >\n {(node.children || []).map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.DIVIDER) {\n const isVerticalDivider = node.style?.orientation === 'VERTICAL';\n const dividerThickness = `${node.style?.height || 1}px`;\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n py: isVerticalDivider\n ? 0.5\n : `${node.style?.marginVertical || 8}px`,\n px: isVerticalDivider ? `${node.style?.marginVertical || 8}px` : 0,\n minHeight: isVerticalDivider ? 72 : 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Box\n sx={{\n width: isVerticalDivider ? dividerThickness : '100%',\n height: isVerticalDivider ? '64px' : dividerThickness,\n backgroundColor: node.style?.color || 'var(--color-gray3)',\n }}\n />\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.TEXT) {\n const fontSizeMap = {\n Large: '1.1rem',\n Medium: '0.875rem',\n Small: '0.75rem',\n };\n const fontWeightMap = {\n 100: 100,\n 200: 200,\n 300: 300,\n 400: 400,\n 500: 500,\n 600: 600,\n 700: 700,\n 800: 800,\n 900: 900,\n };\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{ position: 'relative', p: 0.5, pt: 2.5, cursor: 'grab' }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography\n variant='body2'\n sx={{\n fontSize: fontSizeMap[node.content?.fontSize] || '0.875rem',\n fontWeight: fontWeightMap[node.content?.fontWeight] || 400,\n fontStyle:\n node.content?.textStyle === 'ITALIC' ? 'italic' : 'normal',\n textDecoration:\n node.content?.decoration === 'UNDERLINE'\n ? 'underline'\n : node.content?.decoration === 'LINE_THROUGH'\n ? 'line-through'\n : 'none',\n color: node.foreground?.lightMode || 'var(--color-text)',\n }}\n >\n {node.content?.text || 'Text'}\n </Typography>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n height: node.height || 110,\n borderRadius: `${node.borderRadius || 12}px`,\n backgroundColor: 'var(--color-background2)',\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\n Carousel ({node.images?.length || 0} images)\n </Typography>\n </Box>\n );\n }\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n p: 1,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n }}\n >\n {node.type}\n </Box>\n );\n },\n);\nDashboardLayoutNode.displayName = 'DashboardLayoutNode';\nDashboardLayoutNode.propTypes = {\n node: PropTypes.any,\n handleSectionClick: PropTypes.any,\n SvgIconBox: PropTypes.any,\n dnd: PropTypes.any,\n style: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\n\nconst DashboardSectionNode = ({\n node,\n index,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n zoomedNodeId,\n setZoomedNodeId,\n}) => (\n <DashboardLayoutNode\n node={node}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n);\nDashboardSectionNode.propTypes = {\n node: PropTypes.any,\n index: PropTypes.number,\n handleSectionClick: PropTypes.any,\n SvgIconBox: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\n\nexport default function MobileDisplay({\n tabStatus,\n layoutComponents,\n componentTypes,\n handleSectionClick,\n activeElementId,\n activeTabId,\n handleTabSwitch,\n formList,\n selectedForm,\n onFormSelect,\n SvgIconBox,\n setCurrentLayoutComponents,\n programFeatures,\n appBarConfig,\n bottomNavigationConfig,\n onDeleteNode,\n zoomedNodeId,\n setZoomedNodeId,\n}) {\n const dropZoneId = 'mobile-content';\n const dropZoneType =\n activeTabId === 'programs'\n ? 'PROGRAMS_ROOT_DROP_ZONE'\n : 'LAYOUT_ROOT_DROP_ZONE';\n const zoomedNode =\n zoomedNodeId && ['home', 'analytics'].includes(activeTabId)\n ? findNodeById(layoutComponents, zoomedNodeId)\n : null;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id: dropZoneId,\n data: {\n type: dropZoneType,\n sectionId: dropZoneId,\n },\n });\n\n const navItems = [\n { id: 'home', label: 'Home', icon: HomeIcon, alt: 'Home' },\n { id: 'programs', label: 'Programs', icon: ProgramsIcon, alt: 'Programs' },\n {\n id: 'analytics',\n label: 'Analytics',\n icon: AnalyticsIcon,\n alt: 'Analytics',\n },\n {\n id: 'familyManagement',\n label: 'Family Management',\n icon: FamilyManagementIcon,\n alt: 'Family Management',\n },\n ];\n\n const bottomNavigationItems = bottomNavigationConfig?.length\n ? [...bottomNavigationConfig]\n .filter((item) => item.visible !== false && tabStatus[item.id])\n .sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n )\n : navItems.filter((item) => tabStatus[item.id]);\n const visibleNavItems = bottomNavigationItems.map((item) => ({\n ...item,\n icon: navItems.find((navItem) => navItem.id === item.id)?.icon,\n alt: item.label,\n }));\n const [popoverState, setPopoverState] = useState({\n anchorEl: null,\n groupData: null,\n });\n\n const handleOpenGroupPopover = useCallback(\n (e, feature) => {\n const anchorElement = e.currentTarget;\n\n if (popoverState.groupData?.instanceId === feature.instanceId) {\n handleCloseGroupPopover();\n } else {\n setPopoverState({\n anchorEl: anchorElement,\n groupData: feature,\n });\n }\n },\n [popoverState.groupData],\n );\n const handleCloseGroupPopover = useCallback(() => {\n setPopoverState({ anchorEl: null, groupData: null });\n }, []);\n const renderFeatureTile = (feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen =\n isGroup && popoverState.groupData?.instanceId === feature.instanceId;\n\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={null}\n featureName={feature.name}\n >\n <Grid\n item\n xs={4}\n sm={4}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) => feature.type === 'FEATURE' && e.stopPropagation()}\n onContextMenu={(e) =>\n feature.type === 'GROUP' && handleOpenGroupPopover(e, feature)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(feature, 'icon')\n ? feature.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box sx={{ ml: 0.5, display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen\n ? 'rotate(180deg)'\n : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n };\n const handleGroupInternalSort = (event) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id || !popoverState.groupData) {\n return;\n }\n\n const groupId = popoverState.groupData.instanceId;\n let newGroupData = null;\n\n setCurrentLayoutComponents((prevComponents) => {\n const newComponents = prevComponents.map((section) => {\n if (section.features) {\n return {\n ...section,\n features: section.features.map((feature) => {\n if (\n feature.instanceId === groupId &&\n feature.type === 'GROUP' &&\n feature.menus\n ) {\n const oldIndex = feature.menus.findIndex(\n (item) => (item.uuid || item.instanceId) === active.id,\n );\n const newIndex = feature.menus.findIndex(\n (item) => (item.uuid || item.instanceId) === over.id,\n );\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newMenus = arrayMove(feature.menus, oldIndex, newIndex);\n\n newGroupData = { ...feature, menus: newMenus };\n\n return newGroupData;\n }\n }\n return feature;\n }),\n };\n }\n return section;\n });\n\n return newComponents;\n });\n\n if (newGroupData) {\n setPopoverState((prev) => ({\n ...prev,\n groupData: newGroupData,\n }));\n }\n };\n\n const handleNestedFeatureClick = () => {\n handleCloseGroupPopover();\n };\n const renderSortableComponent = (component, index) => {\n const isActive = component.id === activeElementId;\n return (\n <SortableComponent\n key={component.id}\n id={component.id}\n componentType={componentTypes.SECTION}\n isSortable={true}\n >\n <MobileSection\n id={component.id}\n arrayIndex={index}\n sectionTitle={component.title}\n handleSectionClick={handleSectionClick}\n sectionFeatures={component.features}\n isActive={isActive}\n SvgIconBox={SvgIconBox}\n onGroupClick={handleOpenGroupPopover}\n activeGroupId={popoverState.groupData?.instanceId}\n />\n </SortableComponent>\n );\n };\n return (\n <div className='mobile-screen-v2' id='mobile-screen'>\n <div className='status-bar-v2'>\n <span className='time-v2'>12:16</span>\n <div className='notch-v2'></div>\n\n <div className='right-status-icons-v2'>\n <span aria-label='wifi'>\n <FontAwesomeIcon icon={faWifi} />\n </span>\n <span aria-label='signal'>\n <FontAwesomeIcon icon={faSignal} />\n </span>\n <span aria-label='battery' className='battery-icon'>\n <FontAwesomeIcon icon={faBatteryFull} />\n </span>\n </div>\n </div>\n <div className='header-v2'>\n {appBarConfig?.greetings?.greetingVisible && (\n <div\n className='greeting-v2'\n style={{ paddingLeft: '8px', flexGrow: 1 }}\n >\n <Typography variant='body2' sx={{ fontWeight: 'bold' }}>\n {appBarConfig.greetings.greetingName || 'Greeting text'}\n </Typography>\n </div>\n )}\n {appBarConfig?.locationVisible && (\n <div className='location-v2'>\n <FontAwesomeIcon icon={faLocationDot} />\n <span className='location-text-v2'>પાલડી-કાંકજ</span>\n </div>\n )}\n {(() => {\n const selectedActions = Array.isArray(appBarConfig?.actions)\n ? appBarConfig.actions\n : [];\n\n if (!selectedActions.length) return null;\n\n return (\n <div\n className='header-actions-v2'\n style={{ display: 'flex', gap: '12px', paddingRight: '8px' }}\n >\n {selectedActions.map((action, index) => {\n const uploadedSvg = action.iconsvg || action.svg || '';\n const fontAwesomeIcon = action.icon || '';\n\n return (\n <span\n key={index}\n className='action-icon-v2'\n role='button'\n aria-label={action.name}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {uploadedSvg ? (\n <Box\n component='span'\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 18,\n height: 18,\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : fontAwesomeIcon ? (\n <FontAwesomeIcons iconName={fontAwesomeIcon} />\n ) : (\n <Typography variant='caption'>\n {action.name?.charAt(0) || '?'}\n </Typography>\n )}\n </span>\n );\n })}\n </div>\n );\n })()}\n </div>\n <div\n className='content-v2'\n id='mobile-content'\n ref={activeTabId !== 'familyManagement' ? setDroppableRef : null}\n style={{\n border:\n activeTabId !== 'familyManagement' && isOver\n ? '2px dashed var(--color-tableHeader)'\n : 'none',\n backgroundColor:\n activeTabId !== 'familyManagement' && isOver\n ? 'var(--color-gray4)'\n : 'transparent',\n minHeight: '300px',\n maxHeight: 'calc(100% - 110px)',\n overflowY: 'auto',\n padding: '8px',\n marginTop: activeTabId === 'programs' ? 20 : 0,\n marginLeft: activeTabId === 'programs' ? 3 : 0,\n }}\n >\n {activeTabId === 'familyManagement' ? (\n <Box\n sx={{\n p: 2,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n }}\n >\n <Typography\n variant='body1'\n sx={{ mb: 2, fontWeight: 'bold', color: 'var(--color-text)' }}\n >\n Select Form for Family Management\n </Typography>\n <FormControl fullWidth sx={{ maxWidth: '90%', mb: 2 }}>\n <InputLabel\n id='form-selector-label'\n sx={{ color: 'var(--color-text)' }}\n >\n Form Name\n </InputLabel>\n <Select\n labelId='form-selector-label'\n id='form-selector'\n value={selectedForm?.code || ''}\n label='Form Name'\n onChange={onFormSelect}\n sx={{\n color: 'var(--color-text)',\n backgroundColor: 'var(--color-background2)',\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-gray3)',\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-tableHeader)',\n },\n '& .MuiSvgIcon-root': {\n color: 'var(--color-text)',\n },\n }}\n MenuProps={{\n PaperProps: {\n style: {\n maxHeight: 240,\n },\n sx: {\n backgroundColor: 'var(--color-background2)',\n color: 'var(--color-text)',\n },\n },\n }}\n >\n {formList?.map((form) => (\n <MenuItem\n key={form.code}\n value={form.code}\n sx={{\n color: 'var(--color-text)',\n '&:hover': { backgroundColor: 'var(--color-gray4)' },\n }}\n >\n {form.name}\n </MenuItem>\n ))}\n {formList?.length === 0 && (\n <MenuItem disabled sx={{ color: 'var(--color-text)' }}>\n No Forms Available\n </MenuItem>\n )}\n </Select>\n </FormControl>\n </Box>\n ) : activeTabId === 'programs' ? (\n <>\n {programFeatures && programFeatures.length > 0 ? (\n <SortableContext\n items={programFeatures.map((f) => f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {programFeatures.map((feature) => renderFeatureTile(feature))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ mt: 5, textAlign: 'center', color: 'var(--color-text)' }}\n >\n {isOver\n ? 'Drop features here (Groups are not allowed).'\n : 'Drag features directly onto the screen.'}\n </Typography>\n )}\n </>\n ) : (\n <>\n {zoomedNode ? (\n <Box sx={{ width: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n mb: 1,\n }}\n >\n <Typography variant='subtitle2' sx={{ fontWeight: 'bold' }}>\n Zoomed {zoomedNode.type}\n </Typography>\n <Box\n component='button'\n type='button'\n onClick={() => setZoomedNodeId(null)}\n sx={{\n border: '1px solid #ccc',\n borderRadius: '14px',\n backgroundColor: 'var(--color-background2)',\n color: 'var(--color-text)',\n fontSize: '0.75rem',\n px: 1.5,\n py: 0.3,\n cursor: 'pointer',\n }}\n >\n Close\n </Box>\n </Box>\n <DashboardLayoutNode\n node={zoomedNode}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n </Box>\n ) : (\n <>\n {layoutComponents.map((component, index) => (\n <DashboardSectionNode\n key={component.id}\n node={component}\n index={index}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n\n {layoutComponents.length === 0 && (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ mt: 5, textAlign: 'center' }}\n >\n Drag Section, Divider, or Carousel here to build the\n dashboard.\n </Typography>\n )}\n </>\n )}\n </>\n )}\n </div>\n {popoverState.groupData && popoverState.anchorEl && (\n <div onPointerDown={(e) => e.stopPropagation()}>\n <DndContext onDragEnd={handleGroupInternalSort}>\n <MobileGroupPopover\n groupData={popoverState.groupData}\n anchorEl={popoverState.anchorEl}\n onClose={handleCloseGroupPopover}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleNestedFeatureClick}\n />\n </DndContext>\n </div>\n )}\n <div className='bottom-nav-v2'>\n <div className='nav-bar-v2'>\n {visibleNavItems.map((item) => (\n <Tooltip key={item.id} title={item.label} placement='bottom' arrow>\n <div\n key={item.id}\n className={`nav-item-v2 ${activeTabId === item.id ? 'active-v2' : ''}`}\n role='button'\n aria-label={item.label}\n onClick={() => handleTabSwitch(item.id)}\n >\n {item.iconName ? (\n <FontAwesomeIcons iconName={item.iconName} />\n ) : item.icon ? (\n <img src={item.icon} alt={item.alt} />\n ) : (\n <Typography variant='caption'>\n {item.label?.charAt(0)}\n </Typography>\n )}\n </div>\n </Tooltip>\n ))}\n </div>\n <div className='home-indicator-v2'></div>\n </div>\n </div>\n );\n}\n\nMobileDisplay.propTypes = {\n tabStatus: PropTypes.any.isRequired,\n layoutComponents: PropTypes.any,\n componentTypes: PropTypes.any,\n handleSectionClick: PropTypes.any,\n activeElementId: PropTypes.any,\n activeTabId: PropTypes.any,\n handleTabSwitch: PropTypes.any,\n formList: PropTypes.any,\n selectedForm: PropTypes.any,\n onFormSelect: PropTypes.any,\n SvgIconBox: PropTypes.any,\n setCurrentLayoutComponents: PropTypes.any,\n programFeatures: PropTypes.any,\n appBarConfig: PropTypes.any,\n bottomNavigationConfig: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\nconst renderFeatureName = (name) => {\n const parts = name.split(' ');\n\n return parts.map((part, index) => (\n <React.Fragment key={index}>\n {part}\n {index < parts.length - 1 && <br />}\n </React.Fragment>\n ));\n};\nconst renderFeatureIcon = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: '36px',\n width: '36px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: '1.2rem',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '50%',\n height: '36px',\n width: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '4px',\n }}\n >\n ?\n </Box>\n );\n};\nconst MobileGroupPopover = ({\n groupData,\n anchorEl,\n onClose,\n SvgIconBox,\n handleFeatureClick,\n}) => {\n if (!groupData || !anchorEl) return null;\n\n const features = groupData.menus || [];\n\n const anchorRect = anchorEl.getBoundingClientRect();\n\n return (\n <Paper\n elevation={8}\n sx={{\n position: 'fixed',\n top: anchorRect.bottom,\n left: anchorRect.left + anchorRect.width + 65,\n minWidth: '320px',\n maxWidth: '100%',\n p: 2,\n borderRadius: '12px',\n boxShadow: '0 8px 30px rgba(0,0,0,0.25)',\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n zIndex: 1500,\n maxHeight: '400px',\n overflowY: 'auto',\n transform: 'translateX(-50%)',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n mb: 1,\n }}\n >\n <Typography\n variant='h6'\n sx={{\n color: 'var(--color-text)',\n fontWeight: 'bold',\n fontSize: '1rem',\n }}\n >\n {groupData.name}\n </Typography>\n <IconButton\n onClick={onClose}\n size='small'\n sx={{ color: 'var(--color-text)', p: 0.5 }}\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </Box>\n <Divider />\n\n {features.length > 0 ? (\n <SortableContext\n items={features.map((f) => f.uuid || f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1}>\n {features.map((feature) => (\n <GroupFeatureSortableItem\n key={feature.uuid || feature.instanceId}\n feature={feature}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleFeatureClick}\n />\n ))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ fontStyle: 'italic', p: 1 }}\n >\n This menu is empty.\n </Typography>\n )}\n </Paper>\n );\n};\nMobileGroupPopover.propTypes = {\n groupData: PropTypes.any,\n anchorEl: PropTypes.any,\n onClose: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\n","import { api } from '@/common/interceptors/AxiosInterceptor';\nimport { execute } from '@/common/services/QueryBuilder';\nimport { showToast } from '@/common/toaster/toaster';\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n rectIntersection,\n useDraggable,\n useDroppable,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Autocomplete,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n Grid2,\n InputAdornment,\n MenuItem,\n Paper,\n Switch,\n TextField,\n Typography,\n Select,\n} from '@mui/material';\nimport Grid from '@mui/material/Grid2';\nimport { Box } from '@mui/system';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useSelector } from 'react-redux';\nimport { useLocation, useNavigate } from 'react-router';\nimport CustomDropdown from '@/views/custom-components/CustomDropdown';\nimport { MenuDragContext } from './MenuDragContext';\nimport MobileDisplay from './MobileDisplay';\nimport PropTypes from 'prop-types';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { FontAwesomeIconsNames } from '@/common/fontAwesomeIcons/FontAwesomeIconsNames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faMagnifyingGlass,\n faTrashCan,\n} from '@fortawesome/free-solid-svg-icons';\nimport { generateUUID } from '@/utils/UUIDgenerator';\nimport {\n DASHBOARD_COMPONENT_TYPES,\n DASHBOARD_NODE_DROP_ZONE as NODE_DROP_ZONE,\n DASHBOARD_ROOT_DROP_ZONE as ROOT_DROP_ZONE,\n DEFAULT_DASHBOARD_APP_BAR_CONFIG as defaultAppBarConfig,\n DEFAULT_DASHBOARD_BOTTOM_NAVIGATION_CONFIG as defaultBottomNavigationConfig,\n FONT_SIZE_OPTIONS,\n FONT_WEIGHT_OPTIONS,\n BACKGROUND_TYPE_OPTIONS,\n GRADIENT_TYPE_OPTIONS,\n GRADIENT_DIRECTION_OPTIONS,\n CONTENT_ALIGNMENT_OPTIONS,\n DIVIDER_ORIENTATION_OPTIONS,\n TEXT_STYLE_OPTIONS,\n TEXT_DECORATION_OPTIONS,\n} from '@/utils/FormConstants';\nimport CustomConfirmationModal from '@/views/custom-components/CustomConfirmationModal';\nimport {\n addChildToParent,\n addNodeBeforeTarget,\n createFeatureNode,\n createLayoutNode,\n findNodeById,\n findParentNodeInfo,\n getDashboardDropValidationMessage,\n hydrateDashboardLayout,\n moveNodeBeforeTarget,\n moveNodeToParent,\n removeNodeById,\n sanitizeDashboardLayout,\n hasEmptyDashboardLayoutNode,\n updateNodeById,\n} from './dashboardLayoutUtils';\n\nconst normalizeAppBarConfig = (appBarConfig) => {\n const raw = appBarConfig || {};\n const normalizedConfig = { ...defaultAppBarConfig, ...raw };\n\n if (raw.greetings) {\n normalizedConfig.greetings = {\n ...defaultAppBarConfig.greetings,\n ...raw.greetings,\n };\n } else {\n normalizedConfig.greetings = { ...defaultAppBarConfig.greetings };\n }\n\n if (!Array.isArray(normalizedConfig.actions)) {\n normalizedConfig.actions = defaultAppBarConfig.actions;\n }\n\n if (\n normalizedConfig.greetings.greetingVisible &&\n normalizedConfig.locationVisible\n ) {\n normalizedConfig.locationVisible = false;\n }\n\n return normalizedConfig;\n};\n\nexport default function AddMenuConfiguration() {\n const location = useLocation();\n const state = location.state;\n const queryParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n );\n const navigate = useNavigate();\n\n const [rolesList, setRolesList] = useState([]);\n const [isEditMode, setIsEditMode] = useState(false);\n const [availableForms, setAvailableForms] = useState([]);\n const [mobileQueries, setMobileQueries] = useState([]);\n const [documentMasterImages, setDocumentMasterImages] = useState([]);\n const [masterFeatureList, setMasterFeatureList] = useState({});\n const [groupedFeatures, setGroupedFeatures] = useState([]);\n const [isMenuGroupsExpanded, setIsMenuGroupsExpanded] = useState(true);\n const [isStandaloneExpanded, setIsStandaloneExpanded] = useState(true);\n const [backModalOpen, setBackModalOpen] = useState(false);\n const [configurationDialogOpen, setConfigurationDialogOpen] = useState(false);\n const [configurationDraft, setConfigurationDraft] = useState(null);\n const [appBarConfig, setAppBarConfig] = useState(\n normalizeAppBarConfig(defaultAppBarConfig),\n );\n const [bottomNavigationConfig, setBottomNavigationConfig] = useState(\n defaultBottomNavigationConfig,\n );\n const { user } = useSelector((state) => state.Authenticate);\n\n const formCtrl = useForm({\n defaultValues: {\n role: \"\",\n isAttendanceRequired: false,\n },\n mode: \"onChange\",\n });\n\n useEffect(() => {\n (async () => {\n await fetchRoles();\n await fetchForms();\n await fetchMobileQueries();\n await fetchDocumentMasterImages();\n if (queryParams.get(\"id\") && state?.mobileMenuList) {\n setIsEditMode(true);\n formCtrl.setValue(\"role\", state.roleId);\n await fetchMenus(state.roleId);\n } else {\n setIsEditMode(false);\n }\n })();\n }, []);\n useEffect(() => {\n if (\n Object.keys(masterFeatureList).length > 0 &&\n queryParams.get(\"id\") &&\n state?.mobileMenuList\n ) {\n const {\n appConfiguration,\n tabStatus,\n selectedForm,\n isAttendanceRequired,\n appBar,\n bottomNavigation,\n } = reconstructAppState(\n state?.mobileMenuList?.configJson,\n masterFeatureList,\n groupedFeatures,\n );\n setAppConfiguration(appConfiguration);\n setTabStatus(tabStatus);\n setSelectedForm(selectedForm);\n setAppBarConfig(appBar);\n setBottomNavigationConfig(bottomNavigation);\n formCtrl.setValue(\"isAttendanceRequired\", isAttendanceRequired);\n }\n }, [masterFeatureList]);\n const fetchForms = async () => {\n let allFormListDto = {\n code: \"medplat_form_get_all_form_details\",\n parameters: {},\n };\n\n const response = (await execute(allFormListDto)).data.result;\n\n const mappedForms = response.map((form, index) => ({\n id: form.form_code,\n name: form.form_name,\n code: form.form_code,\n uuid: form.uuid || `temp-uuid-${index}`,\n }));\n\n setAvailableForms(mappedForms);\n };\n const fetchMobileQueries = async () => {\n let allMobileQuery = {\n code: \"get_all_mobile_query\",\n parameters: {},\n };\n\n const response = (await execute(allMobileQuery)).data.result;\n setMobileQueries(response);\n };\n const allowedImageExtensions = useMemo(\n () => new Set([\"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\", \"bitmap\"]),\n [],\n );\n\n const uploadDocument = (params) =>\n api.post(\n \"/document/uploaddocumentV2?isTemporary=false\",\n { ...params },\n { type: \"fileUpload\", showLoader: false },\n );\n\n const fetchDocumentMasterImages = async () => {\n const normalizeExtension = (document, fileName) => {\n const extension =\n document.extension || document.file_extension || document.fileExtension;\n const extensionFromName = fileName?.includes(\".\")\n ? fileName.split(\".\").pop()\n : \"\";\n return String(extension || extensionFromName || \"\")\n .replace(/^\\./, \"\")\n .toLowerCase();\n };\n\n try {\n const response = (\n await execute({\n code: \"mobile_menu_get_document_master_images\",\n parameters: {},\n })\n ).data.result;\n\n const imageOptions = (response || [])\n .map((document) => {\n const uuid =\n document.document_uuid || document.documentUuid || document.uuid;\n const name =\n document.file_name ||\n document.actual_file_name ||\n document.name ||\n document.original_file_name ||\n uuid;\n const extension = normalizeExtension(document, name);\n\n return {\n uuid,\n name,\n extension,\n };\n })\n .filter(\n (document) =>\n document.uuid && allowedImageExtensions.has(document.extension),\n );\n\n setDocumentMasterImages(imageOptions);\n } catch (error) {\n setDocumentMasterImages([]);\n showToast({\n type: \"error\",\n message: \"Unable to fetch document master images for image selection.\",\n });\n }\n };\n const uploadDocumentMasterImage = async (file, onUploaded) => {\n if (!file) return;\n const extension = String(file.name?.split(\".\").pop() || \"\").toLowerCase();\n\n if (\n !file.type?.startsWith(\"image/\") ||\n !allowedImageExtensions.has(extension)\n ) {\n showToast({ type: \"warn\", message: \"Only image files can be uploaded.\" });\n return;\n }\n\n try {\n const documentUUID = generateUUID();\n const payload = {\n documentUUID,\n moduleName: \"MEDPLAT_FORM_UPLOADS\",\n fileToUpload: file,\n };\n const { data } = await uploadDocument(payload);\n const uuid =\n data?.document_uuid || data?.documentUuid || data?.uuid || documentUUID;\n\n if (!uuid) {\n showToast({\n type: \"error\",\n message: \"Image uploaded, but document id was not returned.\",\n });\n return;\n }\n\n setDocumentMasterImages((prev) => {\n const nextDocument = { uuid, name: file.name, extension };\n const existingDocuments = (prev || []).filter(\n (document) => document.uuid !== uuid,\n );\n return [nextDocument, ...existingDocuments];\n });\n onUploaded?.(uuid);\n showToast({ type: \"success\", message: \"Image uploaded successfully.\" });\n } catch (error) {\n showToast({\n type: \"error\",\n message: error?.message || \"Unable to upload image.\",\n });\n }\n };\n\n const fetchRoles = async () => {\n try {\n const response = (\n await execute({\n code: \"RETRIEVE_MENU_CONFIG_ROLE_V2\",\n })\n ).data;\n if (response.result) {\n setRolesList(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n };\n\n const fetchMenus = async (roleId) => {\n if (roleId) {\n try {\n const response = (\n await execute({\n code: \"fetch_linked_menus_by_role_id\",\n parameters: {\n id: roleId,\n },\n })\n ).data;\n\n if (response.result) {\n transformListData(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n }\n };\n\n const findMetadataById = (id, masterFeatureList, groupedFeatures) => {\n const feature = masterFeatureList[id];\n if (feature) return feature;\n\n const group = groupedFeatures.find(\n (f) => f.type === \"GROUP\" && f.id === id,\n );\n if (group) return group;\n\n return null;\n };\n const hydrateFeature = (\n canonicalFeature,\n parentInstanceId,\n masterFeatureList,\n groupedFeatures,\n ) => {\n const masterData = findMetadataById(\n canonicalFeature.id,\n masterFeatureList,\n groupedFeatures,\n );\n if (!masterData) return null;\n const instanceUuid = generateUUID();\n\n if (masterData.type === \"GROUP\") {\n const hydratedMenus = canonicalFeature.menus\n .map((menuItem) => {\n const masterMenuItem = findMetadataById(\n menuItem.id,\n masterFeatureList,\n groupedFeatures,\n );\n if (!masterMenuItem) return null;\n return {\n ...masterMenuItem,\n uuid: generateUUID(),\n isGroupMember: true,\n groupId: canonicalFeature.id,\n };\n })\n .filter((m) => m !== null);\n\n if (hydratedMenus.length === 0) return null;\n\n return {\n ...masterData,\n id: instanceUuid,\n instanceId: `${parentInstanceId}_GROUP_${instanceUuid}`,\n menus: hydratedMenus,\n };\n } else if (masterData.type === \"FEATURE\") {\n const instancePrefix =\n parentInstanceId === \"PROGRAMS_ROOT\"\n ? parentInstanceId\n : `${parentInstanceId}_${masterData.id}`;\n\n return {\n ...masterData,\n id: masterData.id,\n uuid: instanceUuid,\n instanceId: `${instancePrefix}_${instanceUuid}`,\n };\n }\n return null;\n };\n\n const hydrateLayout = (\n canonicalLayout,\n tabId,\n masterFeatureList,\n groupedFeatures,\n ) => {\n if (!canonicalLayout || !Array.isArray(canonicalLayout)) return [];\n\n if (canonicalLayout.every((c) => c.id && !c.type && !c.features)) {\n const parentInstanceId = tabId === \"programs\" ? \"PROGRAMS_ROOT\" : tabId;\n\n return canonicalLayout\n .map((f) =>\n hydrateFeature(\n f,\n parentInstanceId,\n masterFeatureList,\n groupedFeatures,\n ),\n )\n .filter((f) => f !== null);\n }\n\n if (tabId === \"home\") {\n return hydrateDashboardLayout(canonicalLayout, (feature, parentId) =>\n hydrateFeature(feature, parentId, masterFeatureList, groupedFeatures),\n );\n }\n\n return canonicalLayout\n .map((component) => {\n const instanceId = generateUUID();\n\n if (component.type === \"SEARCH_BAR\") {\n return { ...component, id: instanceId };\n }\n\n if (component.type === \"SECTION\") {\n const sectionInstanceId = `comp-${instanceId}`;\n const hydratedFeatures = (component.features || [])\n .map((f) =>\n hydrateFeature(\n f,\n sectionInstanceId,\n masterFeatureList,\n groupedFeatures,\n ),\n )\n .filter((f) => f !== null);\n return {\n type: component.type,\n title: component.title,\n id: sectionInstanceId,\n features: hydratedFeatures,\n };\n }\n return null;\n })\n .filter((c) => c !== null);\n };\n\n const reconstructAppState = (canonicalConfig) => {\n const newAppConfiguration = {};\n const newTabStatus = {};\n let newSelectedForm = null;\n const isAttendanceRequired =\n canonicalConfig?.isAttendanceRequired?.value || false;\n const appBar = normalizeAppBarConfig(canonicalConfig?.appBar);\n const bottomNavigation = Array.isArray(\n canonicalConfig?.bottomNavigation?.items,\n )\n ? canonicalConfig.bottomNavigation.items.map((item) => ({\n ...item,\n iconName: item.iconName || item.iconDocumentUuid || \"\",\n }))\n : defaultBottomNavigationConfig;\n\n for (const tabId in canonicalConfig) {\n const tabData = canonicalConfig[tabId];\n newTabStatus[tabId] = tabData.active;\n\n if (tabData.active) {\n if (tabId === \"home\" && tabData.layout) {\n newAppConfiguration[tabId] = hydrateLayout(\n tabData.layout,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n } else if (tabId === \"programs\" && tabData?.features) {\n const hydratedFeatures = hydrateLayout(\n tabData.features,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n\n newAppConfiguration[tabId] = {\n features: hydratedFeatures,\n };\n } else if (tabData?.features) {\n newAppConfiguration[tabId] = hydrateLayout(\n tabData?.features,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n } else if (tabId === \"familyManagement\" && tabData.formCode) {\n newSelectedForm = {\n formName: `Form for ${tabData.formCode}`,\n code: tabData.formCode,\n formUuid: generateUUID(),\n };\n }\n } else {\n if (tabId === \"programs\") {\n newAppConfiguration[tabId] = { features: [] };\n } else {\n newAppConfiguration[tabId] = [];\n }\n }\n }\n return {\n appConfiguration: newAppConfiguration,\n tabStatus: newTabStatus,\n selectedForm: newSelectedForm,\n isAttendanceRequired,\n appBar,\n bottomNavigation,\n };\n };\n const transformListData = (data) => {\n const groupedList = [];\n const masterFeatureMap = {};\n\n data.forEach((item) => {\n let menus = JSON.parse(item.menus || \"[]\");\n\n const processedMenus = menus.map((menu) => {\n const transformedMenu = {\n uuid: generateUUID(),\n id: menu.id ? parseInt(menu.id) : null,\n name: menu.name || \"\",\n icon: menu.icon || \"\",\n type: \"FEATURE\",\n isGroupMember: item.id != null,\n groupId: item.id || null,\n };\n\n masterFeatureMap[transformedMenu.id] = transformedMenu;\n\n return transformedMenu;\n });\n\n if (item.id != null) {\n groupedList.push({\n uuid: generateUUID(),\n id: item.id,\n name: item.name,\n icon: item.icon || \"\",\n type: \"GROUP\",\n menus: processedMenus,\n });\n } else {\n groupedList.push(...processedMenus);\n }\n });\n\n setMasterFeatureList(masterFeatureMap);\n setGroupedFeatures(groupedList);\n };\n const sanitizeFeature = (feature) => {\n if (feature.type === \"GROUP\") {\n const canonicalGroupId = feature.menus?.[0]?.groupId;\n\n if (!canonicalGroupId) {\n return null;\n }\n\n return {\n id: canonicalGroupId,\n menus: feature.menus.map((menu) => ({\n id: menu.id,\n })),\n };\n } else if (feature.type === \"FEATURE\") {\n return {\n id: feature.id,\n };\n }\n return null;\n };\n const sanitizeLayout = (layout) => {\n if (!layout || !Array.isArray(layout)) return [];\n\n return layout\n .map((component) => {\n if (component.type === \"SEARCH_BAR\") {\n return {\n type: component.type,\n queryName: component.queryName,\n };\n }\n\n if (component.type === \"SECTION\") {\n const sanitizedFeatures = component?.features\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n\n return {\n type: component.type,\n title: component.title,\n features: sanitizedFeatures,\n };\n }\n\n return null;\n })\n .filter((c) => c !== null);\n };\n const validateMobileLayout = () => {\n if (\n appBarConfig?.greetings?.greetingVisible &&\n appBarConfig?.greetings?.greetingName\n ) {\n const greetingNameStr = appBarConfig.greetings.greetingName;\n const extractedVarsMatch = greetingNameStr.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch.map((m) => m.slice(2, -2).trim()).filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n const greetingValues = appBarConfig.greetings.greetingValues || {};\n\n for (const extractedVar of uniqueExtractedVars) {\n if (!greetingValues[extractedVar]) {\n showToast({\n type: \"warn\",\n message: `Please map a dynamic value for '{{${extractedVar}}}' in App Bar Greeting.`,\n });\n return false;\n }\n }\n }\n\n const homeLayout = appConfiguration.home || [];\n if (hasEmptyDashboardLayoutNode(homeLayout)) {\n showToast({\n type: \"warn\",\n message:\n \"Section, row, column, carousel, and feature card components cannot be empty.\",\n });\n return false;\n }\n\n return true;\n };\n\n const createCanonicalConfig = () => {\n const finalConfig = {\n isAttendanceRequired: {\n value: formCtrl.getValues(\"isAttendanceRequired\"),\n },\n appBar: normalizeAppBarConfig(appBarConfig),\n bottomNavigation: {\n items: [...bottomNavigationConfig].sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n ),\n },\n };\n\n navTabs.forEach((tab) => {\n const tabId = tab.id;\n const isEnabled = tabStatus[tabId];\n\n const tabEntry = {\n active: isEnabled,\n };\n\n if (isEnabled) {\n if (tabId === \"familyManagement\" && selectedForm) {\n tabEntry.formCode = selectedForm.code;\n } else {\n if (tabId === \"home\") {\n const rawLayout = appConfiguration[tabId] || [];\n tabEntry.layout = sanitizeDashboardLayout(rawLayout);\n } else if (tabId === \"programs\") {\n const rawFeatures = appConfiguration[tabId]?.features || [];\n\n if (rawFeatures.length > 0) {\n tabEntry.features = rawFeatures\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n }\n } else if (tabId !== \"analytics\") {\n const rawFeatures = appConfiguration[tabId] || [];\n\n if (Array.isArray(rawFeatures)) {\n tabEntry.features = rawFeatures\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n }\n }\n }\n }\n\n finalConfig[tabId] = tabEntry;\n });\n\n return finalConfig;\n };\n const onSubmit = async (data) => {\n if (!validateMobileLayout()) return;\n\n const canonicalConfig = createCanonicalConfig();\n const configJsonString = JSON.stringify(canonicalConfig);\n\n const payload = {\n roleId: data.role,\n userId: user?.id,\n config_json: configJsonString,\n };\n try {\n const response = (\n await execute({\n code: \"save_mobile_menu_role_relation\",\n parameters: payload,\n })\n ).data;\n if (response.result) {\n showToast({\n message: \"Menu configuration saved successfully\",\n type: \"success\",\n });\n navigate(\"/ui/medplat/admin/mobileMenuManagement\");\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n };\n const navTabs = [\n { id: \"home\", name: \"Home\" },\n { id: \"programs\", name: \"Programs\" },\n { id: \"analytics\", name: \"Analytics\" },\n { id: \"familyManagement\", name: \"Family Management\" },\n ];\n const [tabStatus, setTabStatus] = useState({\n home: true,\n programs: true,\n analytics: true,\n familyManagement: true,\n });\n\n const COMPONENT_TYPES = {\n ...DASHBOARD_COMPONENT_TYPES,\n SEARCH_BAR: \"SEARCH_BAR\",\n SECTION_DROP_ZONE: \"SECTION_DROP_ZONE\",\n NODE_DROP_ZONE,\n GROUP: \"GROUP\",\n };\n const [selectedForm, setSelectedForm] = useState(null);\n\n const handleFormSelection = (event) => {\n const selectedCode = event.target.value;\n const formObject = availableForms.find(\n (form) => form.code === selectedCode,\n );\n setSelectedForm(formObject);\n };\n const [activeId, setActiveId] = useState(null);\n const [activeElementId, setActiveElementId] = useState(null);\n const [activeTabId, setActiveTabId] = useState(\"home\");\n\n const [appConfiguration, setAppConfiguration] = useState(() => {\n const initialConfig = {};\n navTabs.forEach((tab) => {\n initialConfig[tab.id] = [];\n });\n return initialConfig;\n });\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [activeGroupId, setActiveGroupId] = useState(null);\n const [zoomedNodeId, setZoomedNodeId] = useState(null);\n const programsFeatures = appConfiguration.programs?.features || [];\n const featureOptions = useMemo(\n () =>\n Object.values(masterFeatureList).filter(\n (feature) => feature?.type === \"FEATURE\",\n ),\n [masterFeatureList],\n );\n const usedDashboardFeatureIds = useMemo(() => {\n if (activeTabId === \"home\" || activeTabId === \"programs\") {\n return new Set();\n }\n\n const collectIds = (nodes) =>\n (nodes || []).flatMap((node) => {\n if (node.type === COMPONENT_TYPES.FEATURE) return [String(node.id)];\n const legacyFeatures = Array.isArray(node.features)\n ? node.features.map((feature) => String(feature.id))\n : [];\n return [...legacyFeatures, ...collectIds(node.children || [])];\n });\n\n const activeLayout = appConfiguration[activeTabId];\n let layoutsToCheck = [];\n if (Array.isArray(activeLayout)) layoutsToCheck = activeLayout;\n else if (Array.isArray(activeLayout?.features))\n layoutsToCheck = activeLayout.features;\n\n return new Set(collectIds(layoutsToCheck));\n }, [appConfiguration, activeTabId, COMPONENT_TYPES]);\n const handleGroupAccordionToggle = (groupId) => {\n setActiveGroupId((prevId) => (prevId === groupId ? null : groupId));\n };\n const rawLayout = appConfiguration[activeTabId];\n const currentLayout = Array.isArray(rawLayout) ? rawLayout : [];\n\n const filteredFeatures = useMemo(() => {\n const lowerSearch = searchTerm.toLowerCase();\n\n return groupedFeatures\n .map((item) => {\n if (item.type === \"GROUP\") {\n const filteredMenus = item.menus.filter((menu) =>\n menu.name.toLowerCase().includes(lowerSearch),\n );\n\n if (\n item.name.toLowerCase().includes(lowerSearch) ||\n filteredMenus.length > 0\n ) {\n return { ...item, menus: filteredMenus };\n }\n return null;\n }\n\n if (item.name.toLowerCase().includes(lowerSearch)) {\n return item;\n }\n\n return null;\n })\n .filter(Boolean);\n }, [groupedFeatures, searchTerm]);\n const { separatedGroups, separatedFeatures } = useMemo(() => {\n const groups = filteredFeatures.filter((item) => item.type === \"GROUP\");\n const features = filteredFeatures.filter((item) => item.type !== \"GROUP\");\n\n return { separatedGroups: groups, separatedFeatures: features };\n }, [filteredFeatures]);\n const setCurrentLayoutComponents = useCallback(\n (newLayoutUpdater) => {\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]:\n typeof newLayoutUpdater === \"function\"\n ? newLayoutUpdater(prevConfig[activeTabId] || [])\n : newLayoutUpdater,\n }));\n },\n [activeTabId],\n );\n const handleTabSwitch = useCallback((tabId) => {\n setActiveTabId(tabId);\n setZoomedNodeId(null);\n }, []);\n\n const updateNodeProperty = (node, property, value) => {\n if (property.includes(\".\")) {\n const [groupKey, childKey] = property.split(\".\");\n return {\n ...node,\n [groupKey]: {\n ...(node[groupKey] || {}),\n [childKey]: value,\n },\n };\n }\n return { ...node, [property]: value };\n };\n\n const openComponentConfiguration = (nodeId) => {\n const selectedNode = findNodeById(currentLayout, nodeId);\n if (!selectedNode || selectedNode.type === COMPONENT_TYPES.FEATURE) return;\n setActiveElementId(nodeId);\n setConfigurationDraft(structuredClone(selectedNode));\n setConfigurationDialogOpen(true);\n };\n\n const closeComponentConfiguration = () => {\n setConfigurationDialogOpen(false);\n setConfigurationDraft(null);\n setActiveElementId(null);\n };\n\n const saveComponentConfiguration = () => {\n if (configurationDraft && activeElementId) {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, activeElementId, () => configurationDraft),\n );\n }\n closeComponentConfiguration();\n };\n\n const handleComponentUpdate = (id, property, value) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, id, (node) =>\n updateNodeProperty(node, property, value),\n ),\n );\n };\n\n const handleDraftComponentUpdate = (id, property, value) => {\n setConfigurationDraft((prev) =>\n prev ? updateNodeProperty(prev, property, value) : prev,\n );\n };\n\n const updateAppBarProperty = (property, value) => {\n setAppBarConfig((prev) => {\n const nextConfig = { ...prev };\n\n if (property === \"greetings\") {\n const nextGreetings = { ...prev.greetings, ...value };\n if (nextGreetings.greetingVisible) {\n nextConfig.locationVisible = false;\n }\n\n if (\"greetingName\" in value && nextGreetings.greetingValues) {\n const newGreetingName = value.greetingName || \"\";\n const extractedVarsMatch = newGreetingName.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch\n .map((m) => m.slice(2, -2).trim())\n .filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n\n const cleanedValues = {};\n uniqueExtractedVars.forEach((v) => {\n if (nextGreetings.greetingValues[v]) {\n cleanedValues[v] = nextGreetings.greetingValues[v];\n }\n });\n nextGreetings.greetingValues = cleanedValues;\n }\n\n nextConfig.greetings = nextGreetings;\n } else {\n nextConfig[property] = value;\n if (property === \"locationVisible\" && value) {\n if (nextConfig.greetings) {\n nextConfig.greetings.greetingVisible = false;\n }\n }\n }\n return normalizeAppBarConfig(nextConfig);\n });\n };\n\n const saveBottomNavigationConfig = (items) => {\n const savedItems = items || [];\n setBottomNavigationConfig(savedItems);\n setTabStatus((prevStatus) => {\n const nextStatus = { ...prevStatus };\n navTabs.forEach((tab) => {\n const savedItem = savedItems.find((item) => item.id === tab.id);\n nextStatus[tab.id] = savedItem\n ? savedItem.visible !== false\n : prevStatus[tab.id];\n });\n return nextStatus;\n });\n\n const activeItem = savedItems.find((item) => item.id === activeTabId);\n if (activeItem?.visible === false) {\n const firstVisibleItem = [...savedItems]\n .sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n )\n .find((item) => item.visible !== false);\n if (firstVisibleItem) {\n setActiveTabId(firstVisibleItem.id);\n }\n }\n };\n\n const addCarouselImage = (componentId, documentUuid = \"\") => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: [...(node.images || []), { documentUuid, navigation: \"\" }],\n })),\n );\n };\n\n const updateCarouselImage = (componentId, imageIndex, property, value) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: (node.images || []).map((image, index) =>\n index === imageIndex ? { ...image, [property]: value } : image,\n ),\n })),\n );\n };\n\n const removeCarouselImage = (componentId, imageIndex) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: (node.images || []).filter((_, index) => index !== imageIndex),\n })),\n );\n };\n\n const addDraftCarouselImage = (componentId, documentUuid = \"\") => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: [...(prev.images || []), { documentUuid, navigation: \"\" }],\n }\n : prev,\n );\n };\n\n const updateDraftCarouselImage = (\n componentId,\n imageIndex,\n property,\n value,\n ) => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: (prev.images || []).map((image, index) =>\n index === imageIndex ? { ...image, [property]: value } : image,\n ),\n }\n : prev,\n );\n };\n\n const removeDraftCarouselImage = (componentId, imageIndex) => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: (prev.images || []).filter(\n (_, index) => index !== imageIndex,\n ),\n }\n : prev,\n );\n };\n\n const createDashboardChildFromDrag = (draggedType, dragData, parentId) => {\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n return createFeatureNode(dragData, parentId);\n }\n if (\n Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType) &&\n draggedType !== COMPONENT_TYPES.FEATURE\n ) {\n return createLayoutNode(draggedType);\n }\n return null;\n };\n\n const hasFeatureInDashboardLayout = (nodes, featureId) =>\n (nodes || []).some((node) => {\n if (\n node.type === COMPONENT_TYPES.FEATURE &&\n String(node.id) === String(featureId)\n ) {\n return true;\n }\n return hasFeatureInDashboardLayout(node.children || [], featureId);\n });\n\n const getDuplicateCheckScopeNode = (nodes, targetId) => {\n const targetNode = findNodeById(nodes, targetId);\n if (targetNode?.type === COMPONENT_TYPES.SECTION) return targetNode;\n\n let currentId = targetId;\n let lastNode = targetNode;\n\n while (currentId && currentId !== ROOT_DROP_ZONE) {\n const parentInfo = findParentNodeInfo(nodes, currentId);\n if (!parentInfo || !parentInfo.node) break;\n if (parentInfo.node.type === COMPONENT_TYPES.SECTION) {\n return parentInfo.node;\n }\n lastNode = parentInfo.node;\n currentId = parentInfo.id;\n }\n\n return lastNode || targetNode;\n };\n\n const getParentNodeForMoveValidation = (parentNode, movingNodeId) => {\n if (!parentNode) return null;\n return {\n ...parentNode,\n children: (parentNode.children || []).filter(\n (child) =>\n child.id !== movingNodeId && child.instanceId !== movingNodeId,\n ),\n };\n };\n\n const addDashboardChild = (parentId, parentType, draggedType, dragData) => {\n setCurrentLayoutComponents((prevLayout) => {\n const parentNode =\n parentId === ROOT_DROP_ZONE ? null : findNodeById(prevLayout, parentId);\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n parentNode,\n );\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return prevLayout;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE && !dragData)\n return prevLayout;\n\n if (draggedType === COMPONENT_TYPES.FEATURE && dragData) {\n const scopeNode = getDuplicateCheckScopeNode(prevLayout, parentId);\n const layoutToCheck = scopeNode ? [scopeNode] : prevLayout;\n if (hasFeatureInDashboardLayout(layoutToCheck, dragData.id)) {\n showToast({\n type: \"warn\",\n message: `Feature ${dragData.name} is already added to this section.`,\n });\n return prevLayout;\n }\n }\n\n const childNode = createDashboardChildFromDrag(\n draggedType,\n dragData,\n parentId,\n );\n if (!childNode) return prevLayout;\n\n return addChildToParent(prevLayout, parentId, childNode);\n });\n };\n\n const deleteDashboardNode = (nodeId) => {\n setCurrentLayoutComponents((prev) => removeNodeById(prev, nodeId));\n if (activeElementId === nodeId) {\n setActiveElementId(null);\n setConfigurationDialogOpen(false);\n setConfigurationDraft(null);\n }\n if (zoomedNodeId === nodeId) {\n setZoomedNodeId(null);\n }\n };\n\n const handleDragStart = (event) => {\n setActiveId(event.active.id);\n };\n\n const handleDragEnd = useCallback(\n (event) => {\n const { active, over } = event;\n if (!active || !active.data.current) {\n setActiveId(null);\n return;\n }\n const overType = over?.data.current?.type;\n const overSectionId = over?.data.current?.sectionId;\n const activeSectionId = active.data.current?.sectionId;\n const draggedType = active.data.current?.type;\n setActiveId(null);\n\n if (\n activeTabId === \"home\" &&\n !over &&\n Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType)\n ) {\n showToast({\n type: \"warn\",\n message: `${draggedType} cannot be dropped there.`,\n });\n return;\n }\n\n if (\n !over &&\n activeTabId === \"programs\" &&\n draggedType === COMPONENT_TYPES.FEATURE\n ) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n\n const currentFeatures = programsConfig?.features || [];\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n };\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: [...currentFeatures, newFeature],\n },\n };\n });\n return;\n }\n if (over?.id === \"trash-zone\") {\n const instanceIdToDelete = active.id;\n const parentSectionId = active.data.current.sectionId;\n if (activeTabId === \"home\") {\n setCurrentLayoutComponents((prev) =>\n removeNodeById(prev, instanceIdToDelete),\n );\n return;\n }\n if (draggedType === \"FEATURE_TILE\") {\n if (parentSectionId) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((comp) => {\n if (comp.id === parentSectionId && comp?.features) {\n const newFeatures = comp?.features.filter(\n (f) => f.instanceId !== instanceIdToDelete,\n );\n return { ...comp, features: newFeatures };\n }\n return comp;\n }),\n );\n } else if (activeTabId === \"programs\") {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const newFeatures = currentFeatures.filter(\n (f) => f.instanceId !== instanceIdToDelete,\n );\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n }\n } else if (\n draggedType === COMPONENT_TYPES.SECTION ||\n draggedType === COMPONENT_TYPES.SEARCH_BAR\n ) {\n setCurrentLayoutComponents((prev) =>\n prev.filter((comp) => comp.id !== active.id),\n );\n }\n return;\n }\n\n if (\n activeTabId === \"home\" &&\n active.data.current?.fromDashboardLayout &&\n (overType === NODE_DROP_ZONE ||\n over?.id === \"mobile-content\" ||\n overType === \"DASHBOARD_NODE_TARGET\")\n ) {\n if (overType === \"DASHBOARD_NODE_TARGET\") {\n const targetId = over.data.current.targetId;\n const targetParent = findParentNodeInfo(currentLayout, targetId);\n if (!targetParent) return;\n const validationParentNode = getParentNodeForMoveValidation(\n targetParent.node,\n active.id,\n );\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n draggedType,\n validationParentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) =>\n moveNodeBeforeTarget(prev, active.id, targetId),\n );\n return;\n }\n\n const parentId =\n overType === NODE_DROP_ZONE\n ? over.data.current.parentId\n : ROOT_DROP_ZONE;\n const parentType =\n overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode =\n overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationParentNode = getParentNodeForMoveValidation(\n parentNode,\n active.id,\n );\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n validationParentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) =>\n moveNodeToParent(prev, active.id, parentId),\n );\n return;\n }\n\n if (activeTabId === \"home\" && overType === \"DASHBOARD_NODE_TARGET\") {\n const targetId = over.data.current.targetId;\n const targetParent = findParentNodeInfo(currentLayout, targetId);\n if (!targetParent) return;\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n draggedType,\n targetParent.node,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n if (\n draggedType === COMPONENT_TYPES.FEATURE &&\n active.data.current.data\n ) {\n const scopeNode = getDuplicateCheckScopeNode(currentLayout, targetId);\n const layoutToCheck = scopeNode ? [scopeNode] : currentLayout;\n if (\n hasFeatureInDashboardLayout(\n layoutToCheck,\n active.data.current.data.id,\n )\n ) {\n showToast({\n type: \"warn\",\n message: `Feature ${active.data.current.data.name} is already added to this section.`,\n });\n return;\n }\n }\n\n const childNode = createDashboardChildFromDrag(\n draggedType,\n active.data.current.data,\n targetParent.id,\n );\n if (!childNode) return;\n setCurrentLayoutComponents((prev) =>\n addNodeBeforeTarget(prev, targetId, childNode),\n );\n return;\n }\n\n if (\n activeTabId === \"home\" &&\n (overType === NODE_DROP_ZONE || over?.id === \"mobile-content\")\n ) {\n const parentId =\n overType === NODE_DROP_ZONE\n ? over.data.current.parentId\n : ROOT_DROP_ZONE;\n const parentType =\n overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode =\n overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n parentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n addDashboardChild(\n parentId,\n parentType,\n draggedType,\n active.data.current.data,\n );\n return;\n }\n\n if (draggedType === \"FEATURE_TILE\" && overType === \"FEATURE_TILE\") {\n if (!activeSectionId && activeTabId === \"programs\") {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const oldIndex = currentFeatures.findIndex(\n (f) => f.instanceId === active.id,\n );\n const newIndex = currentFeatures.findIndex(\n (f) => f.instanceId === over.id,\n );\n\n if (oldIndex === -1 || newIndex === -1) {\n return prevConfig;\n }\n\n const newFeatures = arrayMove(currentFeatures, oldIndex, newIndex);\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n return;\n }\n if (activeSectionId === overSectionId && active.id !== over.id) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((section) => {\n if (section.id === activeSectionId) {\n const features = section?.features;\n const oldIndex = features.findIndex(\n (f) => f.instanceId === active.id,\n );\n const newIndex = features.findIndex(\n (f) => f.instanceId === over.id,\n );\n\n if (oldIndex === -1 || newIndex === -1) return section;\n\n const newFeatures = arrayMove(features, oldIndex, newIndex);\n\n return { ...section, features: newFeatures };\n }\n return section;\n }),\n );\n }\n return;\n }\n\n if (\n draggedType === COMPONENT_TYPES.GROUP &&\n overType === COMPONENT_TYPES.SECTION_DROP_ZONE\n ) {\n const droppedGroup = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedGroup && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n\n const targetSectionIndex = currentLayout.findIndex(\n (c) => c.id === overSectionId,\n );\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n const sourceIdString = String(droppedGroup.uuid);\n const isDuplicate = targetSection?.features.some((f) => {\n return f.type === \"GROUP\" && String(f.uuid) === sourceIdString;\n });\n\n if (isDuplicate) {\n showToast({\n type: \"warn\",\n message: `Group ${droppedGroup.name} is already in this section.`,\n });\n return prevConfig;\n }\n const newGroupItem = {\n id: droppedGroup.uuid,\n name: droppedGroup.name,\n instanceId: `${overSectionId}_GROUP_${droppedGroup.uuid}_${crypto.randomUUID()}`,\n type: \"GROUP\",\n menus: droppedGroup.menus || [],\n icon: droppedGroup.icon,\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newGroupItem],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n if (\n draggedType === COMPONENT_TYPES.FEATURE &&\n overType === COMPONENT_TYPES.SECTION_DROP_ZONE\n ) {\n const droppedFeature = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedFeature && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n const targetSectionIndex = currentLayout.findIndex(\n (c) => c.id === overSectionId,\n );\n\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n\n const isDuplicate = targetSection?.features.some(\n (f) => f.id === droppedFeature.id && f.type === \"FEATURE\",\n );\n if (isDuplicate) {\n showToast({\n type: \"warn\",\n message: `Feature ${droppedFeature.name} is already in this section.`,\n });\n return prevConfig;\n }\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `${overSectionId}_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newFeature],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n\n if (active.data.current?.sortable && !over?.data.current?.sortable) {\n if (over?.id === \"mobile-content\") {\n return;\n }\n }\n\n if (\n over?.data.current?.sortable &&\n active.data.current?.type === COMPONENT_TYPES.SECTION\n ) {\n if (active.id !== over.id) {\n setCurrentLayoutComponents((prev) => {\n const searchBar = prev.find(\n (c) => c.type === COMPONENT_TYPES.SEARCH_BAR,\n );\n const sortableList = prev.filter(\n (c) => c.type !== COMPONENT_TYPES.SEARCH_BAR,\n );\n\n const oldSortableIndex = sortableList.findIndex(\n (comp) => comp.id === active.id,\n );\n const newSortableIndex = sortableList.findIndex(\n (comp) => comp.id === over.id,\n );\n\n if (oldSortableIndex === -1 || newSortableIndex === -1) {\n return prev;\n }\n\n const newSortableList = arrayMove(\n sortableList,\n oldSortableIndex,\n newSortableIndex,\n );\n\n let finalLayout = newSortableList;\n if (searchBar) {\n finalLayout = [searchBar, ...finalLayout];\n }\n\n return finalLayout;\n });\n return;\n }\n }\n\n if (over?.id === \"mobile-content\" && draggedType) {\n const targetZoneType = over.data.current?.type;\n if (targetZoneType === \"PROGRAMS_ROOT_DROP_ZONE\") {\n if (draggedType === COMPONENT_TYPES.GROUP) {\n showToast({\n type: \"warn\",\n message: `Groups cannot be dropped directly onto the Programs tab.`,\n });\n return;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n programs: {\n ...prevConfig.programs,\n features: [\n ...prevConfig.programs.features,\n {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n },\n ],\n },\n }));\n return;\n }\n }\n\n if (\n active.data.current?.sortable &&\n targetZoneType === \"LAYOUT_ROOT_DROP_ZONE\"\n ) {\n return;\n }\n if (targetZoneType === \"LAYOUT_ROOT_DROP_ZONE\") {\n setCurrentLayoutComponents((prev) => {\n if (draggedType === COMPONENT_TYPES.SEARCH_BAR) {\n const isSearchAlreadyPresent = prev.some(\n (comp) => comp.type === COMPONENT_TYPES.SEARCH_BAR,\n );\n if (isSearchAlreadyPresent) {\n showToast({\n type: \"info\",\n message: `Only one Search Bar is allowed.`,\n });\n return prev;\n }\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: COMPONENT_TYPES.SEARCH_BAR,\n queryName: \"Query Name\",\n };\n return [newComponent, ...prev];\n } else if (draggedType === COMPONENT_TYPES.SECTION) {\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: draggedType,\n title: \"Section\",\n features: [],\n };\n return [...prev, newComponent];\n }\n\n return prev;\n });\n return;\n }\n }\n },\n [\n setCurrentLayoutComponents,\n setAppConfiguration,\n activeTabId,\n COMPONENT_TYPES,\n currentLayout,\n getParentNodeForMoveValidation,\n addDashboardChild,\n createDashboardChildFromDrag,\n ],\n );\n const SCREEN_CONTENT_WIDTH = \"350px\";\n\n const OverlayMobileSearchBar = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n p: 1.5,\n border: \"1px solid #ccc\",\n borderRadius: \"8px\",\n backgroundColor: \"var(--color-background2)\",\n display: \"flex\",\n alignItems: \"center\",\n boxShadow: \"0 1px 10px rgba(0,0,0,0.3)\",\n }}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: \"8px\", color: \"#888\" }}\n />\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n\n const OverlayMobileSection = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n minHeight: \"100px\",\n backgroundColor: \"#e6f0ff\",\n border: \"1px dashed var(--color-tableHeader)\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n boxShadow: \"0 1px 10px rgba(0,0,0,0.3)\",\n color: \"var(--color-text)\",\n }}\n >\n <Typography variant=\"caption\" sx={{ fontWeight: \"bold\" }}>\n Section Dragging\n </Typography>\n </Box>\n );\n const OverlayFeatureTile = ({ feature }) => (\n <Grid item xs={4} sm={4}>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n p: 0.5,\n height: \"100%\",\n backgroundColor: \"transparent\",\n cursor: \"grab\",\n }}\n >\n {renderIcon(feature.icon)}\n <Typography\n variant=\"caption\"\n sx={{\n mt: 1,\n textAlign: \"center\",\n lineHeight: 1.2,\n width: \"100%\",\n fontSize: \"0.65rem\",\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n OverlayFeatureTile.propTypes = {\n feature: PropTypes.any,\n };\n const OverlaySidebarFeature = ({ feature }) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, \"18px\");\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: \"18px\",\n width: \"18px\",\n marginRight: \"8px\",\n },\n });\n }\n return (\n <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>\n {renderIcon(iconData, size)}\n </Box>\n );\n };\n return (\n <Box\n sx={{\n width: \"fit-content\",\n p: \"10px\",\n pl: \"10px\",\n backgroundColor: \"var(--color-background2)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n transition: \"all 0.1s\",\n mt: \"4px\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray4)\",\n borderColor: \"var(--color-gray3)\",\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, \"18px\")}\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"normal\", color: \"#333\" }}\n >\n {feature?.name}\n </Typography>\n </Box>\n );\n };\n OverlaySidebarFeature.propTypes = {\n feature: PropTypes.any,\n };\n const getActiveLayoutItem = (activeId) => {\n const allSidebarItems = groupedFeatures.flatMap((item) => {\n if (item.type === COMPONENT_TYPES.GROUP) {\n return [item, ...item.menus];\n }\n return [item];\n });\n\n const sourceItem = allSidebarItems.find(\n (f) => (f.uuid || f.id) === activeId,\n );\n\n if (sourceItem) {\n let itemType;\n\n if (sourceItem.type) {\n itemType = sourceItem.type;\n } else if (sourceItem.menus) {\n itemType = COMPONENT_TYPES.GROUP;\n } else {\n itemType = COMPONENT_TYPES.FEATURE;\n }\n\n return {\n type: itemType,\n data: sourceItem,\n };\n }\n const programFeature = programsFeatures?.find(\n (f) => f.instanceId === activeId,\n );\n if (programFeature) {\n return { type: \"FEATURE_TILE\", data: programFeature };\n }\n const layoutNode = findNodeById(currentLayout, activeId);\n if (layoutNode) {\n return {\n type:\n layoutNode.type === COMPONENT_TYPES.FEATURE\n ? \"FEATURE_TILE\"\n : layoutNode.type,\n data: layoutNode,\n };\n }\n return null;\n };\n const renderActiveOverlay = (activeId) => {\n const component = getActiveLayoutItem(activeId);\n if (!component) return null;\n\n if (component.type === COMPONENT_TYPES.SEARCH_BAR) {\n return <OverlayMobileSearchBar />;\n }\n if (component.type === COMPONENT_TYPES.SECTION) {\n return <OverlayMobileSection />;\n }\n if (component.type === COMPONENT_TYPES.FEATURE) {\n return <OverlaySidebarFeature feature={component.data} />;\n }\n if (component.type === COMPONENT_TYPES.GROUP) {\n return <OverlayFeatureTile feature={component.data} />;\n }\n if (component.type === \"FEATURE_TILE\") {\n return <OverlayFeatureTile feature={component.data} />;\n }\n return null;\n };\n const isDraggingSortable = useMemo(() => {\n if (!activeId) return false;\n\n const isDraggingTopLevel = currentLayout.some(\n (comp) => comp.id === activeId,\n );\n\n const isDraggingFeatureTile = currentLayout.some((comp) =>\n comp?.features?.some((f) => f.instanceId === activeId),\n );\n\n const isDraggingProgramFeatureTile = programsFeatures?.some(\n (f) => f.instanceId === activeId,\n );\n\n return (\n isDraggingTopLevel ||\n isDraggingFeatureTile ||\n isDraggingProgramFeatureTile\n );\n }, [activeId, currentLayout, programsFeatures]);\n const sortableSectionIds = currentLayout.map((c) => c.id);\n const customCollisionDetection = (args) => {\n const draggedType = args.active?.data.current?.type;\n\n if (draggedType === COMPONENT_TYPES.FEATURE && activeTabId !== \"home\") {\n const droppableContainers = args.droppableContainers.filter(\n (container) => container.data.current?.type === \"SECTION_DROP_ZONE\",\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: droppableContainers,\n });\n }\n\n if (activeTabId === \"home\") {\n const dashboardDropTargets = args.droppableContainers.filter(\n (container) => {\n const targetType = container.data.current?.type;\n return (\n targetType === NODE_DROP_ZONE ||\n targetType === \"DASHBOARD_NODE_TARGET\" ||\n container.id === \"mobile-content\"\n );\n },\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: dashboardDropTargets,\n });\n }\n\n if (draggedType === COMPONENT_TYPES.SECTION) {\n const validSectionDropTargets = args.droppableContainers.filter(\n (container) => {\n if (container.id === args.active.id) return false;\n if (container.data.current?.type === \"SECTION_DROP_ZONE\")\n return false;\n return true;\n },\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: validSectionDropTargets,\n });\n }\n return closestCenter(args);\n };\n\n return (\n <>\n <MenuDragContext.Provider>\n <form noValidate onSubmit={formCtrl.handleSubmit(onSubmit)}>\n <DndContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n collisionDetection={customCollisionDetection}\n >\n <Grid container spacing={1}>\n <Grid size={1}></Grid>\n <Grid\n size={6}\n sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}\n >\n <Grid\n sx={{\n padding: \"2px\",\n margin: \"6px 0px\",\n }}\n >\n <Grid container sx={{ justifyContent: \"space-between\" }}>\n <Grid size={2}></Grid>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Mobile View\n </Typography>\n <Grid container spacing={1}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n sx={{ fontSize: \"0.8rem\", height: \"30px\" }}\n type=\"button\"\n onClick={() => {\n setBackModalOpen(true);\n }}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n sx={{ fontSize: \"0.8rem\", height: \"30px\" }}\n type=\"submit\"\n >\n Save\n </Button>\n </Grid>\n </Grid>\n <Grid\n sx={{\n height: \"100%\",\n maxHeight: \"100%\",\n overflowY: \"auto\",\n }}\n >\n <SortableContext\n items={sortableSectionIds}\n strategy={verticalListSortingStrategy}\n >\n <MobileDisplay\n tabStatus={tabStatus}\n layoutComponents={currentLayout}\n componentTypes={COMPONENT_TYPES}\n handleSectionClick={openComponentConfiguration}\n activeElementId={activeElementId}\n activeTabId={activeTabId}\n handleTabSwitch={handleTabSwitch}\n formList={availableForms}\n selectedForm={selectedForm}\n onFormSelect={handleFormSelection}\n SvgIconBox={SvgIconBox}\n setCurrentLayoutComponents={setCurrentLayoutComponents}\n programFeatures={\n appConfiguration.programs?.features || []\n }\n appBarConfig={appBarConfig}\n bottomNavigationConfig={bottomNavigationConfig}\n onDeleteNode={deleteDashboardNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n ></MobileDisplay>\n </SortableContext>\n </Grid>\n </Grid>\n </Grid>\n <Grid size={1}></Grid>\n <Grid\n size={4}\n sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}\n >\n <Grid size={12}>\n <Paper sx={{ padding: \"2px\", margin: \"6px 0px\" }}>\n <Grid className=\"justify-between items-center\" container>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\" }}\n >\n Menu Relation\n </Typography>\n </Grid>\n <Grid container>\n <Grid size={12}>\n <FormControl\n variant=\"outlined\"\n className=\"ml-3 mb-1 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">\n Select Role\n <span className=\"text-red-500 ml-1\">*</span> :\n </Typography>\n <Box className=\"w-[60%] ms-3\">\n <CustomDropdown\n control={formCtrl.control}\n size=\"small\"\n id=\"role\"\n name=\"role\"\n options={rolesList || []}\n disabled={isEditMode}\n displayName=\"name\"\n optionValue=\"id\"\n errors={formCtrl.formState.errors}\n sx={{ height: \"50px\", mt: 2 }}\n disableClearable={isEditMode ? true : false}\n placeholder=\"Select role\"\n onChange={(e) => fetchMenus(e.target.value)}\n />\n </Box>\n </FormControl>\n </Grid>\n <Grid size={12}>\n <FormControl\n variant=\"standard\"\n className=\"ml-3 mb-3 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">\n Attendance Required? :\n </Typography>\n <Box className=\"w-[60%] ms-3\">\n <Switch\n checked={formCtrl.watch(\"isAttendanceRequired\")}\n onChange={(e) =>\n formCtrl.setValue(\n \"isAttendanceRequired\",\n e.target.checked,\n )\n }\n sx={{\n \"& .MuiSwitch-switchBase.Mui-checked\": {\n color: \"var(--color-text)\",\n \"&:hover\": {\n backgroundColor: \"rgba(7, 49, 73, 0.08)\",\n },\n },\n \"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track\":\n {\n backgroundColor: \"var(--color-tableHeader)\",\n opacity: 0.7,\n },\n }}\n />\n </Box>\n </FormControl>\n </Grid>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12}>\n <Paper\n sx={{\n padding: \"5px\",\n margin: \"2px 0px\",\n transition: \"height 0.3s ease-in-out\",\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Draggable Components\n </Typography>\n\n <Grid\n container\n spacing={2}\n justifyContent=\"space-around\"\n sx={{ p: 1 }}\n >\n <DraggableComponent\n id=\"draggable-search\"\n componentType={COMPONENT_TYPES.SEARCH_BAR}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: \"#e0eaf1\",\n borderColor: \"var(--color-gray3)\",\n boxShadow: \"0 2px 5px rgba(0, 0, 0, 0.15)\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName=\"faMagnifyingGlass\"\n style={{ fontSize: \"1.2rem\", marginRight: \"8px\" }}\n />\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n Search Bar\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n <DraggableComponent\n id=\"draggable-section\"\n componentType={COMPONENT_TYPES.SECTION}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: \"#c5e1ff\",\n borderColor: \"var(--color-tableHeader)\",\n boxShadow: \"0 2px 5px rgba(0, 0, 0, 0.15)\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName=\"faBox\"\n style={{ fontSize: \"1.2rem\", marginRight: \"8px\" }}\n />\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n Section\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n {[\n {\n id: \"draggable-row\",\n type: COMPONENT_TYPES.ROW,\n label: \"Row\",\n icon: \"faGripLines\",\n },\n {\n id: \"draggable-column\",\n type: COMPONENT_TYPES.COLUMN,\n label: \"Column\",\n icon: \"faColumns\",\n },\n {\n id: \"draggable-feature-card\",\n type: COMPONENT_TYPES.FEATURE_CARD,\n label: \"Feature Card\",\n icon: \"faAddressCard\",\n },\n {\n id: \"draggable-divider\",\n type: COMPONENT_TYPES.DIVIDER,\n label: \"Divider\",\n icon: \"faMinus\",\n },\n {\n id: \"draggable-carousel\",\n type: COMPONENT_TYPES.CAROUSEL,\n label: \"Carousel\",\n icon: \"faImages\",\n },\n {\n id: \"draggable-text\",\n type: COMPONENT_TYPES.TEXT,\n label: \"Text\",\n icon: \"faFont\",\n },\n ].map((component) => (\n <DraggableComponent\n key={component.id}\n id={component.id}\n componentType={component.type}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n }}\n >\n <FontAwesomeIcons\n iconName={component.icon}\n style={{\n fontSize: \"1.2rem\",\n marginRight: \"8px\",\n }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n {component.label}\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n ))}\n </Grid>\n <Grid>\n <TrashZone isDraggingSortable={isDraggingSortable} />\n </Grid>\n <Divider sx={{ mt: 2 }} />\n <Grid size={12}>\n <Box\n sx={{\n padding: \"0px\",\n margin: \"10px 0px\",\n transition: \"height 0.3s ease-in-out\",\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Available Features\n </Typography>\n\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search Feature...\"\n variant=\"outlined\"\n sx={{ mb: 2, px: 1 }}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcons iconName=\"faMagnifyingGlass\" />\n </InputAdornment>\n ),\n }}\n />\n <Box\n sx={{\n flexGrow: 1,\n overflowY: \"auto\",\n padding: \"0 8px\",\n }}\n >\n <Grid\n container\n direction=\"column\"\n spacing={0}\n sx={{ px: 1 }}\n >\n {separatedGroups.length > 0 && (\n <Grid\n item\n xs={12}\n sx={{\n mb: 1,\n }}\n >\n <Accordion\n sx={{\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #c5e1ff\",\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n }}\n expanded={isMenuGroupsExpanded}\n onChange={() =>\n setIsMenuGroupsExpanded((prev) => !prev)\n }\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons\n iconName={\"faChevronDown\"}\n style={{ color: \"#3f51b5\" }}\n />\n }\n sx={{\n minHeight: \"40px\",\n backgroundColor: \"#e3f2fd\",\n \"&:hover\": { backgroundColor: \"#c5e3f8\" },\n \"& .MuiAccordionSummary-content\": {\n margin: \"0\",\n },\n p: \"0 10px\",\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n color: \"#3f51b5\",\n }}\n >\n <FontAwesomeIcons\n iconName=\"faLayerGroup\"\n style={{ marginRight: \"6px\" }}\n />\n Menu Groups ({separatedGroups.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{\n p: \"8px\",\n pt: 1,\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Grid\n container\n spacing={0.5}\n direction=\"column\"\n >\n {separatedGroups.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n activeGroupId={activeGroupId}\n onGroupToggle={\n handleGroupAccordionToggle\n }\n usedFeatureIds={\n usedDashboardFeatureIds\n }\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedFeatures.length > 0 && (\n <Grid item xs={12}>\n <Accordion\n sx={{\n mt: 0.5,\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #c8e6c9\",\n mb: 1,\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n }}\n expanded={isStandaloneExpanded}\n onChange={() =>\n setIsStandaloneExpanded((prev) => !prev)\n }\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons\n iconName={\"faChevronDown\"}\n style={{ color: \"#009688\" }}\n />\n }\n sx={{\n minHeight: \"40px\",\n backgroundColor: \"#e8f5e9\",\n \"&:hover\": { backgroundColor: \"#cbe6cc\" },\n \"& .MuiAccordionSummary-content\": {\n margin: \"0\",\n },\n p: \"0 10px\",\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n color: \"#009688\",\n }}\n >\n <FontAwesomeIcons\n iconName=\"faPuzzlePiece\"\n style={{ marginRight: \"6px\" }}\n />\n Standalone Features (\n {separatedFeatures.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{\n p: \"8px\",\n pt: 1,\n backgroundColor:\n \"var(--color-background2)\",\n }}\n >\n <Grid\n container\n spacing={0.5}\n direction=\"column\"\n >\n {separatedFeatures.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n usedFeatureIds={\n usedDashboardFeatureIds\n }\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedGroups.length === 0 &&\n separatedFeatures.length === 0 && (\n <Typography\n variant=\"body2\"\n sx={{\n p: 2,\n color: \"var(--color-gray1)\",\n textAlign: \"center\",\n }}\n >\n No groups or features match your search\n criteria.\n </Typography>\n )}\n </Grid>\n </Box>\n </Box>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12} sx={{ mb: 2 }}>\n <ConfigurationPanel\n activeComponent={null}\n onUpdate={handleComponentUpdate}\n onDeselect={() => setActiveElementId(null)}\n mobileQueries={mobileQueries}\n appBarConfig={appBarConfig}\n onAppBarUpdate={updateAppBarProperty}\n bottomNavigationConfig={bottomNavigationConfig}\n onBottomNavigationSave={saveBottomNavigationConfig}\n onAddCarouselImage={addCarouselImage}\n onUpdateCarouselImage={updateCarouselImage}\n onRemoveCarouselImage={removeCarouselImage}\n documentMasterImages={documentMasterImages}\n featureOptions={featureOptions}\n onImageUpload={uploadDocumentMasterImage}\n />\n </Grid>\n </Grid>\n </Grid>\n <DragOverlay>{renderActiveOverlay(activeId)}</DragOverlay>\n </DndContext>\n </form>\n </MenuDragContext.Provider>\n <Dialog\n open={configurationDialogOpen}\n onClose={() => setConfigurationDialogOpen(false)}\n fullWidth\n maxWidth=\"sm\"\n >\n <DialogTitle>Component Configuration</DialogTitle>\n <DialogContent dividers>\n <ConfigurationPanel\n activeComponent={configurationDraft}\n onUpdate={handleDraftComponentUpdate}\n onDeselect={closeComponentConfiguration}\n mobileQueries={mobileQueries}\n appBarConfig={appBarConfig}\n onAppBarUpdate={updateAppBarProperty}\n bottomNavigationConfig={bottomNavigationConfig}\n onBottomNavigationSave={saveBottomNavigationConfig}\n onAddCarouselImage={addDraftCarouselImage}\n onUpdateCarouselImage={updateDraftCarouselImage}\n onRemoveCarouselImage={removeDraftCarouselImage}\n documentMasterImages={documentMasterImages}\n featureOptions={featureOptions}\n onImageUpload={uploadDocumentMasterImage}\n hideGlobalConfig\n />\n </DialogContent>\n <DialogActions>\n <Button\n onClick={closeComponentConfiguration}\n variant=\"outlined\"\n color=\"gray\"\n >\n Cancel\n </Button>\n <Button\n onClick={saveComponentConfiguration}\n variant=\"contained\"\n color=\"primary\"\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n <CustomConfirmationModal\n open={backModalOpen}\n handleClose={() => {\n setBackModalOpen(false);\n }}\n handleClick={() => {\n navigate(\"/ui/medplat/admin/mobileMenuManagement\");\n }}\n title=\"Leave Page\"\n description={`Changes you made will be discarded. Do you want to continue?`}\n dataTestId=\"delete-auth-confirmation\"\n />\n </>\n );\n}\nfunction DraggableComponent({\n id,\n children,\n componentType,\n dragData = null,\n disabled = false,\n}) {\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id,\n data: { type: componentType, ...(dragData && { data: dragData }) },\n disabled,\n });\n\n const style = transform\n ? {\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n zIndex: 1000,\n opacity: 0.9,\n }\n : undefined;\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: {\n ...children.props.style,\n ...style,\n ...(disabled ? { opacity: 0.45, cursor: \"not-allowed\" } : {}),\n },\n ...(disabled ? {} : listeners),\n ...(disabled ? {} : attributes),\n });\n}\nfunction CustomTabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <Box sx={{ p: 3 }}>{children}</Box>}\n </div>\n );\n}\n\nCustomTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.number.isRequired,\n value: PropTypes.number.isRequired,\n};\n\nconst TrashZone = ({ isDraggingSortable }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: \"trash-zone\",\n });\n\n if (!isDraggingSortable) {\n return null;\n }\n\n return (\n <Box\n ref={setNodeRef}\n sx={{\n position: \"fixed\",\n bottom: 20,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 250,\n height: 50,\n p: 2,\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: isOver ? \"#d32f2f\" : \"#ef5350\",\n color: \"white\",\n zIndex: 3000,\n transition: \"background-color 0.2s\",\n }}\n >\n <FontAwesomeIcon icon={faTrashCan} style={{ marginRight: \"10px\" }} />\n <Typography variant=\"body1\">\n {isOver ? \"Release to Delete\" : \"Drag Here to Delete\"}\n </Typography>\n </Box>\n );\n};\nTrashZone.propTypes = {\n isDraggingSortable: PropTypes.any,\n};\nconst ConfigurationPanel = ({\n activeComponent,\n onUpdate,\n onDeselect,\n mobileQueries,\n appBarConfig,\n onAppBarUpdate,\n bottomNavigationConfig,\n onBottomNavigationSave,\n onAddCarouselImage,\n onUpdateCarouselImage,\n onRemoveCarouselImage,\n documentMasterImages = [],\n featureOptions = [],\n onImageUpload,\n hideGlobalConfig = false,\n}) => {\n const [expandedBottomNavigationItemId, setExpandedBottomNavigationItemId] =\n useState(null);\n const [expandedActionIndex, setExpandedActionIndex] = useState(null);\n const [bottomNavigationDraft, setBottomNavigationDraft] = useState(\n bottomNavigationConfig || [],\n );\n\n useEffect(() => {\n setBottomNavigationDraft(bottomNavigationConfig || []);\n }, [bottomNavigationConfig]);\n\n const updateBottomNavigationDraftItem = (itemId, property, value) => {\n setBottomNavigationDraft((prev) =>\n (prev || []).map((item) =>\n item.id === itemId ? { ...item, [property]: value } : item,\n ),\n );\n };\n\n const cancelBottomNavigationDraft = () => {\n setBottomNavigationDraft(bottomNavigationConfig || []);\n setExpandedBottomNavigationItemId(null);\n };\n\n const saveBottomNavigationDraft = () => {\n onBottomNavigationSave?.(bottomNavigationDraft || []);\n setExpandedBottomNavigationItemId(null);\n };\n\n const fieldSx = {\n mb: 1.5,\n \"& .MuiOutlinedInput-root\": {\n \"& fieldset\": { borderColor: \"#94a3b8\" },\n \"&:hover fieldset\": { borderColor: \"#64748b\" },\n \"&.Mui-focused fieldset\": { borderColor: \"#475569\" },\n },\n \"& .MuiInputLabel-root\": { color: \"#475569\", fontWeight: 500 },\n \"& .MuiInputLabel-root.Mui-focused\": { color: \"#334155\" },\n };\n\n const textField = (label, value, onChange, props = {}) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n {...props}\n />\n );\n const numberField = (label, value, onChange, props = {}) =>\n textField(label, value, onChange, { type: \"number\", ...props });\n\n const colorField = (label, value, onChange, props = {}) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n InputProps={{\n endAdornment: (\n <Box\n sx={{\n width: 24,\n height: 24,\n borderRadius: \"4px\",\n border: \"1px solid #cbd5e1\",\n backgroundColor: value || \"#ffffff\",\n overflow: \"hidden\",\n cursor: \"pointer\",\n position: \"relative\",\n flexShrink: 0,\n }}\n >\n <input\n type=\"color\"\n value={value || \"#ffffff\"}\n onChange={onChange}\n style={{\n opacity: 0,\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n cursor: \"pointer\",\n }}\n />\n </Box>\n ),\n }}\n {...props}\n />\n );\n\n const selectField = (label, value, onChange, options) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n select\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n );\n\n const imageDropdown = (label, value, onChange) => (\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"flex-start\", mb: 1 }}>\n <Autocomplete\n options={documentMasterImages}\n size=\"small\"\n fullWidth\n value={\n documentMasterImages.find((document) => document.uuid === value) ||\n null\n }\n onChange={(event, selectedDocument) =>\n onChange(selectedDocument?.uuid || \"\")\n }\n getOptionLabel={(option) =>\n typeof option === \"string\"\n ? option\n : `${option.name || option.uuid}${option.extension ? ` (${option.extension})` : \"\"}`\n }\n isOptionEqualToValue={(option, selectedValue) =>\n option.uuid === selectedValue.uuid\n }\n noOptionsText=\"No document master images found\"\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant=\"outlined\"\n placeholder=\"Select image from document master\"\n />\n )}\n />\n <Button\n variant=\"outlined\"\n component=\"label\"\n size=\"small\"\n sx={{ minWidth: 88, height: 40 }}\n >\n Upload\n <input\n hidden\n accept=\"image/*\"\n type=\"file\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n onImageUpload?.(file, onChange);\n }}\n />\n </Button>\n </Box>\n );\n\n const featureDropdown = (label, value, onChange) => (\n <Autocomplete\n options={featureOptions}\n size=\"small\"\n fullWidth\n value={\n featureOptions.find(\n (feature) => String(feature.id) === String(value),\n ) || null\n }\n onChange={(event, selectedFeature) => onChange(selectedFeature?.id || \"\")}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, selectedValue) =>\n String(option.id) === String(selectedValue.id)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant=\"outlined\"\n placeholder=\"Select feature\"\n />\n )}\n sx={{ mb: 1 }}\n />\n );\n\n const fontAwesomeIconDropdown = (label, value, onChange) => (\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={value || null}\n onChange={(event, newValue) => onChange(newValue || \"\")}\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}\n >\n <FontAwesomeIcons iconName={option} />\n <Typography variant=\"body2\">{option}</Typography>\n </Box>\n )}\n renderInput={(params) => (\n <TextField {...params} label={label} variant=\"outlined\" />\n )}\n sx={{ mb: 1 }}\n />\n );\n\n const uploadSvgIcon = (file, onUploaded) => {\n if (!file) return;\n const extension = String(file.name?.split(\".\").pop() || \"\").toLowerCase();\n\n if (extension !== \"svg\" && file.type !== \"image/svg+xml\") {\n showToast({\n type: \"warn\",\n message: \"Only SVG icon files can be uploaded.\",\n });\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const svgContent = String(reader.result || \"\").trim();\n if (!/<svg[\\s>]/i.test(svgContent)) {\n showToast({\n type: \"warn\",\n message: \"Uploaded file is not a valid SVG icon.\",\n });\n return;\n }\n onUploaded(svgContent);\n showToast({ type: \"success\", message: \"SVG icon loaded successfully.\" });\n };\n reader.onerror = () =>\n showToast({ type: \"error\", message: \"Unable to read SVG icon.\" });\n reader.readAsText(file);\n };\n\n const featureCardIconPicker = (activeComponent) => {\n const selectedIcon =\n activeComponent.icon?.icon || activeComponent.icon?.iconName || \"\";\n const uploadedSvg =\n activeComponent.icon?.iconsvg || activeComponent.icon?.svg || \"\";\n\n return (\n <Box sx={{ mb: 1 }}>\n {fontAwesomeIconDropdown(\"Icon\", selectedIcon, (icon) =>\n onUpdate(activeComponent.id, \"icon\", { icon, iconsvg: \"\" }),\n )}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Button size=\"small\" variant=\"outlined\" component=\"label\">\n Upload SVG\n <input\n hidden\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n uploadSvgIcon(file, (iconsvg) =>\n onUpdate(activeComponent.id, \"icon\", { icon: \"\", iconsvg }),\n );\n }}\n />\n </Button>\n {uploadedSvg && (\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() =>\n onUpdate(activeComponent.id, \"icon\", { icon: \"\", iconsvg: \"\" })\n }\n >\n Remove\n </Button>\n )}\n </Box>\n {(selectedIcon || uploadedSvg) && (\n <Box\n sx={{\n mt: 1,\n width: 44,\n height: 44,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"var(--color-background2)\",\n \"& svg\": { width: 28, height: 28 },\n }}\n >\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon} />\n )}\n </Box>\n )}\n </Box>\n );\n };\n\n const normalizeSizeOption = (value) => {\n if ([\"Large\", \"Medium\", \"Small\"].includes(value)) return value;\n return \"Medium\";\n };\n\n const renderGlobalConfig = () => {\n const isGreetingVisible = Boolean(appBarConfig?.greetings?.greetingVisible);\n const locationVisible = Boolean(appBarConfig?.locationVisible);\n\n const PREDEFINED_ACTION_KEYS = [\"Sync\", \"Info\"];\n const PREDEFINED_ACTIONS = {\n Sync: { name: \"Sync\", icon: \"faSync\", navigation: null },\n Info: { name: \"Info\", icon: \"faInfoCircle\", navigation: null },\n };\n\n const allActions = Array.isArray(appBarConfig?.actions)\n ? appBarConfig.actions\n : [];\n const customActions = allActions.filter(\n (a) => !PREDEFINED_ACTION_KEYS.includes(a.name),\n );\n const selectedPredefined = allActions\n .filter((a) => PREDEFINED_ACTION_KEYS.includes(a.name))\n .map((a) => a.name);\n\n const handlePredefinedChange = (event, selectedKeys) => {\n const newActions = [\n ...customActions,\n ...selectedKeys.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionChange = (index, property, value) => {\n const updatedCustom = [...customActions];\n updatedCustom[index] = { ...updatedCustom[index], [property]: value };\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionAdd = () => {\n const updatedCustom = [\n ...customActions,\n { name: \"New Action\", icon: \"\", iconsvg: \"\", navigation: null },\n ];\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n setExpandedActionIndex(updatedCustom.length - 1);\n };\n\n const handleActionRemove = (index) => {\n const updatedCustom = [...customActions];\n updatedCustom.splice(index, 1);\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n if (expandedActionIndex === index) {\n setExpandedActionIndex(null);\n } else if (expandedActionIndex > index) {\n setExpandedActionIndex(expandedActionIndex - 1);\n }\n };\n\n return (\n <>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mt: 1 }}>\n App Bar\n </Typography>\n\n {/* Greeting Section */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mt: 1,\n }}\n >\n <Typography variant=\"body2\">Greeting</Typography>\n <Switch\n checked={isGreetingVisible}\n onChange={(e) =>\n onAppBarUpdate(\"greetings\", { greetingVisible: e.target.checked })\n }\n />\n </Box>\n {isGreetingVisible && (\n <Box sx={{ ml: 2, mb: 2, mt: 1 }}>\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n sx={{ display: \"block\", mb: 1 }}\n >\n Enter your greeting below. Use {\"{{dynamicValue}}\"} (e.g.,{\" \"}\n {\"{{firstname}}\"}) to insert dynamic values.\n </Typography>\n <TextField\n size=\"small\"\n fullWidth\n label=\"Greeting Text\"\n value={appBarConfig?.greetings?.greetingName || \"\"}\n onChange={(e) =>\n onAppBarUpdate(\"greetings\", { greetingName: e.target.value })\n }\n />\n </Box>\n )}\n\n {isGreetingVisible &&\n (() => {\n const greetingNameStr = appBarConfig?.greetings?.greetingName || \"\";\n const extractedVarsMatch = greetingNameStr.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch\n .map((m) => m.slice(2, -2).trim())\n .filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n const greetingValues =\n appBarConfig?.greetings?.greetingValues || {};\n const activeUsedValues = uniqueExtractedVars\n .map((v) => greetingValues[v])\n .filter(Boolean);\n\n const DYNAMIC_VARIABLES_LIST = [\n \"id\",\n \"firstName\",\n \"lastName\",\n \"middleName\",\n \"gender\",\n \"contactNumber\",\n \"preferredLanguage\",\n \"roleId\",\n \"roleName\",\n ];\n\n if (uniqueExtractedVars.length === 0) return null;\n\n return (\n <Box sx={{ ml: 2, mb: 2, mt: 1 }}>\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n mb: 1,\n color: \"var(--color-primary)\",\n }}\n >\n Map Dynamic Values Parameters\n </Typography>\n {uniqueExtractedVars.map((extractedVar, index) => (\n <Box\n key={index}\n sx={{\n display: \"flex\",\n gap: 2,\n mb: 1,\n alignItems: \"center\",\n }}\n >\n <Box\n sx={{\n flex: 1,\n p: \"8.5px 14px\",\n border: \"1px solid rgba(0, 0, 0, 0.23)\",\n borderRadius: \"4px\",\n }}\n >\n <Typography variant=\"body2\">{extractedVar}</Typography>\n </Box>\n <FormControl size=\"small\" sx={{ flex: 1 }}>\n <Select\n displayEmpty\n value={greetingValues[extractedVar] || \"\"}\n onChange={(e) => {\n const newVals = { ...greetingValues };\n if (e.target.value) {\n newVals[extractedVar] = e.target.value;\n } else {\n delete newVals[extractedVar];\n }\n onAppBarUpdate(\"greetings\", {\n greetingValues: newVals,\n });\n }}\n >\n {DYNAMIC_VARIABLES_LIST.map((dynVar) => (\n <MenuItem\n key={dynVar}\n value={dynVar}\n disabled={\n activeUsedValues.includes(dynVar) &&\n greetingValues[extractedVar] !== dynVar\n }\n >\n {dynVar}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n ))}\n </Box>\n );\n })()}\n\n {/* Location Section */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"body2\">Location</Typography>\n <Switch\n checked={locationVisible}\n onChange={(e) =>\n onAppBarUpdate(\"locationVisible\", e.target.checked)\n }\n />\n </Box>\n\n {/* Actions Section */}\n <Box\n sx={{\n mt: 2,\n mb: 1,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Actions\n </Typography>\n <Button size=\"small\" variant=\"outlined\" onClick={handleActionAdd}>\n Add Action\n </Button>\n </Box>\n {customActions.map((action, index) => {\n const isExpanded = expandedActionIndex === index;\n const selectedIcon = action.icon || \"\";\n const uploadedSvg = action.iconsvg || action.svg || \"\";\n\n return (\n <Box\n key={index}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n }}\n >\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={() =>\n setExpandedActionIndex(isExpanded ? null : index)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n setExpandedActionIndex(isExpanded ? null : index);\n }\n }}\n sx={{\n minHeight: 42,\n px: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: isExpanded\n ? \"#e8f5e9\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"#f3f7fb\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 18,\n height: 18,\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon || \"faCircle\"} />\n )}\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {action.name || `Action ${index + 1}`}\n </Typography>\n </Box>\n <FontAwesomeIcons\n iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"}\n />\n </Box>\n\n {isExpanded && (\n <Box sx={{ p: 2, backgroundColor: \"var(--color-background)\" }}>\n <TextField\n size=\"small\"\n fullWidth\n label=\"Name\"\n value={action.name || \"\"}\n onChange={(e) =>\n handleActionChange(index, \"name\", e.target.value)\n }\n sx={{ mb: 1 }}\n />\n <Box sx={{ mb: 1 }}>\n {fontAwesomeIconDropdown(\"Icon\", selectedIcon, (icon) =>\n handleActionChange(index, \"icon\", icon),\n )}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n mt: 1,\n }}\n >\n <Button size=\"small\" variant=\"outlined\" component=\"label\">\n Upload SVG\n <input\n hidden\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n uploadSvgIcon(file, (iconsvg) => {\n handleActionChange(index, \"icon\", \"\"); // Clear FontAwesome icon\n handleActionChange(index, \"iconsvg\", iconsvg);\n });\n }}\n />\n </Button>\n {uploadedSvg && (\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() =>\n handleActionChange(index, \"iconsvg\", \"\")\n }\n >\n Remove SVG\n </Button>\n )}\n </Box>\n {(selectedIcon || uploadedSvg) && (\n <Box\n sx={{\n mt: 1,\n width: 36,\n height: 36,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"var(--color-background2)\",\n \"& svg\": { width: 24, height: 24 },\n }}\n >\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon} />\n )}\n </Box>\n )}\n </Box>\n {featureDropdown(\n \"Navigation\",\n typeof action.navigation === \"object\"\n ? action.navigation?.action\n : action.navigation,\n (featureId) =>\n handleActionChange(index, \"navigation\", featureId),\n )}\n <Box\n sx={{ display: \"flex\", justifyContent: \"flex-end\", mt: 1 }}\n >\n <Button\n size=\"small\"\n color=\"error\"\n variant=\"outlined\"\n onClick={() => handleActionRemove(index)}\n >\n Delete\n </Button>\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n\n {/* Predefined Actions Autocomplete */}\n <Box sx={{ mt: 2, mb: 1 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mb: 1 }}>\n Predefined Actions\n </Typography>\n <Autocomplete\n multiple\n options={PREDEFINED_ACTION_KEYS}\n size=\"small\"\n fullWidth\n value={selectedPredefined}\n onChange={handlePredefinedChange}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select predefined actions\"\n variant=\"outlined\"\n />\n )}\n />\n </Box>\n\n <Typography\n variant=\"subtitle2\"\n sx={{ fontWeight: \"bold\", mt: 2, mb: 1 }}\n >\n Bottom Navigation\n </Typography>\n {(bottomNavigationDraft || []).map((item) => {\n const isExpanded = expandedBottomNavigationItemId === item.id;\n return (\n <Box\n key={item.id}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n }}\n >\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={() =>\n setExpandedBottomNavigationItemId(isExpanded ? null : item.id)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n setExpandedBottomNavigationItemId(\n isExpanded ? null : item.id,\n );\n }\n }}\n sx={{\n minHeight: 42,\n px: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: isExpanded\n ? \"#e8f5e9\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"#f3f7fb\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <FontAwesomeIcons iconName={item.iconName || \"faCircle\"} />\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {item.label || item.id}\n </Typography>\n </Box>\n <FontAwesomeIcons\n iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"}\n />\n </Box>\n {isExpanded && (\n <Box sx={{ p: 1 }}>\n {textField(\"Label\", item.label, (e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"label\",\n e.target.value,\n ),\n )}\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={item.iconName || item.iconDocumentUuid || null}\n onChange={(event, newValue) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"iconName\",\n newValue || \"\",\n )\n }\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}\n >\n <FontAwesomeIcons iconName={option} />\n <Typography variant=\"body2\">{option}</Typography>\n </Box>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Navigation Icon\"\n variant=\"outlined\"\n />\n )}\n sx={{ mb: 1 }}\n />\n {featureDropdown(\n \"Navigation Action\",\n item.navigationAction,\n (featureId) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"navigationAction\",\n featureId,\n ),\n )}\n {numberField(\"Display Order\", item.displayOrder, (e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"displayOrder\",\n Number(e.target.value || 0),\n ),\n )}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"body2\">Visible</Typography>\n <Switch\n checked={item.visible !== false}\n onChange={(e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"visible\",\n e.target.checked,\n )\n }\n />\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n <Box\n sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1, mt: 1 }}\n >\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"gray\"\n onClick={cancelBottomNavigationDraft}\n >\n Cancel\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={saveBottomNavigationDraft}\n >\n Save\n </Button>\n </Box>\n </>\n );\n };\n\n const renderSelectedConfig = () => {\n if (!activeComponent) return null;\n\n if (activeComponent.type === \"SEARCH_BAR\") {\n const queryOptions = mobileQueries.map((q) => q.code);\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Search Bar Configuration\n </Typography>\n <Autocomplete\n disablePortal\n id=\"query-name-autocomplete\"\n options={queryOptions}\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n value={activeComponent.queryName || null}\n onChange={(event, newValue) =>\n onUpdate(activeComponent.id, \"queryName\", newValue || \"\")\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Query Code\"\n variant=\"outlined\"\n placeholder=\"Select or search query code\"\n />\n )}\n />\n </>\n );\n }\n\n if (activeComponent.type === \"SECTION\") {\n const opacityOptions = Array.from({ length: 21 }, (_, index) => {\n const percentage = index * 5;\n return {\n label: `${percentage}%`,\n value: Number((percentage / 100).toFixed(2)),\n };\n });\n\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Section Configuration\n </Typography>\n {textField(\"Section Title\", activeComponent.header?.title, (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n title: e.target.value,\n }),\n )}\n {selectField(\n \"Header Font Size\",\n activeComponent.header?.fontSize || \"Medium\",\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n fontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Header Font Weight\",\n activeComponent.header?.fontWeight || \"400\",\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n fontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n {colorField(\n \"Header Light Mode Color\",\n activeComponent.header?.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n foreground: {\n ...(activeComponent.header?.foreground || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Header Dark Mode Color\",\n activeComponent.header?.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n foreground: {\n ...(activeComponent.header?.foreground || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n type: e.target.value,\n }),\n BACKGROUND_TYPE_OPTIONS,\n )}\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <>\n {selectField(\n \"Gradient Type\",\n activeComponent.background?.gradientType || \"LINEAR\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientType: e.target.value,\n }),\n GRADIENT_TYPE_OPTIONS,\n )}\n\n {selectField(\n \"Direction\",\n activeComponent.background?.direction || \"LEFT_TO_RIGHT\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n direction: e.target.value,\n }),\n GRADIENT_DIRECTION_OPTIONS,\n )}\n {colorField(\n \"Gradient Start Color\",\n activeComponent.background?.gradientStartColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {colorField(\n \"Gradient End Color\",\n activeComponent.background?.gradientEndColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n ) : (\n <>\n {colorField(\n \"Background Light Mode Color\",\n activeComponent.background?.solidLightModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidLightModeColor: e.target.value,\n }),\n )}\n {colorField(\n \"Background Dark Mode Color\",\n activeComponent.background?.solidDarkModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidDarkModeColor: e.target.value,\n }),\n )}\n </>\n )}\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {imageDropdown(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n (documentUuid) =>\n onUpdate(activeComponent.id, \"backgroundImage\", {\n ...(activeComponent.backgroundImage || {}),\n documentUuid,\n }),\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"FEATURE_CARD\") {\n const opacityOptions = Array.from({ length: 21 }, (_, index) => {\n const percentage = index * 5;\n return {\n label: `${percentage}%`,\n value: Number((percentage / 100).toFixed(2)),\n };\n });\n\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Card Configuration\n </Typography>\n {numberField(\n \"Border Radius\",\n activeComponent.style?.borderRadius,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n borderRadius: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Card Width (%)\",\n activeComponent.style?.cardWidth ?? 100,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardWidth: Number(e.target.value || 100),\n }),\n )}\n {numberField(\n \" Card Height\",\n activeComponent.style?.cardHeight ?? 100,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardHeight: Number(e.target.value || 100),\n }),\n )}\n {numberField(\n \" Content Width (%)\",\n activeComponent.style?.contentWidth ?? 100,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentWidth: Number(e.target.value || 50),\n }),\n )}\n {numberField(\n \" Content Height\",\n activeComponent.style?.contentHeight ?? 100,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentHeight: Number(e.target.value || 50),\n }),\n )}\n\n {numberField(\n \"Shadow Elevation\",\n activeComponent.shadow?.elevation ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n elevation: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \"Shadow Opacity\",\n activeComponent.shadow?.opacity ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n opacity: Number(e.target.value || 0),\n }),\n )}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 1.5,\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{ color: \"#475569\", fontWeight: 500 }}\n >\n Show Leading Arrow\n </Typography>\n <Switch\n checked={Boolean(activeComponent.showLeadingArrow)}\n onChange={(e) =>\n onUpdate(\n activeComponent.id,\n \"showLeadingArrow\",\n e.target.checked,\n )\n }\n />\n </Box>\n {featureCardIconPicker(activeComponent)}\n {textField(\n \"Title\",\n activeComponent.content?.title ||\n activeComponent.content?.customTitle,\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n title: e.target.value,\n }),\n )}\n {textField(\n \"Subtitle\",\n activeComponent.content?.subTitle ||\n activeComponent.content?.customSubtitle,\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n subTitle: e.target.value,\n }),\n )}\n {imageDropdown(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n (documentUuid) =>\n onUpdate(activeComponent.id, \"backgroundImage\", {\n ...(activeComponent.backgroundImage || {}),\n documentUuid,\n }),\n )}\n {selectField(\n \"Alignment\",\n activeComponent.style?.contentAlignment || \"LEFT\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentAlignment: e.target.value,\n }),\n CONTENT_ALIGNMENT_OPTIONS,\n )}\n\n {selectField(\n \"Title Font Size\",\n normalizeSizeOption(activeComponent.style?.titleFontSize),\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n titleFontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Subtitle Font Size\",\n normalizeSizeOption(activeComponent.style?.subtitleFontSize),\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n subtitleFontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n type: e.target.value,\n }),\n BACKGROUND_TYPE_OPTIONS,\n )}\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <>\n {selectField(\n \"Gradient Type\",\n activeComponent.background?.gradientType || \"LINEAR\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientType: e.target.value,\n }),\n GRADIENT_TYPE_OPTIONS,\n )}\n\n {selectField(\n \"Direction\",\n activeComponent.background?.direction || \"LEFT_TO_RIGHT\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n direction: e.target.value,\n }),\n GRADIENT_DIRECTION_OPTIONS,\n )}\n {colorField(\n \"Gradient Start Color\",\n activeComponent.background?.gradientStartColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {colorField(\n \"Gradient End Color\",\n activeComponent.background?.gradientEndColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n ) : (\n <>\n {colorField(\n \"Background Light Mode Color\",\n activeComponent.background?.solidLightModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidLightModeColor: e.target.value,\n }),\n )}\n {colorField(\n \"Background Dark Mode Color\",\n activeComponent.background?.solidDarkModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidDarkModeColor: e.target.value,\n }),\n )}\n </>\n )}\n {colorField(\n \"Light Mode Text/Icon Color\",\n activeComponent.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n lightMode: e.target.value,\n }),\n )}\n {colorField(\n \"Dark Mode Text/Icon Color\",\n activeComponent.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n darkMode: e.target.value,\n }),\n )}\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"CAROUSEL\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Carousel Configuration\n </Typography>\n {numberField(\"Height\", activeComponent.height, (e) =>\n onUpdate(activeComponent.id, \"height\", Number(e.target.value || 0)),\n )}\n {numberField(\n \"Auto-scroll Interval\",\n activeComponent.autoScrollInterval,\n (e) =>\n onUpdate(\n activeComponent.id,\n \"autoScrollInterval\",\n Number(e.target.value || 0),\n ),\n )}\n {numberField(\"Border Radius\", activeComponent.borderRadius, (e) =>\n onUpdate(\n activeComponent.id,\n \"borderRadius\",\n Number(e.target.value || 0),\n ),\n )}\n <Box sx={{ display: \"flex\", gap: 1, mb: 1 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => onAddCarouselImage(activeComponent.id)}\n >\n Add Image\n </Button>\n <Button size=\"small\" variant=\"outlined\" component=\"label\">\n Upload\n <input\n hidden\n accept=\"image/*\"\n type=\"file\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n onImageUpload?.(file, (documentUuid) =>\n onAddCarouselImage(activeComponent.id, documentUuid),\n );\n }}\n />\n </Button>\n </Box>\n {(activeComponent.images || []).map((image, index) => (\n <Box\n key={index}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n p: 1,\n mb: 1,\n }}\n >\n {imageDropdown(\"Image\", image.documentUuid, (documentUuid) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"documentUuid\",\n documentUuid,\n ),\n )}\n {featureDropdown(\n \"Navigation Action\",\n typeof image.navigation === \"object\"\n ? image.navigation?.action\n : image.navigation,\n (featureId) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"navigation\",\n featureId,\n ),\n )}\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() => onRemoveCarouselImage(activeComponent.id, index)}\n >\n Remove\n </Button>\n </Box>\n ))}\n </>\n );\n }\n\n if (activeComponent.type === \"TEXT\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Text Configuration\n </Typography>\n {textField(\"Text\", activeComponent.content?.text, (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n text: e.target.value,\n }),\n )}\n {selectField(\n \"Font Size\",\n activeComponent.content?.fontSize || \"Medium\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n fontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n {selectField(\n \"Font Weight\",\n activeComponent.content?.fontWeight || \"400\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n fontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n {selectField(\n \"Text Style\",\n activeComponent.content?.textStyle || \"NORMAL\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n textStyle: e.target.value,\n }),\n TEXT_STYLE_OPTIONS,\n )}\n {selectField(\n \"Decoration\",\n activeComponent.content?.decoration || \"NONE\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n decoration: e.target.value,\n }),\n TEXT_DECORATION_OPTIONS,\n )}\n {colorField(\n \"Light Mode Color\",\n activeComponent.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n lightMode: e.target.value,\n }),\n )}\n {colorField(\n \"Dark Mode Color\",\n activeComponent.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n darkMode: e.target.value,\n }),\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"DIVIDER\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Divider Configuration\n </Typography>\n {selectField(\n \"Orientation\",\n activeComponent.style?.orientation || \"HORIZONTAL\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n orientation: e.target.value,\n }),\n DIVIDER_ORIENTATION_OPTIONS,\n )}\n {numberField(\"Height\", activeComponent.style?.height, (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n height: Number(e.target.value || 0),\n }),\n )}\n </>\n );\n }\n\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n This component has no additional configuration yet.\n </Typography>\n );\n };\n\n if (hideGlobalConfig) {\n return <Box>{renderSelectedConfig()}</Box>;\n }\n\n return (\n <Paper sx={{ p: 2 }}>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", mb: 1, color: \"var(--color-text)\" }}\n >\n Component Configuration\n </Typography>\n <Divider sx={{ mb: 1 }} />\n {activeComponent ? (\n <>\n {renderSelectedConfig()}\n <Button\n onClick={onDeselect}\n variant=\"outlined\"\n color=\"gray\"\n sx={{ mt: 1 }}\n >\n Close\n </Button>\n <Divider sx={{ my: 2 }} />\n </>\n ) : (\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n Use the edit icon on a preview component to configure it.\n </Typography>\n )}\n {!hideGlobalConfig && renderGlobalConfig()}\n </Paper>\n );\n};\nConfigurationPanel.propTypes = {\n activeComponent: PropTypes.any,\n onUpdate: PropTypes.any,\n onDeselect: PropTypes.any,\n mobileQueries: PropTypes.any,\n appBarConfig: PropTypes.any,\n onAppBarUpdate: PropTypes.any,\n bottomNavigationConfig: PropTypes.any,\n onBottomNavigationSave: PropTypes.any,\n onAddCarouselImage: PropTypes.any,\n onUpdateCarouselImage: PropTypes.any,\n onRemoveCarouselImage: PropTypes.any,\n documentMasterImages: PropTypes.array,\n hideGlobalConfig: PropTypes.bool,\n};\nfunction SvgIconBox({ svg }) {\n const [svgHtml, setSvgHtml] = useState(\"\");\n\n useEffect(() => {\n if (svg) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, \"image/svg+xml\");\n const svgElement = doc.documentElement;\n\n let viewBox = svgElement.getAttribute(\"viewBox\");\n if (!viewBox) {\n const width = svgElement.getAttribute(\"width\") || \"512\";\n const height = svgElement.getAttribute(\"height\") || \"512\";\n svgElement.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n }\n svgElement.removeAttribute(\"width\");\n svgElement.removeAttribute(\"height\");\n svgElement.setAttribute(\"style\", \"width: 100%; height: 100%;\");\n\n const serializedSvg = new XMLSerializer().serializeToString(svgElement);\n setSvgHtml(serializedSvg);\n }\n }, [svg]);\n\n return (\n <Grid2\n size={2}\n sx={{\n alignItems: \"center\",\n alignSelf: \"center\",\n height: \"40px\",\n width: \"40px\",\n display: \"flex\",\n justifyContent: \"center\",\n textAlign: \"center\",\n backgroundColor: \"\",\n borderRadius: \"3%\",\n transition: \"background-color 0.3s ease\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray3)\",\n cursor: \"pointer\",\n },\n overflow: \"hidden\",\n }}\n >\n <div dangerouslySetInnerHTML={{ __html: svgHtml }} />\n </Grid2>\n );\n}\n\nSvgIconBox.propTypes = {\n svg: PropTypes.string.isRequired,\n};\n\nconst renderIcon = (iconData, size = \"36px\") => {\n let svgContent = null;\n\n if (typeof iconData === \"object\" && iconData !== null) {\n if (iconData.type === \"svg\" && typeof iconData.content === \"string\") {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === \"string\") {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === \"string\") {\n svgContent = iconData;\n }\n\n if (typeof svgContent === \"string\" && svgContent.includes(\"<svg\")) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: size,\n width: size,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: \"1.2rem\",\n color: \"var(--color-gray3)\",\n border: \"1px solid\",\n borderRadius: \"50%\",\n height: \"36px\",\n width: \"36px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"4px\",\n }}\n >\n ?\n </Box>\n );\n};\nconst SidebarDraggableFeatureTile = ({\n feature,\n isGroupMember = false,\n disabled = false,\n}) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, \"18px\");\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: \"18px\",\n width: \"18px\",\n marginRight: \"8px\",\n },\n });\n }\n return (\n <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>\n {renderIcon(iconData, size)}\n </Box>\n );\n };\n return (\n <Box\n sx={{\n width: \"fit-content\",\n p: \"10px\",\n pl: isGroupMember ? \"20px\" : \"10px\",\n backgroundColor: \"var(--color-background2)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n cursor: disabled ? \"not-allowed\" : \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n transition: \"all 0.1s\",\n opacity: disabled ? 0.55 : 1,\n mt: \"4px\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray4)\",\n borderColor: \"var(--color-gray3)\",\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, \"18px\")}\n\n <Typography variant=\"body2\" sx={{ fontWeight: \"normal\", color: \"#333\" }}>\n {feature?.name}\n </Typography>\n </Box>\n );\n};\nSidebarDraggableFeatureTile.propTypes = {\n feature: PropTypes.any,\n isGroupMember: PropTypes.any,\n disabled: PropTypes.bool,\n};\nconst SidebarGroupRenderer = ({\n item,\n COMPONENT_TYPES,\n activeGroupId,\n onGroupToggle,\n usedFeatureIds = new Set(),\n}) => {\n const isGroupExpanded = activeGroupId === item.uuid;\n const handleDragIconClickStop = (e) => {\n e.stopPropagation();\n };\n\n if (item.type !== \"GROUP\") {\n return (\n <DraggableComponent\n key={item.uuid}\n id={item.uuid}\n componentType={COMPONENT_TYPES.FEATURE}\n dragData={item}\n disabled={usedFeatureIds.has(String(item.id))}\n >\n <Grid item xs={12} key={item.id}>\n <SidebarDraggableFeatureTile\n feature={item}\n disabled={usedFeatureIds.has(String(item.id))}\n />\n </Grid>\n </DraggableComponent>\n );\n }\n\n return (\n <Accordion\n key={item.uuid}\n sx={{\n m: 0,\n \"&:before\": { display: \"none\" },\n boxShadow: \"none\",\n border: \"1px solid var(--color-gray3)\",\n mb: 1,\n borderRadius: \"4px!important\",\n }}\n expanded={isGroupExpanded}\n onChange={() => onGroupToggle(item.uuid)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <Box\n sx={{ p: 1 }}\n onMouseDown={handleDragIconClickStop}\n onTouchStart={handleDragIconClickStop}\n >\n <FontAwesomeIcons\n iconName=\"faChevronDown\"\n style={{\n fontSize: \"1rem\",\n color: \"var(--color-text)\",\n transform: isGroupExpanded ? \"rotate(360deg)\" : \"rotate(0deg)\",\n transition: \"transform 0.2s\",\n }}\n />\n </Box>\n }\n sx={{\n minHeight: \"15px\",\n backgroundColor: \"#e3f2fd\",\n borderBottom: \"1px solid #bbdefb\",\n cursor: \"grab\",\n \"&:hover\": { backgroundColor: \"#c5e3f8\" },\n \"& .MuiAccordionSummary-content\": { margin: \"0\" },\n p: \"0 10px\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", width: \"100%\" }}>\n <DraggableComponent\n key={`drag-handle-${item.uuid}`}\n id={item.uuid}\n componentType={COMPONENT_TYPES.GROUP}\n dragData={item}\n >\n <Box\n component=\"span\"\n sx={{\n cursor: \"grab\",\n mr: 1,\n px: 0.5,\n \"&:hover\": { color: \"#007bff\" },\n }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n <FontAwesomeIcons\n iconName=\"faBars\"\n style={{ fontSize: \"0.8rem\", color: \"var(--color-text)\" }}\n />\n </Box>\n </DraggableComponent>\n\n <Typography\n variant=\"subtitle2\"\n sx={{ fontWeight: \"bold\", color: \"var(--color-text)\", flexGrow: 1 }}\n >\n {item.name} ({item.menus.length})\n </Typography>\n </Box>\n </AccordionSummary>\n\n <AccordionDetails\n sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-gray4)\" }}\n >\n <Grid container spacing={0.5}>\n {item.menus.map((menu) => (\n <DraggableComponent\n key={menu.uuid}\n id={menu.uuid}\n componentType={COMPONENT_TYPES.FEATURE} // DRAGGABLE FEATURE TYPE\n dragData={menu}\n disabled={usedFeatureIds.has(String(menu.id))}\n >\n <Grid item xs={12} key={menu.id}>\n <SidebarDraggableFeatureTile\n feature={menu}\n isGroupMember={true}\n disabled={usedFeatureIds.has(String(menu.id))}\n />\n </Grid>\n </DraggableComponent>\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n );\n};\nSidebarGroupRenderer.propTypes = {\n item: PropTypes.any,\n COMPONENT_TYPES: PropTypes.any,\n activeGroupId: PropTypes.any,\n onGroupToggle: PropTypes.any,\n usedFeatureIds: PropTypes.any,\n};\n"],"names":["MenuDragContext","createContext","DASHBOARD_NODE_TARGET","FeatureSortableWrapper","id","children","sectionId","featureName","attributes","listeners","setNodeRef","isDragging","useSortable","style","React","MobileSearchBar","handleSectionClick","props","ref","jsxs","Box","e","jsx","FontAwesomeIcon","faMagnifyingGlass","Typography","PropTypes","MobileSection","arrayIndex","sectionTitle","dnd","sectionFeatures","SvgIconBox","onGroupClick","activeGroupId","handleContextMenu","handleTileClick","handleGroupContextMenu","feature","setFeatureContainerRef","isOver","useDroppable","SortableContext","f","verticalListSortingStrategy","Grid","isGroup","isPopoverOpen","renderFeatureIcon","renderFeatureName","faChevronDown","GroupFeatureSortableItem","handleFeatureClick","transform","transition","CSS","iconData","svgContent","match","DashboardNodeDropZone","node","NODE_DROP_ZONE","DASHBOARD_COMPONENT_TYPES","DashboardLayoutNode","onDeleteNode","zoomedNodeId","setZoomedNodeId","nodeKey","setDraggableRef","useDraggable","setDropTargetRef","isNodeOver","setCombinedRef","useCallback","element","dragHandleProps","draggableStyle","ActionButtons","Tooltip","IconButton","faMagnifyingGlassPlus","faPen","faTrashCan","TypeLabel","sectionChildren","_a","_b","_c","_d","_e","_f","_g","_i","_h","_j","child","shadowElevation","_k","shadowOpacity","_l","boxShadow","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","faChevronRight","rowChildren","visibleColumns","_I","isVerticalDivider","_J","dividerThickness","_K","_L","_M","_N","fontSizeMap","fontWeightMap","_O","_P","_Q","_R","_S","_T","_U","_V","DashboardSectionNode","index","MobileDisplay","tabStatus","layoutComponents","componentTypes","activeElementId","activeTabId","handleTabSwitch","formList","selectedForm","onFormSelect","setCurrentLayoutComponents","programFeatures","appBarConfig","bottomNavigationConfig","dropZoneId","dropZoneType","zoomedNode","findNodeById","setDroppableRef","navItems","HomeIcon","ProgramsIcon","AnalyticsIcon","FamilyManagementIcon","visibleNavItems","item","a","b","navItem","popoverState","setPopoverState","useState","handleOpenGroupPopover","anchorElement","handleCloseGroupPopover","renderFeatureTile","handleGroupInternalSort","event","active","over","groupId","newGroupData","prevComponents","section","oldIndex","newIndex","newMenus","arrayMove","prev","handleNestedFeatureClick","faWifi","faSignal","faBatteryFull","faLocationDot","selectedActions","action","uploadedSvg","fontAwesomeIcon","FontAwesomeIcons","FormControl","InputLabel","Select","form","MenuItem","Fragment","component","DndContext","MobileGroupPopover","name","parts","part","groupData","anchorEl","onClose","features","anchorRect","Paper","faTimes","Divider","normalizeAppBarConfig","raw","normalizedConfig","defaultAppBarConfig","AddMenuConfiguration","location","useLocation","state","queryParams","useMemo","navigate","useNavigate","rolesList","setRolesList","isEditMode","setIsEditMode","availableForms","setAvailableForms","mobileQueries","setMobileQueries","documentMasterImages","setDocumentMasterImages","masterFeatureList","setMasterFeatureList","groupedFeatures","setGroupedFeatures","isMenuGroupsExpanded","setIsMenuGroupsExpanded","isStandaloneExpanded","setIsStandaloneExpanded","backModalOpen","setBackModalOpen","configurationDialogOpen","setConfigurationDialogOpen","configurationDraft","setConfigurationDraft","setAppBarConfig","setBottomNavigationConfig","defaultBottomNavigationConfig","user","useSelector","formCtrl","useForm","useEffect","fetchRoles","fetchForms","fetchMobileQueries","fetchDocumentMasterImages","fetchMenus","appConfiguration","isAttendanceRequired","appBar","bottomNavigation","reconstructAppState","setAppConfiguration","setTabStatus","setSelectedForm","mappedForms","execute","response","allowedImageExtensions","uploadDocument","params","api","normalizeExtension","document","fileName","extension","extensionFromName","imageOptions","uuid","showToast","uploadDocumentMasterImage","file","onUploaded","documentUUID","generateUUID","payload","data","nextDocument","existingDocuments","error","roleId","transformListData","findMetadataById","group","hydrateFeature","canonicalFeature","parentInstanceId","masterData","instanceUuid","hydratedMenus","menuItem","masterMenuItem","m","instancePrefix","hydrateLayout","canonicalLayout","tabId","c","hydrateDashboardLayout","parentId","instanceId","sectionInstanceId","hydratedFeatures","canonicalConfig","newAppConfiguration","newTabStatus","newSelectedForm","tabData","groupedList","masterFeatureMap","processedMenus","menu","transformedMenu","sanitizeFeature","canonicalGroupId","validateMobileLayout","extractedVarsMatch","extractedVars","uniqueExtractedVars","greetingValues","extractedVar","homeLayout","hasEmptyDashboardLayoutNode","createCanonicalConfig","finalConfig","navTabs","tab","isEnabled","tabEntry","rawLayout","sanitizeDashboardLayout","rawFeatures","onSubmit","configJsonString","COMPONENT_TYPES","handleFormSelection","selectedCode","formObject","activeId","setActiveId","setActiveElementId","setActiveTabId","initialConfig","searchTerm","setSearchTerm","setActiveGroupId","programsFeatures","featureOptions","usedDashboardFeatureIds","collectIds","nodes","activeLayout","layoutsToCheck","handleGroupAccordionToggle","prevId","currentLayout","filteredFeatures","lowerSearch","filteredMenus","separatedGroups","separatedFeatures","groups","newLayoutUpdater","prevConfig","updateNodeProperty","property","value","groupKey","childKey","openComponentConfiguration","nodeId","selectedNode","closeComponentConfiguration","saveComponentConfiguration","updateNodeById","handleComponentUpdate","handleDraftComponentUpdate","updateAppBarProperty","nextConfig","nextGreetings","cleanedValues","v","saveBottomNavigationConfig","items","savedItems","prevStatus","nextStatus","savedItem","activeItem","firstVisibleItem","addCarouselImage","componentId","documentUuid","updateCarouselImage","imageIndex","image","removeCarouselImage","_","addDraftCarouselImage","updateDraftCarouselImage","removeDraftCarouselImage","createDashboardChildFromDrag","draggedType","dragData","createFeatureNode","createLayoutNode","hasFeatureInDashboardLayout","featureId","getDuplicateCheckScopeNode","targetId","targetNode","currentId","lastNode","ROOT_DROP_ZONE","parentInfo","findParentNodeInfo","getParentNodeForMoveValidation","parentNode","movingNodeId","addDashboardChild","parentType","prevLayout","validationMessage","getDashboardDropValidationMessage","scopeNode","childNode","addChildToParent","deleteDashboardNode","removeNodeById","handleDragStart","handleDragEnd","overType","overSectionId","activeSectionId","droppedFeature","programsConfig","currentFeatures","newFeature","instanceIdToDelete","parentSectionId","comp","newFeatures","targetParent","validationParentNode","moveNodeBeforeTarget","moveNodeToParent","addNodeBeforeTarget","droppedGroup","targetSectionIndex","targetSection","sourceIdString","newGroupItem","updatedSection","newLayout","searchBar","sortableList","oldSortableIndex","newSortableIndex","finalLayout","targetZoneType","newComponent","SCREEN_CONTENT_WIDTH","OverlayMobileSearchBar","OverlayMobileSection","OverlayFeatureTile","renderIcon","OverlaySidebarFeature","size","iconElement","getActiveLayoutItem","sourceItem","itemType","programFeature","layoutNode","renderActiveOverlay","isDraggingSortable","isDraggingTopLevel","isDraggingFeatureTile","isDraggingProgramFeatureTile","sortableSectionIds","customCollisionDetection","args","droppableContainers","container","rectIntersection","dashboardDropTargets","targetType","validSectionDropTargets","closestCenter","Button","CustomDropdown","Switch","DraggableComponent","TrashZone","TextField","InputAdornment","Accordion","AccordionSummary","AccordionDetails","SidebarGroupRenderer","ConfigurationPanel","DragOverlay","Dialog","DialogTitle","DialogContent","DialogActions","CustomConfirmationModal","componentType","disabled","activeComponent","onUpdate","onDeselect","onAppBarUpdate","onBottomNavigationSave","onAddCarouselImage","onUpdateCarouselImage","onRemoveCarouselImage","onImageUpload","hideGlobalConfig","expandedBottomNavigationItemId","setExpandedBottomNavigationItemId","expandedActionIndex","setExpandedActionIndex","bottomNavigationDraft","setBottomNavigationDraft","updateBottomNavigationDraftItem","itemId","cancelBottomNavigationDraft","saveBottomNavigationDraft","fieldSx","textField","label","onChange","numberField","colorField","selectField","options","option","imageDropdown","Autocomplete","selectedDocument","selectedValue","featureDropdown","selectedFeature","fontAwesomeIconDropdown","FontAwesomeIconsNames","newValue","uploadSvgIcon","reader","featureCardIconPicker","selectedIcon","icon","iconsvg","normalizeSizeOption","renderGlobalConfig","isGreetingVisible","locationVisible","PREDEFINED_ACTION_KEYS","PREDEFINED_ACTIONS","allActions","customActions","selectedPredefined","handlePredefinedChange","selectedKeys","newActions","key","handleActionChange","updatedCustom","handleActionAdd","handleActionRemove","activeUsedValues","DYNAMIC_VARIABLES_LIST","newVals","dynVar","isExpanded","renderSelectedConfig","queryOptions","q","opacityOptions","percentage","FONT_SIZE_OPTIONS","FONT_WEIGHT_OPTIONS","BACKGROUND_TYPE_OPTIONS","GRADIENT_TYPE_OPTIONS","GRADIENT_DIRECTION_OPTIONS","CONTENT_ALIGNMENT_OPTIONS","_W","_X","_Y","TEXT_STYLE_OPTIONS","_Z","TEXT_DECORATION_OPTIONS","__","_$","_aa","DIVIDER_ORIENTATION_OPTIONS","_ba","svg","svgHtml","setSvgHtml","svgElement","width","height","serializedSvg","Grid2","SidebarDraggableFeatureTile","isGroupMember","onGroupToggle","usedFeatureIds","isGroupExpanded","handleDragIconClickStop"],"mappings":"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"}
|