@argusoft/medplat-core 1.0.29 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/AccessRights-DUgY6ewy.js +1031 -0
  2. package/dist/AccessRights-DUgY6ewy.js.map +1 -0
  3. package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
  4. package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
  5. package/dist/{AddFeatures-v3TmGQee.js → AddFeatures-D1sU8RjY.js} +2 -2
  6. package/dist/{AddFeatures-v3TmGQee.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
  7. package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
  8. package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
  9. package/dist/AddMenuConfiguration-c6ZKiN0i.js +8898 -0
  10. package/dist/AddMenuConfiguration-c6ZKiN0i.js.map +1 -0
  11. package/dist/AppModal-CCtrQ5Tr.js +394 -0
  12. package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
  13. package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js +387 -0
  14. package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js.map +1 -0
  15. package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js +398 -0
  16. package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js.map +1 -0
  17. package/dist/{ChangePasswordModalCore-DutQAZOx.js → ChangePasswordModalCore-lQ9GamH1.js} +1605 -1610
  18. package/dist/ChangePasswordModalCore-lQ9GamH1.js.map +1 -0
  19. package/dist/ConditionConfig-BQBmBHaM.js +408 -0
  20. package/dist/ConditionConfig-BQBmBHaM.js.map +1 -0
  21. package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js +435 -0
  22. package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js.map +1 -0
  23. package/dist/EventConfig-BY2cgGyx.js +27 -0
  24. package/dist/EventConfig-BY2cgGyx.js.map +1 -0
  25. package/dist/EventConfigurations-CUPEN5BV.js +544 -0
  26. package/dist/EventConfigurations-CUPEN5BV.js.map +1 -0
  27. package/dist/EventConfigurations.css +1 -1
  28. package/dist/EventsExceptionModal-BX-ArkBE.js +188 -0
  29. package/dist/EventsExceptionModal-BX-ArkBE.js.map +1 -0
  30. package/dist/EventsUi-D6O9S7BK.js +258 -0
  31. package/dist/EventsUi-D6O9S7BK.js.map +1 -0
  32. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js +79 -0
  33. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js.map +1 -0
  34. package/dist/FeatureMenu-CHsBbw3W.js +525 -0
  35. package/dist/FeatureMenu-CHsBbw3W.js.map +1 -0
  36. package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-iXBPkRVF.js} +22 -22
  37. package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-iXBPkRVF.js.map} +1 -1
  38. package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
  39. package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
  40. package/dist/FlywayQuery-CQygj51V.js +179 -0
  41. package/dist/FlywayQuery-CQygj51V.js.map +1 -0
  42. package/dist/GrantPermissionModal-D7iNZd0M.js +239 -0
  43. package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
  44. package/dist/ImmunizationConfigurationBase-aUtx0JEe.js +8019 -0
  45. package/dist/ImmunizationConfigurationBase-aUtx0JEe.js.map +1 -0
  46. package/dist/ImmunizationConfigurationBase.css +1 -1
  47. package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
  48. package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
  49. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js +665 -0
  50. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js.map +1 -0
  51. package/dist/LanguagesModal-B3NTebYT.js +352 -0
  52. package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
  53. package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
  54. package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
  55. package/dist/ManageEventConfiguration-DqW3krT6.js +1216 -0
  56. package/dist/ManageEventConfiguration-DqW3krT6.js.map +1 -0
  57. package/dist/ManageEventConfiguration.css +1 -1
  58. package/dist/{ManageNotification-CfhHlfxA.js → ManageNotification-C5MhV77Q.js} +2 -2
  59. package/dist/{ManageNotification-CfhHlfxA.js.map → ManageNotification-C5MhV77Q.js.map} +1 -1
  60. package/dist/{ManageRole-4Y2PP4dQ.js → ManageRole-CNZBRKGU.js} +2 -2
  61. package/dist/{ManageRole-4Y2PP4dQ.js.map → ManageRole-CNZBRKGU.js.map} +1 -1
  62. package/dist/ManageTranslation-vRiptUAP.js +833 -0
  63. package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
  64. package/dist/ManageTranslation.css +1 -1
  65. package/dist/{ManageUser-DDzyd9jm.js → ManageUser-DZltBina.js} +224 -224
  66. package/dist/{ManageUser-DDzyd9jm.js.map → ManageUser-DZltBina.js.map} +1 -1
  67. package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js +272 -0
  68. package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map +1 -0
  69. package/dist/MobileAnalytics-BLOionG_.js +17301 -0
  70. package/dist/MobileAnalytics-BLOionG_.js.map +1 -0
  71. package/dist/MobileMenuManagement-68Wijb0X.js +220 -0
  72. package/dist/MobileMenuManagement-68Wijb0X.js.map +1 -0
  73. package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js +752 -0
  74. package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js.map +1 -0
  75. package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
  76. package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
  77. package/dist/{NotificationList-BMFpNUJG.js → NotificationList-DEyRZEuM.js} +2 -2
  78. package/dist/{NotificationList-BMFpNUJG.js.map → NotificationList-DEyRZEuM.js.map} +1 -1
  79. package/dist/OtherTypeEventConfigModal-stNmuSv_.js +1812 -0
  80. package/dist/OtherTypeEventConfigModal-stNmuSv_.js.map +1 -0
  81. package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js +482 -0
  82. package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map +1 -0
  83. package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js +157 -0
  84. package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map +1 -0
  85. package/dist/PermissionsModal-CCYkcKlC.js +151 -0
  86. package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
  87. package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js +119 -0
  88. package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map +1 -0
  89. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js +783 -0
  90. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js.map +1 -0
  91. package/dist/PickupsPage-D7zyioJB-bHKnARYw.js +818 -0
  92. package/dist/PickupsPage-D7zyioJB-bHKnARYw.js.map +1 -0
  93. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js +599 -0
  94. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js.map +1 -0
  95. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js +1305 -0
  96. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js.map +1 -0
  97. package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js +253 -0
  98. package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js.map +1 -0
  99. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js +675 -0
  100. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js.map +1 -0
  101. package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js +1577 -0
  102. package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js.map +1 -0
  103. package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js +279 -0
  104. package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map +1 -0
  105. package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js +293 -0
  106. package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js.map +1 -0
  107. package/dist/QueryBuilder-CXaBe6sr.js +478 -0
  108. package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
  109. package/dist/{RoleManagement-DEiBNfT8.js → RoleManagement-s8iNx2Mu.js} +145 -155
  110. package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
  111. package/dist/Roles-BIyiic67.js +14 -0
  112. package/dist/Roles-BIyiic67.js.map +1 -0
  113. package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js +544 -0
  114. package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js.map +1 -0
  115. package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js +315 -0
  116. package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js.map +1 -0
  117. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js +676 -0
  118. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js.map +1 -0
  119. package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
  120. package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
  121. package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-DIOUdYfG.js} +170 -123
  122. package/dist/ShowFlywayQuery-DIOUdYfG.js.map +1 -0
  123. package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
  124. package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
  125. package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js +728 -0
  126. package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js.map +1 -0
  127. package/dist/SubMenu-BdMTYtC1.js +319 -0
  128. package/dist/SubMenu-BdMTYtC1.js.map +1 -0
  129. package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js +746 -0
  130. package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js.map +1 -0
  131. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js +315 -0
  132. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js.map +1 -0
  133. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js +476 -0
  134. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js.map +1 -0
  135. package/dist/TypeConfiguration-JbRCN6GR.js +114 -0
  136. package/dist/TypeConfiguration-JbRCN6GR.js.map +1 -0
  137. package/dist/{UserList-Bc8gYxRL.js → UserList-L41Xw0Q6.js} +253 -236
  138. package/dist/{UserList-Bc8gYxRL.js.map → UserList-L41Xw0Q6.js.map} +1 -1
  139. package/dist/Users-CsJ08Kjm.js.map +1 -1
  140. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js +321 -0
  141. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js.map +1 -0
  142. package/dist/constants-DpXnLsAB-D6lN5cjK.js +445 -0
  143. package/dist/constants-DpXnLsAB-D6lN5cjK.js.map +1 -0
  144. package/dist/{dashboardLayoutUtils-D1xCAxp3.js → dashboardLayoutUtils-CJivzaU1.js} +95 -92
  145. package/dist/dashboardLayoutUtils-CJivzaU1.js.map +1 -0
  146. package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
  147. package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
  148. package/dist/index.css +1 -1
  149. package/dist/index.js +1 -1
  150. package/dist/index.lib-ETRQOzvE.js +894 -0
  151. package/dist/index.lib-ETRQOzvE.js.map +1 -0
  152. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js +36 -0
  153. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js.map +1 -0
  154. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
  155. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
  156. package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
  157. package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
  158. package/package.json +4 -3
  159. package/dist/AccessRights-Zm8Obm4N.js +0 -1284
  160. package/dist/AccessRights-Zm8Obm4N.js.map +0 -1
  161. package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
  162. package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
  163. package/dist/AddLabelModal-DFllBVcd.js +0 -734
  164. package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
  165. package/dist/AddMenuConfiguration-Ce91MhnU.js +0 -8547
  166. package/dist/AddMenuConfiguration-Ce91MhnU.js.map +0 -1
  167. package/dist/AppModal-CtG2GjD_.js +0 -428
  168. package/dist/AppModal-CtG2GjD_.js.map +0 -1
  169. package/dist/ChangePasswordModalCore-DutQAZOx.js.map +0 -1
  170. package/dist/ConditionConfig-B4Ffpgj3.js +0 -395
  171. package/dist/ConditionConfig-B4Ffpgj3.js.map +0 -1
  172. package/dist/ConditionConfig.css +0 -1
  173. package/dist/EventConfigurations-BJcURufo.js +0 -449
  174. package/dist/EventConfigurations-BJcURufo.js.map +0 -1
  175. package/dist/EventsExceptionModal-BlZtBQoR.js +0 -200
  176. package/dist/EventsExceptionModal-BlZtBQoR.js.map +0 -1
  177. package/dist/EventsSkeleton-DK6JDKAK.js +0 -83
  178. package/dist/EventsSkeleton-DK6JDKAK.js.map +0 -1
  179. package/dist/FeatureMenu-C3503UIX.js +0 -265
  180. package/dist/FeatureMenu-C3503UIX.js.map +0 -1
  181. package/dist/FlywayQuery-Cx2sly6g.js +0 -169
  182. package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
  183. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +0 -5895
  184. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +0 -1
  185. package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
  186. package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
  187. package/dist/LanguagesModal-D6VfaGrl.js +0 -394
  188. package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
  189. package/dist/ManageDynamicFeature-dt096fyj.js +0 -4189
  190. package/dist/ManageDynamicFeature-dt096fyj.js.map +0 -1
  191. package/dist/ManageEventConfiguration-BpSJszSX.js +0 -1017
  192. package/dist/ManageEventConfiguration-BpSJszSX.js.map +0 -1
  193. package/dist/ManageTranslation-B4C9-lWD.js +0 -625
  194. package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
  195. package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
  196. package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
  197. package/dist/MobileTypeEventConfigModal-DUkUYACe.js +0 -783
  198. package/dist/MobileTypeEventConfigModal-DUkUYACe.js.map +0 -1
  199. package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
  200. package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
  201. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js +0 -2046
  202. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +0 -1
  203. package/dist/QueryBuilder-z7eqfd7D.js +0 -383
  204. package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
  205. package/dist/RoleManagement-DEiBNfT8.js.map +0 -1
  206. package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
  207. package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
  208. package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
  209. package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
  210. package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
  211. package/dist/SubMenu-B072oEGb.js +0 -191
  212. package/dist/SubMenu-B072oEGb.js.map +0 -1
  213. package/dist/TypeConfiguration-C3xoP2Nb.js +0 -117
  214. package/dist/TypeConfiguration-C3xoP2Nb.js.map +0 -1
  215. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
  216. package/dist/index.lib-C3fwoM3y.js +0 -820
  217. package/dist/index.lib-C3fwoM3y.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddMenuConfiguration-c6ZKiN0i.js","sources":["../src/views/MobileMenuManagement/MenuDragContext.js","../src/views/MobileMenuManagement/ToolbarOverlay.jsx","../src/views/MobileMenuManagement/ImagePickerDialog.jsx","../src/views/MobileMenuManagement/InteractiveCarousel.jsx","../src/views/MobileMenuManagement/MobileDisplay.jsx","../src/views/MobileMenuManagement/dashboardBlockTemplates.js","../src/views/MobileMenuManagement/BlockPreviews.jsx","../src/views/MobileMenuManagement/BlockLibrary.jsx","../src/views/MobileMenuManagement/VisibilityConditionEditor.jsx","../src/views/MobileMenuManagement/InspectorPanel.jsx","../src/views/MobileMenuManagement/OnLoadConfigurationPanel.jsx","../src/views/MobileMenuManagement/AddMenuConfiguration.jsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const MenuDragContext = createContext();\nexport const useMenuDragContext = () => useContext(MenuDragContext);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Box, IconButton, Tooltip } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faArrowUp,\n faArrowDown,\n faCopy,\n faTrash,\n faMagnifyingGlassPlus,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nconst ToolbarOverlay = ({ onMoveUp, onMoveDown, onDuplicate, onDelete, onZoom, orientation = \"horizontal\" }) => {\n return (\n <Box\n sx={{\n position: \"absolute\",\n top: 8,\n right: 8,\n bgcolor: \"grey.800\",\n borderRadius: \"6px\",\n display: \"flex\",\n flexDirection: orientation === \"vertical\" ? \"column\" : \"row\",\n alignItems: \"center\",\n gap: 0.5,\n p: 0.5,\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n zIndex: 10,\n \"& .MuiIconButton-root\": {\n color: \"grey.50\",\n padding: \"4px\",\n \"&:hover\": {\n backgroundColor: \"rgba(255,255,255,0.1)\",\n },\n },\n }}\n onClick={(e) => e.stopPropagation()} // Prevent selecting parent when clicking toolbar\n >\n <Tooltip title=\"Move Up\" placement=\"top\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); onMoveUp(); }}>\n <FontAwesomeIcon icon={faArrowUp} style={{ fontSize: \"12px\" }} />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Move Down\" placement=\"top\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); onMoveDown(); }}>\n <FontAwesomeIcon icon={faArrowDown} style={{ fontSize: \"12px\" }} />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Duplicate\" placement=\"top\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); onDuplicate(); }}>\n <FontAwesomeIcon icon={faCopy} style={{ fontSize: \"12px\" }} />\n </IconButton>\n </Tooltip>\n {onZoom && (\n <Tooltip title=\"Zoom In\" placement=\"top\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); onZoom(); }}>\n <FontAwesomeIcon icon={faMagnifyingGlassPlus} style={{ fontSize: \"12px\" }} />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title=\"Delete\" placement=\"top\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); onDelete(); }} sx={{ color: \"error.main\" }}>\n <FontAwesomeIcon icon={faTrash} style={{ fontSize: \"12px\" }} />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n\nToolbarOverlay.propTypes = {\n onMoveUp: PropTypes.func.isRequired,\n onMoveDown: PropTypes.func.isRequired,\n onDuplicate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onZoom: PropTypes.func,\n orientation: PropTypes.oneOf([\"horizontal\", \"vertical\"]),\n};\n\nexport default ToolbarOverlay;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Backdrop,\n Box,\n Button,\n Dialog,\n DialogContent,\n Fade,\n Grid2,\n IconButton,\n InputAdornment,\n Modal,\n Pagination,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { FormConfiguratorService } from \"@/common/services/FormConfiguratorService\";\nimport { getFileById } from \"@/common/services/GlobalApis\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst modalStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"60%\",\n maxHeight: \"80%\",\n scrollbarWidth: \"none\",\n overflowY: \"scroll\",\n bgcolor: \"background.paper\",\n borderRadius: \"10px\",\n p: 2,\n};\n\nconst ITEMS_PER_PAGE = 8;\n\nconst GenericImageSVG = ({ height }) => (\n <svg\n width=\"100%\"\n height={height}\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: \"block\" }}\n >\n <rect width=\"100\" height=\"100\" rx=\"6\" fill=\"#f1f5f9\" />\n <rect x=\"15\" y=\"20\" width=\"70\" height=\"50\" rx=\"4\" fill=\"#e2e8f0\" />\n <circle cx=\"35\" cy=\"38\" r=\"8\" fill=\"#90a4b7\" />\n <polygon points=\"15,70 42,44 58,58 72,42 85,70\" fill=\"#90a4b7\" />\n <text\n x=\"50\"\n y=\"88\"\n textAnchor=\"middle\"\n fontSize=\"8\"\n fill=\"#90a4b7\"\n fontFamily=\"sans-serif\"\n >\n Image\n </text>\n </svg>\n);\n\nGenericImageSVG.propTypes = {\n height: PropTypes.string,\n};\n\nexport const ImageThumbnail = ({ img, height = \"100px\", style = {} }) => {\n const uuid = img?.uuid || \"\";\n const id = img?.id || null;\n\n const { data, status } = useQuery({\n queryKey: [\"fileInfo\", id || uuid],\n queryFn: () => {\n if (id) {\n return getFileById(id).then((res) => res.data);\n }\n return FormConfiguratorService.getFileByUUID(uuid).then((res) => res.data);\n },\n cacheTime: 1000 * 60 * 30,\n staleTime: 1000 * 60 * 10,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n retry: false,\n enabled: !!(id || uuid),\n });\n\n const resolved = useMemo(() => {\n if (!data || !(data instanceof Blob)) return null;\n const dataUrl = URL.createObjectURL(data);\n let mimeType = data.type;\n if (!mimeType || mimeType === \"application/octet-stream\") {\n mimeType = \"image/jpeg\";\n }\n return { dataUrl, mime: mimeType };\n }, [data]);\n\n if (!id && !uuid) return <GenericImageSVG height={height} />;\n\n if (status === \"pending\") {\n return (\n <Typography\n align=\"center\"\n sx={{\n height,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n fontSize: \"0.7rem\",\n color: \"text.secondary\",\n }}\n >\n Loading...\n </Typography>\n );\n }\n\n if (!resolved) return <GenericImageSVG height={height} />;\n\n return (\n <img\n src={resolved.dataUrl}\n alt=\"thumbnail\"\n style={{\n height,\n width: \"100%\",\n objectFit: \"contain\",\n display: \"block\",\n ...style,\n }}\n />\n );\n};\n\nImageThumbnail.propTypes = {\n img: PropTypes.shape({\n uuid: PropTypes.string,\n name: PropTypes.string,\n }),\n height: PropTypes.string,\n};\n\n/**\n * Full image preview dialog using the same API.\n */\nexport const FullImagePreviewDialog = ({ open, onClose, img }) => {\n const uuid = img?.uuid || \"\";\n const id = img?.id || null;\n\n const { data, status } = useQuery({\n queryKey: [\"fileInfo\", id || uuid],\n queryFn: () => {\n if (id) {\n return getFileById(id).then((res) => res.data);\n }\n return FormConfiguratorService.getFileByUUID(uuid).then((res) => res.data);\n },\n cacheTime: 1000 * 60 * 30,\n staleTime: 1000 * 60 * 10,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n retry: false,\n enabled: open && !!(id || uuid),\n });\n\n const resolved = useMemo(() => {\n if (!data || !(data instanceof Blob)) return null;\n const dataUrl = URL.createObjectURL(data);\n let mimeType = data.type;\n if (!mimeType || mimeType === \"application/octet-stream\") {\n mimeType = \"image/jpeg\";\n }\n return { dataUrl, mime: mimeType };\n }, [data]);\n\n const renderContent = () => {\n if (status === \"pending\") {\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minHeight: 200,\n }}\n >\n <Typography>Loading...</Typography>\n </Box>\n );\n }\n if (!resolved) {\n return (\n <Typography color=\"error\" align=\"center\">\n Error loading image.\n </Typography>\n );\n }\n return (\n <img\n src={resolved.dataUrl}\n alt=\"preview\"\n style={{ width: \"100%\", maxHeight: \"70vh\", objectFit: \"contain\" }}\n />\n );\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogContent sx={{ p: 2 }}>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", mb: 1, alignItems: \"center\" }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: \"bold\" }}>\n {img?.name || \"Image Preview\"}\n </Typography>\n <Tooltip title=\"Close\" arrow>\n <IconButton size=\"small\" onClick={onClose}>\n ✕\n </IconButton>\n </Tooltip>\n </Box>\n {renderContent()}\n </DialogContent>\n </Dialog>\n );\n};\n\nFullImagePreviewDialog.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n img: PropTypes.object,\n};\n\nconst ImagePickerDialog = ({\n open,\n onClose,\n documentMasterImages = [],\n onImageUpload,\n onSelect,\n currentImageUuid = \"\",\n}) => {\n const [selectedUuid, setSelectedUuid] = useState(currentImageUuid || \"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [page, setPage] = useState(1);\n const [previewImg, setPreviewImg] = useState(null);\n const fileInputRef = useRef(null);\n\n useEffect(() => {\n if (open) {\n setSelectedUuid(currentImageUuid || \"\");\n setSearchQuery(\"\");\n\n if (currentImageUuid && documentMasterImages.length) {\n const idx = documentMasterImages.findIndex(\n (img) => img.uuid === currentImageUuid,\n );\n setPage(idx >= 0 ? Math.ceil((idx + 1) / ITEMS_PER_PAGE) : 1);\n } else {\n setPage(1);\n }\n }\n }, [open, currentImageUuid, documentMasterImages]);\n\n const filteredImages = useMemo(() => {\n if (!searchQuery.trim()) return documentMasterImages;\n const q = searchQuery.trim().toLowerCase();\n return documentMasterImages.filter((img) =>\n (img.name || img.uuid || \"\").toLowerCase().includes(q),\n );\n }, [documentMasterImages, searchQuery]);\n\n const totalPages = Math.ceil(filteredImages.length / ITEMS_PER_PAGE);\n const paginatedImages = filteredImages.slice(\n (page - 1) * ITEMS_PER_PAGE,\n page * ITEMS_PER_PAGE,\n );\n\n const handleSave = () => {\n onSelect(selectedUuid);\n onClose();\n };\n\n const handleCancel = () => {\n onClose();\n };\n\n const handleUpload = (event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file) return;\n onImageUpload?.(file, (uploadedUuid) => {\n setSelectedUuid(uploadedUuid);\n setPage(1);\n setSearchQuery(\"\");\n });\n };\n\n return (\n <>\n <Modal\n open={open}\n onClose={handleCancel}\n slots={{ backdrop: Backdrop }}\n slotProps={{ backdrop: { timeout: 500 } }}\n >\n <Fade in={open}>\n <Box sx={modalStyle}>\n {/* Header */}\n <Box\n sx={{\n py: 0.5,\n px: 1,\n backgroundColor: \"background.default\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderRadius: \"8px 8px 0 0\",\n mb: 2,\n }}\n >\n <Typography variant=\"h6\" sx={{ ml: 1 }}>\n Select Image\n </Typography>\n <Tooltip title=\"Close\" arrow>\n <IconButton onClick={handleCancel} size=\"small\">\n ✕\n </IconButton>\n </Tooltip>\n </Box>\n\n <Box sx={{ px: 2, pb: 2 }}>\n {/* Action row */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 2,\n gap: 1,\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Button variant=\"outlined\" component=\"label\" size=\"small\">\n Upload New Image\n <input\n hidden\n accept=\"image/*\"\n type=\"file\"\n onChange={handleUpload}\n ref={fileInputRef}\n />\n </Button>\n\n <TextField\n size=\"small\"\n placeholder=\"Search media…\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setPage(1);\n }}\n sx={{ width: 220 }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">🔍</InputAdornment>\n ),\n endAdornment: searchQuery ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n edge=\"end\"\n onClick={() => {\n setSearchQuery(\"\");\n setPage(1);\n }}\n >\n ✕\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Box>\n\n {selectedUuid && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n size=\"small\"\n onClick={() => setSelectedUuid(\"\")}\n >\n Clear Selection\n </Button>\n )}\n </Box>\n\n {/* Count */}\n <Typography\n variant=\"subtitle2\"\n sx={{ mb: 1, fontWeight: \"bold\" }}\n >\n Available Images ({documentMasterImages.length})\n {searchQuery.trim() &&\n filteredImages.length !== documentMasterImages.length && (\n <Typography\n component=\"span\"\n variant=\"caption\"\n sx={{\n ml: 1,\n color: \"text.secondary\",\n fontWeight: \"normal\",\n }}\n >\n — {filteredImages.length} result\n {filteredImages.length !== 1 ? \"s\" : \"\"} for &quot;\n {searchQuery.trim()}&quot;\n </Typography>\n )}\n </Typography>\n\n {/* Image grid */}\n <Grid2 container spacing={2} sx={{ mb: 2 }}>\n {paginatedImages.map((img, index) => {\n const isSelected = selectedUuid === img.uuid;\n\n return (\n <Grid2 size={3} key={`${img.uuid}-${page}-${index}`}>\n <Box\n sx={{\n p: 1,\n border: isSelected\n ? \"3px solid #1976d2\"\n : \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n position: \"relative\",\n bgcolor: isSelected\n ? \"rgba(25, 118, 210, 0.08)\"\n : \"transparent\",\n boxShadow: isSelected ? 4 : \"none\",\n transform: isSelected ? \"scale(1.02)\" : \"none\",\n transition: \"all 0.2s\",\n cursor: \"pointer\",\n \"&:hover\": {\n boxShadow: 4,\n borderColor: isSelected ? \"#1976d2\" : \"#aaa\",\n \"& .expand-btn\": { opacity: 1 },\n },\n }}\n onClick={() => setSelectedUuid(img.uuid)}\n >\n <Tooltip title=\"Preview\" arrow>\n <IconButton\n className=\"expand-btn\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setPreviewImg(img);\n }}\n sx={{\n position: \"absolute\",\n top: 2,\n right: 2,\n opacity: 0,\n transition: \"opacity 0.2s\",\n bgcolor: \"rgba(255,255,255,0.85)\",\n zIndex: 1,\n p: \"3px\",\n fontSize: \"12px\",\n \"&:hover\": { bgcolor: \"rgba(255,255,255,1)\" },\n }}\n >\n 🔍\n </IconButton>\n </Tooltip>\n\n <ImageThumbnail img={img} height=\"100px\" />\n <Typography\n variant=\"caption\"\n sx={{\n mt: 1,\n width: \"100%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n textAlign: \"center\",\n }}\n title={`${img.name || img.uuid}${img.extension ? ` (${img.extension})` : \"\"}`}\n >\n {img.name || img.uuid}\n </Typography>\n </Box>\n </Grid2>\n );\n })}\n\n {filteredImages.length === 0 && (\n <Typography\n variant=\"body2\"\n sx={{ ml: 1, color: \"text.secondary\" }}\n >\n {searchQuery.trim()\n ? `No images match \"${searchQuery.trim()}\".`\n : \"No images found.\"}\n </Typography>\n )}\n </Grid2>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", mt: 2 }}>\n <Pagination\n count={totalPages}\n page={page}\n onChange={(e, value) => setPage(value)}\n color=\"primary\"\n />\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box\n sx={{\n py: 1,\n px: 2,\n display: \"flex\",\n gap: 1,\n justifyContent: \"flex-end\",\n borderTop: \"1px solid\",\n borderTopColor: \"divider\",\n }}\n >\n <Button variant=\"outlined\" size=\"small\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n </Box>\n </Box>\n </Fade>\n </Modal>\n\n {previewImg && (\n <FullImagePreviewDialog\n open={!!previewImg}\n onClose={() => setPreviewImg(null)}\n img={previewImg}\n />\n )}\n </>\n );\n};\n\nImagePickerDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n documentMasterImages: PropTypes.array,\n onImageUpload: PropTypes.func,\n onSelect: PropTypes.func.isRequired,\n currentImageUuid: PropTypes.string,\n};\n\nexport default ImagePickerDialog;\n","import React, { useState, useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { Box, IconButton, Typography, Tooltip } from '@mui/material';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faChevronLeft,\n faChevronRight,\n faImage,\n} from '@fortawesome/free-solid-svg-icons';\nimport { ImageThumbnail } from './ImagePickerDialog';\nimport { PreviewContext } from './MobileDisplay';\n\nconst EmptyBlockErrorSymbol = ({ reason }) => (\n <Tooltip title={reason || \"Validation Error: Blocks added from the Block Library cannot be left empty.\"} arrow placement=\"top\">\n <Box\n sx={{\n position: 'absolute',\n top: 6,\n left: 6,\n backgroundColor: '#ef4444',\n color: '#ffffff',\n borderRadius: '50%',\n width: 18,\n height: 18,\n fontSize: '11px',\n fontWeight: 800,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 4px rgba(239,68,68,0.4)',\n zIndex: 10,\n cursor: 'help',\n }}\n >\n !\n </Box>\n </Tooltip>\n);\nEmptyBlockErrorSymbol.propTypes = {\n reason: PropTypes.string,\n};\n\nconst InteractiveCarousel = ({ node }) => {\n const { isPreviewMode, documentMasterImages, validationAttempted } = useContext(PreviewContext);\n const [currentIndex, setCurrentIndex] = useState(0);\n const images = node.images || [];\n\n useEffect(() => {\n if (!isPreviewMode || images.length <= 1) return;\n const intervalTime = node.interval || 3500;\n const timer = setInterval(() => {\n setCurrentIndex((prevIndex) => (prevIndex + 1) % images.length);\n }, intervalTime);\n return () => clearInterval(timer);\n }, [isPreviewMode, images.length, node.interval]);\n\n const handlePrev = (e) => {\n e?.stopPropagation();\n setCurrentIndex((prevIndex) =>\n prevIndex === 0 ? images.length - 1 : prevIndex - 1,\n );\n };\n\n const handleNext = (e) => {\n e?.stopPropagation();\n setCurrentIndex((prevIndex) => (prevIndex + 1) % images.length);\n };\n\n const carouselHeight = node.height || 140;\n const borderRadius = `${node.borderRadius || 12}px`;\n\n if (images.length === 0) {\n return (\n <Box\n sx={{\n width: '100%',\n height: carouselHeight,\n borderRadius,\n backgroundColor: 'rgba(99, 102, 241, 0.08)',\n border: '1px dashed var(--color-tableHeader)',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n p: 1.5,\n color: 'var(--color-text-secondary)',\n textAlign: 'center',\n position: 'relative',\n }}\n >\n {!isPreviewMode && validationAttempted && (\n <EmptyBlockErrorSymbol reason=\"Image Carousel is empty. Attach images in the Inspector Panel.\" />\n )}\n <FontAwesomeIcon icon={faImage} style={{ fontSize: '1.5rem', marginBottom: '6px', opacity: 0.7 }} />\n <Typography variant=\"caption\" sx={{ fontWeight: 600, fontSize: '0.78rem' }}>\n Image Carousel ({carouselHeight}px)\n </Typography>\n <Typography variant=\"caption\" sx={{ fontSize: '0.68rem', opacity: 0.75 }}>\n Attach images in Inspector to preview slides\n </Typography>\n </Box>\n );\n }\n\n const activeImage = images[currentIndex] || images[0];\n const targetUuid = activeImage?.documentUuid || activeImage?.uuid || (typeof activeImage === 'string' ? activeImage : '');\n const targetId = activeImage?.id || null;\n\n const matchedMasterDoc = (documentMasterImages || []).find(\n (d) => (targetUuid && (d.uuid === targetUuid || d.documentUuid === targetUuid)) || (targetId && d.id === targetId),\n );\n\n const imgProp = matchedMasterDoc || { uuid: targetUuid, id: targetId, name: activeImage?.title };\n\n return (\n <Box\n sx={{\n position: 'relative',\n width: '100%',\n height: carouselHeight,\n borderRadius,\n overflow: 'hidden',\n boxShadow: '0 2px 8px rgba(0,0,0,0.08)',\n backgroundColor: '#f1f5f9',\n }}\n >\n {activeImage?.url ? (\n <Box\n component=\"img\"\n src={activeImage.url}\n alt={activeImage.title || `Slide ${currentIndex + 1}`}\n sx={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n transition: 'opacity 300ms ease-in-out',\n }}\n />\n ) : (imgProp.uuid || imgProp.id) ? (\n <Box sx={{ width: '100%', height: '100%', overflow: 'hidden' }}>\n <ImageThumbnail\n img={imgProp}\n height=\"100%\"\n style={{ objectFit: 'cover', width: '100%', height: '100%' }}\n />\n </Box>\n ) : (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n background: 'linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%)',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n p: 1,\n textAlign: 'center',\n }}\n >\n <FontAwesomeIcon icon={faImage} style={{ fontSize: '1.75rem', marginBottom: '4px' }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 700, fontSize: '0.85rem' }}>\n {activeImage?.title || `Carousel Slide ${currentIndex + 1}`}\n </Typography>\n </Box>\n )}\n\n {images.length > 1 && (\n <>\n <IconButton\n size=\"small\"\n onClick={handlePrev}\n sx={{\n position: 'absolute',\n left: 4,\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\n color: '#fff',\n padding: '4px',\n '&:hover': { backgroundColor: 'rgba(0, 0, 0, 0.7)' },\n }}\n >\n <FontAwesomeIcon icon={faChevronLeft} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n\n <IconButton\n size=\"small\"\n onClick={handleNext}\n sx={{\n position: 'absolute',\n right: 4,\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\n color: '#fff',\n padding: '4px',\n '&:hover': { backgroundColor: 'rgba(0, 0, 0, 0.7)' },\n }}\n >\n <FontAwesomeIcon icon={faChevronRight} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n\n <Box\n sx={{\n position: 'absolute',\n bottom: 6,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: '4px',\n alignItems: 'center',\n }}\n >\n {images.map((_, idx) => (\n <Box\n key={idx}\n onClick={(e) => {\n e.stopPropagation();\n setCurrentIndex(idx);\n }}\n sx={{\n width: idx === currentIndex ? 14 : 6,\n height: 6,\n borderRadius: '3px',\n backgroundColor: idx === currentIndex ? '#fff' : 'rgba(255, 255, 255, 0.5)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n />\n ))}\n </Box>\n </>\n )}\n </Box>\n );\n};\n\nInteractiveCarousel.propTypes = {\n node: PropTypes.object.isRequired,\n documentMasterImages: PropTypes.array,\n isPreviewMode: PropTypes.bool,\n};\n\nexport default InteractiveCarousel;\n","import ToolbarOverlay from \"./ToolbarOverlay\";\nimport {\n Box,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Tooltip,\n Typography,\n Menu,\n Button,\n} from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState, createContext, useContext } from 'react';\nimport InteractiveCarousel from './InteractiveCarousel';\nimport { ImageThumbnail } from './ImagePickerDialog';\nexport const PreviewContext = createContext({\n isPreviewMode: false,\n documentMasterImages: [],\n isDarkMode: false,\n validationAttempted: false,\n});\nimport './MobileScreen.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBatteryFull,\n faChevronDown,\n faChevronRight,\n faLocationDot,\n faHospital,\n faMagnifyingGlass, \n faSignal,\n faTimes,\n faWifi,\n faPlus,\n faCopy,\n faPaste,\n faBox,\n faEllipsisV,\n faEdit,\n faTrashAlt,\n faArrowLeft,\n faArrowRight,\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, useSensor, useSensors, PointerSensor } 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, isSelfEmptyNode, getComponentLabel } 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};\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 onClick={(e) => { e.stopPropagation(); handleSectionClick(id); }}\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 onClick={(e) => { e.stopPropagation(); handleSectionClick(id); }}\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, disabled = false }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: `${NODE_DROP_ZONE}-${node.id}`,\n disabled,\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 ? '2px solid var(--color-tableHeader)'\n : 'none',\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 );\n};\nDashboardNodeDropZone.propTypes = {\n node: PropTypes.any,\n children: PropTypes.node,\n disabled: PropTypes.bool,\n};\n\nconst EmptyBlockErrorSymbol = ({ reason }) => (\n <Tooltip title={reason || \"Validation Error: Blocks added from the Block Library cannot be left empty.\"} arrow placement=\"top\">\n <Box\n sx={{\n position: 'absolute',\n top: 6,\n left: 6,\n backgroundColor: '#ef4444',\n color: '#ffffff',\n borderRadius: '50%',\n width: 18,\n height: 18,\n fontSize: '11px',\n fontWeight: 800,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 4px rgba(239,68,68,0.4)',\n zIndex: 10,\n cursor: 'pointer',\n }}\n >\n !\n </Box>\n </Tooltip>\n);\nEmptyBlockErrorSymbol.propTypes = {\n reason: PropTypes.string,\n};\n\nconst EmptyContainerPlaceholder = ({ label = 'Add Blocks / Select Features' }) => (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 1.5,\n px: 0.5,\n width: '100%',\n color: 'var(--color-text-secondary)',\n opacity: 0.75,\n pointerEvents: 'none',\n }}\n >\n <FontAwesomeIcon\n icon={faPlus}\n style={{ fontSize: '0.85rem', marginBottom: '4px' }}\n />\n <Typography\n variant='caption'\n sx={{\n fontSize: '0.72rem',\n fontWeight: 500,\n textAlign: 'center',\n }}\n >\n {label}\n </Typography>\n </Box>\n);\nEmptyContainerPlaceholder.propTypes = {\n label: PropTypes.string,\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 mapFontSize = (sizeStr, defaultSize) => {\n const map = {\n xl: 22,\n Large: 20,\n Medium: 18,\n Small: 16,\n xs: 14,\n };\n return map[sizeStr] || sizeStr || defaultSize;\n};\n\nconst DashboardLayoutNode = React.forwardRef(\n (\n {\n node,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n onMoveUp,\n onMoveDown,\n onDuplicate,\n activeElementId,\n style,\n zoomedNodeId,\n setZoomedNodeId,\n isSectionChild,\n },\n ref,\n ) => {\n const { isPreviewMode, documentMasterImages, isDarkMode, validationAttempted } = useContext(PreviewContext);\n\n const renderNodeBackgroundImage = (n) => {\n const bgImgUuid =\n n?.backgroundImage?.documentUuid ||\n n?.backgroundImage?.uuid ||\n (typeof n?.backgroundImage === 'string' ? n.backgroundImage : null) ||\n n?.background?.documentUuid ||\n n?.background?.image;\n const bgImgId = n?.backgroundImage?.id || n?.background?.id || null;\n\n if (!bgImgUuid && !bgImgId) return null;\n\n const masterImg = (documentMasterImages || []).find(\n (d) => (bgImgUuid && (d.uuid === bgImgUuid || d.documentUuid === bgImgUuid)) || (bgImgId && d.id === bgImgId)\n );\n\n const imgProp = masterImg || { uuid: bgImgUuid, id: bgImgId };\n\n return (\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 0,\n opacity: n?.background?.opacity ?? 1,\n pointerEvents: 'none',\n overflow: 'hidden',\n borderRadius: 'inherit',\n }}\n >\n <ImageThumbnail\n img={imgProp}\n height=\"100%\"\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n </Box>\n );\n };\n\n const getSolidBgColor = (n, defaultBg) => {\n const fallbackLight = defaultBg || '#ffffff';\n const fallbackDark = defaultBg && defaultBg !== '#ffffff' ? defaultBg : '#1f2937';\n if (!n) return isDarkMode ? fallbackDark : fallbackLight;\n if (isDarkMode) {\n return n.background?.solidDarkModeColor || fallbackDark;\n }\n return n.background?.solidLightModeColor || fallbackLight;\n };\n\n const getFgColor = (n, defaultFg) => {\n const fallbackLight = defaultFg || '#1e293b';\n const fallbackDark = defaultFg && defaultFg !== '#1e293b' ? defaultFg : '#f8fafc';\n if (!n) return isDarkMode ? fallbackDark : fallbackLight;\n if (isDarkMode) {\n return n.foreground?.darkMode || fallbackDark;\n }\n return n.foreground?.lightMode || fallbackLight;\n };\n\n const getHeaderColor = (n, defaultColor) => {\n const fallbackLight = defaultColor || '#1e293b';\n const fallbackDark = defaultColor && defaultColor !== '#1e293b' ? defaultColor : '#f8fafc';\n if (!n) return isDarkMode ? fallbackDark : fallbackLight;\n if (isDarkMode) {\n return n.header?.foreground?.darkMode || fallbackDark;\n }\n return n.header?.foreground?.lightMode || fallbackLight;\n };\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 disabled: isPreviewMode,\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 disabled: isPreviewMode,\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 [isHovered, setIsHovered] = useState(false);\n const dragHandleProps = isPreviewMode\n ? {}\n : {\n ...listeners,\n ...attributes,\n onMouseOver: (e) => { e.stopPropagation(); setIsHovered(true); },\n onMouseOut: (e) => { e.stopPropagation(); setIsHovered(false); },\n };\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 isNodeActive = !isPreviewMode && activeElementId && (activeElementId === node.id || activeElementId === node.instanceId);\n\n const ActionButtons = () => {\n if (isPreviewMode || !isHovered) return null;\n return (\n <ToolbarOverlay\n orientation={node.type === DASHBOARD_COMPONENT_TYPES.COLUMN && node.style?.width ? \"vertical\" : \"horizontal\"}\n onMoveUp={() => onMoveUp?.(nodeKey)}\n onMoveDown={() => onMoveDown?.(nodeKey)}\n onDuplicate={() => onDuplicate?.(nodeKey)}\n onDelete={() => onDeleteNode?.(nodeKey)}\n onZoom={node.type !== DASHBOARD_COMPONENT_TYPES.FEATURE && setZoomedNodeId ? () => setZoomedNodeId(node.id || node.instanceId) : undefined}\n />\n );\n };\n\n const TypeLabel = () => (\n <Typography\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 const searchBg = getSolidBgColor(node, isDarkMode ? '#1e293b' : '#ffffff');\n const searchText = getFgColor(node, isDarkMode ? '#94a3b8' : '#64748b');\n const borderRadiusVal = `${node.borderRadius || node.style?.borderRadius || 20}px`;\n const placeholderText = node.placeholder || node.content?.placeholder || 'Search...';\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n width: '100%',\n minHeight: '44px',\n p: 1.25,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : (isDarkMode ? '1px solid #334155' : '1px solid #cbd5e1'),\n borderRadius: borderRadiusVal,\n backgroundColor: searchBg,\n display: 'flex',\n alignItems: 'center',\n mb: 1,\n overflow: 'hidden',\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n <Box sx={{ display: 'flex', flexDirection: 'column', flexGrow: 1, position: 'relative', zIndex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: '8px', color: searchText }}\n />\n <Typography\n variant='body2'\n sx={{ flexGrow: 1, color: searchText, opacity: 0.8 }}\n >\n {placeholderText}\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n const featureFg = getFgColor(node, isDarkMode ? '#f8fafc' : '#1e293b');\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n textAlign: 'center',\n p: 0.5,\n pt: 2.5,\n minHeight: 40,\n width: isSectionChild ? 'calc(25% - 6px)' : '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n border: isNodeActive ? '2px solid #4f46e5' : isNodeOver ? '1px solid var(--color-tableHeader)' : '1px solid transparent',\n borderRadius: '6px',\n backgroundColor: isNodeActive ? (isDarkMode ? 'rgba(255,255,255,0.1)' : 'var(--color-gray2)') : 'transparent',\n '&:hover': {\n backgroundColor: isDarkMode ? 'rgba(255,255,255,0.08)' : 'var(--color-gray2)',\n border: '1px solid var(--color-gray3)',\n }\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n {/* <TypeLabel /> */}\n <Box sx={{ mt: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', width: '100%', position: 'relative', zIndex: 1 }}>\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(node, 'icon')\n ? node.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='caption'\n sx={{\n display: 'block',\n fontWeight: 600,\n lineHeight: 1.1,\n mt: 0.5,\n fontSize: '0.7rem',\n textAlign: 'center',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n width: '100%',\n color: featureFg,\n }}\n >\n {renderFeatureName(node.name || node.menuName || 'Feature')}\n </Typography>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SECTION) {\n const sectionChildren = node.children || [];\n const sectionBgColor = getSolidBgColor(node, isPreviewMode ? 'transparent' : (isDarkMode ? '#1e293b' : '#ffffff'));\n const headerColor = getHeaderColor(node, isDarkMode ? '#f8fafc' : '#1e293b');\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n width: '100%',\n p: isPreviewMode ? 0 : 1,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : (isDarkMode ? '1px solid #334155' : '1px solid var(--color-gray3)'),\n borderRadius: `${node.borderRadius || 10}px`,\n backgroundColor: sectionBgColor,\n opacity: node.background?.opacity ?? 1,\n mb: isPreviewMode ? 0 : 1,\n overflow: isPreviewMode ? 'hidden' : 'visible',\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n {!isPreviewMode && validationAttempted && sectionChildren.length === 0 && (\n <EmptyBlockErrorSymbol reason=\"Section is empty. Add layout blocks or features from the Block Library into this section.\" />\n )}\n <Typography\n variant='body2'\n sx={{\n fontWeight: node.header?.fontWeight || 600,\n fontSize: mapFontSize(node.header?.fontSize, 16),\n color: headerColor,\n mb: 0.5,\n position: 'relative',\n zIndex: 1,\n }}\n >\n {node.header?.title || 'Section'}\n </Typography>\n <Box sx={{ position: 'relative', zIndex: 1, width: '100%' }}>\n <DashboardNodeDropZone node={node}>\n {sectionChildren.length === 0 ? (\n !isPreviewMode && <EmptyContainerPlaceholder label=\"Add Blocks / Select Features\" />\n ) : (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n alignContent: 'flex-start',\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 onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n isSectionChild={true}\n />\n ))}\n </Box>\n )}\n </DashboardNodeDropZone>\n </Box>\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 cardBg = node.background?.type === 'GRADIENT'\n ? `linear-gradient(135deg, ${node.background?.gradientStartColor || '#fff'}, ${node.background?.gradientEndColor || '#e5e7eb'})`\n : getSolidBgColor(node, isDarkMode ? '#1f2937' : '#ffffff');\n const cardFg = getFgColor(node, isDarkMode ? '#f8fafc' : '#1e293b');\n const hasIcon = Boolean(node.icon?.iconsvg || node.icon?.icon || feature?.icon);\n const hasTitle = Boolean(node.content?.title || node.content?.customTitle);\n const hasSubTitle = Boolean(node.content?.subTitle || node.content?.customSubtitle);\n const hasContent = hasIcon || hasTitle || hasSubTitle || node.cta?.type === 'BUTTON';\n\n let contentLayout = JSON.parse(JSON.stringify(node.contentLayout || []));\n const ensureItem = (type, defaultH, defaultV) => {\n if (!contentLayout.some(g => (g.items || []).includes(type))) {\n const group = contentLayout.find(g => g.position.horizontal === defaultH && g.position.vertical === defaultV);\n if (group) {\n group.items = group.items || [];\n group.items.push(type);\n } else {\n contentLayout.push({ position: { horizontal: defaultH, vertical: defaultV }, items: [type] });\n }\n }\n };\n if (hasIcon) ensureItem('ICON', 'LEFT', 'MIDDLE');\n if (hasTitle) ensureItem('TITLE', 'CENTER', 'MIDDLE');\n if (hasSubTitle) ensureItem('SUBTITLE', 'LEFT', 'BOTTOM');\n if (node.cta?.type === 'BUTTON') ensureItem('BUTTON', 'RIGHT', 'MIDDLE');\n const layoutType = 'column';\n const alignItems = 'center';\n const justifyContent = 'center';\n\n const getAnchorStyles = (pos) => {\n const { horizontal: h, vertical: v } = pos;\n const styles = { position: 'absolute', display: 'flex', flexDirection: 'column', pointerEvents: 'none' };\n \n const padding = 12;\n styles.top = padding;\n styles.bottom = padding;\n styles.left = padding;\n styles.right = padding;\n\n if (v === 'TOP') { styles.justifyContent = 'flex-start'; }\n else if (v === 'BOTTOM') { styles.justifyContent = 'flex-end'; }\n else { styles.justifyContent = 'center'; }\n\n if (h === 'LEFT') { styles.alignItems = 'flex-start'; styles.textAlign = 'left'; }\n else if (h === 'RIGHT') { styles.alignItems = 'flex-end'; styles.textAlign = 'right'; }\n else { styles.alignItems = 'center'; styles.textAlign = 'center'; }\n \n return styles;\n };\n\n const rightSpacing = (node.cta?.type === 'ARROW' || (node.showLeadingArrow && node.cta?.type !== 'BUTTON')) ? '24px' : 0;\n\n const renderCtaButton = () => {\n if (node.cta?.type !== 'BUTTON') return null;\n return (\n <Button\n variant=\"contained\"\n size=\"small\"\n sx={{\n pointerEvents: 'auto',\n minWidth: 'auto',\n textTransform: 'none',\n p: '4px 10px',\n fontSize: '0.75rem',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n color: isDarkMode ? (node.cta.textColor?.darkMode || '#ffffff') : (node.cta.textColor?.lightMode || '#ffffff'),\n background: node.cta.backgroundStyle === 'GRADIENT'\n ? (isDarkMode \n ? `linear-gradient(90deg, ${node.cta.backgroundGradientStart?.darkMode || '#6366f1'}, ${node.cta.backgroundGradientEnd?.darkMode || '#f472b6'})` \n : `linear-gradient(90deg, ${node.cta.backgroundGradientStart?.lightMode || '#4f46e5'}, ${node.cta.backgroundGradientEnd?.lightMode || '#ec4899'})`)\n : node.cta.backgroundStyle === 'TRANSPARENT'\n ? 'transparent'\n : (isDarkMode ? (node.cta.backgroundColor?.darkMode || '#6366f1') : (node.cta.backgroundColor?.lightMode || '#4f46e5')),\n border: `1px solid ${isDarkMode ? (node.cta.borderColor?.darkMode || 'transparent') : (node.cta.borderColor?.lightMode || 'transparent')}`,\n boxShadow: 'none',\n '&:hover': {\n opacity: 0.9,\n boxShadow: 'none',\n }\n }}\n >\n {node.cta.iconPosition !== 'RIGHT' && node.cta.icon && node.cta.iconType === 'fa' && (\n <FontAwesomeIcons iconName={node.cta.icon} style={{ marginRight: node.cta.text ? '6px' : '0' }} />\n )}\n {node.cta.iconPosition !== 'RIGHT' && node.cta.icon && node.cta.iconType === 'svg' && (\n <img src={node.cta.icon} alt=\"cta-icon\" style={{ width: '12px', height: '12px', marginRight: node.cta.text ? '6px' : '0' }} />\n )}\n {node.cta.text}\n {node.cta.iconPosition === 'RIGHT' && node.cta.icon && node.cta.iconType === 'fa' && (\n <FontAwesomeIcons iconName={node.cta.icon} style={{ marginLeft: node.cta.text ? '6px' : '0' }} />\n )}\n {node.cta.iconPosition === 'RIGHT' && node.cta.icon && node.cta.iconType === 'svg' && (\n <img src={node.cta.icon} alt=\"cta-icon\" style={{ width: '12px', height: '12px', marginLeft: node.cta.text ? '6px' : '0' }} />\n )}\n </Button>\n );\n };\n\n const cardContent = (\n <Box sx={{ position: 'absolute', top: 0, left: 0, right: rightSpacing, bottom: 0, borderRadius: 'inherit' }}>\n {contentLayout.map((group) => {\n const loc = `${group.position.horizontal}_${group.position.vertical}`;\n \n const visibleItems = group.items.filter(item => {\n if (item === 'ICON') return hasIcon;\n if (item === 'TITLE') return hasTitle;\n if (item === 'SUBTITLE') return hasSubTitle;\n if (item === 'BUTTON') return node.cta?.type === 'BUTTON';\n return false;\n });\n \n if (visibleItems.length === 0) return null;\n\n const isHorizontalGroup = group.alignment === 'HORIZONTAL';\n const gap = group.spacing ?? 4;\n const anchorStyles = getAnchorStyles(group.position);\n\n return (\n <Box key={loc} sx={anchorStyles}>\n <Box sx={{ \n display: 'flex', \n flexDirection: isHorizontalGroup ? 'row' : 'column', \n alignItems: 'center', \n gap: `${gap}px`,\n width: 'max-content', \n maxWidth: '100%', \n pointerEvents: 'auto' \n }}>\n {(group.items || []).map((item) => {\n if (item === 'ICON' && hasIcon) {\n return (\n <Box key=\"icon\" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {renderFeatureIcon(node.icon?.iconsvg || node.icon?.icon || feature?.icon, SvgIconBox)}\n </Box>\n );\n }\n if (item === 'TITLE' && hasTitle) {\n return (\n <Box key=\"title\" sx={{ display: 'flex', flexDirection: 'column', alignItems: anchorStyles.alignItems, textAlign: anchorStyles.textAlign }}>\n <Typography variant='caption' sx={{ fontSize: mapFontSize(node.style?.titleFontSize, 14), fontWeight: 700, color: cardFg, whiteSpace: 'normal', wordBreak: 'break-word', overflowWrap: 'break-word' }}>\n {node.content.customTitle || node.content.title}\n </Typography>\n </Box>\n );\n }\n if (item === 'SUBTITLE' && hasSubTitle) {\n return (\n <Box key=\"subtitle\" sx={{ display: 'flex', flexDirection: 'column', alignItems: anchorStyles.alignItems, textAlign: anchorStyles.textAlign }}>\n <Typography variant='caption' sx={{ display: 'block', fontSize: mapFontSize(node.style?.subtitleFontSize, 12), color: cardFg, opacity: 0.8, whiteSpace: 'normal', wordBreak: 'break-word', overflowWrap: 'break-word' }}>\n {node.content.customSubtitle || node.content.subTitle}\n </Typography>\n </Box>\n );\n }\n if (item === 'BUTTON' && node.cta?.type === 'BUTTON') {\n return <Box key=\"button\">{renderCtaButton()}</Box>;\n }\n return null;\n })}\n </Box>\n </Box>\n );\n })}\n </Box>\n );\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\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: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : (isDarkMode ? '1px solid #334155' : '1px solid var(--color-gray3)'),\n background: typeof cardBg === 'string' && cardBg.startsWith('linear') ? cardBg : undefined,\n backgroundColor: typeof cardBg === 'string' && cardBg.startsWith('linear') ? undefined : cardBg,\n color: cardFg,\n opacity: 1,\n overflow: 'hidden',\n boxShadow: isPreviewMode ? '0 2px 6px rgba(0,0,0,0.06)' : undefined,\n display: 'flex',\n alignItems: alignItems,\n justifyContent: justifyContent,\n flexDirection: layoutType,\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n {!isPreviewMode && validationAttempted && !feature && (\n <EmptyBlockErrorSymbol reason=\"Feature Card is empty. Select a feature from the Inspector Panel.\" />\n )}\n <Box\n sx={{\n flex: 1,\n width: '100%',\n height: '100%',\n minHeight: 'inherit',\n alignSelf: 'stretch',\n position: 'relative',\n zIndex: 1,\n }}\n >\n {feature ? (\n <>{cardContent}</>\n ) : (\n <DashboardNodeDropZone node={node}>\n {hasContent ? (\n <Box\n sx={{\n display: 'flex',\n flexDirection: layoutType,\n alignItems: alignItems,\n justifyContent: justifyContent,\n width: '100%',\n }}\n >\n {cardContent}\n </Box>\n ) : (\n !isPreviewMode && <EmptyContainerPlaceholder label=\"Select Feature\" />\n )}\n </DashboardNodeDropZone>\n )}\n </Box>\n {(node.cta?.type === 'ARROW' || (node.showLeadingArrow && node.cta?.type !== 'BUTTON')) && (\n <Box\n sx={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n color: cardFg,\n zIndex: 1,\n }}\n >\n <FontAwesomeIcon\n icon={faChevronRight}\n style={{ fontSize: '0.75rem' }}\n />\n </Box>\n )}\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 {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n width: '100%',\n height: node.style?.height ? `${node.style.height}px` : undefined,\n minHeight: node.style?.height ? `${node.style.height}px` : undefined,\n p: isPreviewMode ? 0 : 0.5,\n pt: isPreviewMode ? 0 : 0.75,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : (isDarkMode ? '1px solid #334155' : '1px solid var(--color-gray3)'),\n borderLeft: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '4px solid #4f46e5'\n : '4px solid #3b82f6',\n mb: isPreviewMode ? 0 : 1,\n borderRadius: '6px',\n backgroundColor: getSolidBgColor(node, isPreviewMode ? 'transparent' : (isDarkMode ? '#1e293b' : '#ffffff')),\n overflow: isPreviewMode ? 'hidden' : 'visible',\n ...(isPreviewMode ? {} : { mb: 1 }),\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n {!isPreviewMode && validationAttempted && rowChildren.length === 0 && !node.style?.height && (\n <EmptyBlockErrorSymbol reason=\"Row is empty. Add columns or blocks from the Block Library into this row.\" />\n )}\n <Box sx={{ position: 'relative', zIndex: 1, width: '100%' }}>\n <DashboardNodeDropZone node={node} disabled={!!node.style?.height}>\n {rowChildren.length === 0 ? (\n !isPreviewMode && !node.style?.height && <EmptyContainerPlaceholder label=\"Add Blocks / Select Features\" />\n ) : (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: rowChildren.slice(0, visibleColumns).map(child =>\n (child.type === DASHBOARD_COMPONENT_TYPES.COLUMN && child.style?.width)\n ? `${child.style.width}px`\n : 'minmax(0, 1fr)'\n ).join(' '),\n gap: 0.25,\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 onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n )}\n </DashboardNodeDropZone>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.COLUMN) {\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n flex: node.style?.flex || (node.style?.width ? 'none' : 1),\n width: node.style?.width ? `${node.style.width}px` : '100%',\n minWidth: node.style?.width ? `${node.style.width}px` : undefined,\n minHeight: node.style?.width ? 20 : 140,\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n p: isPreviewMode ? 0 : 0.75,\n pt: isPreviewMode ? 0 : 0.75,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : (isDarkMode ? '1px solid #334155' : '1px solid var(--color-gray3)'),\n borderRadius: '6px',\n borderTop: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '4px solid #4f46e5'\n : '4px solid #3b82f6',\n gap: isPreviewMode ? 0.5 : 1,\n backgroundColor: getSolidBgColor(node, isPreviewMode ? 'transparent' : (isDarkMode ? '#1e293b' : '#ffffff')),\n overflow: isPreviewMode ? 'hidden' : 'visible',\n ...(isPreviewMode ? {} : { mb: 1 }),\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n {!isPreviewMode && validationAttempted && (node.children || []).length === 0 && !node.style?.width && (\n <EmptyBlockErrorSymbol reason=\"Column is empty. Add feature cards or blocks into this column.\" />\n )}\n <Box sx={{ position: 'relative', zIndex: 1, width: '100%' }}>\n <DashboardNodeDropZone node={node} disabled={!!node.style?.width}>\n {(node.children || []).length === 0 ? (\n !isPreviewMode && !node.style?.width && <EmptyContainerPlaceholder label=\"Add Blocks / Select Features\" />\n ) : (\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 onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n )}\n </DashboardNodeDropZone>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.DIVIDER) {\n const isVerticalDivider = (node.style?.orientation || 'HORIZONTAL') === 'VERTICAL';\n const dividerThickness = `${node.style?.height || 1}px`;\n const dividerColor = getFgColor(node, isDarkMode ? '#475569' : '#cbd5e1');\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n py: isVerticalDivider ? 0 : `${node.style?.marginVertical || 8}px`,\n px: isVerticalDivider ? `${node.style?.marginVertical || 8}px` : 0,\n minHeight: isVerticalDivider ? 72 : 'auto',\n width: isVerticalDivider ? 'auto' : '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px transparent',\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n <ActionButtons />\n <Box\n sx={{\n width: isVerticalDivider ? dividerThickness : '100%',\n height: isVerticalDivider ? '64px' : dividerThickness,\n backgroundColor: dividerColor,\n opacity: node.style?.opacity ?? 1,\n }}\n />\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.TEXT) {\n const fontWeightMap = {\n 100: 100, 200: 200, 300: 300, 400: 400, 500: 500,\n 600: 600, 700: 700, 800: 800, 900: 900,\n };\n\n const textFontSize = mapFontSize(node.content?.fontSize || node.style?.fontSize, 18);\n const textFontWeight = fontWeightMap[node.content?.fontWeight] || node.style?.fontWeight || 400;\n const textAlignment = node.content?.alignment || node.style?.alignment || 'left';\n const textColor = getFgColor(node, isDarkMode ? '#f8fafc' : '#1e293b');\n const textContent = node.content?.text || node.text || 'Text';\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n width: '100%',\n p: 0.5,\n pt: isPreviewMode ? 0.5 : 2.5,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px transparent',\n borderRadius: '4px',\n overflow: 'hidden',\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node)}\n <ActionButtons />\n <Typography\n variant='body2'\n sx={{\n position: 'relative',\n zIndex: 1,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n textAlign: textAlignment,\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: textColor,\n }}\n >\n {textContent}\n </Typography>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n position: 'relative',\n width: '100%',\n mb: 1,\n border: isPreviewMode\n ? 'none'\n : isNodeActive\n ? '2px solid #4f46e5'\n : isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px transparent',\n borderRadius: `${node.borderRadius || 12}px`,\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n <ActionButtons />\n {!isPreviewMode && validationAttempted && (node.images || []).length === 0 && (\n <EmptyBlockErrorSymbol reason=\"Image Carousel is empty. Attach images in the Inspector Panel.\" />\n )}\n <InteractiveCarousel\n node={node}\n documentMasterImages={documentMasterImages}\n isPreviewMode={isPreviewMode}\n />\n </Box>\n );\n }\n\n return (\n <Box\n ref={setCombinedRef}\n {...dragHandleProps}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n onClick={(e) => { e.stopPropagation(); if (!isPreviewMode) handleSectionClick(node.id || node.instanceId); }}\n sx={{\n p: 1,\n border: isPreviewMode ? 'none' : isNodeActive ? '2px solid #4f46e5' : isNodeOver ? '1px solid var(--color-tableHeader)' : '1px dashed var(--color-gray3)',\n cursor: isPreviewMode ? 'default' : 'grab',\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 onMoveUp: PropTypes.any,\n onMoveDown: PropTypes.any,\n onDuplicate: PropTypes.any,\n activeElementId: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n isSectionChild: PropTypes.any,\n};\n\nconst DashboardSectionNode = ({\n node,\n index,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n onMoveUp,\n onMoveDown,\n onDuplicate,\n activeElementId,\n zoomedNodeId,\n setZoomedNodeId,\n}) => (\n <DashboardLayoutNode\n node={node}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\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 onMoveUp: PropTypes.any,\n onMoveDown: PropTypes.any,\n onDuplicate: PropTypes.any,\n activeElementId: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\n\nexport default function MobileDisplay({\n validationAttempted = false,\n tabErrorCounts = {},\n isPreviewMode = false,\n documentMasterImages = [],\n tabStatus,\n layoutComponents,\n handleSectionClick,\n onMoveUp,\n onMoveDown,\n onDuplicate,\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 onDeselectComponent,\n workspaceTabs,\n activeWorkspaceIndex,\n onAddWorkspaceTab,\n onWorkspaceTabChange,\n onDeleteWorkspaceTab,\n onCopyWorkspaceTab,\n onPasteWorkspaceTab,\n onDuplicateWorkspaceTab,\n onUpdateWorkspaceTab,\n onMoveWorkspaceTabLeft,\n onMoveWorkspaceTabRight,\n onEditWorkspaceTab,\n}) {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n })\n );\n \n // Tab menu and edit state\n const [tabMenuAnchorEl, setTabMenuAnchorEl] = useState(null);\n const [tabMenuIndex, setTabMenuIndex] = useState(null);\n const handleOpenTabMenu = (event, index) => {\n event.stopPropagation();\n setTabMenuAnchorEl(event.currentTarget);\n setTabMenuIndex(index);\n };\n \n const handleCloseTabMenu = () => {\n setTabMenuAnchorEl(null);\n setTabMenuIndex(null);\n };\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\n return (\n <PreviewContext.Provider value={{ isPreviewMode, documentMasterImages, isDarkMode, validationAttempted }}>\n <div className='mobile-screen-v2' id='mobile-screen'>\n <div className='status-bar-v2' onClick={() => onDeselectComponent && onDeselectComponent()} style={{ cursor: 'pointer' }}>\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 \n {workspaceTabs && workspaceTabs.length > 0 && (\n <div style={{\n display: 'flex',\n overflowX: 'auto',\n backgroundColor: isDarkMode ? '#1e293b' : '#f8fafc',\n borderBottom: '1px solid #cbd5e1',\n padding: '8px 10px',\n alignItems: 'center',\n gap: '10px',\n minHeight: '48px',\n scrollbarWidth: 'none',\n }}>\n {workspaceTabs.map((tab, idx) => {\n const errorCount = validationAttempted ? ((tabErrorCounts && (tabErrorCounts[tab.id] ?? tabErrorCounts[idx])) || 0) : 0;\n return (\n <div\n key={tab.id || idx}\n onClick={() => onWorkspaceTabChange && onWorkspaceTabChange(idx)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n padding: isPreviewMode ? '6px 12px' : '5px 10px 5px 12px',\n backgroundColor: activeWorkspaceIndex === idx ? (isDarkMode ? '#334155' : '#fff') : 'transparent',\n border: activeWorkspaceIndex === idx ? '1px solid #3b82f6' : (isDarkMode ? '1px solid #475569' : '1px solid #cbd5e1'),\n borderRadius: '16px',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n color: activeWorkspaceIndex === idx ? '#3b82f6' : (isDarkMode ? '#94a3b8' : '#64748b'),\n fontWeight: activeWorkspaceIndex === idx ? 'bold' : 'normal',\n fontSize: '12px',\n boxShadow: activeWorkspaceIndex === idx ? '0 1px 3px rgba(0,0,0,0.08)' : 'none',\n marginRight: errorCount > 0 ? '4px' : '0px',\n }}\n >\n {errorCount > 0 && (\n <Box\n sx={{\n position: 'absolute',\n top: -6,\n right: -6,\n backgroundColor: '#e11d48',\n color: '#ffffff',\n borderRadius: '10px',\n minWidth: 20,\n height: 20,\n px: 0.6,\n fontSize: '12px',\n fontWeight: 800,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 5px rgba(225,29,72,0.45)',\n border: 'none',\n zIndex: 10,\n pointerEvents: 'none',\n }}\n >\n {errorCount}\n </Box>\n )}\n {tab.icon && (\n tab.icon.startsWith(\"<svg\") ? (\n <div style={{ width: '14px', height: '14px', marginRight: '6px', opacity: 0.8, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <SvgIconBox svg={tab.icon.replace(/<svg/i, '<svg style=\"width: 100%; height: 100%; display: block;\"')} />\n </div>\n ) : (\n <FontAwesomeIcons iconName={tab.icon} size=\"sm\" style={{ marginRight: '6px', opacity: 0.8 }} />\n )\n )}\n <span>{tab.name || `Tab ${idx + 1}`}</span>\n {!isPreviewMode && (\n <IconButton \n size=\"small\" \n sx={{ ml: 0.5, p: 0.25, color: 'inherit' }}\n onClick={(e) => handleOpenTabMenu(e, idx)}\n >\n <FontAwesomeIcon icon={faEllipsisV} style={{ fontSize: '10px' }} />\n </IconButton>\n )}\n </div>\n );\n })}\n {!isPreviewMode && (\n <Tooltip title=\"Add Tab\">\n <IconButton \n size=\"small\" \n onClick={onAddWorkspaceTab}\n style={{ backgroundColor: '#e2e8f0', marginLeft: 'auto', minWidth: '24px', width: '24px', height: '24px' }}\n >\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: '12px', color: '#334155' }} />\n </IconButton>\n </Tooltip>\n )}\n </div>\n )}\n\n {/* Workspace Tab Context Menu */}\n <Menu\n anchorEl={tabMenuAnchorEl}\n open={Boolean(tabMenuAnchorEl)}\n onClose={handleCloseTabMenu}\n PaperProps={{ style: { minWidth: '150px' } }}\n >\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onEditWorkspaceTab) {\n onEditWorkspaceTab(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faEdit} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Edit Tab\n </MenuItem>\n <Divider />\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onMoveWorkspaceTabLeft) {\n onMoveWorkspaceTabLeft(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faArrowLeft} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Move Left\n </MenuItem>\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onMoveWorkspaceTabRight) {\n onMoveWorkspaceTabRight(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faArrowRight} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Move Right\n </MenuItem>\n <Divider />\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onCopyWorkspaceTab) {\n onCopyWorkspaceTab(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faCopy} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Copy Tab\n </MenuItem>\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onPasteWorkspaceTab) {\n onPasteWorkspaceTab(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faPaste} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Paste Tab\n </MenuItem>\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null && onDuplicateWorkspaceTab) {\n onDuplicateWorkspaceTab(tabMenuIndex);\n }\n handleCloseTabMenu();\n }}>\n <FontAwesomeIcon icon={faCopy} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Duplicate Tab\n </MenuItem>\n <Divider />\n <MenuItem onClick={() => {\n if (tabMenuIndex !== null) {\n onDeleteWorkspaceTab && onDeleteWorkspaceTab(tabMenuIndex);\n }\n handleCloseTabMenu();\n }} style={{ color: '#d32f2f' }}>\n <FontAwesomeIcon icon={faTrashAlt} style={{ marginRight: '10px', fontSize: '14px', width: '16px' }} /> Delete Tab\n </MenuItem>\n </Menu>\n\n <div className='header-v2' onClick={() => onDeselectComponent && onDeselectComponent()} style={{ cursor: 'pointer' }}>\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 {appBarConfig?.healthInfrastructureVisible && (\n <div className='location-v2' style={{ marginLeft: appBarConfig?.locationVisible ? '8px' : '0' }}>\n <FontAwesomeIcon icon={faHospital} />\n <span className='location-text-v2'>Health Infrastructure</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 onClick={() => onDeselectComponent && onDeselectComponent()}\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 onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\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 onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\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 sensors={sensors} 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' onClick={() => onDeselectComponent && onDeselectComponent()} style={{ cursor: 'pointer' }}>\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 </PreviewContext.Provider>\n );\n}\n\nMobileDisplay.propTypes = {\n tabErrorCounts: PropTypes.object,\n isPreviewMode: PropTypes.bool,\n documentMasterImages: PropTypes.array,\n tabStatus: PropTypes.any.isRequired,\n layoutComponents: 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 onDeselectComponent: PropTypes.func,\n workspaceTabs: PropTypes.any,\n activeWorkspaceIndex: PropTypes.any,\n onAddWorkspaceTab: PropTypes.func,\n onWorkspaceTabChange: PropTypes.func,\n onDeleteWorkspaceTab: PropTypes.func,\n onCopyWorkspaceTab: PropTypes.func,\n onPasteWorkspaceTab: PropTypes.func,\n onDuplicateWorkspaceTab: PropTypes.func,\n onUpdateWorkspaceTab: PropTypes.func,\n onMoveWorkspaceTabLeft: PropTypes.func,\n onMoveWorkspaceTabRight: PropTypes.func,\n onEditWorkspaceTab: PropTypes.func,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n onDuplicate: PropTypes.func,\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 if (svgContent) {\n return (\n <Box\n sx={{\n height: '26px',\n width: '26px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n } else if (typeof svgContent === 'string' && svgContent.trim() !== '') {\n return (\n <Box\n sx={{\n height: '26px',\n width: '26px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'var(--color-primary)',\n }}\n >\n <FontAwesomeIcons iconName={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: '26px',\n width: '26px',\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 { createLayoutNode } from \"./dashboardLayoutUtils\";\nimport { DASHBOARD_COMPONENT_TYPES } from \"@/utils/FormConstants\";\n\nexport const createSearchBarBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.SEARCH_BAR, {\n queryName: \"\",\n });\n};\n\nexport const createCarouselBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.CAROUSEL, {\n images: [],\n autoScrollInterval: 3000,\n borderRadius: 12,\n height: 200,\n });\n};\n\nexport const createFeatureCardRowBlock = (cardCount = 2) => {\n const row = createLayoutNode(DASHBOARD_COMPONENT_TYPES.ROW);\n for (let i = 0; i < cardCount; i++) {\n row.children.push(createLayoutNode(DASHBOARD_COMPONENT_TYPES.FEATURE_CARD));\n }\n return row;\n};\n\nexport const createHeroCardBlock = () => {\n const card = createLayoutNode(DASHBOARD_COMPONENT_TYPES.FEATURE_CARD, {\n style: {\n layoutType: \"HORIZONTAL\",\n contentAlignment: \"LEFT\",\n borderRadius: 12,\n cardWidth: 100,\n cardHeight: 120,\n },\n background: {\n type: \"GRADIENT\",\n gradientType: \"LINEAR\",\n direction: \"LEFT_TO_RIGHT\",\n gradientStartColor: \"#e0f2fe\",\n gradientEndColor: \"#bae6fd\",\n },\n });\n \n const row = createLayoutNode(DASHBOARD_COMPONENT_TYPES.ROW);\n row.children.push(card);\n\n return row;\n};\n\nexport const createFeatureGridBlock = (featureCount = 3) => {\n const section = createLayoutNode(DASHBOARD_COMPONENT_TYPES.SECTION, {\n header: {\n title: \"Feature Grid\",\n fontSize: \"Medium\",\n fontWeight: \"600\",\n },\n });\n \n return section; // Empty section is the same as empty feature grid, as features are added directly.\n};\n\nexport const createVerticalCardStackBlock = (cardCount = 2) => {\n const col = createLayoutNode(DASHBOARD_COMPONENT_TYPES.COLUMN);\n for (let i = 0; i < cardCount; i++) {\n col.children.push(createLayoutNode(DASHBOARD_COMPONENT_TYPES.FEATURE_CARD, {\n style: {\n layoutType: \"HORIZONTAL\",\n cardWidth: 100,\n cardHeight: 80,\n }\n }));\n }\n\n return col;\n};\n\nexport const createTextBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.TEXT, {\n content: {\n text: \"Heading Text\",\n fontSize: \"Large\",\n fontWeight: \"600\",\n textStyle: \"NORMAL\",\n decoration: \"NONE\",\n },\n });\n};\n\nexport const createDividerBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.DIVIDER, {\n style: {\n orientation: \"HORIZONTAL\",\n height: 1,\n },\n });\n};\n\nexport const createEmptySectionBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.SECTION, {\n header: {\n title: \"New Section\",\n fontSize: \"Medium\",\n fontWeight: \"600\",\n },\n });\n};\nexport const createTabsetBlock = () => {\n return createLayoutNode(\"TABSET\", {});\n};\n\nexport const createHorizontalSpacerBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.ROW, {\n style: { height: 20 },\n });\n};\n\nexport const createVerticalSpacerBlock = () => {\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.COLUMN, {\n style: { width: 20 },\n });\n};\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\n\nconst PreviewBox = ({ children, sx }) => (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n height: 40,\n backgroundColor: \"#f8fafc\",\n border: \"1px solid #e2e8f0\",\n borderRadius: \"4px\",\n mb: 1,\n overflow: \"hidden\",\n ...sx,\n }}\n >\n {children}\n </Box>\n);\n\nexport const SearchBarPreview = () => (\n <PreviewBox>\n <Box sx={{ width: \"80%\", height: 16, backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"10px\", display: \"flex\", alignItems: \"center\", px: 1 }}>\n <Box sx={{ width: 6, height: 6, borderRadius: \"50%\", border: \"1px solid #94a3b8\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const CarouselPreview = () => (\n <PreviewBox sx={{ position: \"relative\", backgroundColor: \"#e2e8f0\" }}>\n <Box sx={{ position: \"absolute\", bottom: 4, display: \"flex\", gap: \"2px\" }}>\n <Box sx={{ width: 4, height: 4, borderRadius: \"50%\", backgroundColor: \"#64748b\" }} />\n <Box sx={{ width: 4, height: 4, borderRadius: \"50%\", backgroundColor: \"#94a3b8\" }} />\n <Box sx={{ width: 4, height: 4, borderRadius: \"50%\", backgroundColor: \"#94a3b8\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const FeatureCardRowPreview = () => (\n <PreviewBox>\n <Box sx={{ display: \"flex\", gap: \"4px\", width: \"80%\", height: \"60%\" }}>\n <Box sx={{ flex: 1, backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"2px\" }} />\n <Box sx={{ flex: 1, backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"2px\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const HeroCardPreview = () => (\n <PreviewBox>\n <Box sx={{ width: \"90%\", height: \"80%\", backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"4px\", display: \"flex\", flexDirection: \"column\", justifyContent: \"flex-end\", p: \"2px\" }}>\n <Box sx={{ width: \"60%\", height: 4, backgroundColor: \"#cbd5e1\", mb: \"2px\" }} />\n <Box sx={{ width: \"40%\", height: 3, backgroundColor: \"#e2e8f0\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const FeatureGridPreview = () => (\n <PreviewBox>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: \"2px\", width: \"60%\", height: \"60%\", justifyContent: \"center\", alignContent: \"center\" }}>\n {[...Array(6)].map((_, i) => (\n <Box key={i} sx={{ width: \"30%\", height: \"45%\", backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"2px\" }} />\n ))}\n </Box>\n </PreviewBox>\n);\n\nexport const VerticalStackPreview = () => (\n <PreviewBox>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"4px\", width: \"80%\", height: \"80%\", justifyContent: \"center\" }}>\n <Box sx={{ width: \"100%\", height: \"40%\", backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"2px\" }} />\n <Box sx={{ width: \"100%\", height: \"40%\", backgroundColor: \"#fff\", border: \"1px solid #cbd5e1\", borderRadius: \"2px\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const TextHeadingPreview = () => (\n <PreviewBox>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", justifyContent: \"center\", width: \"80%\", height: \"100%\", gap: \"4px\" }}>\n <Box sx={{ width: \"70%\", height: 6, backgroundColor: \"#64748b\", borderRadius: \"2px\" }} />\n <Box sx={{ width: \"40%\", height: 4, backgroundColor: \"#94a3b8\", borderRadius: \"2px\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const DividerPreview = () => (\n <PreviewBox>\n <Box sx={{ width: \"80%\", height: \"1px\", backgroundColor: \"#94a3b8\" }} />\n </PreviewBox>\n);\n\nexport const EmptySectionPreview = () => (\n <PreviewBox sx={{ backgroundColor: \"transparent\", border: \"1px dashed #cbd5e1\" }}>\n <Box sx={{ width: 12, height: 12, position: \"relative\" }}>\n <Box sx={{ position: \"absolute\", top: 5, left: 2, right: 2, height: 2, backgroundColor: \"#94a3b8\" }} />\n <Box sx={{ position: \"absolute\", left: 5, top: 2, bottom: 2, width: 2, backgroundColor: \"#94a3b8\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const TabsetPreview = () => (\n <PreviewBox>\n <Box sx={{ width: \"90%\", height: \"100%\", display: \"flex\", flexDirection: \"column\" }}>\n <Box sx={{ display: \"flex\", width: \"100%\", height: 10, borderBottom: \"1px solid #cbd5e1\" }}>\n <Box sx={{ flex: 1, borderBottom: \"2px solid #3b82f6\", height: \"100%\" }} />\n <Box sx={{ flex: 1, height: \"100%\" }} />\n <Box sx={{ flex: 1, height: \"100%\" }} />\n </Box>\n <Box sx={{ flex: 1, backgroundColor: \"#fff\", mt: \"2px\", border: \"1px solid #e2e8f0\", borderRadius: \"2px\" }} />\n </Box>\n </PreviewBox>\n);\n\nexport const HorizontalSpacerPreview = () => (\n <PreviewBox>\n <Box sx={{ width: \"80%\", height: 8, backgroundColor: \"transparent\", border: \"1px dashed #94a3b8\" }} />\n </PreviewBox>\n);\n\nexport const VerticalSpacerPreview = () => (\n <PreviewBox>\n <Box sx={{ width: 8, height: \"80%\", backgroundColor: \"transparent\", border: \"1px dashed #94a3b8\" }} />\n </PreviewBox>\n);\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Typography,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Grid,\n} from \"@mui/material\";\nimport { useDraggable } from \"@dnd-kit/core\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { DASHBOARD_COMPONENT_TYPES } from \"@/utils/FormConstants\";\nimport { createLayoutNode } from \"./dashboardLayoutUtils\";\n\nimport {\n createSearchBarBlock,\n createCarouselBlock,\n createFeatureCardRowBlock,\n createHeroCardBlock,\n createFeatureGridBlock,\n createVerticalCardStackBlock,\n createTextBlock,\n createDividerBlock,\n createEmptySectionBlock,\n createTabsetBlock,\n createHorizontalSpacerBlock,\n createVerticalSpacerBlock,\n} from \"./dashboardBlockTemplates\";\n\nimport {\n SearchBarPreview,\n CarouselPreview,\n FeatureCardRowPreview,\n HeroCardPreview,\n FeatureGridPreview,\n VerticalStackPreview,\n TextHeadingPreview,\n DividerPreview,\n EmptySectionPreview,\n TabsetPreview,\n HorizontalSpacerPreview,\n VerticalSpacerPreview,\n} from \"./BlockPreviews\";\n\nfunction DraggableBlock({\n id,\n children,\n componentType,\n dragData = null,\n disabled = false,\n}) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: { type: componentType, ...(dragData && { data: dragData }) },\n disabled,\n });\n\n const style = isDragging ? { opacity: 0.5 } : 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}\n\nDraggableBlock.propTypes = {\n id: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n componentType: PropTypes.string.isRequired,\n dragData: PropTypes.any,\n disabled: PropTypes.bool,\n};\n\nconst BLOCK_TEMPLATES = [\n { id: \"block-search\", name: \"Search Bar\", Preview: SearchBarPreview, factory: createSearchBarBlock },\n { id: \"block-carousel\", name: \"Image Carousel\", Preview: CarouselPreview, factory: createCarouselBlock },\n { id: \"block-feature-row\", name: \"Horizontal Card Stack\", Preview: FeatureCardRowPreview, factory: () => createFeatureCardRowBlock(2) },\n { id: \"block-hero\", name: \"Single Hero Card\", Preview: HeroCardPreview, factory: createHeroCardBlock },\n { id: \"block-grid\", name: \"Feature Grid\", Preview: FeatureGridPreview, factory: () => createFeatureGridBlock(3) },\n { id: \"block-stack\", name: \"Vertical Card Stack\", Preview: VerticalStackPreview, factory: () => createVerticalCardStackBlock(2) },\n { id: \"block-text\", name: \"Text Heading\", Preview: TextHeadingPreview, factory: createTextBlock },\n { id: \"block-divider\", name: \"Divider\", Preview: DividerPreview, factory: createDividerBlock },\n { id: \"block-section\", name: \"Empty Section\", Preview: EmptySectionPreview, factory: createEmptySectionBlock },\n { id: \"block-horizontal-spacer\", name: \"Horizontal Spacer\", Preview: HorizontalSpacerPreview, factory: createHorizontalSpacerBlock },\n { id: \"block-vertical-spacer\", name: \"Vertical Spacer\", Preview: VerticalSpacerPreview, factory: createVerticalSpacerBlock },\n // { id: \"block-tabset\", name: \"Workspace Tabs\", Preview: TabsetPreview, factory: createTabsetBlock },\n];\n\nconst LAYOUT_PRIMITIVES = [\n { id: \"prim-section\", name: \"Section\", type: DASHBOARD_COMPONENT_TYPES.SECTION, icon: \"faBox\" },\n { id: \"prim-row\", name: \"Row\", type: DASHBOARD_COMPONENT_TYPES.ROW, icon: \"faArrowsLeftRight\" },\n { id: \"prim-column\", name: \"Column\", type: DASHBOARD_COMPONENT_TYPES.COLUMN, icon: \"faArrowsUpDown\" },\n { id: \"prim-card\", name: \"Feature Card\", type: DASHBOARD_COMPONENT_TYPES.FEATURE_CARD, icon: \"faIdBadge\" },\n { id: \"prim-text\", name: \"Text\", type: DASHBOARD_COMPONENT_TYPES.TEXT, icon: \"faFont\" },\n { id: \"prim-divider\", name: \"Divider\", type: DASHBOARD_COMPONENT_TYPES.DIVIDER, icon: \"faMinus\" },\n];\n\nconst BlockTile = ({ Preview, name, onClick }) => (\n <Box\n onClick={onClick}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n p: 1,\n backgroundColor: \"var(--color-background2)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n transition: \"all 0.1s\",\n height: \"100%\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray4)\",\n borderColor: \"var(--color-primary)\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n },\n }}\n >\n <Box sx={{ width: \"100%\", mb: 1 }}>\n {Preview && <Preview />}\n </Box>\n <Typography variant=\"caption\" sx={{ fontWeight: 500, textAlign: \"center\", lineHeight: 1.2 }}>\n {name}\n </Typography>\n </Box>\n);\n\nBlockTile.propTypes = {\n Preview: PropTypes.elementType,\n name: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n};\n\nexport default function BlockLibrary({ onAddBlock }) {\n return (\n <Box>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mb: 1, color: \"text.primary\" }}>\n Block Library\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ display: \"block\", mb: 2 }}>\n Click a block to add it to the layout.\n </Typography>\n\n <Grid container spacing={1}>\n {BLOCK_TEMPLATES.map((block) => (\n <Grid item xs={6} key={block.id}>\n <BlockTile\n Preview={block.Preview}\n name={block.name}\n onClick={() => {\n const node = block.factory();\n node.blockName = block.name;\n onAddBlock(node);\n }}\n />\n </Grid>\n ))}\n </Grid>\n </Box>\n );\n}\n\nBlockLibrary.propTypes = {\n onAddBlock: PropTypes.func.isRequired,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Button,\n Chip,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n Autocomplete,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faPlus,\n faTrash,\n faRotate,\n faCodeBranch,\n faLayerGroup,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport {\n DYNAMIC_VARIABLES_LIST,\n operatorSummaryLabels,\n OPERAND_TYPES,\n CUSTOM_VALUE_OPTION,\n CUSTOM_PATH_OPTION,\n} from \"@/utils/FormConstants\";\n\nconst OPERAND_OPTIONS = [\n CUSTOM_VALUE_OPTION,\n CUSTOM_PATH_OPTION,\n ...DYNAMIC_VARIABLES_LIST,\n];\n\nconst classifyOperandValue = (value) =>\n !value\n ? \"\"\n : DYNAMIC_VARIABLES_LIST.includes(value)\n ? OPERAND_TYPES.USER_DATA\n : OPERAND_TYPES.CUSTOM_VALUE;\n\nconst OperandField = ({ label, value, type, onUpdate, sx }) => {\n const isCustomValue = type === OPERAND_TYPES.CUSTOM_VALUE;\n const isCustomPath = type === OPERAND_TYPES.CUSTOM_PATH;\n\n const displayValue = isCustomValue\n ? CUSTOM_VALUE_OPTION\n : isCustomPath\n ? CUSTOM_PATH_OPTION\n : value;\n\n const handleOperandChange = (newValue) => {\n const val = newValue || \"\";\n if (val === CUSTOM_VALUE_OPTION) {\n onUpdate({ value: \"\", type: OPERAND_TYPES.CUSTOM_VALUE });\n } else if (val === CUSTOM_PATH_OPTION) {\n onUpdate({ value: \"\", type: OPERAND_TYPES.CUSTOM_PATH });\n } else {\n onUpdate({ value: val, type: classifyOperandValue(val) });\n }\n };\n\n const handleOperandInputChange = (newInputValue, reason) => {\n if (reason === \"input\") {\n onUpdate({ value: newInputValue || \"\" });\n } else if (reason === \"clear\") {\n onUpdate({ value: \"\", type: \"\" });\n }\n };\n\n const commitOperandType = () => {\n if (isCustomValue || isCustomPath) return;\n if (!value) return;\n const nextType = classifyOperandValue(value);\n if (nextType && nextType !== type) {\n onUpdate({ type: nextType });\n }\n };\n\n return (\n <>\n <FormControl size=\"small\" sx={sx}>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={OPERAND_OPTIONS}\n value={displayValue || \"\"}\n onChange={(e, newValue) => handleOperandChange(newValue)}\n onInputChange={(e, newInputValue, reason) =>\n handleOperandInputChange(newInputValue, reason)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant=\"outlined\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\") commitOperandType();\n }}\n onBlur={commitOperandType}\n InputProps={{\n ...params.InputProps,\n readOnly: isCustomValue || isCustomPath,\n }}\n />\n )}\n PopperProps={{ style: { zIndex: 13000 } }}\n />\n </FormControl>\n\n {(isCustomValue || isCustomPath) && (\n <TextField\n size=\"small\"\n label={isCustomValue ? \"Custom Value\" : \"Custom Path\"}\n value={value}\n onChange={(e) => onUpdate({ value: e.target.value })}\n sx={{ flex: \"1 1 100%\" }}\n />\n )}\n </>\n );\n};\n\nOperandField.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string,\n type: PropTypes.string,\n onUpdate: PropTypes.func.isRequired,\n sx: PropTypes.object,\n};\n\nconst ConditionRow = ({\n condition,\n onChange,\n onDelete,\n preferredLanguages = [],\n rolesList = [],\n}) => {\n const {\n operandOne = \"\",\n operator = \"\",\n operandTwo = \"\",\n operandOneType = \"\",\n operandTwoType = \"\",\n } = condition;\n\n const handleChange = (field, value) => {\n onChange({ ...condition, [field]: value });\n };\n\n const updateCondition = (updates) => {\n onChange({ ...condition, ...updates });\n };\n\n const isOperandOneUserData =\n !operandOneType || operandOneType === OPERAND_TYPES.USER_DATA;\n\n return (\n <Box\n sx={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: 1,\n mb: 1,\n width: \"100%\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: 1,\n p: 1.5,\n pr: 4,\n position: \"relative\",\n backgroundColor: \"var(--color-bg)\",\n }}\n >\n <OperandField\n label=\"Operand One\"\n value={operandOne}\n type={operandOneType}\n sx={{ flex: \"3 1 calc(60% - 8px)\", minWidth: 100 }}\n onUpdate={(updates) => {\n const patch = {};\n if (\"value\" in updates) patch.operandOne = updates.value;\n if (\"type\" in updates) patch.operandOneType = updates.type;\n updateCondition(patch);\n }}\n />\n\n <FormControl size=\"small\" sx={{ flex: \"2 1 calc(40% - 8px)\", minWidth: 100 }}>\n <InputLabel>Operator</InputLabel>\n <Select\n value={operator}\n label=\"Operator\"\n onChange={(e) => handleChange(\"operator\", e.target.value)}\n MenuProps={{ PaperProps: { style: { maxHeight: 224 } } }}\n sx={{\n backgroundColor: \"rgba(0, 0, 0, 0.02)\",\n \"& .MuiSelect-select\": {\n fontWeight: 600,\n color: \"primary.main\",\n },\n }}\n >\n {Object.entries(operatorSummaryLabels).map(([key, label]) => (\n <MenuItem key={key} value={key}>\n {label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {isOperandOneUserData && operandOne === \"preferredLanguage\" ? (\n <Autocomplete\n size=\"small\"\n options={preferredLanguages.map((lang) => ({\n label: lang.languageValue || lang.language_value || lang.name,\n value: lang.languageKey || lang.language_key || lang.code || lang.name,\n }))}\n getOptionLabel={(option) => option.label || \"\"}\n value={\n preferredLanguages\n .map((lang) => ({\n label: lang.languageValue || lang.language_value || lang.name,\n value: lang.languageKey || lang.language_key || lang.code || lang.name,\n }))\n .find((opt) => opt.value === operandTwo) || null\n }\n onChange={(event, newValue) =>\n updateCondition({\n operandTwo: newValue ? newValue.value : \"\",\n operandTwoType: OPERAND_TYPES.CUSTOM_VALUE,\n })\n }\n isOptionEqualToValue={(option, value) => option.value === value.value}\n renderInput={(params) => <TextField {...params} label=\"Operand Two\" />}\n sx={{ flex: \"1 1 100%\", mt: 0.5 }}\n />\n ) : isOperandOneUserData && operandOne === \"gender\" ? (\n <Autocomplete\n size=\"small\"\n options={[\n { label: \"Male\", value: \"M\" },\n { label: \"Female\", value: \"F\" },\n ]}\n getOptionLabel={(option) => option.label || \"\"}\n value={\n [\n { label: \"Male\", value: \"M\" },\n { label: \"Female\", value: \"F\" },\n ].find((opt) => opt.value === operandTwo) || null\n }\n onChange={(event, newValue) =>\n updateCondition({\n operandTwo: newValue ? newValue.value : \"\",\n operandTwoType: OPERAND_TYPES.CUSTOM_VALUE,\n })\n }\n isOptionEqualToValue={(option, value) => option.value === value.value}\n renderInput={(params) => <TextField {...params} label=\"Operand Two\" />}\n sx={{ flex: \"1 1 100%\", mt: 0.5 }}\n />\n ) : isOperandOneUserData && operandOne === \"roleName\" ? (\n <Autocomplete\n size=\"small\"\n options={rolesList.map((r) => r.name)}\n value={operandTwo || null}\n onChange={(event, newValue) =>\n updateCondition({\n operandTwo: newValue || \"\",\n operandTwoType: OPERAND_TYPES.CUSTOM_VALUE,\n })\n }\n renderInput={(params) => <TextField {...params} label=\"Operand Two\" />}\n sx={{ flex: \"1 1 100%\", mt: 0.5 }}\n />\n ) : (\n <OperandField\n label=\"Operand Two\"\n value={operandTwo}\n type={operandTwoType}\n sx={{ flex: \"1 1 100%\", mt: 0.5, minWidth: 100 }}\n onUpdate={(updates) => {\n const patch = {};\n if (\"value\" in updates) patch.operandTwo = updates.value;\n if (\"type\" in updates) patch.operandTwoType = updates.type;\n updateCondition(patch);\n }}\n />\n )}\n\n <IconButton\n color=\"error\"\n size=\"small\"\n onClick={onDelete}\n sx={{ position: \"absolute\", right: 4, top: 4 }}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n );\n};\n\nConditionRow.propTypes = {\n condition: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst ConditionGroup = ({\n group,\n onChange,\n onDelete,\n isRoot,\n preferredLanguages,\n rolesList,\n}) => {\n const { rule = \"AND\", options = [] } = group.conditions || {};\n\n const handleAddCondition = () => {\n const newOptions = [\n ...options,\n {\n operandOne: \"\",\n operator: \"\",\n operandTwo: \"\",\n operandOneType: \"\",\n operandTwoType: \"\",\n },\n ];\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleAddGroup = (newRule) => {\n const newOptions = [\n ...options,\n { conditions: { rule: newRule, options: [] } },\n ];\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleToggleRule = () => {\n onChange({ conditions: { rule: rule === \"AND\" ? \"OR\" : \"AND\", options } });\n };\n\n const handleUpdateOption = (index, updatedOption) => {\n const newOptions = [...options];\n newOptions[index] = updatedOption;\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleDeleteOption = (index) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n return (\n <Box\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 2,\n mt: 1,\n mb: 2,\n backgroundColor: \"var(--color-bg)\",\n position: \"relative\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 2,\n }}\n >\n <Chip label={rule} color=\"primary\" size=\"small\" />\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"center\" }}>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={handleAddCondition}\n >\n Condition\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => handleAddGroup(\"AND\")}\n >\n AND Group\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => handleAddGroup(\"OR\")}\n >\n OR Group\n </Button>\n <Divider\n orientation=\"vertical\"\n variant=\"middle\"\n flexItem\n sx={{ mx: 0.5, height: \"20px\", alignSelf: \"center\" }}\n />\n <IconButton color=\"primary\" size=\"small\" onClick={handleToggleRule}>\n <FontAwesomeIcon icon={faRotate} />\n </IconButton>\n {!isRoot && (\n <IconButton color=\"error\" size=\"small\" onClick={onDelete}>\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n )}\n </Box>\n </Box>\n\n {options.map((option, index) => (\n <Box key={index} sx={{ pl: 2, position: \"relative\" }}>\n {option.conditions ? (\n <ConditionGroup\n group={option}\n onChange={(updatedGroup) =>\n handleUpdateOption(index, updatedGroup)\n }\n onDelete={() => handleDeleteOption(index)}\n isRoot={false}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n ) : (\n <ConditionRow\n condition={option}\n onChange={(updatedCondition) =>\n handleUpdateOption(index, updatedCondition)\n }\n onDelete={() => handleDeleteOption(index)}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n )}\n </Box>\n ))}\n\n {options.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ ml: 2 }}>\n No conditions in this group.\n </Typography>\n )}\n </Box>\n );\n};\n\nConditionGroup.propTypes = {\n group: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func,\n isRoot: PropTypes.bool,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst VisibilityConditionEditor = ({\n value,\n onChange,\n preferredLanguages = [],\n rolesList = [],\n}) => {\n const hasConditions = value && value.conditions;\n\n const handleCreateRoot = (rule) => {\n onChange({ conditions: { rule, options: [] } });\n };\n\n const handleClear = () => {\n onChange(null);\n };\n\n if (!hasConditions) {\n return (\n <Box\n sx={{\n mt: 1,\n p: 2,\n borderRadius: \"8px\",\n border: (theme) => `1px dashed ${theme.palette.primary.main}40`,\n backgroundColor: (theme) => `${theme.palette.primary.main}08`,\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mb: 1.5 }}>\n <FontAwesomeIcon icon={faCodeBranch} style={{ opacity: 0.6 }} />\n <Typography\n variant=\"caption\"\n fontWeight={700}\n color=\"text.secondary\"\n sx={{ textTransform: \"uppercase\", letterSpacing: \"0.06em\" }}\n >\n Add Visibility Condition\n </Typography>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n gap: 1.5,\n flexWrap: \"wrap\",\n alignItems: \"center\",\n }}\n >\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faLayerGroup} />}\n onClick={() => handleCreateRoot(\"AND\")}\n >\n AND Group\n </Button>\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faLayerGroup} />}\n onClick={() => handleCreateRoot(\"OR\")}\n >\n OR Group\n </Button>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 1,\n }}\n >\n <Typography variant=\"body2\" fontWeight=\"bold\">\n Visibility Conditions\n </Typography>\n <Button size=\"small\" color=\"error\" onClick={handleClear}>\n Clear All\n </Button>\n </Box>\n <ConditionGroup\n group={value}\n onChange={onChange}\n isRoot={true}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\n );\n};\n\nVisibilityConditionEditor.propTypes = {\n value: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nexport default VisibilityConditionEditor;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Box, Typography, TextField, MenuItem, Autocomplete, Button, Switch, FormControl, Select, Paper, Divider, Accordion, AccordionSummary, AccordionDetails, Grid, Alert, Slider } from \"@mui/material\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { FontAwesomeIconsNames } from \"@/common/fontAwesomeIcons/FontAwesomeIconsNames\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBox, faMousePointer, faArrowUp, faArrowDown, faGripLines, faGripLinesVertical } from '@fortawesome/free-solid-svg-icons';\nimport { SketchPicker } from \"react-color\";\nimport { Popover } from \"@mui/material\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport ImagePickerDialog, { ImageThumbnail, FullImagePreviewDialog } from \"./ImagePickerDialog\";\nimport VisibilityConditionEditor from \"./VisibilityConditionEditor\";\nimport {\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 ORIENTATION_OPTIONS,\n TEXT_STYLE_OPTIONS,\n TEXT_DECORATION_OPTIONS,\n DYNAMIC_VARIABLES_LIST,\n OPERAND_TYPES,\n CUSTOM_VALUE_OPTION,\n CUSTOM_PATH_OPTION,\n} from \"@/utils/FormConstants\";\n\nconst NAV_PARAM_OPERAND_OPTIONS = [\n CUSTOM_VALUE_OPTION,\n CUSTOM_PATH_OPTION,\n ...DYNAMIC_VARIABLES_LIST,\n];\n\nconst classifyNavParamValue = (value) =>\n !value\n ? \"\"\n : DYNAMIC_VARIABLES_LIST.includes(value)\n ? OPERAND_TYPES.USER_DATA\n : OPERAND_TYPES.CUSTOM_VALUE;\n\nconst NavigationParamRow = ({ paramName, entry, onUpdate }) => {\n const paramValue = entry?.paramValue || \"\";\n const paramType = entry?.paramType || \"\";\n const isCustomValue = paramType === OPERAND_TYPES.CUSTOM_VALUE;\n const isCustomPath = paramType === OPERAND_TYPES.CUSTOM_PATH;\n const displayValue = isCustomValue\n ? CUSTOM_VALUE_OPTION\n : isCustomPath\n ? CUSTOM_PATH_OPTION\n : paramValue;\n\n const handleValueChange = (newValue) => {\n const val = newValue || \"\";\n if (val === CUSTOM_VALUE_OPTION) {\n onUpdate({ paramValue: \"\", paramType: OPERAND_TYPES.CUSTOM_VALUE });\n } else if (val === CUSTOM_PATH_OPTION) {\n onUpdate({ paramValue: \"\", paramType: OPERAND_TYPES.CUSTOM_PATH });\n } else {\n onUpdate({ paramValue: val, paramType: classifyNavParamValue(val) });\n }\n };\n\n return (\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 1.5, mb: 1.5, alignItems: \"flex-start\" }}>\n <TextField\n size=\"small\"\n label=\"Page Param\"\n value={paramName}\n disabled\n sx={{ flex: \"1 1 calc(50% - 12px)\", backgroundColor: \"#f1f5f9\" }}\n />\n <Autocomplete\n size=\"small\"\n options={NAV_PARAM_OPERAND_OPTIONS}\n value={displayValue || null}\n onChange={(event, newValue) => handleValueChange(newValue)}\n renderInput={(params) => (\n <TextField {...params} label=\"Param Value\" placeholder=\"Select value source\" />\n )}\n sx={{ flex: \"1 1 calc(50% - 12px)\" }}\n />\n {(isCustomValue || isCustomPath) && (\n <TextField\n size=\"small\"\n label={isCustomValue ? \"Custom Value\" : \"Custom Path\"}\n value={paramValue}\n onChange={(e) => onUpdate({ paramValue: e.target.value })}\n sx={{ flex: \"1 1 100%\" }}\n />\n )}\n </Box>\n );\n};\nNavigationParamRow.propTypes = {\n paramName: PropTypes.string.isRequired,\n entry: PropTypes.object,\n onUpdate: PropTypes.func.isRequired,\n};\n\nconst SvgIconBox = ({ svg }) => {\n const normalizedSvg = React.useMemo(() => {\n if (!svg) return \"\";\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, \"image/svg+xml\");\n const svgElement = doc.documentElement;\n if (svgElement.tagName !== \"svg\") return svg;\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 ${parseFloat(width) || 512} ${parseFloat(height) || 512}`);\n }\n svgElement.removeAttribute(\"width\");\n svgElement.removeAttribute(\"height\");\n svgElement.setAttribute(\"style\", \"width: 100%; height: 100%;\");\n return new XMLSerializer().serializeToString(svgElement);\n } catch {\n return svg;\n }\n }, [svg]);\n\n return (\n <div\n style={{ display: \"flex\", width: \"100%\", height: \"100%\" }}\n dangerouslySetInnerHTML={{ __html: normalizedSvg }}\n />\n );\n};\nSvgIconBox.propTypes = { svg: PropTypes.string.isRequired };\n\nconst renderIcon = (iconData, size = \"36px\") => {\n let svgContent = null;\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 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 if (svgContent) {\n return (\n <Box sx={{ height: size, width: size, display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n } else if (typeof svgContent === \"string\" && svgContent.trim() !== \"\") {\n return (\n <Box sx={{ height: size, width: size, display: \"flex\", justifyContent: \"center\", alignItems: \"center\", color: \"var(--color-primary)\" }}>\n <FontAwesomeIcons iconName={svgContent} />\n </Box>\n );\n }\n\n // Fallback for missing icon\n return (\n <Box\n sx={{\n fontSize: \"0.8rem\",\n color: \"var(--color-gray3)\",\n border: \"1px solid\",\n borderRadius: \"50%\",\n height: size,\n width: size,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n ?\n </Box>\n );\n};\n\nconst FormAccordion = ({ title, children, expanded, onChange }) => (\n <Accordion expanded={expanded} onChange={onChange} disableGutters elevation={0} sx={{ '&:before': { display: 'none' }, border: '1px solid #e0e0e0', mb: 1, borderRadius: '4px', overflow: 'hidden' }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} sx={{ minHeight: '40px', backgroundColor: '#f8fafc', '& .MuiAccordionSummary-content': { my: 1 } }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: '#334155' }}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 2 }}>\n {children}\n </AccordionDetails>\n </Accordion>\n);\nFormAccordion.propTypes = {\n title: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n expanded: PropTypes.bool,\n onChange: PropTypes.func\n};\n\nconst ColorPickerField = ({ label, value, onChange, props = {} }) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? \"color-popover\" : undefined;\n\n return (\n <>\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value || \"\"}\n onChange={onChange}\n sx={{\n mb: 1.5,\n \"& .MuiOutlinedInput-root\": {\n \"& fieldset\": { borderColor: \"divider\" },\n \"&:hover fieldset\": { borderColor: \"text.secondary\" },\n \"&.Mui-focused fieldset\": { borderColor: \"primary.main\" },\n },\n \"& .MuiInputLabel-root\": { color: \"text.secondary\", fontWeight: 500 },\n \"& .MuiInputLabel-root.Mui-focused\": { color: \"primary.main\" },\n }}\n InputProps={{\n endAdornment: (\n <Box\n onClick={handleClick}\n sx={{\n width: 24,\n height: 24,\n borderRadius: \"4px\",\n border: \"1px solid\", borderColor: \"divider\",\n backgroundColor: value || \"#ffffff\",\n cursor: \"pointer\",\n flexShrink: 0,\n }}\n />\n ),\n }}\n {...props}\n />\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n >\n <SketchPicker\n color={value || \"#ffffff\"}\n onChange={(color) => {\n const hex = color.hex;\n const fakeEvent = { target: { value: hex } };\n onChange(fakeEvent);\n }}\n />\n </Popover>\n </>\n );\n};\n\nconst InspectorPanel = ({\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 preferredLanguages = [],\n rolesList = [],\n hideGlobalConfig = false,\n separatedGroups = [],\n separatedFeatures = [],\n activeTabId = \"home\",\n onAssignFeature,\n onUpdateWorkspaceTab,\n programsFeatures = [],\n onUpdateProgramFeature,\n pageParamsByFeature = {},\n}) => {\n const [expandedBottomNavigationItemId, setExpandedBottomNavigationItemId] =\n useState(null);\n const [expandedActionIndex, setExpandedActionIndex] = useState(null);\n const [imagePickerState, setImagePickerState] = useState({\n open: false,\n target: null, // \"carousel\" | \"backgroundImage\"\n imageIndex: null,\n });\n const [previewImg, setPreviewImg] = useState(null);\n const [bottomNavigationDraft, setBottomNavigationDraft] = useState(\n bottomNavigationConfig || [],\n );\n\n const [isMenuGroupsExpanded, setIsMenuGroupsExpanded] = useState(true);\n const [isStandaloneExpanded, setIsStandaloneExpanded] = useState(true);\n const [activeGroupId, setActiveGroupId] = useState(null);\n\n const [expandedAccordion, setExpandedAccordion] = useState(\"Content\");\n const [positionTab, setPositionTab] = useState(\"icon\");\n const [expandedFeatureConfigId, setExpandedFeatureConfigId] = useState(null);\n const [featureConfigSubTab, setFeatureConfigSubTab] = useState({});\n const [isFeatureConfigSectionExpanded, setIsFeatureConfigSectionExpanded] = useState(true);\n\n useEffect(() => {\n if (activeComponent?.type === 'SEARCH_BAR' || activeComponent?.type === 'CAROUSEL') {\n setExpandedAccordion(\"Configuration\");\n } else if (activeComponent?.type === 'DIVIDER') {\n setExpandedAccordion(\"Appearance\");\n } else {\n setExpandedAccordion(\"Content\");\n }\n }, [activeComponent?.id, activeComponent?.type]);\n\n const ctaType = activeComponent?.cta?.type;\n useEffect(() => {\n if (positionTab === \"button\" && ctaType !== \"BUTTON\") {\n setPositionTab(\"icon\");\n }\n }, [ctaType, positionTab]);\n\n const handleAccordionChange = (panel) => (event, isExpanded) => {\n setExpandedAccordion(isExpanded ? panel : false);\n };\n\n const handleGroupAccordionToggle = (groupId) => {\n setActiveGroupId((prev) => (prev === groupId ? null : groupId));\n };\n\n const isFeatureAssigned = (featureId) => {\n if (activeComponent) {\n return (activeComponent.children || []).some(f => String(f.id) === String(featureId));\n }\n return false;\n };\n\n const renderFeatureTile = (feature, isGroupMember = false) => {\n const isAssigned = isFeatureAssigned(feature.id);\n\n return (\n <Grid item xs={12} key={feature.id}>\n <Box\n onClick={() => onAssignFeature?.(activeComponent?.id || activeComponent?.instanceId, feature)}\n sx={{\n width: \"fit-content\",\n p: \"10px\",\n pl: isGroupMember ? \"20px\" : \"10px\",\n backgroundColor: isAssigned ? \"#e8f5e9\" : \"var(--color-background2)\",\n border: isAssigned ? \"1px solid #4caf50\" : \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n transition: \"all 0.1s\",\n mt: \"4px\",\n \"&:hover\": {\n backgroundColor: isAssigned ? \"#c8e6c9\" : \"var(--color-gray4)\",\n },\n }}\n >\n <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>\n {renderIcon(feature.icon, \"18px\")}\n </Box>\n <Typography variant=\"body2\" sx={{ fontWeight: isAssigned ? \"bold\" : \"normal\", color: \"#333\" }}>\n {feature?.name}\n </Typography>\n </Box>\n </Grid>\n );\n };\n\n const renderFeatureSelection = () => {\n const isSpacer =\n (activeComponent?.type === \"ROW\" && activeComponent?.blockName === \"Horizontal Spacer\") ||\n (activeComponent?.type === \"COLUMN\" && activeComponent?.blockName === \"Vertical Spacer\");\n\n if (isSpacer) return null;\n\n const isAllowedComponent = activeComponent?.type === 'FEATURE_CARD' || \n activeComponent?.type === 'SECTION' || \n activeComponent?.type === 'ROW' || \n activeComponent?.type === 'COLUMN' || \n (!activeComponent && activeTabId === 'programs');\n\n if (!isAllowedComponent) return null;\n\n return (\n <Box sx={{ mt: 3 }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: \"bold\", mb: 1, color: \"var(--color-text)\" }}>\n Feature Selection\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 2 }}>\n Click a feature to assign or unassign it.\n </Typography>\n\n {separatedGroups?.length > 0 && (\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 mb: 1\n }}\n expanded={isMenuGroupsExpanded}\n onChange={() => setIsMenuGroupsExpanded((prev) => !prev)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcons iconName={\"faChevronDown\"} style={{ color: \"#3f51b5\" }} />}\n sx={{ minHeight: \"40px\", backgroundColor: \"#e3f2fd\", \"&:hover\": { backgroundColor: \"#c5e3f8\" }, p: \"0 10px\", \"& .MuiAccordionSummary-content\": { margin: 0 } }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", color: \"#3f51b5\" }}>\n <FontAwesomeIcons iconName=\"faLayerGroup\" style={{ marginRight: \"6px\" }} />\n Menu Groups ({separatedGroups.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-gray4)\" }}>\n {separatedGroups.map((group) => (\n <Accordion\n key={group.uuid}\n sx={{ m: 0, \"&:before\": { display: \"none\" }, boxShadow: \"none\", border: \"1px solid var(--color-gray3)\", mb: 1, borderRadius: \"4px!important\" }}\n expanded={activeGroupId === group.uuid}\n onChange={() => handleGroupAccordionToggle(group.uuid)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName=\"faChevronDown\" style={{ fontSize: \"1rem\", color: \"var(--color-text)\", transform: activeGroupId === group.uuid ? \"rotate(360deg)\" : \"rotate(0deg)\", transition: \"transform 0.2s\" }} />\n }\n sx={{ minHeight: \"15px\", backgroundColor: \"#e3f2fd\", borderBottom: \"1px solid #bbdefb\", \"&:hover\": { backgroundColor: \"#c5e3f8\" }, p: \"0 10px\", \"& .MuiAccordionSummary-content\": { margin: 0 } }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", color: \"var(--color-text)\", flexGrow: 1 }}>\n {group.name} ({group.menus?.length || 0})\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-gray4)\" }}>\n <Grid container spacing={0.5}>\n {group.menus?.map((menu) => renderFeatureTile(menu, true))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n ))}\n </AccordionDetails>\n </Accordion>\n )}\n\n {separatedFeatures?.length > 0 && (\n <Accordion\n sx={{\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #c8e6c9\",\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n mb: 1\n }}\n expanded={isStandaloneExpanded}\n onChange={() => setIsStandaloneExpanded((prev) => !prev)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcons iconName={\"faChevronDown\"} style={{ color: \"#009688\" }} />}\n sx={{ minHeight: \"40px\", backgroundColor: \"#e8f5e9\", \"&:hover\": { backgroundColor: \"#cbe6cc\" }, p: \"0 10px\", \"& .MuiAccordionSummary-content\": { margin: 0 } }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", color: \"#009688\" }}>\n <FontAwesomeIcons iconName=\"faPuzzlePiece\" style={{ marginRight: \"6px\" }} />\n Standalone Features ({separatedFeatures.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-background2)\" }}>\n <Grid container spacing={0.5} direction=\"column\">\n {separatedFeatures.map((feature) => renderFeatureTile(feature, false))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n )}\n </Box>\n );\n };\n\n const getAssignedFeaturesForConfig = () => {\n if (activeComponent) {\n return (activeComponent.children || []).filter(\n (child) => child.type === \"FEATURE\",\n );\n }\n if (!activeComponent && activeTabId === \"programs\") {\n return programsFeatures || [];\n }\n return [];\n };\n\n const updateAssignedFeatureProperties = (featureId, patch) => {\n if (activeComponent) {\n const updatedChildren = (activeComponent.children || []).map((child) =>\n String(child.id) === String(featureId) ? { ...child, ...patch } : child,\n );\n onUpdate(activeComponent.id, \"children\", updatedChildren);\n } else if (!activeComponent && activeTabId === \"programs\") {\n onUpdateProgramFeature?.(featureId, patch);\n }\n };\n\n const renderFeatureConfiguration = () => {\n const isSpacer =\n (activeComponent?.type === \"ROW\" && activeComponent?.blockName === \"Horizontal Spacer\") ||\n (activeComponent?.type === \"COLUMN\" && activeComponent?.blockName === \"Vertical Spacer\");\n\n if (isSpacer) return null;\n\n const isAllowedComponent =\n activeComponent?.type === \"FEATURE_CARD\" ||\n activeComponent?.type === \"SECTION\" ||\n activeComponent?.type === \"ROW\" ||\n activeComponent?.type === \"COLUMN\" ||\n (!activeComponent && activeTabId === \"programs\");\n\n if (!isAllowedComponent) return null;\n\n const assignedFeatures = getAssignedFeaturesForConfig();\n if (assignedFeatures.length === 0) return null;\n\n return (\n <Box sx={{ mb: 2 }}>\n <Accordion\n sx={{\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #d1c4e9\",\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n }}\n expanded={isFeatureConfigSectionExpanded}\n onChange={() => setIsFeatureConfigSectionExpanded((prev) => !prev)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcons iconName={\"faChevronDown\"} style={{ color: \"#673ab7\" }} />}\n sx={{\n minHeight: \"40px\",\n backgroundColor: \"#ede7f6\",\n \"&:hover\": { backgroundColor: \"#ddd3f0\" },\n p: \"0 10px\",\n \"& .MuiAccordionSummary-content\": { margin: \"8px 0\" },\n }}\n >\n <Box>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", color: \"#673ab7\" }}>\n <FontAwesomeIcons iconName=\"faSliders\" style={{ marginRight: \"6px\" }} />\n Feature Configuration\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Configure the navigation and call to action behaviour for each assigned feature.\n </Typography>\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-background2)\" }}>\n {assignedFeatures.map((feature) => {\n const featureKey = feature.instanceId || feature.id;\n const isExpanded = expandedFeatureConfigId === featureKey;\n const activeSubTab = featureConfigSubTab[featureKey] || \"navigation\";\n const formInfo = pageParamsByFeature?.[String(feature.id)];\n const pageParamNames = formInfo?.pageParams || [];\n const existingPageParams = Array.isArray(feature.pageParams) ? feature.pageParams : [];\n\n return (\n <Box\n key={featureKey}\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={() => setExpandedFeatureConfigId(isExpanded ? null : featureKey)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n setExpandedFeatureConfigId(isExpanded ? null : featureKey);\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 ? \"action.selected\" : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n {renderIcon(feature.icon, \"18px\")}\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {feature.name}\n </Typography>\n </Box>\n <FontAwesomeIcons iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"} />\n </Box>\n\n {isExpanded && (\n <Box sx={{ p: 1.5, backgroundColor: \"var(--color-background)\" }}>\n <Box sx={{ display: \"flex\", gap: 1, mb: 2 }}>\n {[\n { id: \"navigation\", label: \"Navigation Action\" },\n { id: \"cta\", label: \"Call to Action\" },\n ].map((tab) => (\n <Button\n key={tab.id}\n variant={activeSubTab === tab.id ? \"contained\" : \"outlined\"}\n onClick={() =>\n setFeatureConfigSubTab((prev) => ({ ...prev, [featureKey]: tab.id }))\n }\n sx={{\n flex: 1,\n textTransform: \"none\",\n boxShadow: \"none\",\n borderColor: activeSubTab === tab.id ? \"primary.main\" : \"divider\",\n \"&:hover\": { boxShadow: \"none\" },\n }}\n >\n {tab.label}\n </Button>\n ))}\n </Box>\n\n {activeSubTab === \"cta\" && (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ fontStyle: \"italic\" }}>\n No configurations available for this.\n </Typography>\n )}\n\n {activeSubTab === \"navigation\" &&\n (pageParamNames.length === 0 ? (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ fontStyle: \"italic\" }}>\n No page params configured for the form linked to this feature.\n </Typography>\n ) : (\n pageParamNames.map((paramName) => {\n const entry = existingPageParams.find((p) => p.paramName === paramName);\n return (\n <NavigationParamRow\n key={paramName}\n paramName={paramName}\n entry={entry}\n onUpdate={(patch) => {\n const existingIndex = existingPageParams.findIndex(\n (p) => p.paramName === paramName,\n );\n const base =\n existingIndex !== -1\n ? existingPageParams[existingIndex]\n : { paramName, paramValue: \"\", paramType: \"\" };\n const updatedEntry = { ...base, ...patch };\n const newPageParams = [...existingPageParams];\n if (existingIndex !== -1) {\n newPageParams[existingIndex] = updatedEntry;\n } else {\n newPageParams.push(updatedEntry);\n }\n updateAssignedFeatureProperties(feature.id, {\n navigationAction: formInfo?.formCode || \"\",\n pageParams: newPageParams,\n });\n }}\n />\n );\n })\n ))}\n </Box>\n )}\n </Box>\n );\n })}\n </AccordionDetails>\n </Accordion>\n </Box>\n );\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: \"divider\" },\n \"&:hover fieldset\": { borderColor: \"text.secondary\" },\n \"&.Mui-focused fieldset\": { borderColor: \"primary.main\" },\n },\n \"& .MuiInputLabel-root\": { color: \"text.secondary\", fontWeight: 500 },\n \"& .MuiInputLabel-root.Mui-focused\": { color: \"primary.main\" },\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 <ColorPickerField label={label} value={value} onChange={onChange} props={props} />\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 SelectProps={{\n MenuProps: {\n PaperProps: {\n style: {\n maxHeight: 300,\n },\n },\n },\n }}\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 imagePickerField = (label, value, onOpenPicker) => {\n const selectedImg = documentMasterImages.find(\n (document) => document.uuid === value,\n );\n return (\n <Box sx={{ mb: 1.5 }}>\n <Typography\n variant=\"body2\"\n sx={{ mb: 0.5, color: \"text.secondary\", fontWeight: 500 }}\n >\n {label}\n </Typography>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Button size=\"small\" variant=\"outlined\" onClick={onOpenPicker}>\n {value ? \"Change Image\" : \"Select Image\"}\n </Button>\n {value && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 0.5,\n pr: 1.5,\n maxWidth: 260,\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.02)\",\n borderColor: \"primary.main\",\n },\n }}\n onClick={() => selectedImg && setPreviewImg(selectedImg)}\n title=\"Click to preview full image\"\n >\n <Box sx={{ width: 40, height: 40, flexShrink: 0 }}>\n <ImageThumbnail img={selectedImg} height=\"40px\" />\n </Box>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={selectedImg?.name || value}\n >\n {selectedImg?.name || value}\n </Typography>\n </Box>\n )}\n </Box>\n </Box>\n );\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 ([\"xl\", \"Large\", \"Medium\", \"Small\", \"xs\"].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 const healthInfrastructureVisible = Boolean(appBarConfig?.healthInfrastructureVisible);\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 <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n Enter your greeting below. Use {\"{{dynamicValue}}\"} (e.g.,{\" \"}\n {\"{{firstname}}\"}) to insert dynamic values. \n </Alert>\n <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n You can also add on load query/api key inside {\"{{}}\"} in greeting.\n </Alert>\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 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 <Autocomplete\n freeSolo\n size=\"small\"\n options={DYNAMIC_VARIABLES_LIST}\n value={greetingValues[extractedVar] || \"\"}\n onChange={(e, newValue) => {\n const newVals = { ...greetingValues };\n if (newValue) {\n newVals[extractedVar] = newValue;\n } else {\n delete newVals[extractedVar];\n }\n onAppBarUpdate(\"greetings\", {\n greetingValues: newVals,\n });\n }}\n onInputChange={(e, newInputValue, reason) => {\n if (reason === 'input' || reason === 'clear') {\n const newVals = { ...greetingValues };\n if (newInputValue) {\n newVals[extractedVar] = newInputValue;\n } else {\n delete newVals[extractedVar];\n }\n onAppBarUpdate(\"greetings\", {\n greetingValues: newVals,\n });\n }\n }}\n getOptionDisabled={(option) =>\n activeUsedValues.includes(option) &&\n greetingValues[extractedVar] !== option\n }\n renderInput={(params) => (\n <TextField {...params} variant=\"outlined\" placeholder=\"Select or type...\" />\n )}\n />\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 {/* Health Infrastructure Section */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mt: 1,\n }}\n >\n <Typography variant=\"body2\">Health Infrastructure</Typography>\n <Switch\n checked={healthInfrastructureVisible}\n onChange={(e) =>\n onAppBarUpdate(\"healthInfrastructureVisible\", 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 ? \"action.selected\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\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 ? \"action.selected\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\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 {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 || [])\n .map((q) => (typeof q === \"string\" ? q : q?.code || q?.queryName || q?.name || \"\"))\n .filter(Boolean);\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Search Bar Configuration\n </Typography>\n <FormAccordion title=\"Configuration\" expanded={expandedAccordion === 'Configuration'} onChange={handleAccordionChange('Configuration')}>\n <Autocomplete\n id=\"query-name-autocomplete\"\n options={queryOptions}\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n PopperProps={{ style: { zIndex: 13000 } }}\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 </FormAccordion>\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 <FormAccordion title=\"Content\" expanded={expandedAccordion === 'Content'} onChange={handleAccordionChange('Content')}>\n {textField(\"Section Title\", activeComponent.header?.title, (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n title: e.target.value,\n }),\n )}\n </FormAccordion>\n\n <FormAccordion title=\"Typography\" expanded={expandedAccordion === 'Typography'} onChange={handleAccordionChange('Typography')}>\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 {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 </FormAccordion>\n\n <FormAccordion title=\"Appearance\" expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\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 {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 {imagePickerField(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n () =>\n setImagePickerState({\n open: true,\n target: \"backgroundImage\",\n imageIndex: null,\n }),\n )}\n </FormAccordion>\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\n <FormAccordion title=\"Content\" expanded={expandedAccordion === 'Content'} onChange={handleAccordionChange('Content')}>\n <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n You can add on load query/api key inside {\"{{}}\"} in Title and Subtitle.\n </Alert>\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 {featureCardIconPicker(activeComponent)}\n </FormAccordion>\n\n <FormAccordion title=\"Typography\" expanded={expandedAccordion === 'Typography'} onChange={handleAccordionChange('Typography')}>\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 {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 {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 </FormAccordion>\n\n <FormAccordion title=\"Call To Action Configuration\" expanded={expandedAccordion === 'CTA'} onChange={handleAccordionChange('CTA')}>\n {selectField(\n \"Call To Action\",\n activeComponent.cta?.type || (activeComponent.showLeadingArrow ? \"ARROW\" : \"NONE\"),\n (e) => {\n const val = e.target.value;\n if (val === \"BUTTON\") {\n onUpdate(activeComponent.id, \"cta\", {\n text: \"Click Here\",\n icon: \"\",\n iconType: \"fa\",\n iconPosition: \"LEFT\",\n backgroundStyle: \"SOLID\",\n backgroundColor: { lightMode: \"#4f46e5\", darkMode: \"#6366f1\" },\n backgroundGradientStart: { lightMode: \"#4f46e5\", darkMode: \"#6366f1\" },\n backgroundGradientEnd: { lightMode: \"#ec4899\", darkMode: \"#f472b6\" },\n textColor: { lightMode: \"#ffffff\", darkMode: \"#ffffff\" },\n borderColor: { lightMode: \"transparent\", darkMode: \"transparent\" },\n ...(activeComponent.cta || {}),\n type: val,\n });\n } else {\n onUpdate(activeComponent.id, \"cta\", { type: val });\n }\n if (val === \"ARROW\") {\n onUpdate(activeComponent.id, \"showLeadingArrow\", true);\n } else {\n onUpdate(activeComponent.id, \"showLeadingArrow\", false);\n }\n },\n [\n { label: \"None\", value: \"NONE\" },\n { label: \"Leading Arrow\", value: \"ARROW\" },\n { label: \"Button\", value: \"BUTTON\" }\n ]\n )}\n\n {(activeComponent.cta?.type === \"BUTTON\") && (\n <>\n {textField(\n \"Button Text\",\n activeComponent.cta?.text || \"Click Here\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n text: e.target.value,\n })\n )}\n\n {featureDropdown(\n \"Navigation Action\",\n activeComponent.cta?.navigation,\n (featureId) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n navigation: featureId,\n })\n )}\n\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, mb: 1.5 }}>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 0.5 }}>\n Button Icon\n </Typography>\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={FontAwesomeIconsNames.includes(activeComponent.cta?.icon) ? activeComponent.cta.icon : null}\n onChange={(event, newValue) => {\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n icon: newValue || \"\",\n iconType: 'fa'\n });\n }}\n renderOption={(props, option) => (\n <Box component=\"li\" {...props} sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <FontAwesomeIcons iconName={option} />\n <Typography variant=\"body2\">{option}</Typography>\n </Box>\n )}\n renderInput={(params) => (\n <TextField {...params} label=\"Select FontAwesome Icon\" variant=\"outlined\" />\n )}\n />\n\n <Box sx={{ display: 'flex', alignItems: 'center', mt: 1, gap: 2 }}>\n <Typography variant=\"body2\" color=\"textSecondary\">Or use a custom SVG:</Typography>\n <Button variant=\"outlined\" size=\"small\" component=\"label\">\n Upload SVG\n <input\n type=\"file\"\n accept=\".svg\"\n hidden\n onChange={(e) => {\n const file = e.target.files && e.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const result = event.target.result;\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n icon: result,\n iconType: 'svg'\n });\n showToast({ type: \"success\", message: \"SVG loaded successfully.\" });\n };\n reader.readAsText(file);\n }\n e.target.value = null; // reset\n }}\n />\n </Button>\n {activeComponent.cta?.iconType === 'svg' && (\n <Typography variant=\"caption\" color=\"success.main\" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <FontAwesomeIcon icon={faBox} size=\"sm\" /> SVG Selected\n </Typography>\n )}\n </Box>\n </Box>\n\n {selectField(\n \"Icon Position\",\n activeComponent.cta?.iconPosition || \"LEFT\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n iconPosition: e.target.value,\n }),\n [\n { label: \"Left of Text\", value: \"LEFT\" },\n { label: \"Right of Text\", value: \"RIGHT\" }\n ]\n )}\n\n {selectField(\n \"Background Style\",\n activeComponent.cta?.backgroundStyle || \"SOLID\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundStyle: e.target.value,\n }),\n [\n { label: \"Solid Color\", value: \"SOLID\" },\n { label: \"Gradient Color\", value: \"GRADIENT\" },\n { label: \"Transparent\", value: \"TRANSPARENT\" }\n ]\n )}\n {activeComponent.cta?.backgroundStyle === \"SOLID\" && (\n <>\n {colorField(\n \"Background Color (Light Mode)\",\n activeComponent.cta?.backgroundColor?.lightMode || \"#4f46e5\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundColor: {\n ...(activeComponent.cta?.backgroundColor || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Background Color (Dark Mode)\",\n activeComponent.cta?.backgroundColor?.darkMode || \"#6366f1\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundColor: {\n ...(activeComponent.cta?.backgroundColor || {}),\n darkMode: e.target.value,\n },\n })\n )}\n </>\n )}\n {activeComponent.cta?.backgroundStyle === \"GRADIENT\" && (\n <>\n {colorField(\n \"Gradient Start (Light Mode)\",\n activeComponent.cta?.backgroundGradientStart?.lightMode || \"#4f46e5\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundGradientStart: {\n ...(activeComponent.cta?.backgroundGradientStart || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient End (Light Mode)\",\n activeComponent.cta?.backgroundGradientEnd?.lightMode || \"#ec4899\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundGradientEnd: {\n ...(activeComponent.cta?.backgroundGradientEnd || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient Start (Dark Mode)\",\n activeComponent.cta?.backgroundGradientStart?.darkMode || \"#6366f1\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundGradientStart: {\n ...(activeComponent.cta?.backgroundGradientStart || {}),\n darkMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient End (Dark Mode)\",\n activeComponent.cta?.backgroundGradientEnd?.darkMode || \"#f472b6\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n backgroundGradientEnd: {\n ...(activeComponent.cta?.backgroundGradientEnd || {}),\n darkMode: e.target.value,\n },\n })\n )}\n </>\n )}\n\n {colorField(\n \"Text Color (Light Mode)\",\n activeComponent.cta?.textColor?.lightMode || \"#ffffff\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n textColor: {\n ...(activeComponent.cta?.textColor || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Text Color (Dark Mode)\",\n activeComponent.cta?.textColor?.darkMode || \"#ffffff\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n textColor: {\n ...(activeComponent.cta?.textColor || {}),\n darkMode: e.target.value,\n },\n })\n )}\n\n {colorField(\n \"Border Color (Light Mode)\",\n activeComponent.cta?.borderColor?.lightMode || \"transparent\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n borderColor: {\n ...(activeComponent.cta?.borderColor || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Border Color (Dark Mode)\",\n activeComponent.cta?.borderColor?.darkMode || \"transparent\",\n (e) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n borderColor: {\n ...(activeComponent.cta?.borderColor || {}),\n darkMode: e.target.value,\n },\n })\n )}\n </>\n )}\n </FormAccordion>\n\n <FormAccordion title=\"Position\" expanded={expandedAccordion === 'Position'} onChange={handleAccordionChange('Position')}>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 1.5 }}>\n Select an element and anchor it to a position on the card.\n </Typography>\n\n <Box sx={{ display: 'flex', gap: 1, mb: 2 }}>\n {[\n { id: 'icon', label: 'Icon', icon: <FontAwesomeIcon icon={faBox} size=\"sm\" /> },\n { id: 'title', label: 'Title', icon: <Typography sx={{ fontWeight: 'bold', fontSize: '0.8rem', lineHeight: 1 }}>T</Typography> },\n { id: 'subtitle', label: 'Subtitle', icon: <Typography sx={{ fontSize: '0.75rem', lineHeight: 1, pt: 0.3 }}>T</Typography> },\n ...(activeComponent.cta?.type === 'BUTTON' ? [{ id: 'button', label: 'Button', icon: <FontAwesomeIcon icon={faMousePointer} size=\"sm\" /> }] : [])\n ].map((tab) => (\n <Button\n key={tab.id}\n variant={positionTab === tab.id ? 'contained' : 'outlined'}\n onClick={() => setPositionTab(tab.id)}\n sx={{\n flex: 1,\n textTransform: \"none\",\n py: 0.25,\n px: 0.5,\n boxShadow: \"none\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 0.5,\n minWidth: 0,\n borderColor: positionTab === tab.id ? 'primary.main' : 'divider',\n '&:hover': {\n boxShadow: 'none',\n }\n }}\n >\n {tab.icon}\n <Typography variant=\"caption\" sx={{ fontSize: '0.65rem' }}>{tab.label}</Typography>\n </Button>\n ))}\n </Box>\n\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, bgcolor: 'background.paper', border: '1px solid', borderColor: 'divider', borderRadius: 1, p: 0.5, mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-around', px: 2, mb: 0.5 }}>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ fontSize: '0.6rem', width: '33%', textAlign: 'center' }}>LEFT</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ fontSize: '0.6rem', width: '33%', textAlign: 'center' }}>CENTER</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ fontSize: '0.6rem', width: '33%', textAlign: 'center' }}>RIGHT</Typography>\n </Box>\n {['TOP', 'MIDDLE', 'BOTTOM'].map((vPos) => (\n <Box key={vPos} sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ fontSize: '0.6rem', width: '36px', textAlign: 'right', mr: 0.5 }}>\n {vPos}\n </Typography>\n {['LEFT', 'CENTER', 'RIGHT'].map((hPos) => {\n const elType = positionTab.toUpperCase();\n const cl = activeComponent.contentLayout || [];\n const currentGroup = cl.find(g => g.items.includes(elType));\n const isActive = currentGroup?.position.horizontal === hPos && currentGroup?.position.vertical === vPos;\n\n const groupAtCell = cl.find(g => g.position.horizontal === hPos && g.position.vertical === vPos);\n const cellHasItems = groupAtCell?.items?.length > 0;\n\n const getIconForType = (type) => {\n if (type === 'ICON') return <FontAwesomeIcon key={type} icon={faBox} size=\"xs\" />;\n if (type === 'TITLE') return <Typography key={type} sx={{ fontWeight: 'bold', fontSize: '0.7rem' }}>T</Typography>;\n if (type === 'SUBTITLE') return <Typography key={type} sx={{ fontSize: '0.6rem' }}>Sub</Typography>;\n if (type === 'BUTTON') return <FontAwesomeIcon key={type} icon={faMousePointer} size=\"xs\" />;\n return null;\n };\n\n return (\n <Box\n key={`${hPos}-${vPos}`}\n onClick={() => {\n let newLayout = [...cl];\n newLayout = newLayout.map(g => ({\n ...g,\n items: g.items.filter(i => i !== elType)\n })).filter(g => g.items.length > 0);\n\n const existingGroupIndex = newLayout.findIndex(g => g.position.horizontal === hPos && g.position.vertical === vPos);\n if (existingGroupIndex >= 0) {\n newLayout[existingGroupIndex] = {\n ...newLayout[existingGroupIndex],\n items: [...newLayout[existingGroupIndex].items, elType]\n };\n if (newLayout[existingGroupIndex].items.length > 1 && !newLayout[existingGroupIndex].alignment) {\n newLayout[existingGroupIndex].alignment = 'VERTICAL';\n newLayout[existingGroupIndex].spacing = 4;\n }\n } else {\n newLayout.push({\n position: { horizontal: hPos, vertical: vPos },\n items: [elType]\n });\n }\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n sx={{\n flex: 1,\n height: 28,\n bgcolor: isActive ? \"primary.light\" : cellHasItems ? \"action.hover\" : \"background.default\",\n border: \"1px solid\",\n borderColor: isActive ? \"primary.main\" : \"divider\",\n borderRadius: 0.5,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 0.5,\n color: isActive ? 'primary.contrastText' : 'text.secondary',\n '&:hover': {\n bgcolor: isActive ? 'primary.light' : 'action.hover',\n }\n }}\n >\n {groupAtCell?.items?.map(getIconForType)}\n </Box>\n );\n })}\n </Box>\n ))}\n </Box>\n\n {(() => {\n const elType = positionTab.toUpperCase();\n const cl = activeComponent.contentLayout || [];\n const currentGroup = cl.find(g => g.items.includes(elType));\n if (!currentGroup || currentGroup.items.length <= 1) return null;\n\n return (\n <Box\n sx={{\n mt: 1,\n p: 1,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: 1,\n bgcolor: \"background.default\",\n }}\n >\n <Typography variant=\"caption\" sx={{ fontWeight: \"bold\", display: \"block\", mb: 1 }}>\n Group Configuration ({currentGroup.position.horizontal} {currentGroup.position.vertical})\n </Typography>\n\n <Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 1, mb: 1 }}>\n <Box sx={{ minWidth: 0 }}>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ mb: 0.5, display: \"block\" }}>\n Alignment\n </Typography>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\n <Button\n variant={currentGroup.alignment === \"HORIZONTAL\" ? \"contained\" : \"outlined\"}\n onClick={() => {\n const newLayout = cl.map((g) =>\n g === currentGroup ? { ...g, alignment: \"HORIZONTAL\" } : g\n );\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n sx={{ minWidth: 0, height: 32 }}\n >\n <FontAwesomeIcon icon={faGripLines} />\n </Button>\n <Button\n variant={currentGroup.alignment === \"VERTICAL\" ? \"contained\" : \"outlined\"}\n onClick={() => {\n const newLayout = cl.map((g) => (g === currentGroup ? { ...g, alignment: \"VERTICAL\" } : g));\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n sx={{ minWidth: 0, height: 32 }}\n >\n <FontAwesomeIcon icon={faGripLinesVertical} />\n </Button>\n </Box>\n </Box>\n\n <Box sx={{ minWidth: 0 }}>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ mb: 0.5, display: \"block\" }}>\n Element Order\n </Typography>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.5 }}>\n {currentGroup?.items?.map((item, index) => (\n <Box\n key={item}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 0.5,\n bgcolor: \"background.paper\",\n borderRadius: 0.5,\n border: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{\n fontWeight: item === elType ? \"bold\" : \"normal\",\n color: item === elType ? \"primary.main\" : \"text.primary\",\n }}\n >\n {item}\n </Typography>\n <Box sx={{ display: \"flex\", gap: 0.5 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n disabled={index === 0}\n onClick={() => {\n const newItems = [...currentGroup.items];\n [newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]];\n const newLayout = cl.map(g => g === currentGroup ? { ...g, items: newItems } : g);\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n sx={{ minWidth: 0, p: 0.25, width: 24, height: 24 }}\n >\n <FontAwesomeIcon icon={faArrowUp} size=\"xs\" />\n </Button>\n <Button\n size=\"small\"\n variant=\"outlined\"\n disabled={index === currentGroup.items.length - 1}\n onClick={() => {\n const newItems = [...currentGroup.items];\n [newItems[index], newItems[index + 1]] = [newItems[index + 1], newItems[index]];\n const newLayout = cl.map(g => g === currentGroup ? { ...g, items: newItems } : g);\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n sx={{ minWidth: 0, p: 0.25, width: 24, height: 24 }}\n >\n <FontAwesomeIcon icon={faArrowDown} size=\"xs\" />\n </Button>\n </Box>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n\n <Box sx={{ minWidth: 0, mb: 1 }}>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ mb: 0.5, display: \"block\" }}>\n Spacing ({currentGroup.spacing ?? 4}px)\n </Typography>\n <Box sx={{ px: 1 }}>\n <Slider\n size=\"small\"\n value={currentGroup.spacing ?? 4}\n min={0}\n max={32}\n step={1}\n onChange={(e, val) => {\n const newLayout = cl.map((g) => (g === currentGroup ? { ...g, spacing: val } : g));\n onUpdate(activeComponent.id, \"contentLayout\", newLayout);\n }}\n />\n </Box>\n </Box>\n </Box>\n );\n })()}\n </FormAccordion>\n\n <FormAccordion title=\"Appearance\" expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\n\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,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardWidth: Number(e.target.value || 0),\n }),\n )}\n {numberField(\" Card Height\", activeComponent.style?.cardHeight, (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardHeight: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Content Width (%)\",\n activeComponent.style?.contentWidth,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentWidth: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Content Height\",\n activeComponent.style?.contentHeight,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentHeight: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \"Shadow Elevation (0-24)\",\n activeComponent.shadow?.elevation ?? 0,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n elevation: 0,\n });\n return;\n }\n const val = Math.round(Number(raw));\n if (!Number.isNaN(val) && val >= 0 && val <= 24) {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n elevation: val,\n });\n }\n },\n { inputProps: { min: 0, max: 24, step: 1 } },\n )}\n {numberField(\n \"Shadow Opacity (0–1)\",\n activeComponent.shadow?.opacity ?? 0.00,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n opacity: 0,\n });\n return;\n }\n const val = Number(raw);\n if (!Number.isNaN(val) && val >= 0 && val <= 1) {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n opacity: val,\n });\n }\n },\n { inputProps: { min: 0, max: 1, step: 0.01 } },\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 {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 {imagePickerField(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n () =>\n setImagePickerState({\n open: true,\n target: \"backgroundImage\",\n imageIndex: null,\n }),\n )}\n </FormAccordion>\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\n <FormAccordion title=\"Configuration\" expanded={expandedAccordion === 'Configuration'} onChange={handleAccordionChange('Configuration')}>\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 </FormAccordion>\n\n <FormAccordion title=\"Images\" expanded={expandedAccordion === 'Images'} onChange={handleAccordionChange('Images')}>\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 </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 <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n mb: 1,\n }}\n >\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n setImagePickerState({\n open: true,\n target: \"carousel\",\n imageIndex: index,\n })\n }\n >\n {image.documentUuid ? \"Change Image\" : \"Select Image\"}\n </Button>\n {image.documentUuid && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 0.5,\n pr: 1.5,\n maxWidth: 300,\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.02)\",\n borderColor: \"primary.main\",\n },\n }}\n onClick={() => {\n const imgObj = documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n );\n if (imgObj) setPreviewImg(imgObj);\n }}\n title=\"Click to preview full image\"\n >\n <Box sx={{ width: 50, height: 50, flexShrink: 0 }}>\n <ImageThumbnail\n img={documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )}\n height=\"50px\"\n />\n </Box>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={\n documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )?.name || image.documentUuid\n }\n >\n {documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )?.name || image.documentUuid}\n </Typography>\n </Box>\n )}\n </Box>\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\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n mt: 1,\n mb: 1,\n }}\n >\n <Typography variant=\"body2\">Is Visible?</Typography>\n <Switch\n checked={image.isVisible === true}\n onChange={(e) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"isVisible\",\n e.target.checked,\n )\n }\n size=\"small\"\n />\n </Box>\n\n {image.isVisible === true && (\n <Box sx={{ mt: 2, mb: 2 }}>\n <VisibilityConditionEditor\n value={image.visibilityConditions}\n onChange={(conditions) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"visibilityConditions\",\n conditions\n )\n }\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\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 </FormAccordion>\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 <FormAccordion title=\"Content\" expanded={expandedAccordion === 'Content'} onChange={handleAccordionChange('Content')}>\n <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n You can add on load query/api key inside {\"{{}}\"} in Text.\n </Alert>\n {textField(\"Text\", activeComponent.content?.text, (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n text: e.target.value,\n }),\n )}\n </FormAccordion>\n\n <FormAccordion title=\"Typography\" expanded={expandedAccordion === 'Typography'} onChange={handleAccordionChange('Typography')}>\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 {selectField(\n \"Alignment\",\n activeComponent.content?.alignment || \"LEFT\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n alignment: e.target.value,\n }),\n CONTENT_ALIGNMENT_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 </FormAccordion>\n </>\n );\n }\n\n if (activeComponent.type === \"DIVIDER\") {\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 Divider Configuration\n </Typography>\n <FormAccordion title=\"Appearance\" expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\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 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 {selectField(\n \"Opacity\",\n activeComponent.style?.opacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </FormAccordion>\n </>\n );\n }\n\n if (activeComponent.type === \"WORKSPACE_TAB\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Tab Settings\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, pt: 1 }}>\n {textField(\n \"Tab Title\",\n activeComponent.name,\n (e) => {\n if (onUpdateWorkspaceTab) {\n onUpdateWorkspaceTab(activeComponent.index, { name: e.target.value });\n }\n }\n )}\n\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 0.5 }}>\n Tab Icon\n </Typography>\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={FontAwesomeIconsNames.includes(activeComponent.icon) ? activeComponent.icon : null}\n onChange={(event, newValue) => {\n if (onUpdateWorkspaceTab) {\n onUpdateWorkspaceTab(activeComponent.index, { icon: 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 {...params} label=\"Select FontAwesome Icon\" variant=\"outlined\" />\n )}\n />\n\n <Box sx={{ display: 'flex', alignItems: 'center', mt: 1, gap: 2 }}>\n <Typography variant=\"body2\" color=\"textSecondary\">Or use a custom SVG:</Typography>\n <Button variant=\"outlined\" size=\"small\" component=\"label\">\n Upload SVG\n <input\n type=\"file\"\n accept=\".svg\"\n hidden\n onChange={(e) => {\n const file = e.target.files && e.target.files[0];\n if (file) {\n const extension = String(file.name?.split(\".\").pop() || \"\").toLowerCase();\n if (extension !== \"svg\" && file.type !== \"image/svg+xml\") {\n showToast({ type: \"warn\", message: \"Only SVG icon files can be uploaded.\" });\n return;\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({ type: \"warn\", message: \"Uploaded file is not a valid SVG icon.\" });\n return;\n }\n if (onUpdateWorkspaceTab) {\n onUpdateWorkspaceTab(activeComponent.index, { icon: svgContent });\n }\n showToast({ type: \"success\", message: \"SVG icon loaded successfully.\" });\n };\n reader.onerror = () => {\n showToast({ type: \"error\", message: \"Error reading SVG file.\" });\n };\n reader.readAsText(file);\n }\n e.target.value = null; // reset\n }}\n />\n </Button>\n {activeComponent.icon && !FontAwesomeIconsNames.includes(activeComponent.icon) && (\n <Typography variant=\"caption\" color=\"success.main\" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <FontAwesomeIcon icon={faBox} size=\"sm\" /> SVG Selected\n </Typography>\n )}\n </Box>\n </Box>\n </Box>\n </>\n );\n }\n\n if (activeComponent.type === \"ROW\" && activeComponent.blockName === \"Horizontal Spacer\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Horizontal Spacer Configuration\n </Typography>\n <FormAccordion title=\"Spacing\" expanded={expandedAccordion === 'Spacing'} onChange={handleAccordionChange('Spacing')}>\n <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n Set height to use this row as a vertical spacer.\n </Alert>\n {textField(\n \"Height (px)\",\n activeComponent.style?.height || \"\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n height: e.target.value,\n }),\n \"number\"\n )}\n </FormAccordion>\n </>\n );\n }\n\n if (activeComponent.type === \"COLUMN\" && activeComponent.blockName === \"Vertical Spacer\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Vertical Spacer Configuration\n </Typography>\n <FormAccordion title=\"Spacing\" expanded={expandedAccordion === 'Spacing'} onChange={handleAccordionChange('Spacing')}>\n <Alert severity=\"info\" sx={{ mb: 2, fontSize: '0.85rem' }}>\n Set width to use this column as a horizontal spacer.\n </Alert>\n {textField(\n \"Width (px)\",\n activeComponent.style?.width || \"\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n width: e.target.value,\n }),\n \"number\"\n )}\n </FormAccordion>\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 const renderVisibilityConfig = () => {\n if (!activeComponent) return null;\n\n const isSpacer =\n (activeComponent.type === \"ROW\" && activeComponent.blockName === \"Horizontal Spacer\") ||\n (activeComponent.type === \"COLUMN\" && activeComponent.blockName === \"Vertical Spacer\");\n\n if (isSpacer) return null;\n\n const layoutContainerTypes = [\n \"SECTION\", \"ROW\", \"COLUMN\", \"FEATURE_CARD\", \"CAROUSEL\", \"SEARCH_BAR\", \"TEXT\", \"DIVIDER\"\n ];\n\n if (!layoutContainerTypes.includes(activeComponent.type)) return null;\n\n return (\n <FormAccordion\n title=\"Visibility Conditions\"\n expanded={expandedAccordion === 'Visibility'} \n onChange={handleAccordionChange('Visibility')}\n >\n <VisibilityConditionEditor\n value={activeComponent.visibilityConditions}\n onChange={(conditions) =>\n onUpdate(activeComponent.id, \"visibilityConditions\", conditions)\n }\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </FormAccordion>\n );\n };\n\n const imagePickerDialogs = activeComponent && (\n <>\n <ImagePickerDialog\n open={imagePickerState.open}\n onClose={() =>\n setImagePickerState({ open: false, target: null, imageIndex: null })\n }\n documentMasterImages={documentMasterImages}\n onImageUpload={onImageUpload}\n currentImageUuid={\n imagePickerState.target === \"carousel\" &&\n imagePickerState.imageIndex !== null\n ? (activeComponent.images || [])[imagePickerState.imageIndex]\n ?.documentUuid || \"\"\n : imagePickerState.target === \"backgroundImage\"\n ? activeComponent?.backgroundImage?.documentUuid || \"\"\n : \"\"\n }\n onSelect={(selectedUuid) => {\n if (\n imagePickerState.target === \"carousel\" &&\n imagePickerState.imageIndex !== null\n ) {\n onUpdateCarouselImage(\n activeComponent.id,\n imagePickerState.imageIndex,\n \"documentUuid\",\n selectedUuid,\n );\n } else if (imagePickerState.target === \"backgroundImage\") {\n onUpdate(activeComponent.id, \"backgroundImage\", {\n ...(activeComponent.backgroundImage || {}),\n documentUuid: selectedUuid,\n });\n }\n }}\n />\n\n {previewImg && (\n <FullImagePreviewDialog\n open={!!previewImg}\n onClose={() => setPreviewImg(null)}\n img={previewImg}\n />\n )}\n </>\n );\n\n if (hideGlobalConfig) {\n return (\n <Box>\n {renderSelectedConfig()}\n {renderVisibilityConfig()}\n {renderFeatureConfiguration()}\n {renderFeatureSelection()}\n {imagePickerDialogs}\n </Box>\n );\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 {renderVisibilityConfig()}\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 {renderFeatureConfiguration()}\n {renderFeatureSelection()}\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 && !activeComponent && renderFeatureConfiguration()}\n {!hideGlobalConfig && !activeComponent && renderFeatureSelection()}\n {!hideGlobalConfig && renderGlobalConfig()}\n {imagePickerDialogs}\n </Paper>\n );\n};\n\nInspectorPanel.propTypes = {\n activeComponent: PropTypes.object,\n onUpdate: PropTypes.func.isRequired,\n onDeselect: PropTypes.func.isRequired,\n mobileQueries: PropTypes.array,\n appBarConfig: PropTypes.object,\n onAppBarUpdate: PropTypes.func,\n bottomNavigationConfig: PropTypes.object,\n onBottomNavigationSave: PropTypes.func,\n onAddCarouselImage: PropTypes.func,\n onUpdateCarouselImage: PropTypes.func,\n onRemoveCarouselImage: PropTypes.func,\n documentMasterImages: PropTypes.array,\n featureOptions: PropTypes.array,\n onImageUpload: PropTypes.func,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n hideGlobalConfig: PropTypes.bool,\n separatedGroups: PropTypes.array,\n separatedFeatures: PropTypes.array,\n activeTabId: PropTypes.string,\n onAssignFeature: PropTypes.func,\n onUpdateWorkspaceTab: PropTypes.func,\n programsFeatures: PropTypes.array,\n onUpdateProgramFeature: PropTypes.func,\n pageParamsByFeature: PropTypes.object,\n};\n\nexport default InspectorPanel;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Box,\n Typography,\n Button,\n TextField,\n MenuItem,\n IconButton,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n FormControl,\n Select,\n Grid,\n Autocomplete,\n InputAdornment,\n InputLabel,\n} from '@mui/material';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { generateUUID } from '@/utils/UUIDgenerator';\nimport { ON_LOAD_DROPDOWN_VALUES } from '@/utils/FormConstants';\n\nconst extractPathVariables = (path) => {\n if (!path) return [];\n const regex = /\\{([^}]+)\\}/g;\n const matches = [];\n let match;\n while ((match = regex.exec(path)) !== null) {\n if (!matches.includes(match[1])) {\n matches.push(match[1]);\n }\n }\n return matches;\n};\n\nconst extractQueryParams = (path) => {\n if (!path) return [];\n const regex = /#([^#]+)#/g;\n const matches = [];\n let match;\n while ((match = regex.exec(path)) !== null) {\n if (!matches.includes(match[1])) {\n matches.push(match[1]);\n }\n }\n return matches;\n};\n\nconst SortableStepItem = ({ step, index, mobileQueries, onlineQueries, updateStep, removeStep, isDuplicate }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: step.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n marginBottom: '12px',\n backgroundColor: 'white',\n border: '1px solid var(--color-gray3)',\n borderRadius: '8px',\n zIndex: isDragging ? 100 : 1,\n };\n\n const isNewStep = !step.key && !step.queryCode && !step.apiPath;\n const [expanded, setExpanded] = useState(isNewStep);\n\n const handleKeyChange = (e) => {\n let value = e.target.value.toUpperCase().replace(/\\s/g, '');\n updateStep(step.id, 'key', value);\n };\n\n const displayApiPath = step.apiPath || '';\n\n const handleApiPathChange = (e) => {\n const newPath = e.target.value;\n\n // Sync path parameters\n const detectedPaths = extractPathVariables(newPath);\n const existingPaths = step.apiPathParams || [];\n const newPathParams = detectedPaths.map((key) => {\n const found = existingPaths.find((p) => p.paramKey === key);\n return { paramKey: key, paramValue: found ? found.paramValue : '' };\n });\n\n // Sync query parameters\n const detectedQueries = extractQueryParams(newPath);\n const existingQueries = step.apiQueryParams || [];\n const newQueryParams = detectedQueries.map((key) => {\n const found = existingQueries.find((p) => p.paramKey === key);\n return { paramKey: key, paramValue: found ? found.paramValue : '' };\n });\n\n updateStep(step.id, {\n apiPath: newPath,\n apiPathParams: newPathParams,\n apiQueryParams: newQueryParams,\n });\n };\n\n const detectedPaths = extractPathVariables(step.apiPath);\n const pathParams = step.apiPathParams || detectedPaths.map((key) => ({ paramKey: key, paramValue: '' }));\n\n const detectedQueries = extractQueryParams(step.apiPath);\n const queryParams = step.apiQueryParams || detectedQueries.map((key) => ({ paramKey: key, paramValue: '' }));\n\n const handlePathParamsChange = (paramIndex, field, value) => {\n const currentParams = step.apiPathParams || pathParams;\n const newParams = [...currentParams];\n newParams[paramIndex] = { ...newParams[paramIndex], [field]: value };\n updateStep(step.id, 'apiPathParams', newParams);\n };\n\n const handleQueryParamsChange = (paramIndex, field, value) => {\n const currentParams = step.apiQueryParams || queryParams;\n const newParams = [...currentParams];\n newParams[paramIndex] = { ...newParams[paramIndex], [field]: value };\n updateStep(step.id, 'apiQueryParams', newParams);\n };\n\n const handleParamChange = (paramIndex, field, value) => {\n const newParams = [...(step.apiRequestBodyParams || [])];\n newParams[paramIndex] = { ...newParams[paramIndex], [field]: value };\n updateStep(step.id, 'apiRequestBodyParams', newParams);\n };\n\n const addParam = () => {\n const newParams = [...(step.apiRequestBodyParams || []), { paramKey: '', paramValue: '' }];\n updateStep(step.id, 'apiRequestBodyParams', newParams);\n };\n\n const removeParam = (paramIndex) => {\n const newParams = (step.apiRequestBodyParams || []).filter((_, i) => i !== paramIndex);\n updateStep(step.id, 'apiRequestBodyParams', newParams);\n };\n\n const activeQueries = step.queryType === 'ONLINE' ? onlineQueries : mobileQueries;\n const queryOptions = activeQueries.map((q) => q.code || q);\n\n return (\n <Box ref={setNodeRef} style={style}>\n <Accordion\n expanded={expanded}\n onChange={(e, isExpanded) => setExpanded(isExpanded)}\n disableGutters\n sx={{ borderRadius: '8px', '&:before': { display: 'none' }, boxShadow: 'none' }}\n >\n <AccordionSummary\n sx={{\n backgroundColor: '#f8fafc',\n borderRadius: '8px 8px 0 0',\n minHeight: '48px',\n borderBottom: '1px solid var(--color-gray3)',\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', width: '100%', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Box {...attributes} {...listeners} sx={{ cursor: 'grab', display: 'flex', color: 'var(--color-gray2)' }}>\n <FontAwesomeIcons iconName=\"faGripVertical\" />\n </Box>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold' }}>\n Step {index + 1}: {step.key || 'Unnamed'}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={(e) => {\n e.stopPropagation();\n removeStep(step.id);\n }}\n >\n <FontAwesomeIcons iconName=\"faTrashCan\" />\n </IconButton>\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{ p: 2 }}>\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6}>\n <TextField\n fullWidth\n size=\"small\"\n label=\"Key *\"\n value={step.key || ''}\n onChange={handleKeyChange}\n placeholder=\"UNIQUE_KEY_NO_SPACES\"\n error={!step.key || isDuplicate}\n helperText={!step.key ? 'Key is mandatory' : isDuplicate ? 'Duplicate key found' : ''}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <FormControl fullWidth size=\"small\">\n <Select\n value={step.configType || ''}\n onChange={(e) => updateStep(step.id, 'configType', e.target.value)}\n displayEmpty\n >\n <MenuItem value=\"\" disabled>\n Select Config Type\n </MenuItem>\n <MenuItem value=\"QUERY\">Query</MenuItem>\n <MenuItem value=\"API\">API</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n\n {step.configType === 'QUERY' && (\n <>\n <Grid item xs={12} sm={6}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id={`query-type-label-${step.id}`}>Query Type</InputLabel>\n <Select\n labelId={`query-type-label-${step.id}`}\n label=\"Query Type\"\n value={step.queryType || 'OFFLINE'}\n onChange={(e) =>\n updateStep(step.id, { queryType: e.target.value, queryCode: '' })\n }\n >\n <MenuItem value=\"ONLINE\">ONLINE</MenuItem>\n <MenuItem value=\"OFFLINE\">OFFLINE</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Autocomplete\n options={queryOptions}\n size=\"small\"\n fullWidth\n value={step.queryCode || null}\n onChange={(event, newValue) => updateStep(step.id, 'queryCode', newValue || '')}\n renderOption={(props, option) => (\n <li {...props}>\n <Typography variant=\"body2\" sx={{ wordBreak: 'break-all' }}>\n {option}\n </Typography>\n </li>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select Query\"\n variant=\"outlined\"\n placeholder=\"Search or select query\"\n />\n )}\n />\n </Grid>\n </>\n )}\n\n {step.configType === 'API' && (\n <Grid item xs={12}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1.5,\n p: 2,\n mb: 2.5,\n backgroundColor: '#eff6ff',\n border: '1px solid #bfdbfe',\n borderRadius: '8px',\n }}\n >\n <Box sx={{ color: '#1d4ed8', mt: 0.25 }}>\n <FontAwesomeIcons iconName=\"faCircleInfo\" />\n </Box>\n <Box>\n <Typography variant=\"body2\" sx={{ color: '#1e3a8a', fontWeight: 500 }}>\n You can add{' '}\n <Box\n component=\"span\"\n sx={{\n px: 1,\n py: 0.2,\n backgroundColor: 'white',\n border: '1px solid #93c5fd',\n borderRadius: '4px',\n color: '#1d4ed8',\n fontSize: '0.75rem',\n fontWeight: 'bold',\n }}\n >\n Path Variables\n </Box>{' '}\n inside{' '}\n <Box component=\"span\" sx={{ fontWeight: 'bold', color: '#1e3a8a' }}>\n {'{}'}\n </Box>\n , and{' '}\n <Box\n component=\"span\"\n sx={{\n px: 1,\n py: 0.2,\n backgroundColor: 'white',\n border: '1px solid #93c5fd',\n borderRadius: '4px',\n color: '#1d4ed8',\n fontSize: '0.75rem',\n fontWeight: 'bold',\n }}\n >\n Query Param Names\n </Box>{' '}\n inside{' '}\n <Box component=\"span\" sx={{ fontWeight: 'bold', color: '#1e3a8a' }}>\n ##\n </Box>\n .\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{ color: '#1e40af', display: 'block', mt: 1, fontFamily: 'monospace' }}\n >\n Example: /api/resource/{'{pathVariable}'}?param=#paramName#\n </Typography>\n </Box>\n </Box>\n\n <Grid container spacing={2} sx={{ mb: 3 }}>\n <Grid item xs={12} sm={3}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id={`api-method-label-${step.id}`}>Method</InputLabel>\n <Select\n labelId={`api-method-label-${step.id}`}\n label=\"Method\"\n value={step.apiMethod || 'GET'}\n onChange={(e) => updateStep(step.id, 'apiMethod', e.target.value)}\n >\n <MenuItem value=\"GET\">GET</MenuItem>\n <MenuItem value=\"POST\">POST</MenuItem>\n <MenuItem value=\"PUT\">PUT</MenuItem>\n <MenuItem value=\"DELETE\">DELETE</MenuItem>\n <MenuItem value=\"PATCH\">PATCH</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={12} sm={9}>\n <TextField\n fullWidth\n size=\"small\"\n label=\"API Path\"\n value={displayApiPath}\n onChange={handleApiPathChange}\n placeholder=\"Enter API Path\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ '& .MuiTypography-root': { color: '#3b82f6', fontWeight: 600 } }}>\n /api\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n\n {/* Path Variables Section */}\n {pathParams.length > 0 && (\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', mb: 1, color: 'var(--color-text1)' }}>\n Path Variables\n </Typography>\n {pathParams.map((param, pIndex) => (\n <Box key={`path-${pIndex}`} sx={{ display: 'flex', gap: 2, mb: 1.5, alignItems: 'center' }}>\n <TextField\n size=\"small\"\n label=\"Variable Key\"\n value={param.paramKey || ''}\n disabled\n sx={{ flex: 1, backgroundColor: '#f1f5f9' }}\n />\n <Autocomplete\n freeSolo\n options={ON_LOAD_DROPDOWN_VALUES}\n value={param.paramValue || ''}\n onChange={(event, newValue) => {\n handlePathParamsChange(pIndex, 'paramValue', newValue || '');\n }}\n onInputChange={(event, newInputValue) => {\n handlePathParamsChange(pIndex, 'paramValue', newInputValue || '');\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"Mapping Value\"\n />\n )}\n sx={{ flex: 1 }}\n />\n </Box>\n ))}\n </Box>\n )}\n\n {/* Query Parameters Section */}\n {queryParams.length > 0 && (\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', mb: 1, color: 'var(--color-text1)' }}>\n Query Parameters\n </Typography>\n {queryParams.map((param, pIndex) => (\n <Box key={`query-${pIndex}`} sx={{ display: 'flex', gap: 2, mb: 1.5, alignItems: 'center' }}>\n <TextField\n size=\"small\"\n label=\"Parameter Key\"\n value={param.paramKey || ''}\n disabled\n sx={{ flex: 1, backgroundColor: '#f1f5f9' }}\n />\n <Autocomplete\n freeSolo\n options={ON_LOAD_DROPDOWN_VALUES}\n value={param.paramValue || ''}\n onChange={(event, newValue) => {\n handleQueryParamsChange(pIndex, 'paramValue', newValue || '');\n }}\n onInputChange={(event, newInputValue) => {\n handleQueryParamsChange(pIndex, 'paramValue', newInputValue || '');\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"Mapping Value\"\n />\n )}\n sx={{ flex: 1 }}\n />\n </Box>\n ))}\n </Box>\n )}\n\n {/* Request Body Section */}\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1.5 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: 'var(--color-text1)' }}>\n Request Body\n </Typography>\n <Button size=\"small\" variant=\"outlined\" onClick={addParam} sx={{ textTransform: 'none' }}>\n Add Body Parameter\n </Button>\n </Box>\n {!step.apiRequestBodyParams || step.apiRequestBodyParams.length === 0 ? (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 2, fontStyle: 'italic' }}>\n No body parameters configured.\n </Typography>\n ) : (\n (step.apiRequestBodyParams || []).map((param, pIndex) => (\n <Box key={`body-${pIndex}`} sx={{ display: 'flex', gap: 1.5, mb: 1.5, alignItems: 'center' }}>\n <TextField\n size=\"small\"\n placeholder=\"Key\"\n value={param.paramKey || ''}\n onChange={(e) => handleParamChange(pIndex, 'paramKey', e.target.value)}\n sx={{ flex: 1 }}\n />\n <Autocomplete\n freeSolo\n options={ON_LOAD_DROPDOWN_VALUES}\n value={param.paramValue || ''}\n onChange={(event, newValue) => {\n handleParamChange(pIndex, 'paramValue', newValue || '');\n }}\n onInputChange={(event, newInputValue) => {\n handleParamChange(pIndex, 'paramValue', newInputValue || '');\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"Value\"\n />\n )}\n sx={{ flex: 1 }}\n />\n <IconButton size=\"small\" color=\"error\" onClick={() => removeParam(pIndex)}>\n <FontAwesomeIcons iconName=\"faTrashCan\" />\n </IconButton>\n </Box>\n ))\n )}\n </Grid>\n )}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Box>\n );\n};\n\nSortableStepItem.propTypes = {\n step: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n mobileQueries: PropTypes.array,\n onlineQueries: PropTypes.array,\n updateStep: PropTypes.func.isRequired,\n removeStep: PropTypes.func.isRequired,\n isDuplicate: PropTypes.bool,\n};\n\nexport default function OnLoadConfigurationPanel({\n onLoadSteps,\n setOnLoadSteps,\n mobileQueries = [],\n onlineQueries = [],\n isModal = false,\n}) {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n const [isExpanded, setIsExpanded] = useState(true);\n\n const addStep = () => {\n setIsExpanded(true);\n setOnLoadSteps([\n ...onLoadSteps,\n {\n id: generateUUID(),\n key: '',\n configType: 'QUERY',\n queryType: 'OFFLINE',\n queryCode: '',\n },\n ]);\n };\n\n const updateStep = (id, fieldOrFields, value) => {\n setOnLoadSteps((prevSteps) =>\n prevSteps.map((step) => {\n if (step.id !== id) return step;\n\n let updatedStep = { ...step };\n if (typeof fieldOrFields === 'string') {\n updatedStep[fieldOrFields] = value;\n } else {\n updatedStep = { ...updatedStep, ...fieldOrFields };\n }\n\n const updatedConfigType =\n typeof fieldOrFields === 'string'\n ? fieldOrFields === 'configType'\n ? value\n : null\n : fieldOrFields.configType;\n if (updatedConfigType !== undefined && updatedConfigType !== null) {\n if (updatedConfigType === 'QUERY') {\n delete updatedStep.apiPath;\n delete updatedStep.apiMethod;\n delete updatedStep.apiRequestBodyParams;\n delete updatedStep.apiPathParams;\n delete updatedStep.apiQueryParams;\n updatedStep.queryType = step.queryType || 'OFFLINE';\n } else if (updatedConfigType === 'API') {\n delete updatedStep.queryType;\n delete updatedStep.queryCode;\n updatedStep.apiPath = step.apiPath || '';\n updatedStep.apiMethod = step.apiMethod || 'GET';\n updatedStep.apiRequestBodyParams = step.apiRequestBodyParams || [];\n updatedStep.apiPathParams = step.apiPathParams || [];\n updatedStep.apiQueryParams = step.apiQueryParams || [];\n }\n }\n\n return updatedStep;\n })\n );\n };\n\n const removeStep = (id) => {\n setOnLoadSteps(onLoadSteps.filter((step) => step.id !== id));\n };\n\n const handleDragEnd = (event) => {\n const { active, over } = event;\n if (active.id !== over.id) {\n setOnLoadSteps((items) => {\n const oldIndex = items.findIndex((i) => i.id === active.id);\n const newIndex = items.findIndex((i) => i.id === over.id);\n return arrayMove(items, oldIndex, newIndex);\n });\n }\n };\n\n const content = (\n <>\n {onLoadSteps.length === 0 ? (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mb: 2 }}>\n No OnLoad steps configured.\n </Typography>\n ) : (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={onLoadSteps.map((s) => s.id)} strategy={verticalListSortingStrategy}>\n {onLoadSteps.map((step, index) => {\n const isDuplicate = onLoadSteps.filter((s) => s.key && s.key === step.key).length > 1;\n return (\n <SortableStepItem\n key={step.id}\n step={step}\n index={index}\n mobileQueries={mobileQueries}\n onlineQueries={onlineQueries}\n updateStep={updateStep}\n removeStep={removeStep}\n isDuplicate={isDuplicate}\n />\n );\n })}\n </SortableContext>\n </DndContext>\n )}\n </>\n );\n\n if (isModal) {\n return <Box sx={{ mt: 1 }}>{content}</Box>;\n }\n\n return (\n <Box sx={{ mt: 2 }}>\n <Accordion\n expanded={isExpanded}\n onChange={(_, expanded) => setIsExpanded(expanded)}\n disableGutters\n sx={{\n borderRadius: '8px',\n '&:before': { display: 'none' },\n border: '1px solid var(--color-gray3)',\n boxShadow: 'none',\n }}\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcons iconName=\"faChevronDown\" />}\n sx={{ '& .MuiAccordionSummary-content': { alignItems: 'center', justifyContent: 'space-between', mr: 2 } }}\n >\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 'bold' }}>\n OnLoad Configuration\n </Typography>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n addStep();\n }}\n >\n Add Query/API\n </Button>\n </AccordionSummary>\n <AccordionDetails sx={{ p: 2 }}>{content}</AccordionDetails>\n </Accordion>\n </Box>\n );\n}\n\nOnLoadConfigurationPanel.propTypes = {\n onLoadSteps: PropTypes.array.isRequired,\n setOnLoadSteps: PropTypes.func.isRequired,\n mobileQueries: PropTypes.array,\n onlineQueries: PropTypes.array,\n isModal: PropTypes.bool,\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 useSensor,\n useSensors,\n PointerSensor,\n} from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Button,\n Divider,\n FormControl,\n FormControlLabel,\n Grid2,\n Paper,\n Switch,\n Typography,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n List,\n ListItem,\n ListItemText,\n IconButton,\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 { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faMagnifyingGlass, faTrashCan, faGear, faTimes } 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} from \"@/utils/FormConstants\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport BlockLibrary from \"./BlockLibrary\";\nimport InspectorPanel from \"./InspectorPanel\";\nimport OnLoadConfigurationPanel from \"./OnLoadConfigurationPanel\";\nimport {\n addChildToParent,\n addNodeBeforeTarget,\n autoConfigureFeatureCardFromChild,\n clearFeatureCardConfig,\n createFeatureNode,\n createLayoutNode,\n findNodeById,\n findParentNodeInfo,\n getDashboardDropValidationMessage,\n hydrateDashboardLayout,\n moveNodeBeforeTarget,\n moveNodeToParent,\n removeNodeById,\n sanitizeDashboardLayout,\n findEmptyDashboardLayoutNode,\n findAllEmptyDashboardLayoutNodes,\n getComponentLabel,\n updateNodeById,\n duplicateNode,\n moveNodeUp,\n moveNodeDown,\n} from \"./dashboardLayoutUtils\";\nimport { getPreferredLanguage } from \"../../services/Users\";\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 (normalizedConfig.greetings.greetingVisible) {\n normalizedConfig.locationVisible = false;\n normalizedConfig.healthInfrastructureVisible = false;\n } else if (normalizedConfig.locationVisible && normalizedConfig.healthInfrastructureVisible) {\n normalizedConfig.healthInfrastructureVisible = false;\n }\n\n return normalizedConfig;\n};\n\nexport default function AddMenuConfiguration() {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 4,\n },\n })\n );\n const location = useLocation();\n const state = location.state;\n const queryParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\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 [onlineQueries, setOnlineQueries] = useState([]);\n const [onLoadSteps, setOnLoadSteps] = useState([]);\n const [documentMasterImages, setDocumentMasterImages] = useState([]);\n const [masterFeatureList, setMasterFeatureList] = useState({});\n const [groupedFeatures, setGroupedFeatures] = useState([]);\n const [pageParamsByFeature, setPageParamsByFeature] = useState({});\n const [backModalOpen, setBackModalOpen] = useState(false);\n const [isPreviewMode, setIsPreviewMode] = useState(false);\n const [tabErrorCounts, setTabErrorCounts] = useState({});\n const [validationAttempted, setValidationAttempted] = useState(false);\n const [onLoadModalOpen, setOnLoadModalOpen] = useState(false);\n const [tempOnLoadSteps, setTempOnLoadSteps] = useState([]);\n\n const [appBarConfig, setAppBarConfig] = useState(normalizeAppBarConfig(defaultAppBarConfig));\n const [bottomNavigationConfig, setBottomNavigationConfig] = useState(defaultBottomNavigationConfig);\n const [preferredLanguages, setPreferredLanguages] = useState([]);\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 await fetchPreferredLanguages();\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 const fetchPreferredLanguages = async () => {\n try {\n const response = await getPreferredLanguage();\n if (response && response.data) {\n setPreferredLanguages(response.data);\n }\n } catch (error) {\n console.error(\"Failed to fetch preferred languages\", error);\n }\n };\n useEffect(() => {\n if (Object.keys(masterFeatureList).length > 0 && queryParams.get(\"id\") && state?.mobileMenuList) {\n const configJson = state?.mobileMenuList?.configJson;\n let activeConfig = configJson;\n let loadedTabs = [];\n\n if (configJson?.tabs && Array.isArray(configJson.tabs)) {\n loadedTabs = configJson.tabs;\n activeConfig = loadedTabs[0] || {};\n }\n\n const reconstructed = reconstructAppState(activeConfig, masterFeatureList, groupedFeatures);\n\n setAppConfiguration(reconstructed.appConfiguration);\n setTabStatus(reconstructed.tabStatus);\n setSelectedForm(reconstructed.selectedForm);\n setAppBarConfig(reconstructed.appBar);\n setBottomNavigationConfig(reconstructed.bottomNavigation);\n formCtrl.setValue(\"isAttendanceRequired\", reconstructed.isAttendanceRequired);\n setOnLoadSteps(reconstructed.onLoadSteps || []);\n\n if (loadedTabs.length > 0) {\n const hydratedTabs = loadedTabs.map((tabData) => {\n const tabReconstructed = reconstructAppState(tabData, masterFeatureList, groupedFeatures);\n return {\n id: tabData.id,\n name: tabData.name,\n icon: tabData.icon,\n appBarConfig: tabReconstructed.appBar,\n bottomNavigationConfig: tabReconstructed.bottomNavigation,\n appConfiguration: tabReconstructed.appConfiguration,\n tabStatus: tabReconstructed.tabStatus,\n };\n });\n setWorkspaceTabs(hydratedTabs);\n setActiveWorkspaceIndex(0);\n }\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 try {\n let allOnlineQuery = {\n code: \"get_all_online_query\",\n parameters: {},\n };\n const onlineResponse = (await execute(allOnlineQuery)).data.result;\n setOnlineQueries(onlineResponse);\n } catch (error) {\n console.warn(\"Could not fetch online queries\", error);\n }\n };\n const allowedImageExtensions = useMemo(() => new Set([\"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\", \"bitmap\"]), []);\n\n const uploadDocument = (params) =>\n api.post(\"/document/uploaddocumentV2?isTemporary=false\", { ...params }, { type: \"fileUpload\", showLoader: false });\n\n const fetchDocumentMasterImages = async () => {\n const normalizeExtension = (document, fileName) => {\n const extension = document.extension || document.file_extension || document.fileExtension;\n const extensionFromName = fileName?.includes(\".\") ? fileName.split(\".\").pop() : \"\";\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 = document.document_uuid || document.documentUuid || document.uuid;\n const name =\n document.file_name || document.actual_file_name || document.name || document.original_file_name || uuid;\n const extension = normalizeExtension(document, name);\n\n return {\n id: document.id || null,\n uuid,\n name,\n extension,\n fileNameTh: document.file_name_th || document.fileNameTh || null,\n };\n })\n .filter((document) => document.uuid && allowedImageExtensions.has(document.extension));\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 (!file.type?.startsWith(\"image/\") || !allowedImageExtensions.has(extension)) {\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 = data?.document_uuid || data?.documentUuid || data?.uuid || documentUUID;\n const id = data?.id || data?.document_id || null;\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 = { id, uuid, name: file.name, extension };\n const existingDocuments = (prev || []).filter((document) => document.uuid !== uuid);\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 await fetchPageParamsByRole(roleId);\n }\n };\n\n const fetchPageParamsByRole = async (roleId) => {\n if (!roleId) return;\n try {\n const response = (\n await execute({\n code: \"fetch_page_params_by_role_id\",\n parameters: {\n id: roleId,\n },\n })\n ).data;\n\n if (response.result) {\n const map = {};\n response.result.forEach((row) => {\n const featureId = row.feature_id ?? row.featureId;\n if (featureId === null || featureId === undefined) return;\n\n const rawPageParams = row.page_params ?? row.pageParams;\n const parsedPageParams = rawPageParams\n ? String(rawPageParams)\n .split(\",\")\n .map((param) => param.trim())\n .filter(Boolean)\n : [];\n\n map[String(featureId)] = {\n formCode: row.form_code ?? row.formCode ?? \"\",\n pageParams: parsedPageParams,\n };\n });\n setPageParamsByFeature(map);\n }\n } catch (error) {\n console.error(\"Failed to fetch page params by role\", error);\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((f) => f.type === \"GROUP\" && f.id === id);\n if (group) return group;\n\n return null;\n };\n const hydrateFeature = (canonicalFeature, parentInstanceId, masterFeatureList, groupedFeatures) => {\n const masterData = findMetadataById(canonicalFeature.id, masterFeatureList, groupedFeatures);\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(menuItem.id, masterFeatureList, groupedFeatures);\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\" ? parentInstanceId : `${parentInstanceId}_${masterData.id}`;\n\n return {\n ...masterData,\n id: masterData.id,\n uuid: instanceUuid,\n instanceId: `${instancePrefix}_${instanceUuid}`,\n navigationAction: canonicalFeature.navigationAction || \"\",\n pageParams: canonicalFeature.pageParams || [],\n };\n }\n return null;\n };\n\n const hydrateLayout = (canonicalLayout, tabId, masterFeatureList, groupedFeatures) => {\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) => hydrateFeature(f, parentInstanceId, masterFeatureList, groupedFeatures))\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) => hydrateFeature(f, sectionInstanceId, masterFeatureList, groupedFeatures))\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 = canonicalConfig?.isAttendanceRequired?.value || false;\n const appBar = normalizeAppBarConfig(canonicalConfig?.appBar);\n const onLoadSteps = canonicalConfig?.onLoadSteps || [];\n const bottomNavigation = Array.isArray(canonicalConfig?.bottomNavigation?.items)\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(tabData.layout, tabId, masterFeatureList, groupedFeatures);\n } else if (tabId === \"programs\" && tabData?.features) {\n const hydratedFeatures = hydrateLayout(tabData.features, tabId, masterFeatureList, groupedFeatures);\n\n newAppConfiguration[tabId] = {\n features: hydratedFeatures,\n };\n } else if (tabData?.features) {\n newAppConfiguration[tabId] = hydrateLayout(tabData?.features, tabId, masterFeatureList, groupedFeatures);\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 onLoadSteps,\n };\n };\n const transformListData = (data) => {\n const groupedList = [];\n const masterFeatureMap = {};\n const seenStandaloneIds = new Set();\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 const uniqueMenus = [];\n const seenMenuIds = new Set();\n processedMenus.forEach((menu) => {\n if (menu.id != null && !seenMenuIds.has(menu.id)) {\n seenMenuIds.add(menu.id);\n uniqueMenus.push(menu);\n }\n });\n\n groupedList.push({\n uuid: generateUUID(),\n id: item.id,\n name: item.name,\n icon: item.icon || \"\",\n type: \"GROUP\",\n menus: uniqueMenus,\n });\n } else {\n processedMenus.forEach((menu) => {\n if (menu.id != null && !seenStandaloneIds.has(menu.id)) {\n seenStandaloneIds.add(menu.id);\n groupedList.push(menu);\n }\n });\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 const sanitized = { id: feature.id };\n if (Array.isArray(feature.pageParams) && feature.pageParams.length > 0) {\n sanitized.navigationAction = feature.navigationAction || \"\";\n sanitized.pageParams = feature.pageParams;\n }\n return sanitized;\n }\n return null;\n };\n\n const generateTabConfig = (tabData) => {\n const finalConfig = {\n appBar: normalizeAppBarConfig(tabData.appBarConfig),\n bottomNavigation: {\n items: [...(tabData.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 = tabData.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 = tabData.appConfiguration?.[tabId] || [];\n tabEntry.layout = sanitizeDashboardLayout(rawLayout);\n } else if (tabId === \"programs\") {\n const rawFeatures = tabData.appConfiguration?.[tabId]?.features || [];\n\n if (rawFeatures.length > 0) {\n tabEntry.features = rawFeatures.map(sanitizeFeature).filter((f) => f !== null);\n }\n } else if (tabId !== \"analytics\") {\n const rawFeatures = tabData.appConfiguration?.[tabId] || [];\n\n if (Array.isArray(rawFeatures)) {\n tabEntry.features = rawFeatures.map(sanitizeFeature).filter((f) => f !== null);\n }\n }\n }\n }\n\n finalConfig[tabId] = tabEntry;\n });\n\n return finalConfig;\n };\n\n const createCanonicalConfig = () => {\n if (workspaceTabs.length > 0) {\n const tabsToSave = [...workspaceTabs];\n if (tabsToSave[activeWorkspaceIndex]) {\n tabsToSave[activeWorkspaceIndex] = {\n ...tabsToSave[activeWorkspaceIndex],\n ...getCurrentWorkspaceData(),\n };\n }\n\n return {\n isAttendanceRequired: {\n value: formCtrl.getValues(\"isAttendanceRequired\"),\n },\n onLoadSteps,\n tabs: tabsToSave.map((tab) => ({\n id: tab.id,\n name: tab.name,\n icon: tab.icon,\n ...generateTabConfig(tab),\n })),\n };\n } else {\n const baseConfig = generateTabConfig(getCurrentWorkspaceData());\n return {\n isAttendanceRequired: {\n value: formCtrl.getValues(\"isAttendanceRequired\"),\n },\n onLoadSteps,\n ...baseConfig,\n };\n }\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((form) => form.code === selectedCode);\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\n // -- Multi-Workspace State --\n const [workspaceTabs, setWorkspaceTabs] = useState([]);\n const [pasteValidationModal, setPasteValidationModal] = useState({\n open: false,\n strippedFeatures: [],\n onConfirm: null,\n onCancel: null,\n });\n const [activeWorkspaceIndex, setActiveWorkspaceIndex] = useState(0);\n\n const getCurrentWorkspaceData = () => ({\n appBarConfig,\n bottomNavigationConfig,\n appConfiguration,\n tabStatus,\n });\n\n const syncWorkspaceTab = (index, dataToSync) => {\n if (workspaceTabs.length === 0) return;\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n if (newTabs[index]) {\n newTabs[index] = {\n ...newTabs[index],\n ...(dataToSync || getCurrentWorkspaceData()),\n };\n }\n return newTabs;\n });\n };\n\n const handleWorkspaceTabChange = (newIndex) => {\n if (workspaceTabs.length === 0) return;\n if (newIndex === activeWorkspaceIndex) return;\n\n const currentData = getCurrentWorkspaceData();\n syncWorkspaceTab(activeWorkspaceIndex, currentData);\n\n setActiveWorkspaceIndex(newIndex);\n const newWorkspace = workspaceTabs[newIndex] || workspaceTabs[0];\n\n const nextTabStatus = newWorkspace.tabStatus || {\n home: true,\n programs: true,\n analytics: true,\n familyManagement: true,\n };\n\n setAppBarConfig(newWorkspace.appBarConfig || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(newWorkspace.bottomNavigationConfig || defaultBottomNavigationConfig);\n\n const nextAppConfig = newWorkspace.appConfiguration\n ? JSON.parse(JSON.stringify(newWorkspace.appConfiguration))\n : { home: [], programs: [], analytics: [], familyManagement: [] };\n setAppConfiguration(nextAppConfig);\n setTabStatus(nextTabStatus);\n\n // Ensure the activeTabId is valid for the new workspace tab\n if (!nextTabStatus[activeTabId]) {\n const firstActive = navTabs.find((t) => nextTabStatus[t.id]);\n if (firstActive) {\n setActiveTabId(firstActive.id);\n }\n }\n };\n\n const recalculateTabErrors = () => {\n let tabsToValidate = [];\n if (workspaceTabs.length > 0) {\n tabsToValidate = workspaceTabs.map((tab, idx) =>\n idx === activeWorkspaceIndex\n ? {\n ...tab,\n ...getCurrentWorkspaceData(),\n }\n : tab\n );\n } else {\n tabsToValidate = [\n {\n name: \"Workspace\",\n ...getCurrentWorkspaceData(),\n },\n ];\n }\n\n const newErrorCounts = {};\n\n for (let idx = 0; idx < tabsToValidate.length; idx++) {\n const tabData = tabsToValidate[idx];\n const tabId = tabData.id || idx;\n const appConfig = tabData.appConfiguration || {};\n let totalTabErrors = 0;\n\n for (const layoutKey in appConfig) {\n const layoutNodes = appConfig[layoutKey];\n if (Array.isArray(layoutNodes)) {\n const emptyNodes = findAllEmptyDashboardLayoutNodes(layoutNodes);\n if (emptyNodes.length > 0) {\n totalTabErrors += emptyNodes.length;\n }\n }\n }\n\n if (totalTabErrors > 0) {\n newErrorCounts[tabId] = totalTabErrors;\n newErrorCounts[idx] = totalTabErrors;\n }\n }\n\n return newErrorCounts;\n };\n\n useEffect(() => {\n if (validationAttempted) {\n const updatedErrorCounts = recalculateTabErrors();\n setTabErrorCounts((prev) => {\n const isSame = JSON.stringify(prev) === JSON.stringify(updatedErrorCounts);\n return isSame ? prev : updatedErrorCounts;\n });\n }\n }, [\n appConfiguration,\n workspaceTabs,\n activeWorkspaceIndex,\n validationAttempted,\n appBarConfig,\n bottomNavigationConfig,\n tabStatus,\n ]);\n\n const validateMobileLayout = () => {\n setValidationAttempted(true);\n\n let tabsToValidate = [];\n if (workspaceTabs.length > 0) {\n tabsToValidate = workspaceTabs.map((tab, idx) =>\n idx === activeWorkspaceIndex\n ? {\n ...tab,\n ...getCurrentWorkspaceData(),\n }\n : tab\n );\n } else {\n tabsToValidate = [\n {\n name: \"Workspace\",\n ...getCurrentWorkspaceData(),\n },\n ];\n }\n\n const newErrorCounts = {};\n let hasGreetingError = false;\n\n for (let idx = 0; idx < tabsToValidate.length; idx++) {\n const tabData = tabsToValidate[idx];\n const tabName = tabData.name || `Tab ${idx + 1}`;\n const appBar = tabData.appBarConfig;\n\n if (appBar?.greetings?.greetingVisible && appBar?.greetings?.greetingName) {\n const greetingNameStr = appBar.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 = appBar.greetings.greetingValues || {};\n\n const unmappedVars = uniqueExtractedVars.filter((v) => !greetingValues[v]);\n if (unmappedVars.length > 0) {\n hasGreetingError = true;\n showToast({\n type: \"warn\",\n message: `Validation Error in \"${tabName}\": ${unmappedVars.length} unmapped dynamic value(s) in App Bar Greeting.`,\n });\n }\n }\n }\n\n let firstErrorTabIdx = null;\n\n for (let idx = 0; idx < tabsToValidate.length; idx++) {\n const tabData = tabsToValidate[idx];\n const tabName = tabData.name || `Tab ${idx + 1}`;\n const tabId = tabData.id || idx;\n const appConfig = tabData.appConfiguration || {};\n let totalTabErrors = 0;\n\n for (const layoutKey in appConfig) {\n const layoutNodes = appConfig[layoutKey];\n if (Array.isArray(layoutNodes)) {\n const emptyNodes = findAllEmptyDashboardLayoutNodes(layoutNodes);\n if (emptyNodes.length > 0) {\n totalTabErrors += emptyNodes.length;\n\n if (firstErrorTabIdx === null) {\n firstErrorTabIdx = idx;\n }\n }\n }\n }\n\n if (totalTabErrors > 0) {\n newErrorCounts[tabId] = totalTabErrors;\n newErrorCounts[idx] = totalTabErrors;\n showToast({\n type: \"warn\",\n message: `Validation Error in \"${tabName}\": ${totalTabErrors} empty block(s) found. Blocks added from the Block Library cannot be left empty.`,\n });\n }\n }\n\n setTabErrorCounts(newErrorCounts);\n\n if (hasGreetingError || Object.keys(newErrorCounts).length > 0) {\n if (firstErrorTabIdx !== null && workspaceTabs.length > 0 && activeWorkspaceIndex !== firstErrorTabIdx) {\n handleWorkspaceTabChange(firstErrorTabIdx);\n }\n return false;\n }\n\n return true;\n };\n\n const handleAddWorkspaceTab = () => {\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n if (newTabs.length === 0) {\n newTabs.push({\n id: `${Date.now()}`,\n name: \"Tab 1\",\n icon: \"faHome\",\n ...getCurrentWorkspaceData(),\n });\n } else {\n if (newTabs[activeWorkspaceIndex]) {\n newTabs[activeWorkspaceIndex] = {\n ...newTabs[activeWorkspaceIndex],\n ...getCurrentWorkspaceData(),\n };\n }\n }\n\n const newTabIndex = newTabs.length;\n newTabs.push({\n id: `${Date.now() + 1}`,\n name: `Tab ${newTabIndex + 1}`,\n icon: \"faBox\",\n appBarConfig: normalizeAppBarConfig(defaultAppBarConfig),\n bottomNavigationConfig: defaultBottomNavigationConfig,\n appConfiguration: { home: [], programs: [], analytics: [], familyManagement: [] },\n tabStatus: { home: true, programs: true, analytics: true, familyManagement: true },\n });\n return newTabs;\n });\n\n setActiveWorkspaceIndex(workspaceTabs.length === 0 ? 1 : workspaceTabs.length);\n setAppBarConfig(normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(defaultBottomNavigationConfig);\n setAppConfiguration({ home: [], programs: [], analytics: [], familyManagement: [] });\n setTabStatus({ home: true, programs: true, analytics: true, familyManagement: true });\n };\n\n const handleDuplicateWorkspaceTab = (indexToDuplicate) => {\n let dataToDuplicate;\n if (indexToDuplicate !== undefined && indexToDuplicate !== null && indexToDuplicate !== activeWorkspaceIndex) {\n dataToDuplicate = workspaceTabs[indexToDuplicate] || getCurrentWorkspaceData();\n } else {\n dataToDuplicate = getCurrentWorkspaceData();\n }\n\n const parsedData = JSON.parse(JSON.stringify(dataToDuplicate));\n const canonicalConfig = generateTabConfig(parsedData);\n const reconstructed = reconstructAppState(canonicalConfig);\n\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n if (newTabs.length === 0) {\n newTabs.push({\n id: `${Date.now()}`,\n name: \"Tab 1\",\n icon: \"faHome\",\n ...getCurrentWorkspaceData(),\n });\n } else {\n if (newTabs[activeWorkspaceIndex]) {\n newTabs[activeWorkspaceIndex] = {\n ...newTabs[activeWorkspaceIndex],\n ...getCurrentWorkspaceData(),\n };\n }\n }\n\n const newTabIndex = newTabs.length;\n newTabs.push({\n id: `${Date.now() + 1}`,\n name: `${dataToDuplicate.name || \"Tab\"} (Copy)`,\n icon: dataToDuplicate.icon || \"faBox\",\n appBarConfig: reconstructed.appBar || normalizeAppBarConfig(defaultAppBarConfig),\n bottomNavigationConfig: reconstructed.bottomNavigation || defaultBottomNavigationConfig,\n appConfiguration: reconstructed.appConfiguration,\n tabStatus: reconstructed.tabStatus,\n });\n return newTabs;\n });\n\n const nextIndex = workspaceTabs.length === 0 ? 1 : workspaceTabs.length;\n setActiveWorkspaceIndex(nextIndex);\n\n setAppBarConfig(reconstructed.appBar || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(reconstructed.bottomNavigation || defaultBottomNavigationConfig);\n setAppConfiguration(reconstructed.appConfiguration);\n setTabStatus(reconstructed.tabStatus);\n\n showToast({ type: \"success\", message: \"Tab duplicated successfully!\" });\n };\n\n const handleCopyWorkspaceTab = (indexToCopy) => {\n let data;\n if (indexToCopy !== undefined && indexToCopy !== null && indexToCopy !== activeWorkspaceIndex) {\n data = workspaceTabs[indexToCopy] || getCurrentWorkspaceData();\n } else {\n data = getCurrentWorkspaceData();\n }\n const canonicalConfig = generateTabConfig(data);\n localStorage.setItem(\"medplat_copied_workspace\", JSON.stringify({ rawData: data, canonicalConfig }));\n showToast({ type: \"success\", message: \"Tab configuration copied!\" });\n };\n\n const handlePasteWorkspaceTab = (indexToPaste) => {\n const jsonStr = localStorage.getItem(\"medplat_copied_workspace\");\n if (!jsonStr) {\n showToast({ type: \"warn\", message: \"No tab configuration in clipboard.\" });\n return;\n }\n try {\n const parsed = JSON.parse(jsonStr);\n const dataToPaste = parsed.rawData || parsed;\n const canonicalConfig = parsed.canonicalConfig || generateTabConfig(dataToPaste);\n\n const extractFeaturesFromAppConfig = (appConfig) => {\n const features = new Map();\n if (!appConfig) return features;\n\n const traverseNode = (node) => {\n if (!node) return;\n if (node.type === \"FEATURE\" || node.type === \"GROUP\" || node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n if (node.id) features.set(String(node.id), node.name || `Component ID: ${node.id}`);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(traverseNode);\n }\n if (Array.isArray(node.features)) {\n node.features.forEach(traverseNode);\n }\n if (Array.isArray(node.menus)) {\n node.menus.forEach(traverseNode);\n }\n };\n\n Object.values(appConfig).forEach((tabContent) => {\n if (Array.isArray(tabContent)) {\n tabContent.forEach(traverseNode);\n } else if (tabContent?.features && Array.isArray(tabContent.features)) {\n tabContent.features.forEach(traverseNode);\n } else if (tabContent?.layout && Array.isArray(tabContent.layout)) {\n tabContent.layout.forEach(traverseNode);\n }\n });\n\n return features;\n };\n\n const originalFeatures = extractFeaturesFromAppConfig(dataToPaste.appConfiguration || canonicalConfig);\n\n const reconstructed = reconstructAppState(canonicalConfig);\n\n const remainingFeatures = extractFeaturesFromAppConfig(reconstructed.appConfiguration);\n\n const strippedFeatures = [];\n originalFeatures.forEach((name, id) => {\n if (!remainingFeatures.has(id)) {\n strippedFeatures.push(name);\n }\n });\n\n const applyPaste = () => {\n if (indexToPaste === undefined || indexToPaste === null || indexToPaste === activeWorkspaceIndex) {\n setAppBarConfig(reconstructed.appBar || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(reconstructed.bottomNavigation || defaultBottomNavigationConfig);\n setAppConfiguration(reconstructed.appConfiguration);\n setTabStatus(reconstructed.tabStatus);\n } else {\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n if (newTabs[indexToPaste]) {\n newTabs[indexToPaste] = {\n ...newTabs[indexToPaste],\n appBarConfig: reconstructed.appBar || normalizeAppBarConfig(defaultAppBarConfig),\n bottomNavigationConfig: reconstructed.bottomNavigation || defaultBottomNavigationConfig,\n appConfiguration: reconstructed.appConfiguration,\n tabStatus: reconstructed.tabStatus,\n };\n }\n return newTabs;\n });\n }\n };\n\n if (strippedFeatures.length > 0) {\n setPasteValidationModal({\n open: true,\n strippedFeatures,\n onConfirm: () => {\n applyPaste();\n setPasteValidationModal({ open: false, strippedFeatures: [], onConfirm: null, onCancel: null });\n showToast({ type: \"success\", message: \"Tab configuration pasted!\" });\n },\n onCancel: () => {\n setPasteValidationModal({ open: false, strippedFeatures: [], onConfirm: null, onCancel: null });\n },\n });\n } else {\n applyPaste();\n showToast({ type: \"success\", message: \"Tab configuration pasted!\" });\n }\n } catch (e) {\n console.error(\"Failed to parse copied configuration\", e);\n showToast({\n type: \"error\",\n message: \"Failed to parse copied configuration.\",\n });\n }\n };\n\n const handleDeleteWorkspaceTab = (indexToDelete) => {\n if (workspaceTabs.length === 0) return;\n\n const currentTabs = [...workspaceTabs];\n\n if (indexToDelete === activeWorkspaceIndex) {\n let nextActiveIndex = Math.max(0, indexToDelete - 1);\n if (nextActiveIndex === indexToDelete && currentTabs.length > 1) {\n nextActiveIndex = 1;\n }\n\n const tabToLoad = currentTabs[nextActiveIndex];\n if (tabToLoad) {\n const nextTabStatus = tabToLoad.tabStatus || {\n home: true,\n programs: true,\n analytics: true,\n familyManagement: true,\n };\n setAppBarConfig(tabToLoad.appBarConfig || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(tabToLoad.bottomNavigationConfig || defaultBottomNavigationConfig);\n const nextAppConfig = tabToLoad.appConfiguration\n ? JSON.parse(JSON.stringify(tabToLoad.appConfiguration))\n : { home: [], programs: [], analytics: [], familyManagement: [] };\n setAppConfiguration(nextAppConfig);\n setTabStatus(nextTabStatus);\n\n if (!nextTabStatus[activeTabId]) {\n const firstActive = navTabs.find((t) => nextTabStatus[t.id]);\n if (firstActive) {\n setActiveTabId(firstActive.id);\n }\n }\n }\n }\n\n setWorkspaceTabs((prev) => {\n let newTabs = [...prev];\n if (indexToDelete !== activeWorkspaceIndex) {\n newTabs[activeWorkspaceIndex] = {\n ...newTabs[activeWorkspaceIndex],\n ...getCurrentWorkspaceData(),\n };\n }\n\n newTabs.splice(indexToDelete, 1);\n\n if (newTabs.length <= 1) {\n return [];\n }\n return newTabs;\n });\n\n if (typeof activeElementId === \"string\" && activeElementId.startsWith(\"workspace-tab-\")) {\n const selectedIndex = parseInt(activeElementId.replace(\"workspace-tab-\", \"\"), 10);\n if (selectedIndex === indexToDelete) {\n setActiveElementId(null);\n } else if (selectedIndex > indexToDelete) {\n setActiveElementId(`workspace-tab-${selectedIndex - 1}`);\n }\n }\n\n if (currentTabs.length <= 2) {\n setActiveWorkspaceIndex(0);\n } else {\n if (indexToDelete < activeWorkspaceIndex) {\n setActiveWorkspaceIndex((prev) => prev - 1);\n } else if (indexToDelete === activeWorkspaceIndex) {\n setActiveWorkspaceIndex(Math.max(0, indexToDelete - 1));\n }\n }\n };\n\n const handleUpdateWorkspaceTab = (index, updates) => {\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n if (newTabs[index]) {\n newTabs[index] = { ...newTabs[index], ...updates };\n }\n return newTabs;\n });\n };\n\n const handleMoveWorkspaceTabLeft = (index) => {\n if (index <= 0 || index >= workspaceTabs.length) return;\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n const temp = newTabs[index - 1];\n newTabs[index - 1] = newTabs[index];\n newTabs[index] = temp;\n return newTabs;\n });\n if (activeWorkspaceIndex === index) {\n setActiveWorkspaceIndex(index - 1);\n } else if (activeWorkspaceIndex === index - 1) {\n setActiveWorkspaceIndex(index);\n }\n if (activeElementId === `workspace-tab-${index}`) {\n setActiveElementId(`workspace-tab-${index - 1}`);\n } else if (activeElementId === `workspace-tab-${index - 1}`) {\n setActiveElementId(`workspace-tab-${index}`);\n }\n };\n\n const handleMoveWorkspaceTabRight = (index) => {\n if (index < 0 || index >= workspaceTabs.length - 1) return;\n setWorkspaceTabs((prev) => {\n const newTabs = [...prev];\n const temp = newTabs[index + 1];\n newTabs[index + 1] = newTabs[index];\n newTabs[index] = temp;\n return newTabs;\n });\n if (activeWorkspaceIndex === index) {\n setActiveWorkspaceIndex(index + 1);\n } else if (activeWorkspaceIndex === index + 1) {\n setActiveWorkspaceIndex(index);\n }\n if (activeElementId === `workspace-tab-${index}`) {\n setActiveElementId(`workspace-tab-${index + 1}`);\n } else if (activeElementId === `workspace-tab-${index + 1}`) {\n setActiveElementId(`workspace-tab-${index}`);\n }\n };\n\n const programsFeatures = appConfiguration.programs?.features || [];\n const featureOptions = useMemo(\n () => Object.values(masterFeatureList).filter((feature) => feature?.type === \"FEATURE\"),\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) ? node.features.map((feature) => String(feature.id)) : [];\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)) 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) => menu.name.toLowerCase().includes(lowerSearch));\n\n if (item.name.toLowerCase().includes(lowerSearch) || filteredMenus.length > 0) {\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\" ? newLayoutUpdater(prevConfig[activeTabId] || []) : newLayoutUpdater,\n }));\n },\n [activeTabId]\n );\n const handleTabSwitch = useCallback((tabId) => {\n setActiveTabId(tabId);\n setZoomedNodeId(null);\n setActiveElementId(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 handleSectionClick = (nodeId) => {\n const selectedNode = findNodeById(currentLayout, nodeId);\n if (!selectedNode || selectedNode.type === COMPONENT_TYPES.FEATURE) return;\n setActiveElementId(nodeId);\n };\n\n const handleComponentUpdate = (id, property, value) => {\n setCurrentLayoutComponents((prev) => updateNodeById(prev, id, (node) => updateNodeProperty(node, property, value)));\n };\n\n const handleDuplicateNode = (nodeId) => {\n const nodeToDuplicate = findNodeById(currentLayout, nodeId);\n if (!nodeToDuplicate) return;\n\n const parentInfo = findParentNodeInfo(currentLayout, nodeId);\n const parentNode = parentInfo?.node || { children: currentLayout };\n const parentType = parentInfo?.type || \"HOME\";\n\n const validationMessage = getDashboardDropValidationMessage(parentType, nodeToDuplicate.type, parentNode);\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) => duplicateNode(prev, nodeId));\n };\n const handleMoveNodeUp = (nodeId) => {\n setCurrentLayoutComponents((prev) => moveNodeUp(prev, nodeId));\n };\n const handleMoveNodeDown = (nodeId) => {\n setCurrentLayoutComponents((prev) => moveNodeDown(prev, nodeId));\n };\n const handleAddBlock = (blockNode) => {\n if (blockNode.type === \"TABSET\") {\n handleAddWorkspaceTab();\n return;\n }\n\n if (activeTabId !== \"home\" && activeTabId !== \"analytics\") {\n showToast({\n type: \"warn\",\n message: \"Blocks from the Block Library can only be added to layout tabs (Home/Analytics).\",\n });\n return;\n }\n\n const hasVisibleBottomNav = bottomNavigationConfig?.length\n ? bottomNavigationConfig.some((item) => item.visible !== false && tabStatus[item.id])\n : Object.values(tabStatus || {}).some(Boolean);\n\n if (!hasVisibleBottomNav) {\n showToast({\n type: \"warn\",\n message: \"Cannot add blocks from the Block Library when no bottom navigation items are visible.\",\n });\n return;\n }\n\n if (activeElementId) {\n const targetParent = findNodeById(currentLayout, activeElementId);\n if (targetParent) {\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n blockNode.type,\n targetParent,\n blockNode.blockName\n );\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n setCurrentLayoutComponents((prev) => addChildToParent(prev, activeElementId, blockNode));\n return;\n }\n }\n\n const rootValidation = getDashboardDropValidationMessage(\"HOME\", blockNode.type, null, blockNode.blockName);\n if (rootValidation) {\n showToast({ type: \"warn\", message: rootValidation });\n return;\n }\n setCurrentLayoutComponents((prev) => [...(prev || []), blockNode]);\n };\n const isEditingWorkspaceTab = typeof activeElementId === \"string\" && activeElementId.startsWith(\"workspace-tab-\");\n const activeWorkspaceTabIndex = isEditingWorkspaceTab\n ? parseInt(activeElementId.replace(\"workspace-tab-\", \"\"), 10)\n : null;\n const activeComponentNode =\n isEditingWorkspaceTab && workspaceTabs[activeWorkspaceTabIndex]\n ? {\n type: \"WORKSPACE_TAB\",\n id: activeElementId,\n index: activeWorkspaceTabIndex,\n ...workspaceTabs[activeWorkspaceTabIndex],\n }\n : activeElementId\n ? findNodeById(currentLayout, activeElementId)\n : null;\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 nextConfig.healthInfrastructureVisible = 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.map((m) => m.slice(2, -2).trim()).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 nextConfig.healthInfrastructureVisible = false;\n }\n if (property === \"healthInfrastructureVisible\" && value) {\n if (nextConfig.greetings) {\n nextConfig.greetings.greetingVisible = false;\n }\n nextConfig.locationVisible = false;\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 ? savedItem.visible !== false : 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((a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0))\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 createDashboardChildFromDrag = (draggedType, dragData, parentId) => {\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n return createFeatureNode(dragData, parentId);\n }\n if (Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType) && draggedType !== COMPONENT_TYPES.FEATURE) {\n return createLayoutNode(draggedType);\n }\n return null;\n };\n\n const handleAssignFeature = (componentId, featureData) => {\n if (!componentId && activeTabId === \"programs\") {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n const existingIndex = currentFeatures.findIndex((f) => String(f.id) === String(featureData.id));\n let newFeatures;\n if (existingIndex !== -1) {\n newFeatures = currentFeatures.filter((_, i) => i !== existingIndex);\n } else {\n newFeatures = [...currentFeatures, createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, featureData, null)];\n }\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n return;\n }\n\n const component = findNodeById(currentLayout, componentId);\n if (!component) return;\n\n if (component.type === COMPONENT_TYPES.FEATURE_CARD) {\n const existingFeature = component.children?.[0];\n if (existingFeature && String(existingFeature.id) === String(featureData.id)) {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (cardNode) =>\n clearFeatureCardConfig({\n ...cardNode,\n children: [],\n })\n )\n );\n } else {\n const newChild = createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, featureData, componentId);\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (cardNode) => {\n const cardWithChild = {\n ...cardNode,\n children: [newChild],\n };\n return autoConfigureFeatureCardFromChild(cardWithChild, newChild);\n })\n );\n }\n } else {\n const existingIndex = (component.children || []).findIndex((f) => String(f.id) === String(featureData.id));\n if (existingIndex !== -1) {\n const newChildren = component.children.filter((_, i) => i !== existingIndex);\n handleComponentUpdate(componentId, \"children\", newChildren);\n } else {\n const scopeNode = getDuplicateCheckScopeNode(currentLayout, componentId);\n const layoutToCheck = scopeNode ? [scopeNode] : currentLayout;\n if (hasFeatureInDashboardLayout(layoutToCheck, featureData.id)) {\n showToast({\n type: \"warn\",\n message: `Feature ${featureData.name} is already added to this section.`,\n });\n return;\n }\n const validationMessage = getDashboardDropValidationMessage(\n component.type,\n COMPONENT_TYPES.FEATURE,\n component,\n featureData.name\n );\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n const newChild = createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, featureData, componentId);\n handleComponentUpdate(componentId, \"children\", [...(component.children || []), newChild]);\n }\n }\n };\n\n const handleUpdateProgramFeature = (featureId, patch) => {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n const newFeatures = currentFeatures.map((feature) =>\n String(feature.id) === String(featureId) ? { ...feature, ...patch } : feature\n );\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n };\n\n const hasFeatureInDashboardLayout = (nodes, featureId) =>\n (nodes || []).some((node) => {\n if (node.type === COMPONENT_TYPES.FEATURE && String(node.id) === String(featureId)) {\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) => child.id !== movingNodeId && child.instanceId !== movingNodeId\n ),\n };\n };\n\n const addDashboardChild = (parentId, parentType, draggedType, dragData) => {\n setCurrentLayoutComponents((prevLayout) => {\n const parentNode = parentId === ROOT_DROP_ZONE ? null : findNodeById(prevLayout, parentId);\n const validationMessage = getDashboardDropValidationMessage(parentType, draggedType, parentNode, dragData?.name);\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return prevLayout;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE && !dragData) 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(draggedType, dragData, parentId);\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 }\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 (activeTabId === \"home\" && !over && Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType)) {\n showToast({\n type: \"warn\",\n message: `${draggedType} cannot be dropped there.`,\n });\n return;\n }\n\n if (!over && activeTabId === \"programs\" && draggedType === COMPONENT_TYPES.FEATURE) {\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) => removeNodeById(prev, instanceIdToDelete));\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((f) => f.instanceId !== instanceIdToDelete);\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((f) => f.instanceId !== instanceIdToDelete);\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n }\n } else if (draggedType === COMPONENT_TYPES.SECTION || draggedType === COMPONENT_TYPES.SEARCH_BAR) {\n setCurrentLayoutComponents((prev) => prev.filter((comp) => comp.id !== active.id));\n }\n return;\n }\n\n if (\n activeTabId === \"home\" &&\n active.data.current?.fromDashboardLayout &&\n (overType === NODE_DROP_ZONE || over?.id === \"mobile-content\" || 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(targetParent.node, active.id);\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n draggedType,\n validationParentNode,\n active.data.current?.data?.name\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) => moveNodeBeforeTarget(prev, active.id, targetId));\n return;\n }\n\n const parentId = overType === NODE_DROP_ZONE ? over.data.current.parentId : ROOT_DROP_ZONE;\n const parentType = overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode = overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationParentNode = getParentNodeForMoveValidation(parentNode, active.id);\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n validationParentNode,\n active.data.current?.data?.name\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) => moveNodeToParent(prev, active.id, parentId));\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 active.data.current?.data?.name\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE && active.data.current.data) {\n const scopeNode = getDuplicateCheckScopeNode(currentLayout, targetId);\n const layoutToCheck = scopeNode ? [scopeNode] : currentLayout;\n if (hasFeatureInDashboardLayout(layoutToCheck, active.data.current.data.id)) {\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(draggedType, active.data.current.data, targetParent.id);\n if (!childNode) return;\n setCurrentLayoutComponents((prev) => addNodeBeforeTarget(prev, targetId, childNode));\n return;\n }\n\n if (activeTabId === \"home\" && (overType === NODE_DROP_ZONE || over?.id === \"mobile-content\")) {\n const parentId = overType === NODE_DROP_ZONE ? over.data.current.parentId : ROOT_DROP_ZONE;\n const parentType = overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode = overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n parentNode,\n active.data.current?.data?.name\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n addDashboardChild(parentId, parentType, draggedType, active.data.current.data);\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((f) => f.instanceId === active.id);\n const newIndex = currentFeatures.findIndex((f) => f.instanceId === over.id);\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((f) => f.instanceId === active.id);\n const newIndex = features.findIndex((f) => f.instanceId === over.id);\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 (draggedType === COMPONENT_TYPES.GROUP && overType === COMPONENT_TYPES.SECTION_DROP_ZONE) {\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((c) => c.id === overSectionId);\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 (draggedType === COMPONENT_TYPES.FEATURE && overType === COMPONENT_TYPES.SECTION_DROP_ZONE) {\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((c) => c.id === overSectionId);\n\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n\n const isDuplicate = targetSection?.features.some((f) => f.id === droppedFeature.id && f.type === \"FEATURE\");\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 (over?.data.current?.sortable && active.data.current?.type === COMPONENT_TYPES.SECTION) {\n if (active.id !== over.id) {\n setCurrentLayoutComponents((prev) => {\n const searchBar = prev.find((c) => c.type === COMPONENT_TYPES.SEARCH_BAR);\n const sortableList = prev.filter((c) => c.type !== COMPONENT_TYPES.SEARCH_BAR);\n\n const oldSortableIndex = sortableList.findIndex((comp) => comp.id === active.id);\n const newSortableIndex = sortableList.findIndex((comp) => comp.id === over.id);\n\n if (oldSortableIndex === -1 || newSortableIndex === -1) {\n return prev;\n }\n\n const newSortableList = arrayMove(sortableList, oldSortableIndex, newSortableIndex);\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 (active.data.current?.sortable && targetZoneType === \"LAYOUT_ROOT_DROP_ZONE\") {\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((comp) => comp.type === COMPONENT_TYPES.SEARCH_BAR);\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 icon={faMagnifyingGlass} style={{ marginRight: \"8px\", color: \"#888\" }} />\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 <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>{renderIcon(iconData, size)}</Box>;\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 variant=\"body2\" sx={{ fontWeight: \"normal\", color: \"#333\" }}>\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((f) => (f.uuid || f.id) === activeId);\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((f) => f.instanceId === activeId);\n if (programFeature) {\n return { type: \"FEATURE_TILE\", data: programFeature };\n }\n const layoutNode = findNodeById(currentLayout, activeId);\n if (layoutNode) {\n return {\n type: layoutNode.type === COMPONENT_TYPES.FEATURE ? \"FEATURE_TILE\" : 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((comp) => comp.id === activeId);\n\n const isDraggingFeatureTile = currentLayout.some((comp) => comp?.features?.some((f) => f.instanceId === activeId));\n\n const isDraggingProgramFeatureTile = programsFeatures?.some((f) => f.instanceId === activeId);\n\n return isDraggingTopLevel || isDraggingFeatureTile || isDraggingProgramFeatureTile;\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((container) => {\n const targetType = container.data.current?.type;\n return (\n targetType === NODE_DROP_ZONE || targetType === \"DASHBOARD_NODE_TARGET\" || container.id === \"mobile-content\"\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((container) => {\n if (container.id === args.active.id) return false;\n if (container.data.current?.type === \"SECTION_DROP_ZONE\") return false;\n return true;\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\n noValidate\n onSubmit={formCtrl.handleSubmit(onSubmit)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && event.target.tagName !== \"TEXTAREA\") {\n event.preventDefault();\n }\n }}\n >\n <DndContext\n sensors={sensors}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n collisionDetection={customCollisionDetection}\n >\n <Grid container spacing={1}>\n {/* Left Column: Menu Relation, Draggables, Available Features */}\n <Grid size={3} sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}>\n <Grid size={12}>\n <Paper sx={{ padding: \"2px\", margin: \"6px 0px\" }}>\n <Grid className=\"justify-between items-center\" container>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: \"bold\", marginLeft: \"5px\" }}>\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\">Attendance Required? :</Typography>\n <Box className=\"w-[60%] ms-3\">\n <Switch\n checked={formCtrl.watch(\"isAttendanceRequired\")}\n onChange={(e) => formCtrl.setValue(\"isAttendanceRequired\", e.target.checked)}\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 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 <BlockLibrary onAddBlock={handleAddBlock} />\n <Grid>\n <TrashZone isDraggingSortable={isDraggingSortable} />\n </Grid>\n <Divider sx={{ mt: 2 }} />\n </Paper>\n </Grid>\n </Grid>\n\n {/* Center Column: Mobile View */}\n <Grid size={5} sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}>\n <Grid\n sx={{\n padding: \"2px\",\n margin: \"6px 0px\",\n }}\n >\n <Grid container sx={{ justifyContent: \"space-between\", alignItems: \"center\", mb: 1 }}>\n <Grid size={4}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faGear} />}\n onClick={() => {\n setTempOnLoadSteps(JSON.parse(JSON.stringify(onLoadSteps)));\n setOnLoadModalOpen(true);\n }}\n sx={{\n fontSize: \"0.75rem\",\n height: \"30px\",\n textTransform: \"none\",\n borderRadius: \"6px\",\n borderColor: \"var(--color-primary)\",\n color: \"var(--color-primary)\",\n whiteSpace: \"nowrap\",\n minWidth: \"fit-content\",\n }}\n >\n Configure On Load\n </Button>\n </Grid>\n <Grid size={3} sx={{ textAlign: \"center\" }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: \"bold\" }}>\n Mobile View\n </Typography>\n </Grid>\n <Grid size={5} container spacing={1} sx={{ alignItems: \"center\", justifyContent: \"flex-end\" }}>\n <FormControlLabel\n control={\n <Switch\n checked={isPreviewMode}\n onChange={(e) => setIsPreviewMode(e.target.checked)}\n color=\"primary\"\n size=\"small\"\n />\n }\n label={\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 600, color: isPreviewMode ? \"primary.main\" : \"text.secondary\" }}\n >\n Preview {isPreviewMode ? \"ON\" : \"OFF\"}\n </Typography>\n }\n sx={{ mr: 1, mb: 0 }}\n />\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 items={sortableSectionIds} strategy={verticalListSortingStrategy}>\n <MobileDisplay\n validationAttempted={validationAttempted}\n tabErrorCounts={tabErrorCounts}\n isPreviewMode={isPreviewMode}\n documentMasterImages={documentMasterImages}\n tabStatus={tabStatus}\n layoutComponents={currentLayout}\n componentTypes={COMPONENT_TYPES}\n handleSectionClick={handleSectionClick}\n activeElementId={activeElementId}\n activeTabId={activeTabId}\n onMoveUp={handleMoveNodeUp}\n onMoveDown={handleMoveNodeDown}\n onDuplicate={handleDuplicateNode}\n handleTabSwitch={handleTabSwitch}\n formList={availableForms}\n selectedForm={selectedForm}\n onFormSelect={handleFormSelection}\n SvgIconBox={SvgIconBox}\n setCurrentLayoutComponents={setCurrentLayoutComponents}\n programFeatures={appConfiguration.programs?.features || []}\n appBarConfig={appBarConfig}\n bottomNavigationConfig={bottomNavigationConfig}\n onDeleteNode={deleteDashboardNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n onDeselectComponent={() => setActiveElementId(null)}\n workspaceTabs={workspaceTabs}\n activeWorkspaceIndex={activeWorkspaceIndex}\n onAddWorkspaceTab={handleAddWorkspaceTab}\n onWorkspaceTabChange={handleWorkspaceTabChange}\n onDeleteWorkspaceTab={handleDeleteWorkspaceTab}\n onCopyWorkspaceTab={handleCopyWorkspaceTab}\n onPasteWorkspaceTab={handlePasteWorkspaceTab}\n onDuplicateWorkspaceTab={handleDuplicateWorkspaceTab}\n onUpdateWorkspaceTab={handleUpdateWorkspaceTab}\n onMoveWorkspaceTabLeft={handleMoveWorkspaceTabLeft}\n onMoveWorkspaceTabRight={handleMoveWorkspaceTabRight}\n onEditWorkspaceTab={(index) => setActiveElementId(`workspace-tab-${index}`)}\n ></MobileDisplay>\n </SortableContext>\n </Grid>\n </Grid>\n </Grid>\n\n {/* Right Column: Component Configuration */}\n <Grid size={4} sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}>\n <Grid size={12} sx={{ mb: 2 }}>\n {activeElementId ? (\n <>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", mb: 2 }}>\n <Typography variant=\"h6\">Component Configuration</Typography>\n </Box>\n <InspectorPanel\n activeComponent={activeComponentNode}\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 separatedGroups={separatedGroups}\n separatedFeatures={separatedFeatures}\n activeTabId={activeTabId}\n onAssignFeature={handleAssignFeature}\n onImageUpload={uploadDocumentMasterImage}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n hideGlobalConfig\n onUpdateWorkspaceTab={handleUpdateWorkspaceTab}\n programsFeatures={programsFeatures}\n onUpdateProgramFeature={handleUpdateProgramFeature}\n pageParamsByFeature={pageParamsByFeature}\n />\n </>\n ) : (\n <>\n <Box sx={{ mb: 2 }}>\n <Typography variant=\"h6\">Global Configuration</Typography>\n </Box>\n <InspectorPanel\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 separatedGroups={separatedGroups}\n separatedFeatures={separatedFeatures}\n activeTabId={activeTabId}\n onAssignFeature={handleAssignFeature}\n onImageUpload={uploadDocumentMasterImage}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n programsFeatures={programsFeatures}\n onUpdateProgramFeature={handleUpdateProgramFeature}\n pageParamsByFeature={pageParamsByFeature}\n />\n </>\n )}\n </Grid>\n </Grid>\n </Grid>\n <DragOverlay>{renderActiveOverlay(activeId)}</DragOverlay>\n </DndContext>\n </form>\n </MenuDragContext.Provider>\n\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 <Dialog open={pasteValidationModal.open} onClose={pasteValidationModal.onCancel} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Tab Configuration Pasted</DialogTitle>\n <DialogContent dividers>\n <Typography variant=\"body1\" gutterBottom>\n The following feature(s) are not available for this role and were stripped:\n </Typography>\n <List dense>\n {pasteValidationModal.strippedFeatures?.map((featureName, idx) => (\n <ListItem key={idx} disableGutters>\n <ListItemText primary={`• ${featureName}`} />\n </ListItem>\n ))}\n </List>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mt: 2 }}>\n Do you want to continue pasting without these features?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={pasteValidationModal.onCancel} color=\"inherit\">\n Cancel Paste\n </Button>\n <Button onClick={pasteValidationModal.onConfirm} variant=\"contained\" color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog open={onLoadModalOpen} onClose={() => setOnLoadModalOpen(false)} maxWidth=\"md\" fullWidth>\n <DialogTitle sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>OnLoad Configuration</Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => {\n setTempOnLoadSteps([\n ...tempOnLoadSteps,\n {\n id: generateUUID(),\n key: '',\n configType: 'QUERY',\n queryType: 'OFFLINE',\n queryCode: '',\n },\n ]);\n }}\n sx={{ textTransform: 'none' }}\n >\n Add Query/API\n </Button>\n <IconButton onClick={() => setOnLoadModalOpen(false)} size=\"small\">\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent dividers sx={{ p: 3, backgroundColor: 'var(--color-background1)' }}>\n <OnLoadConfigurationPanel\n onLoadSteps={tempOnLoadSteps}\n setOnLoadSteps={setTempOnLoadSteps}\n mobileQueries={mobileQueries}\n onlineQueries={onlineQueries}\n isModal={true}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setOnLoadModalOpen(false)} color=\"inherit\">\n Cancel\n </Button>\n <Button\n onClick={() => {\n const keySet = new Set();\n let hasOnLoadError = false;\n for (const step of tempOnLoadSteps) {\n if (!step.key) {\n showToast({ type: \"warn\", message: \"OnLoad Configuration: Key is mandatory for all steps.\" });\n hasOnLoadError = true;\n }\n if (step.key && step.key !== step.key.toUpperCase().replace(/\\s/g, \"\")) {\n showToast({\n type: \"warn\",\n message: `OnLoad Configuration: Key \"${step.key}\" must be uppercase with no spaces.`,\n });\n hasOnLoadError = true;\n }\n if (step.key && keySet.has(step.key)) {\n showToast({\n type: \"warn\",\n message: `OnLoad Configuration: Duplicate key \"${step.key}\" found.`,\n });\n hasOnLoadError = true;\n }\n if (step.key) keySet.add(step.key);\n }\n if (hasOnLoadError) {\n showToast({ type: \"warn\", message: \"Please resolve errors before saving.\" });\n return;\n }\n\n setOnLoadSteps(tempOnLoadSteps);\n setOnLoadModalOpen(false);\n }}\n variant=\"contained\"\n color=\"primary\"\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n}\nfunction DraggableComponent({ id, children, componentType, dragData = null, disabled = false }) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: { type: componentType, ...(dragData && { data: dragData }) },\n disabled,\n });\n\n const style = isDragging\n ? {\n opacity: 0.5,\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\">{isOver ? \"Release to Delete\" : \"Drag Here to Delete\"}</Typography>\n </Box>\n );\n};\nTrashZone.propTypes = {\n isDraggingSortable: PropTypes.any,\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 = ({ feature, isGroupMember = false, disabled = false }) => {\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 <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>{renderIcon(iconData, size)}</Box>;\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 = ({ item, COMPONENT_TYPES, activeGroupId, onGroupToggle, usedFeatureIds = new Set() }) => {\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 feature={item} disabled={usedFeatureIds.has(String(item.id))} />\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 sx={{ p: 1 }} onMouseDown={handleDragIconClickStop} onTouchStart={handleDragIconClickStop}>\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 iconName=\"faBars\" style={{ fontSize: \"0.8rem\", color: \"var(--color-text)\" }} />\n </Box>\n </DraggableComponent>\n\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", color: \"var(--color-text)\", flexGrow: 1 }}>\n {item.name} ({item.menus.length})\n </Typography>\n </Box>\n </AccordionSummary>\n\n <AccordionDetails sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-gray4)\" }}>\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","ToolbarOverlay","onMoveUp","onMoveDown","onDuplicate","onDelete","onZoom","orientation","jsxs","Box","e","jsx","Tooltip","IconButton","FontAwesomeIcon","faArrowUp","faArrowDown","faCopy","faMagnifyingGlassPlus","faTrash","PropTypes","modalStyle","ITEMS_PER_PAGE","GenericImageSVG","height","ImageThumbnail","img","style","uuid","id","data","status","useQuery","getFileById","res","FormConfiguratorService","resolved","useMemo","dataUrl","mimeType","Typography","FullImagePreviewDialog","open","onClose","renderContent","Dialog","DialogContent","ImagePickerDialog","documentMasterImages","onImageUpload","onSelect","currentImageUuid","selectedUuid","setSelectedUuid","useState","searchQuery","setSearchQuery","page","setPage","previewImg","setPreviewImg","fileInputRef","useRef","useEffect","idx","filteredImages","q","totalPages","paginatedImages","handleSave","handleCancel","Fragment","Modal","Backdrop","Fade","Button","event","file","_a","uploadedUuid","TextField","InputAdornment","Grid2","index","isSelected","Pagination","value","EmptyBlockErrorSymbol","reason","InteractiveCarousel","node","isPreviewMode","validationAttempted","useContext","PreviewContext","currentIndex","setCurrentIndex","images","intervalTime","timer","prevIndex","handlePrev","handleNext","carouselHeight","borderRadius","faImage","activeImage","targetUuid","targetId","imgProp","d","faChevronLeft","faChevronRight","_","DASHBOARD_NODE_TARGET","FeatureSortableWrapper","children","sectionId","featureName","attributes","listeners","setNodeRef","isDragging","useSortable","React","MobileSearchBar","handleSectionClick","props","ref","faMagnifyingGlass","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","disabled","NODE_DROP_ZONE","DASHBOARD_COMPONENT_TYPES","EmptyContainerPlaceholder","label","faPlus","mapFontSize","sizeStr","defaultSize","DashboardLayoutNode","onDeleteNode","activeElementId","zoomedNodeId","setZoomedNodeId","isSectionChild","isDarkMode","renderNodeBackgroundImage","n","bgImgUuid","_b","_c","_d","bgImgId","_e","_f","_g","getSolidBgColor","defaultBg","fallbackLight","fallbackDark","getFgColor","defaultFg","getHeaderColor","defaultColor","nodeKey","setDraggableRef","useDraggable","setDropTargetRef","isNodeOver","setCombinedRef","useCallback","element","isHovered","setIsHovered","dragHandleProps","draggableStyle","isNodeActive","ActionButtons","searchBg","searchText","borderRadiusVal","placeholderText","featureFg","sectionChildren","sectionBgColor","headerColor","child","cardBg","_h","_i","cardFg","hasIcon","_j","_k","hasTitle","_l","_m","hasSubTitle","_n","_o","hasContent","_p","contentLayout","ensureItem","type","defaultH","defaultV","g","group","_q","layoutType","alignItems","justifyContent","getAnchorStyles","pos","h","v","styles","padding","rightSpacing","_r","_s","renderCtaButton","FontAwesomeIcons","cardContent","loc","item","isHorizontalGroup","gap","anchorStyles","_t","_u","_v","_w","_x","rowChildren","visibleColumns","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","isVerticalDivider","_L","dividerThickness","_M","dividerColor","_N","_O","_P","fontWeightMap","textFontSize","_Q","_R","textFontWeight","_S","_T","textAlignment","_U","_V","textColor","textContent","_W","_X","_Y","_Z","DashboardSectionNode","MobileDisplay","tabErrorCounts","tabStatus","layoutComponents","activeTabId","handleTabSwitch","formList","selectedForm","onFormSelect","setCurrentLayoutComponents","programFeatures","appBarConfig","bottomNavigationConfig","onDeselectComponent","workspaceTabs","activeWorkspaceIndex","onAddWorkspaceTab","onWorkspaceTabChange","onDeleteWorkspaceTab","onCopyWorkspaceTab","onPasteWorkspaceTab","onDuplicateWorkspaceTab","onUpdateWorkspaceTab","onMoveWorkspaceTabLeft","onMoveWorkspaceTabRight","onEditWorkspaceTab","useTheme","sensors","useSensors","useSensor","PointerSensor","tabMenuAnchorEl","setTabMenuAnchorEl","tabMenuIndex","setTabMenuIndex","handleOpenTabMenu","handleCloseTabMenu","dropZoneId","dropZoneType","zoomedNode","findNodeById","setDroppableRef","navItems","HomeIcon","ProgramsIcon","AnalyticsIcon","FamilyManagementIcon","visibleNavItems","a","b","navItem","popoverState","setPopoverState","handleOpenGroupPopover","anchorElement","handleCloseGroupPopover","renderFeatureTile","handleGroupInternalSort","active","over","groupId","newGroupData","prevComponents","section","oldIndex","newIndex","newMenus","arrayMove","prev","handleNestedFeatureClick","faWifi","faSignal","faBatteryFull","tab","errorCount","faEllipsisV","Menu","MenuItem","faEdit","Divider","faArrowLeft","faArrowRight","faPaste","faTrashAlt","faLocationDot","faHospital","selectedActions","action","uploadedSvg","fontAwesomeIcon","FormControl","InputLabel","Select","form","component","DndContext","MobileGroupPopover","name","parts","part","groupData","anchorEl","features","anchorRect","Paper","faTimes","createSearchBarBlock","createLayoutNode","createCarouselBlock","createFeatureCardRowBlock","cardCount","row","i","createHeroCardBlock","card","createFeatureGridBlock","featureCount","createVerticalCardStackBlock","col","createTextBlock","createDividerBlock","createEmptySectionBlock","createHorizontalSpacerBlock","createVerticalSpacerBlock","PreviewBox","sx","SearchBarPreview","CarouselPreview","FeatureCardRowPreview","HeroCardPreview","FeatureGridPreview","VerticalStackPreview","TextHeadingPreview","DividerPreview","EmptySectionPreview","HorizontalSpacerPreview","VerticalSpacerPreview","BLOCK_TEMPLATES","BlockTile","Preview","onClick","BlockLibrary","onAddBlock","block","OPERAND_OPTIONS","CUSTOM_VALUE_OPTION","CUSTOM_PATH_OPTION","DYNAMIC_VARIABLES_LIST","classifyOperandValue","OPERAND_TYPES","OperandField","onUpdate","isCustomValue","isCustomPath","displayValue","handleOperandChange","newValue","val","handleOperandInputChange","newInputValue","commitOperandType","nextType","Autocomplete","params","ConditionRow","condition","onChange","preferredLanguages","rolesList","operandOne","operator","operandTwo","operandOneType","operandTwoType","handleChange","field","updateCondition","updates","isOperandOneUserData","patch","operatorSummaryLabels","key","lang","option","opt","r","ConditionGroup","isRoot","rule","options","handleAddCondition","newOptions","handleAddGroup","newRule","handleToggleRule","handleUpdateOption","updatedOption","handleDeleteOption","Chip","faRotate","updatedGroup","updatedCondition","VisibilityConditionEditor","hasConditions","handleCreateRoot","handleClear","theme","faCodeBranch","faLayerGroup","NAV_PARAM_OPERAND_OPTIONS","classifyNavParamValue","NavigationParamRow","paramName","entry","paramValue","paramType","handleValueChange","svg","normalizedSvg","svgElement","width","renderIcon","size","FormAccordion","title","expanded","Accordion","AccordionSummary","ExpandMoreIcon","AccordionDetails","ColorPickerField","setAnchorEl","handleClick","handleClose","Popover","SketchPicker","color","fakeEvent","InspectorPanel","activeComponent","onDeselect","mobileQueries","onAppBarUpdate","onBottomNavigationSave","onAddCarouselImage","onUpdateCarouselImage","onRemoveCarouselImage","featureOptions","hideGlobalConfig","separatedGroups","separatedFeatures","onAssignFeature","programsFeatures","onUpdateProgramFeature","pageParamsByFeature","expandedBottomNavigationItemId","setExpandedBottomNavigationItemId","expandedActionIndex","setExpandedActionIndex","imagePickerState","setImagePickerState","bottomNavigationDraft","setBottomNavigationDraft","isMenuGroupsExpanded","setIsMenuGroupsExpanded","isStandaloneExpanded","setIsStandaloneExpanded","setActiveGroupId","expandedAccordion","setExpandedAccordion","positionTab","setPositionTab","expandedFeatureConfigId","setExpandedFeatureConfigId","featureConfigSubTab","setFeatureConfigSubTab","isFeatureConfigSectionExpanded","setIsFeatureConfigSectionExpanded","ctaType","handleAccordionChange","panel","isExpanded","handleGroupAccordionToggle","isFeatureAssigned","featureId","isGroupMember","isAssigned","renderFeatureSelection","menu","getAssignedFeaturesForConfig","updateAssignedFeatureProperties","updatedChildren","renderFeatureConfiguration","assignedFeatures","featureKey","activeSubTab","formInfo","pageParamNames","existingPageParams","p","existingIndex","updatedEntry","newPageParams","updateBottomNavigationDraftItem","itemId","property","cancelBottomNavigationDraft","saveBottomNavigationDraft","fieldSx","textField","numberField","colorField","selectField","imagePickerField","onOpenPicker","selectedImg","document","featureDropdown","selectedFeature","selectedValue","fontAwesomeIconDropdown","FontAwesomeIconsNames","uploadSvgIcon","onUploaded","showToast","reader","featureCardIconPicker","selectedIcon","icon","iconsvg","normalizeSizeOption","renderGlobalConfig","isGreetingVisible","locationVisible","healthInfrastructureVisible","PREDEFINED_ACTION_KEYS","PREDEFINED_ACTIONS","allActions","customActions","selectedPredefined","handlePredefinedChange","selectedKeys","newActions","handleActionChange","updatedCustom","handleActionAdd","handleActionRemove","Switch","Alert","extractedVarsMatch","extractedVars","m","uniqueExtractedVars","greetingValues","activeUsedValues","extractedVar","newVals","renderSelectedConfig","queryOptions","opacityOptions","percentage","FONT_SIZE_OPTIONS","FONT_WEIGHT_OPTIONS","BACKGROUND_TYPE_OPTIONS","GRADIENT_TYPE_OPTIONS","GRADIENT_DIRECTION_OPTIONS","result","faBox","__","_aa","_$","_ca","_ba","_da","faMousePointer","vPos","hPos","elType","cl","currentGroup","isActive","groupAtCell","cellHasItems","getIconForType","newLayout","existingGroupIndex","faGripLines","faGripLinesVertical","newItems","Slider","_ea","_fa","_ga","_ha","_ia","_ja","raw","_ka","_la","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","image","imgObj","conditions","_xa","_ya","_za","_Aa","TEXT_STYLE_OPTIONS","_Ba","TEXT_DECORATION_OPTIONS","_Ca","CONTENT_ALIGNMENT_OPTIONS","_Da","_Ea","_Fa","ORIENTATION_OPTIONS","_Ga","_Ha","_Ia","_Ja","renderVisibilityConfig","imagePickerDialogs","extractPathVariables","path","regex","matches","extractQueryParams","SortableStepItem","step","onlineQueries","updateStep","removeStep","isDuplicate","isNewStep","setExpanded","handleKeyChange","displayApiPath","handleApiPathChange","newPath","detectedPaths","existingPaths","newPathParams","found","detectedQueries","existingQueries","newQueryParams","pathParams","queryParams","handlePathParamsChange","paramIndex","newParams","handleQueryParamsChange","handleParamChange","addParam","removeParam","param","pIndex","ON_LOAD_DROPDOWN_VALUES","OnLoadConfigurationPanel","onLoadSteps","setOnLoadSteps","isModal","KeyboardSensor","sortableKeyboardCoordinates","setIsExpanded","addStep","generateUUID","fieldOrFields","prevSteps","updatedStep","updatedConfigType","handleDragEnd","items","content","closestCenter","s","normalizeAppBarConfig","normalizedConfig","defaultAppBarConfig","AddMenuConfiguration","location","useLocation","state","navigate","useNavigate","setRolesList","isEditMode","setIsEditMode","availableForms","setAvailableForms","setMobileQueries","setOnlineQueries","setDocumentMasterImages","masterFeatureList","setMasterFeatureList","groupedFeatures","setGroupedFeatures","setPageParamsByFeature","backModalOpen","setBackModalOpen","setIsPreviewMode","setTabErrorCounts","setValidationAttempted","onLoadModalOpen","setOnLoadModalOpen","tempOnLoadSteps","setTempOnLoadSteps","setAppBarConfig","setBottomNavigationConfig","defaultBottomNavigationConfig","setPreferredLanguages","user","useSelector","formCtrl","useForm","fetchRoles","fetchForms","fetchMobileQueries","fetchDocumentMasterImages","fetchPreferredLanguages","fetchMenus","response","getPreferredLanguage","error","configJson","activeConfig","loadedTabs","reconstructed","reconstructAppState","setAppConfiguration","setTabStatus","setSelectedForm","hydratedTabs","tabData","tabReconstructed","setWorkspaceTabs","setActiveWorkspaceIndex","mappedForms","execute","onlineResponse","allowedImageExtensions","uploadDocument","api","normalizeExtension","fileName","extension","extensionFromName","imageOptions","uploadDocumentMasterImage","documentUUID","payload","nextDocument","existingDocuments","roleId","transformListData","fetchPageParamsByRole","map","rawPageParams","parsedPageParams","findMetadataById","hydrateFeature","canonicalFeature","parentInstanceId","masterData","instanceUuid","hydratedMenus","menuItem","masterMenuItem","instancePrefix","hydrateLayout","canonicalLayout","tabId","c","hydrateDashboardLayout","parentId","instanceId","sectionInstanceId","hydratedFeatures","canonicalConfig","newAppConfiguration","newTabStatus","newSelectedForm","isAttendanceRequired","appBar","bottomNavigation","groupedList","masterFeatureMap","seenStandaloneIds","processedMenus","transformedMenu","uniqueMenus","seenMenuIds","sanitizeFeature","canonicalGroupId","sanitized","generateTabConfig","finalConfig","navTabs","isEnabled","tabEntry","rawLayout","sanitizeDashboardLayout","rawFeatures","createCanonicalConfig","tabsToSave","getCurrentWorkspaceData","baseConfig","onSubmit","validateMobileLayout","configJsonString","COMPONENT_TYPES","handleFormSelection","selectedCode","formObject","activeId","setActiveId","setActiveElementId","setActiveTabId","appConfiguration","initialConfig","searchTerm","setSearchTerm","pasteValidationModal","setPasteValidationModal","syncWorkspaceTab","dataToSync","newTabs","handleWorkspaceTabChange","currentData","newWorkspace","nextTabStatus","nextAppConfig","firstActive","t","recalculateTabErrors","tabsToValidate","newErrorCounts","appConfig","totalTabErrors","layoutKey","layoutNodes","emptyNodes","findAllEmptyDashboardLayoutNodes","updatedErrorCounts","hasGreetingError","tabName","unmappedVars","firstErrorTabIdx","handleAddWorkspaceTab","newTabIndex","handleDuplicateWorkspaceTab","indexToDuplicate","dataToDuplicate","parsedData","nextIndex","handleCopyWorkspaceTab","indexToCopy","handlePasteWorkspaceTab","indexToPaste","jsonStr","parsed","dataToPaste","extractFeaturesFromAppConfig","traverseNode","tabContent","originalFeatures","remainingFeatures","strippedFeatures","applyPaste","handleDeleteWorkspaceTab","indexToDelete","currentTabs","nextActiveIndex","tabToLoad","selectedIndex","handleUpdateWorkspaceTab","handleMoveWorkspaceTabLeft","temp","handleMoveWorkspaceTabRight","collectIds","nodes","activeLayout","layoutsToCheck","currentLayout","filteredFeatures","lowerSearch","filteredMenus","groups","newLayoutUpdater","prevConfig","updateNodeProperty","groupKey","childKey","nodeId","selectedNode","handleComponentUpdate","updateNodeById","handleDuplicateNode","nodeToDuplicate","parentInfo","findParentNodeInfo","parentNode","parentType","validationMessage","getDashboardDropValidationMessage","duplicateNode","handleMoveNodeUp","moveNodeUp","handleMoveNodeDown","moveNodeDown","handleAddBlock","blockNode","targetParent","addChildToParent","rootValidation","isEditingWorkspaceTab","activeWorkspaceTabIndex","activeComponentNode","updateAppBarProperty","nextConfig","nextGreetings","cleanedValues","saveBottomNavigationConfig","savedItems","prevStatus","nextStatus","savedItem","activeItem","firstVisibleItem","addCarouselImage","componentId","documentUuid","updateCarouselImage","imageIndex","removeCarouselImage","createDashboardChildFromDrag","draggedType","dragData","createFeatureNode","handleAssignFeature","featureData","programsConfig","currentFeatures","newFeatures","existingFeature","cardNode","clearFeatureCardConfig","newChild","cardWithChild","autoConfigureFeatureCardFromChild","newChildren","scopeNode","getDuplicateCheckScopeNode","hasFeatureInDashboardLayout","handleUpdateProgramFeature","targetNode","currentId","lastNode","ROOT_DROP_ZONE","getParentNodeForMoveValidation","movingNodeId","addDashboardChild","prevLayout","childNode","deleteDashboardNode","removeNodeById","handleDragStart","overType","overSectionId","activeSectionId","droppedFeature","newFeature","instanceIdToDelete","parentSectionId","comp","validationParentNode","moveNodeBeforeTarget","moveNodeToParent","addNodeBeforeTarget","droppedGroup","targetSectionIndex","targetSection","sourceIdString","newGroupItem","updatedSection","searchBar","sortableList","oldSortableIndex","newSortableIndex","finalLayout","targetZoneType","newComponent","SCREEN_CONTENT_WIDTH","OverlayMobileSearchBar","OverlayMobileSection","OverlayFeatureTile","OverlaySidebarFeature","iconElement","getActiveLayoutItem","sourceItem","itemType","programFeature","layoutNode","renderActiveOverlay","isDraggingSortable","isDraggingTopLevel","isDraggingFeatureTile","isDraggingProgramFeatureTile","sortableSectionIds","customCollisionDetection","args","droppableContainers","container","rectIntersection","dashboardDropTargets","targetType","validSectionDropTargets","CustomDropdown","TrashZone","faGear","FormControlLabel","DragOverlay","CustomConfirmationModal","DialogTitle","List","ListItem","ListItemText","DialogActions","keySet","hasOnLoadError","faTrashCan","svgHtml","setSvgHtml","serializedSvg"],"mappings":"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"}