@argusoft/medplat-core 1.0.30 → 1.0.32

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 (226) hide show
  1. package/dist/{AccessRights-xrday-L1.js → AccessRights-DBjTQA1-.js} +395 -390
  2. package/dist/AccessRights-DBjTQA1-.js.map +1 -0
  3. package/dist/{AddFeatures-D1sU8RjY.js → AddFeatures-COj4ZTIM.js} +2 -2
  4. package/dist/{AddFeatures-D1sU8RjY.js.map → AddFeatures-COj4ZTIM.js.map} +1 -1
  5. package/dist/AddMenuConfiguration-Creeib5X.js +11223 -0
  6. package/dist/AddMenuConfiguration-Creeib5X.js.map +1 -0
  7. package/dist/AddMenuConfiguration.css +1 -1
  8. package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js → BrandsPage-CdcAvaml-ZtVTX6vX.js} +43 -43
  9. package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js.map → BrandsPage-CdcAvaml-ZtVTX6vX.js.map} +1 -1
  10. package/dist/{CategoriesPage-BsS5IQh3-B03lWRY5.js → CategoriesPage-BprQEYJw-CclreTv1.js} +109 -102
  11. package/dist/CategoriesPage-BprQEYJw-CclreTv1.js.map +1 -0
  12. package/dist/{ChangePasswordModalCore-BPsJquTS.js → ChangePasswordModalCore-DZGOkbRY.js} +3 -3
  13. package/dist/{ChangePasswordModalCore-BPsJquTS.js.map → ChangePasswordModalCore-DZGOkbRY.js.map} +1 -1
  14. package/dist/ConditionConfig-Bpm6OoV5.js +408 -0
  15. package/dist/ConditionConfig-Bpm6OoV5.js.map +1 -0
  16. package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js → DashboardPage-CTiGSx71-CsYohJ5e.js} +32 -32
  17. package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js.map → DashboardPage-CTiGSx71-CsYohJ5e.js.map} +1 -1
  18. package/dist/EntityManagement-BGwJGl9k.js +62 -0
  19. package/dist/EntityManagement-BGwJGl9k.js.map +1 -0
  20. package/dist/EventConfig-BY2cgGyx.js +27 -0
  21. package/dist/{EventConfig-BmLemzX3.js.map → EventConfig-BY2cgGyx.js.map} +1 -1
  22. package/dist/EventConfigurations-B-z7xHh_.js +544 -0
  23. package/dist/EventConfigurations-B-z7xHh_.js.map +1 -0
  24. package/dist/EventConfigurations.css +1 -1
  25. package/dist/EventsExceptionModal-DafomIv6.js +188 -0
  26. package/dist/EventsExceptionModal-DafomIv6.js.map +1 -0
  27. package/dist/EventsUi-Dl_yckSA.js +263 -0
  28. package/dist/EventsUi-Dl_yckSA.js.map +1 -0
  29. package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js +112 -0
  30. package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map +1 -0
  31. package/dist/{FeatureMenu-DYJmDt7q.js → FeatureMenu-Kc73yPHH.js} +9 -5
  32. package/dist/FeatureMenu-Kc73yPHH.js.map +1 -0
  33. package/dist/{FhirServerList-DuTwnngN.js → FhirServerList-CrIHMAxz.js} +16 -16
  34. package/dist/{FhirServerList-DuTwnngN.js.map → FhirServerList-CrIHMAxz.js.map} +1 -1
  35. package/dist/{FhirServerProfile-CUOwC6Wb.js → FhirServerProfile-D3aYcpwY.js} +8 -8
  36. package/dist/{FhirServerProfile-CUOwC6Wb.js.map → FhirServerProfile-D3aYcpwY.js.map} +1 -1
  37. package/dist/{FhirServerWizard-DZI8Olku.js → FhirServerWizard-Db6Hm4bQ.js} +15 -15
  38. package/dist/{FhirServerWizard-DZI8Olku.js.map → FhirServerWizard-Db6Hm4bQ.js.map} +1 -1
  39. package/dist/{GrantPermissionModal-BDN66Atn.js → GrantPermissionModal-D7iNZd0M.js} +54 -51
  40. package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
  41. package/dist/ImmunizationConfigurationBase-lKsJZMak.js +8060 -0
  42. package/dist/ImmunizationConfigurationBase-lKsJZMak.js.map +1 -0
  43. package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js +1017 -0
  44. package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js.map +1 -0
  45. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js +1344 -0
  46. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js.map +1 -0
  47. package/dist/{ManageDynamicFeature-BU0I45dd.js → ManageDynamicFeature-CuyYfx_P.js} +104 -97
  48. package/dist/ManageDynamicFeature-CuyYfx_P.js.map +1 -0
  49. package/dist/ManageEventConfiguration-DqPbn3Oi.js +1216 -0
  50. package/dist/ManageEventConfiguration-DqPbn3Oi.js.map +1 -0
  51. package/dist/ManageEventConfiguration.css +1 -1
  52. package/dist/ManageRole-CyfpySt9.js +981 -0
  53. package/dist/ManageRole-CyfpySt9.js.map +1 -0
  54. package/dist/{ManageUser-DCFkUMV9.js → ManageUser-Dm0l833u.js} +286 -286
  55. package/dist/{ManageUser-DCFkUMV9.js.map → ManageUser-Dm0l833u.js.map} +1 -1
  56. package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js → MemberProfileCard-01d_jz3w-DYHtbgMX.js} +46 -46
  57. package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js.map → MemberProfileCard-01d_jz3w-DYHtbgMX.js.map} +1 -1
  58. package/dist/MobileAnalytics-C9oc2yAo.js +18399 -0
  59. package/dist/MobileAnalytics-C9oc2yAo.js.map +1 -0
  60. package/dist/MobileMenuManagement-BmzTPXy7.js +231 -0
  61. package/dist/MobileMenuManagement-BmzTPXy7.js.map +1 -0
  62. package/dist/MobileTypeEventConfigModal-DodU3beR.js +752 -0
  63. package/dist/MobileTypeEventConfigModal-DodU3beR.js.map +1 -0
  64. package/dist/{NewServerManagement-Cxe0dV0O.js → NewServerManagement-BdayO78D.js} +368 -352
  65. package/dist/NewServerManagement-BdayO78D.js.map +1 -0
  66. package/dist/OtherTypeEventConfigModal-D_9S50aI.js +1414 -0
  67. package/dist/OtherTypeEventConfigModal-D_9S50aI.js.map +1 -0
  68. package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js} +58 -58
  69. package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map} +1 -1
  70. package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js → PaymentsPage-CHieGNrn-BnYCtqHd.js} +37 -37
  71. package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js.map → PaymentsPage-CHieGNrn-BnYCtqHd.js.map} +1 -1
  72. package/dist/{PermissionsModal-CCYkcKlC.js → PermissionsModal-Dxbkkrqe.js} +18 -18
  73. package/dist/PermissionsModal-Dxbkkrqe.js.map +1 -0
  74. package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js} +2 -2
  75. package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map} +1 -1
  76. package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js +801 -0
  77. package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js.map +1 -0
  78. package/dist/{PickupsPage-Ctpghavs-CUp4uIZq.js → PickupsPage-BWblMlic-CWkgeBw0.js} +132 -132
  79. package/dist/PickupsPage-BWblMlic-CWkgeBw0.js.map +1 -0
  80. package/dist/PmGuard-BvUUbU80-BpYNaDzl.js +641 -0
  81. package/dist/PmGuard-BvUUbU80-BpYNaDzl.js.map +1 -0
  82. package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js +1523 -0
  83. package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map +1 -0
  84. package/dist/{ProductsPage-CupVmOD4-D45a_hf-.js → ProductsPage-BI22nPb4-CQBjnc-n.js} +44 -43
  85. package/dist/ProductsPage-BI22nPb4-CQBjnc-n.js.map +1 -0
  86. package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js +724 -0
  87. package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map +1 -0
  88. package/dist/{PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js → PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js} +428 -418
  89. package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map +1 -0
  90. package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js} +65 -65
  91. package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map} +1 -1
  92. package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js → PurchasesPage-Djl1AqD_-DXeYFMrX.js} +55 -55
  93. package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js.map → PurchasesPage-Djl1AqD_-DXeYFMrX.js.map} +1 -1
  94. package/dist/{RoleManagement-s8iNx2Mu.js → RoleManagement-DVYufwy-.js} +3 -3
  95. package/dist/{RoleManagement-s8iNx2Mu.js.map → RoleManagement-DVYufwy-.js.map} +1 -1
  96. package/dist/Roles-BoNGJhtR.js +19 -0
  97. package/dist/Roles-BoNGJhtR.js.map +1 -0
  98. package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js → SaleCreatePage-DHBLmlBr-BlgjVsq6.js} +39 -39
  99. package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map → SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map} +1 -1
  100. package/dist/{SalesPage-D18DCseD-BxktGDRQ.js → SalesPage-eF9Yr42z-BQ9FlXC3.js} +61 -61
  101. package/dist/{SalesPage-D18DCseD-BxktGDRQ.js.map → SalesPage-eF9Yr42z-BQ9FlXC3.js.map} +1 -1
  102. package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js +741 -0
  103. package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js.map +1 -0
  104. package/dist/{ShowFlywayQuery-D1y_4A1u.js → ShowFlywayQuery-DIOUdYfG.js} +26 -19
  105. package/dist/{ShowFlywayQuery-D1y_4A1u.js.map → ShowFlywayQuery-DIOUdYfG.js.map} +1 -1
  106. package/dist/{StorageUnitsPage-7EqwuMOI-BwUso1Th.js → StorageUnitsPage-CTEVuemZ-B4osG74N.js} +253 -223
  107. package/dist/StorageUnitsPage-CTEVuemZ-B4osG74N.js.map +1 -0
  108. package/dist/{SubMenu-eEDhZUvh.js → SubMenu-OO2zhKiu.js} +5 -3
  109. package/dist/SubMenu-OO2zhKiu.js.map +1 -0
  110. package/dist/{TableDetails-BtafRxXb.js → TableDetails-Cc40dEUs.js} +272 -267
  111. package/dist/TableDetails-Cc40dEUs.js.map +1 -0
  112. package/dist/{TableList-Dpo6dO7S.js → TableList-B5tX4wII.js} +316 -312
  113. package/dist/TableList-B5tX4wII.js.map +1 -0
  114. package/dist/{TransactionsPage-DrH53pVS-BkhIGB6C.js → TransactionsPage-Zuu7sjID-B-ACzvd1.js} +195 -180
  115. package/dist/TransactionsPage-Zuu7sjID-B-ACzvd1.js.map +1 -0
  116. package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js +635 -0
  117. package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map +1 -0
  118. package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js +600 -0
  119. package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js.map +1 -0
  120. package/dist/TypeConfiguration-EaFiOzRE.js +114 -0
  121. package/dist/TypeConfiguration-EaFiOzRE.js.map +1 -0
  122. package/dist/UserList-Cf5B-o_1.js +1904 -0
  123. package/dist/UserList-Cf5B-o_1.js.map +1 -0
  124. package/dist/Users-MC7txo1V.js +43 -0
  125. package/dist/{Users-Bpc4Sazd.js.map → Users-MC7txo1V.js.map} +1 -1
  126. package/dist/VaccineEducation-T_UE57Ef.js +231 -0
  127. package/dist/VaccineEducation-T_UE57Ef.js.map +1 -0
  128. package/dist/VaccineEducation.css +1 -0
  129. package/dist/VaccineEducationConfigurator-CWc20_rv.js +50948 -0
  130. package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +1 -0
  131. package/dist/VaccineEducationConfigurator.css +4 -0
  132. package/dist/VaccineEducationList-Ok7_5EFb.js +334 -0
  133. package/dist/VaccineEducationList-Ok7_5EFb.js.map +1 -0
  134. package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js +457 -0
  135. package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js.map +1 -0
  136. package/dist/{constants-ClZJY2x1-MkSWn6TZ.js → constants-BTpJFQe_-CYPZIqQF.js} +166 -56
  137. package/dist/constants-BTpJFQe_-CYPZIqQF.js.map +1 -0
  138. package/dist/dashboardLayoutUtils--xUnoKPa.js +615 -0
  139. package/dist/dashboardLayoutUtils--xUnoKPa.js.map +1 -0
  140. package/dist/index-mfoqII2U.js +524 -0
  141. package/dist/index-mfoqII2U.js.map +1 -0
  142. package/dist/{index-D9YNFPn9.js → index-o8Pyt1Bt.js} +445 -439
  143. package/dist/index-o8Pyt1Bt.js.map +1 -0
  144. package/dist/index.css +1 -1
  145. package/dist/index.js +1 -1
  146. package/dist/index.lib-BySa9-Z-.js +936 -0
  147. package/dist/index.lib-BySa9-Z-.js.map +1 -0
  148. package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js +43 -0
  149. package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js.map +1 -0
  150. package/package.json +5 -1
  151. package/dist/AccessRights-xrday-L1.js.map +0 -1
  152. package/dist/AddMenuConfiguration-e5BVXhmw.js +0 -8547
  153. package/dist/AddMenuConfiguration-e5BVXhmw.js.map +0 -1
  154. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +0 -1
  155. package/dist/ConditionConfig-Ddz9halE.js +0 -395
  156. package/dist/ConditionConfig-Ddz9halE.js.map +0 -1
  157. package/dist/ConditionConfig.css +0 -1
  158. package/dist/EntityManagement-CPQL6qBj.js +0 -50
  159. package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
  160. package/dist/EventConfig-BmLemzX3.js +0 -26
  161. package/dist/EventConfigurations-Bzh1qWXU.js +0 -450
  162. package/dist/EventConfigurations-Bzh1qWXU.js.map +0 -1
  163. package/dist/EventsExceptionModal-B2SRrnB1.js +0 -200
  164. package/dist/EventsExceptionModal-B2SRrnB1.js.map +0 -1
  165. package/dist/EventsSkeleton-BIcPks4T.js +0 -61
  166. package/dist/EventsSkeleton-BIcPks4T.js.map +0 -1
  167. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +0 -79
  168. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +0 -1
  169. package/dist/FeatureMenu-DYJmDt7q.js.map +0 -1
  170. package/dist/GrantPermissionModal-BDN66Atn.js.map +0 -1
  171. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +0 -7639
  172. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +0 -1
  173. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +0 -665
  174. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +0 -1
  175. package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
  176. package/dist/ManageEventConfiguration-CoYcpjR9.js +0 -1085
  177. package/dist/ManageEventConfiguration-CoYcpjR9.js.map +0 -1
  178. package/dist/ManageRole-CNZBRKGU.js +0 -776
  179. package/dist/ManageRole-CNZBRKGU.js.map +0 -1
  180. package/dist/MobileAnalytics-pQoE8cG1.js +0 -16888
  181. package/dist/MobileAnalytics-pQoE8cG1.js.map +0 -1
  182. package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
  183. package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
  184. package/dist/MobileTypeEventConfigModal-BeveaX0C.js +0 -783
  185. package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +0 -1
  186. package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
  187. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js +0 -2046
  188. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +0 -1
  189. package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
  190. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +0 -783
  191. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +0 -1
  192. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +0 -1
  193. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +0 -599
  194. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +0 -1
  195. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +0 -1302
  196. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +0 -1
  197. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +0 -1
  198. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +0 -648
  199. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +0 -1
  200. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +0 -1
  201. package/dist/Roles-BIyiic67.js +0 -14
  202. package/dist/Roles-BIyiic67.js.map +0 -1
  203. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +0 -747
  204. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +0 -1
  205. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +0 -1
  206. package/dist/SubMenu-eEDhZUvh.js.map +0 -1
  207. package/dist/TableDetails-BtafRxXb.js.map +0 -1
  208. package/dist/TableList-Dpo6dO7S.js.map +0 -1
  209. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +0 -1
  210. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +0 -315
  211. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +0 -1
  212. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +0 -476
  213. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +0 -1
  214. package/dist/TypeConfiguration-3O6ABrK-.js +0 -117
  215. package/dist/TypeConfiguration-3O6ABrK-.js.map +0 -1
  216. package/dist/UserList-DgPxsnj2.js +0 -1129
  217. package/dist/UserList-DgPxsnj2.js.map +0 -1
  218. package/dist/Users-Bpc4Sazd.js +0 -41
  219. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +0 -321
  220. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +0 -1
  221. package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +0 -1
  222. package/dist/dashboardLayoutUtils-D1xCAxp3.js +0 -405
  223. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
  224. package/dist/index-D9YNFPn9.js.map +0 -1
  225. package/dist/index.lib-Dn8PMkeD.js +0 -862
  226. package/dist/index.lib-Dn8PMkeD.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddMenuConfiguration-Creeib5X.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';\nimport { svgToCssUrl } from './dashboardLayoutUtils';\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, isDarkMode, validationAttempted } = useContext(PreviewContext);\n const [currentIndex, setCurrentIndex] = useState(0);\n const images = node.images || [];\n\n useEffect(() => {\n if (!isPreviewMode || images.length <= 1 || node.autoScrollEnabled === false) return;\n const intervalTime = node.autoScrollInterval || 3500;\n const timer = setInterval(() => {\n setCurrentIndex((prevIndex) => (prevIndex + 1) % images.length);\n }, intervalTime);\n return () => clearInterval(timer);\n }, [isPreviewMode, images.length, node.autoScrollEnabled, node.autoScrollInterval]);\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 || 160;\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 sx={{ width: '100%' }}>\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?.svg ? (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n backgroundImage: svgToCssUrl(activeImage.svg),\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\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 && !isPreviewMode && (\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 )}\n </Box>\n\n {images.length > 1 && (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '4px',\n mt: 1,\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 ? 16 : 8,\n height: 8,\n borderRadius: '4px',\n backgroundColor: idx === currentIndex\n ? (isDarkMode ? '#818cf8' : '#4f46e5')\n : (isDarkMode ? '#475569' : '#cbd5e1'),\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n />\n ))}\n </Box>\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 IconButton,\n MenuItem,\n Paper,\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, useEffect, useLayoutEffect, useMemo, useRef, 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 BOTTOM_NAV_TAB_TYPES,\n DEFAULT_BACKGROUND_OPACITY,\n} from '@/utils/FormConstants';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { findNodeById, isSelfEmptyNode, getComponentLabel, orderNodesBySticky, svgToCssUrl } 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: 18,\n Large: 16,\n Medium: 14,\n Small: 12,\n xs: 10,\n };\n return map[sizeStr] || sizeStr || defaultSize;\n};\n\nconst mapIconSize = (sizeStr, defaultSize) => {\n const map = {\n xl: 32,\n Large: 24,\n Medium: 20,\n Small: 16,\n xs: 12,\n };\n return map[sizeStr] || sizeStr || defaultSize;\n};\n\nconst GRADIENT_DIRECTION_CSS = {\n LEFT_TO_RIGHT: 'to right',\n RIGHT_TO_LEFT: 'to left',\n TOP_TO_BOTTOM: 'to bottom',\n BOTTOM_TO_TOP: 'to top',\n TOP_LEFT_TO_BOTTOM_RIGHT: 'to bottom right',\n BOTTOM_RIGHT_TO_TOP_LEFT: 'to top left',\n TOP_RIGHT_TO_BOTTOM_LEFT: 'to bottom left',\n BOTTOM_LEFT_TO_TOP_RIGHT: 'to top right',\n};\n\nconst hexToRgba = (hex, opacity) => {\n if (typeof hex !== 'string') return hex;\n let normalized = hex.replace('#', '');\n if (normalized.length === 3) {\n normalized = normalized.split('').map((ch) => ch + ch).join('');\n }\n if (normalized.length !== 6) return hex;\n const r = parseInt(normalized.substring(0, 2), 16);\n const g = parseInt(normalized.substring(2, 4), 16);\n const b = parseInt(normalized.substring(4, 6), 16);\n const a = opacity === undefined || opacity === null ? 1 : opacity;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n\nconst resolveGradientColor = (colorValue, isDarkMode, fallback) => {\n if (colorValue && typeof colorValue === 'object') {\n return (isDarkMode ? colorValue.darkMode : colorValue.lightMode) || fallback;\n }\n return colorValue || fallback;\n};\n\nconst buildGradientCss = (background, isDarkMode) => {\n const startColor = hexToRgba(\n resolveGradientColor(background?.gradientStartColor, isDarkMode, '#ffffff'),\n background?.gradientStartOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n );\n const endColor = hexToRgba(\n resolveGradientColor(background?.gradientEndColor, isDarkMode, '#e5e7eb'),\n background?.gradientEndOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n );\n if (background?.gradientType === 'RADIAL') {\n return `radial-gradient(circle, ${startColor}, ${endColor})`;\n }\n const direction = GRADIENT_DIRECTION_CSS[background?.direction] || 'to right';\n return `linear-gradient(${direction}, ${startColor}, ${endColor})`;\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 compactToolbar,\n },\n ref,\n ) => {\n const { isPreviewMode, documentMasterImages, isDarkMode, validationAttempted } = useContext(PreviewContext);\n\n const resolveNodeBackgroundImage = (n) => {\n const svg = n?.backgroundImage?.svg;\n if (svg) return { svg };\n\n const uuid =\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 id = n?.backgroundImage?.id || n?.background?.id || null;\n if (!uuid && !id) return null;\n\n const masterImg = (documentMasterImages || []).find(\n (d) => (uuid && (d.uuid === uuid || d.documentUuid === uuid)) || (id && d.id === id)\n );\n return { img: masterImg || { uuid, id } };\n };\n\n const backdropSx = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 0,\n pointerEvents: 'none',\n overflow: 'hidden',\n borderRadius: 'inherit',\n };\n\n // The colour layer paints over the image, and its transparency lives in the colour itself\n const renderNodeBackgroundImage = (n, colorCss) => {\n const resolved = resolveNodeBackgroundImage(n);\n if (!resolved) return null;\n\n const colorOverlay = colorCss ? (\n <Box sx={{ ...backdropSx, background: colorCss }} />\n ) : null;\n\n if (resolved.svg) {\n return (\n <Box\n sx={{\n ...backdropSx,\n backgroundImage: svgToCssUrl(resolved.svg),\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n }}\n >\n {colorOverlay}\n </Box>\n );\n }\n\n return (\n <Box sx={backdropSx}>\n <ImageThumbnail\n img={resolved.img}\n height=\"100%\"\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n {colorOverlay}\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 getBackgroundCss = (n, defaultBg) =>\n n?.background?.type === 'GRADIENT'\n ? buildGradientCss(n.background, isDarkMode)\n : hexToRgba(getSolidBgColor(n, defaultBg), n?.background?.opacity ?? DEFAULT_BACKGROUND_OPACITY);\n\n // Only a colour the user actually picked tints a background image. The editor's fallback\n // surface colour is there for nodes with no background at all, and would otherwise paint\n // an opaque sheet straight over the image.\n const getConfiguredBackgroundCss = (n) => {\n if (n?.background?.type === 'GRADIENT') return buildGradientCss(n.background, isDarkMode);\n const configured = isDarkMode\n ? n?.background?.solidDarkModeColor\n : n?.background?.solidLightModeColor;\n return configured ? hexToRgba(configured, n?.background?.opacity ?? DEFAULT_BACKGROUND_OPACITY) : null;\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={\n compactToolbar || (node.type === DASHBOARD_COMPONENT_TYPES.COLUMN && node.style?.width)\n ? \"vertical\"\n : \"horizontal\"\n }\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 // A block that only shows for some users must say so on the block itself, otherwise a\n // later editor has no way to tell why it is \"missing\" on a real device.\n const VisibilityBadge = () => {\n if (isPreviewMode || !node?.visibilityConditions?.conditions) return null;\n return (\n <Tooltip title=\"Shown only when its visibility conditions are met\" arrow>\n <Box\n sx={{\n position: 'absolute',\n top: 6,\n left: 6,\n zIndex: 9,\n width: 22,\n height: 22,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // Solid fill and a ring keep the badge readable over background images and gradients.\n backgroundColor: 'primary.main',\n color: 'primary.contrastText',\n border: '2px solid',\n borderColor: 'background.paper',\n fontSize: 11,\n }}\n >\n <FontAwesomeIcons iconName=\"faEye\" />\n </Box>\n </Tooltip>\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 || 8}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 <VisibilityBadge />\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 <VisibilityBadge />\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 sectionBg = getBackgroundCss(\n node,\n isPreviewMode ? 'transparent' : (isDarkMode ? '#1e293b' : '#ffffff'),\n );\n const sectionHasBgImage = Boolean(resolveNodeBackgroundImage(node));\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 ? 1.5 : 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 || 12}px`,\n background: sectionHasBgImage ? undefined : sectionBg,\n mb: isPreviewMode ? 0 : 1,\n overflow: isPreviewMode ? 'hidden' : 'visible',\n cursor: isPreviewMode ? 'default' : 'grab',\n }}\n >\n {renderNodeBackgroundImage(node, getConfiguredBackgroundCss(node))}\n <ActionButtons />\n <VisibilityBadge />\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: 1,\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.5,\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 = getBackgroundCss(node, isDarkMode ? '#1f2937' : '#ffffff');\n const cardHasBgImage = Boolean(resolveNodeBackgroundImage(node));\n const cardFg = getFgColor(node, isDarkMode ? '#f8fafc' : '#1e293b');\n const hasIcon = Boolean(node.icon?.iconsvg || node.icon?.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 || Boolean(node.cta?.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?.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.showLeadingArrow ? '24px' : 0;\n\n const renderCtaButton = () => {\n if (!node.cta?.button) return null;\n const button = node.cta.button?.style || {};\n return (\n <Button\n variant=\"contained\"\n size=\"small\"\n sx={{\n pointerEvents: 'auto',\n minWidth: 'auto',\n textTransform: 'none',\n p: button.height ? '0 12px' : '8px 12px',\n height: button.height ? `${button.height}px` : undefined,\n minHeight: button.height ? `${button.height}px` : undefined,\n borderRadius: `${button.borderRadius ?? 8}px`,\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: isDarkMode ? (button.textColor?.darkMode || '#ffffff') : (button.textColor?.lightMode || '#ffffff'),\n background: button.backgroundStyle === 'GRADIENT'\n ? (isDarkMode\n ? `linear-gradient(90deg, ${button.backgroundGradientStart?.darkMode || '#6366f1'}, ${button.backgroundGradientEnd?.darkMode || '#f472b6'})`\n : `linear-gradient(90deg, ${button.backgroundGradientStart?.lightMode || '#4f46e5'}, ${button.backgroundGradientEnd?.lightMode || '#ec4899'})`)\n : button.backgroundStyle === 'TRANSPARENT'\n ? 'transparent'\n : (isDarkMode ? (button.backgroundColor?.darkMode || '#6366f1') : (button.backgroundColor?.lightMode || '#4f46e5')),\n border: `1px solid ${isDarkMode ? (button.borderColor?.darkMode || 'transparent') : (button.borderColor?.lightMode || 'transparent')}`,\n boxShadow: button.boxShadow\n ? `0 ${Math.round((button.boxShadowElevation ?? 4) / 2)}px ${button.boxShadowElevation ?? 4}px rgba(0,0,0,${button.boxShadowOpacity ?? 0.3})`\n : 'none',\n '&:hover': {\n opacity: 0.9,\n boxShadow: button.boxShadow\n ? `0 ${Math.round((button.boxShadowElevation ?? 4) / 2)}px ${button.boxShadowElevation ?? 4}px rgba(0,0,0,${button.boxShadowOpacity ?? 0.3})`\n : 'none',\n }\n }}\n >\n {button.iconPosition !== 'RIGHT' && button.icon && button.iconType === 'fa' && (\n <FontAwesomeIcons iconName={button.icon} style={{ marginRight: button.text ? '6px' : '0' }} />\n )}\n {button.iconPosition !== 'RIGHT' && button.icon && button.iconType === 'svg' && (\n <img src={button.icon} alt=\"cta-icon\" style={{ width: '16px', height: '16px', marginRight: button.text ? '8px' : '0' }} />\n )}\n {button.text}\n {button.iconPosition === 'RIGHT' && button.icon && button.iconType === 'fa' && (\n <FontAwesomeIcons iconName={button.icon} style={{ marginLeft: button.text ? '6px' : '0' }} />\n )}\n {button.iconPosition === 'RIGHT' && button.icon && button.iconType === 'svg' && (\n <img src={button.icon} alt=\"cta-icon\" style={{ width: '16px', height: '16px', marginLeft: button.text ? '8px' : '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 Boolean(node.cta?.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 const iconPx = mapIconSize(node.style?.iconSize, 20);\n const iconStyle = node.style || {};\n const iconColor = isDarkMode\n ? iconStyle.iconColor?.darkMode\n : iconStyle.iconColor?.lightMode;\n const iconBackgroundColor = isDarkMode\n ? (iconStyle.iconBackgroundColor?.darkMode || 'rgba(255,255,255,0.15)')\n : (iconStyle.iconBackgroundColor?.lightMode || 'rgba(0,0,0,0.15)');\n const iconBorderColor = isDarkMode\n ? iconStyle.iconBorderColor?.darkMode\n : iconStyle.iconBorderColor?.lightMode;\n const iconPadding = iconStyle.iconPadding != null\n ? iconStyle.iconPadding\n : (iconStyle.iconBackground || iconStyle.iconBorderWidth\n ? Math.max(4, Math.round(iconPx * 0.3))\n : 0);\n const iconBorderRadius = iconStyle.iconBorderRadius ?? 8;\n const iconBoxShadowElevation = iconStyle.iconBoxShadowElevation ?? 4;\n const iconBoxShadowOpacity = iconStyle.iconBoxShadowOpacity ?? 0.3;\n const iconDropShadowElevation = iconStyle.iconDropShadowElevation ?? 4;\n const iconDropShadowOpacity = iconStyle.iconDropShadowOpacity ?? 0.3;\n return (\n <Box key=\"icon\" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: `${iconBorderRadius}px`,\n backgroundColor: iconStyle.iconBackground ? iconBackgroundColor : 'transparent',\n p: `${iconPadding}px`,\n border: iconStyle.iconBorderWidth\n ? `${iconStyle.iconBorderWidth}px solid ${iconBorderColor || 'transparent'}`\n : 'none',\n boxShadow: iconStyle.iconBoxShadow\n ? `0 ${Math.round(iconBoxShadowElevation / 2)}px ${iconBoxShadowElevation}px rgba(0,0,0,${iconBoxShadowOpacity})`\n : 'none',\n filter: iconStyle.iconDropShadow\n ? `drop-shadow(0px ${Math.round(iconDropShadowElevation / 2)}px ${iconDropShadowElevation}px rgba(0,0,0,${iconDropShadowOpacity}))`\n : 'none',\n ...(iconColor\n ? {\n color: iconColor,\n '& svg': { color: iconColor },\n '& svg *': { fill: `${iconColor} !important`, stroke: `${iconColor} !important` },\n }\n : {}),\n }}\n >\n {renderFeatureIcon(node.icon?.iconsvg || node.icon?.icon, SvgIconBox, iconPx, iconColor)}\n </Box>\n </Box>\n );\n }\n if (item === 'TITLE' && hasTitle) {\n const titleColor = (isDarkMode\n ? node.style?.titleColor?.darkMode\n : node.style?.titleColor?.lightMode) || cardFg;\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: node.style?.titleFontWeight || 600, color: titleColor, 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 const subtitleColor = (isDarkMode\n ? node.style?.subtitleColor?.darkMode\n : node.style?.subtitleColor?.lightMode) || cardFg;\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), fontWeight: node.style?.subtitleFontWeight || 400, color: subtitleColor, 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' && Boolean(node.cta?.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: cardHasBgImage ? undefined : cardBg,\n color: cardFg,\n overflow: isPreviewMode ? 'hidden' : 'visible',\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, getConfiguredBackgroundCss(node))}\n <ActionButtons />\n <VisibilityBadge />\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.showLeadingArrow && (\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 <VisibilityBadge />\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: 1,\n width: '100%',\n }}\n >\n {rowChildren.map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDuplicate={onDuplicate}\n activeElementId={activeElementId}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n compactToolbar={rowChildren.length >= 3}\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 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 <VisibilityBadge />\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 <VisibilityBadge />\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, 14);\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: isPreviewMode ? 0 : 0.5,\n pt: isPreviewMode ? 0 : 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 <VisibilityBadge />\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 <VisibilityBadge />\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 compactToolbar: PropTypes.bool,\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 SvgIconBox,\n setCurrentLayoutComponents,\n appBarConfig,\n bottomNavigationConfig,\n pageParamsByFeature = {},\n onDeleteNode,\n zoomedNodeId,\n setZoomedNodeId,\n onDeselectComponent,\n workspaceTabs,\n activeWorkspaceIndex,\n onAddWorkspaceTab,\n onWorkspaceTabChange,\n onDeleteWorkspaceTab,\n onCopyWorkspaceTab,\n onPasteWorkspaceTab,\n onCopyNavSection,\n onPasteNavSection,\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 stickyNodeRefs = useRef({});\n const [stickyHeights, setStickyHeights] = useState({});\n\n const orderedLayoutComponents = useMemo(\n () => orderNodesBySticky(layoutComponents),\n [layoutComponents],\n );\n\n const overlayStickyIds = orderedLayoutComponents\n .filter((node) => node?.sticky?.type === 'OVERLAY' && node?.sticky?.position)\n .map((node) => node.id)\n .join('|');\n\n useLayoutEffect(() => {\n const ids = overlayStickyIds ? overlayStickyIds.split('|') : [];\n if (ids.length === 0) {\n setStickyHeights((prev) => (Object.keys(prev).length ? {} : prev));\n return undefined;\n }\n\n const measure = () => {\n setStickyHeights((prev) => {\n const next = {};\n let changed = ids.length !== Object.keys(prev).length;\n ids.forEach((id) => {\n const height = stickyNodeRefs.current[id]?.offsetHeight || 0;\n next[id] = height;\n if (prev[id] !== height) changed = true;\n });\n return changed ? next : prev;\n });\n };\n\n measure();\n const observer = new ResizeObserver(measure);\n ids.forEach((id) => {\n const element = stickyNodeRefs.current[id];\n if (element) observer.observe(element);\n });\n return () => observer.disconnect();\n }, [overlayStickyIds, orderedLayoutComponents]);\n\n const stickyOffsets = useMemo(() => {\n const offsets = {};\n const overlayNodes = orderedLayoutComponents.filter(\n (node) => node?.sticky?.type === 'OVERLAY' && node?.sticky?.position,\n );\n\n let topOffset = 0;\n overlayNodes\n .filter((node) => node.sticky.position === 'TOP')\n .forEach((node) => {\n offsets[node.id] = topOffset;\n topOffset += stickyHeights[node.id] || 0;\n });\n\n let bottomOffset = 0;\n overlayNodes\n .filter((node) => node.sticky.position === 'BOTTOM')\n .reverse()\n .forEach((node) => {\n offsets[node.id] = bottomOffset;\n bottomOffset += stickyHeights[node.id] || 0;\n });\n\n return offsets;\n }, [orderedLayoutComponents, stickyHeights]);\n\n const firstBottomStickyId = orderedLayoutComponents.find(\n (node) => node?.sticky?.position === 'BOTTOM',\n )?.id;\n\n const hasStickyComponents = orderedLayoutComponents.some(\n (node) => node?.sticky?.position === 'TOP' || node?.sticky?.position === 'BOTTOM',\n );\n\n const getStickyWrapperSx = (node) => {\n const position = node?.sticky?.position;\n if (position !== 'TOP' && position !== 'BOTTOM') return null;\n\n // The bottom cluster hugs the screen bottom when the content does not fill it.\n const sx = node.id === firstBottomStickyId ? { marginTop: 'auto' } : {};\n\n if (node.sticky.type === 'OVERLAY') {\n Object.assign(sx, {\n position: 'sticky',\n zIndex: 20,\n backgroundColor: 'var(--color-background)',\n ...(position === 'TOP'\n ? { top: `${stickyOffsets[node.id] || 0}px` }\n : { bottom: `${stickyOffsets[node.id] || 0}px` }),\n });\n }\n\n return Object.keys(sx).length > 0 ? sx : null;\n };\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 isMenuTypeTab = (tabId) =>\n (bottomNavigationConfig || []).find((tab) => tab.id === tabId)?.tabType === BOTTOM_NAV_TAB_TYPES.MENU;\n\n const showsBottomNavigation = (tabId) => {\n const tab = (bottomNavigationConfig || []).find((t) => t.id === tabId);\n if (!tab) return true;\n return tab.showBottomNavigation ?? tab.tabType !== BOTTOM_NAV_TAB_TYPES.MENU;\n };\n\n const getFirstVisibleNavTabId = () =>\n [...(bottomNavigationConfig || [])]\n .sort((a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0))\n .find((tab) => tab.visible !== false && showsBottomNavigation(tab.id))?.id;\n\n const lastActiveLayoutTabIdRef = useRef(activeTabId);\n useEffect(() => {\n if (showsBottomNavigation(activeTabId)) {\n lastActiveLayoutTabIdRef.current = activeTabId;\n }\n }, [activeTabId, bottomNavigationConfig]);\n const isBottomNavBarHidden = !showsBottomNavigation(activeTabId);\n const hasSingleNavTab = (bottomNavigationConfig || []).length <= 1;\n\n const handleBackToBottomNavigation = () => {\n const target = showsBottomNavigation(lastActiveLayoutTabIdRef.current)\n ? lastActiveLayoutTabIdRef.current\n : getFirstVisibleNavTabId();\n if (target) handleTabSwitch(target);\n };\n\n // Bottom-nav section copy/paste (Layout Configuration tabs only)\n const [hoveredNavItemId, setHoveredNavItemId] = useState(null);\n\n const dropZoneId = 'mobile-content';\n const dropZoneType = isMenuTypeTab(activeTabId)\n ? 'MENU_ROOT_DROP_ZONE'\n : 'LAYOUT_ROOT_DROP_ZONE';\n const zoomedNode =\n zoomedNodeId && !isMenuTypeTab(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={!isMenuTypeTab(activeTabId) ? setDroppableRef : null}\n onClick={() => onDeselectComponent && onDeselectComponent()}\n style={{\n border:\n !isMenuTypeTab(activeTabId) && isOver\n ? '2px dashed var(--color-tableHeader)'\n : 'none',\n backgroundColor:\n !isMenuTypeTab(activeTabId) && isOver\n ? 'var(--color-gray4)'\n : 'transparent',\n minHeight: '300px',\n maxHeight: 'calc(100% - 110px)',\n height: isMenuTypeTab(activeTabId) ? 'calc(100% - 110px)' : undefined,\n overflowY: 'auto',\n padding: '8px',\n }}\n >\n {isMenuTypeTab(activeTabId) ? (\n <>\n {layoutComponents && layoutComponents.length > 0 ? (\n <>\n {(() => {\n const feature = layoutComponents[0];\n const formInfo = pageParamsByFeature?.[String(feature.id)];\n const navigationAction = feature.navigationAction || formInfo?.formCode || '';\n const configuredParams = Array.isArray(feature.pageParams) ? feature.pageParams : [];\n return (\n <Box\n sx={{\n width: '100%',\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography\n variant='body2'\n sx={{ maxWidth: '85%', mb: 1.5, textAlign: 'center', color: 'var(--color-text)' }}\n >\n This tab will open{' '}\n <strong>{navigationAction || 'this feature'}</strong>\n {' '}when tapped.\n </Typography>\n <Box\n sx={{\n width: '100%',\n maxWidth: '85%',\n p: 1.5,\n textAlign: 'left',\n backgroundColor: 'var(--color-background2)',\n borderRadius: '8px',\n border: '1px solid var(--color-gray3)',\n }}\n >\n <SortableContext\n items={layoutComponents.map((f) => f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1} sx={{ width: '100%', m: 0, justifyContent: 'center' }}>\n {layoutComponents.map((f) => renderFeatureTile(f))}\n </Grid>\n </SortableContext>\n <Typography variant='caption' sx={{ display: 'block', mt: 1, color: 'var(--color-text)' }}>\n Form / Screen: {navigationAction || 'Not linked to a form yet'}\n </Typography>\n <Typography\n variant='caption'\n sx={{ display: 'block', mt: 1, fontWeight: 'bold', color: 'var(--color-text)' }}\n >\n Page Params\n </Typography>\n {configuredParams.length > 0 ? (\n configuredParams.map((param) => (\n <Typography\n key={param.paramName}\n variant='caption'\n sx={{ display: 'block', color: 'var(--color-text)' }}\n >\n {param.paramName}: {param.paramValue || '—'}\n </Typography>\n ))\n ) : (\n <Typography\n variant='caption'\n sx={{ display: 'block', fontStyle: 'italic', color: 'var(--color-text)' }}\n >\n No page params configured.\n </Typography>\n )}\n </Box>\n </Box>\n );\n })()}\n </>\n ) : (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ mt: 5, textAlign: 'center', color: 'var(--color-text)' }}\n >\n {isOver\n ? 'Drop a feature here (Groups are not allowed).'\n : 'Add a feature onto the screen to configure this tab.'}\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 <Box\n sx={\n hasStickyComponents\n ? { display: 'flex', flexDirection: 'column', minHeight: '100%' }\n : { display: 'contents' }\n }\n >\n {orderedLayoutComponents.map((component, index) => {\n const stickySx = getStickyWrapperSx(component);\n const sectionNode = (\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 if (!stickySx) return sectionNode;\n\n return (\n <Box\n key={component.id}\n ref={(element) => {\n stickyNodeRefs.current[component.id] = element;\n }}\n sx={stickySx}\n >\n {sectionNode}\n </Box>\n );\n })}\n </Box>\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 {isBottomNavBarHidden ? (\n hasSingleNavTab ? null : (\n <div\n className='nav-bar-v2'\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8, cursor: 'pointer' }}\n onClick={(e) => {\n e.stopPropagation();\n handleBackToBottomNavigation();\n }}\n >\n <FontAwesomeIcon icon={faArrowLeft} style={{ fontSize: '12px' }} />\n <Typography variant='caption'>Back</Typography>\n </div>\n )\n ) : (\n <div className='nav-bar-v2'>\n {visibleNavItems.map((item) => (\n <div\n key={item.id}\n className='nav-item-wrapper-v2'\n onMouseEnter={() => setHoveredNavItemId(item.id)}\n onMouseLeave={() => setHoveredNavItemId(null)}\n >\n {!isMenuTypeTab(item.id) && hoveredNavItemId === item.id && (\n <div className='nav-item-toolbar-hitzone-v2'>\n <div className='nav-item-toolbar-v2' onClick={(e) => e.stopPropagation()}>\n <Tooltip title={`Copy ${item.label} layout`} arrow>\n <IconButton\n size='small'\n onClick={(e) => {\n e.stopPropagation();\n onCopyNavSection && onCopyNavSection(item.id);\n }}\n >\n <FontAwesomeIcon icon={faCopy} style={{ fontSize: '12px' }} />\n </IconButton>\n </Tooltip>\n <Tooltip title={`Append & Paste into ${item.label}`} arrow>\n <IconButton\n size='small'\n onClick={(e) => {\n e.stopPropagation();\n onPasteNavSection && onPasteNavSection(item.id, 'append');\n }}\n >\n <FontAwesomeIcon icon={faPlus} style={{ fontSize: '12px' }} />\n </IconButton>\n </Tooltip>\n <Tooltip title={`Replace & Paste into ${item.label}`} arrow>\n <IconButton\n size='small'\n onClick={(e) => {\n e.stopPropagation();\n onPasteNavSection && onPasteNavSection(item.id, 'replace');\n }}\n >\n <FontAwesomeIcon icon={faPaste} style={{ fontSize: '12px' }} />\n </IconButton>\n </Tooltip>\n </div>\n </div>\n )}\n <Tooltip title={item.label} placement='bottom' arrow>\n <div\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.iconSvg ? (\n renderFeatureIcon(item.iconSvg, SvgIconBox, 18)\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 </div>\n ))}\n </div>\n )}\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 SvgIconBox: PropTypes.any,\n setCurrentLayoutComponents: PropTypes.any,\n appBarConfig: PropTypes.any,\n bottomNavigationConfig: PropTypes.any,\n pageParamsByFeature: PropTypes.object,\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 onCopyNavSection: PropTypes.func,\n onPasteNavSection: 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, size = 32, color) => {\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: `${size}px`,\n width: `${size}px`,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: color || undefined,\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: `${size}px`,\n width: `${size}px`,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: color || 'var(--color-primary)',\n }}\n >\n <FontAwesomeIcons iconName={svgContent} style={{ fontSize: `${size}px`, width: `${size}px`, height: `${size}px` }} />\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: `${size}px`,\n width: `${size}px`,\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 autoScrollEnabled: true,\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 });\n \n const row = createLayoutNode(DASHBOARD_COMPONENT_TYPES.ROW);\n row.children.push(card);\n\n return row;\n};\n\n// A column of rows, each row holding a set of feature cards. A row lays its children out as\n// equal grid columns and caps at four, so four cards per row is the widest that renders evenly.\nexport const createFeatureCardGridBlock = (rowCount = 2, cardsPerRow = 4) => {\n const column = createLayoutNode(DASHBOARD_COMPONENT_TYPES.COLUMN);\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = createLayoutNode(DASHBOARD_COMPONENT_TYPES.ROW);\n for (let cardIndex = 0; cardIndex < cardsPerRow; cardIndex++) {\n row.children.push(createLayoutNode(DASHBOARD_COMPONENT_TYPES.FEATURE_CARD));\n }\n column.children.push(row);\n }\n\n return column;\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 FeatureCardGridPreview = () => (\n <PreviewBox>\n <Box sx={{ display: \"grid\", gridTemplateColumns: \"repeat(4, 1fr)\", gap: \"2px\", width: \"80%\" }}>\n {[...Array(8)].map((_, i) => (\n <Box key={i} sx={{ height: 10, 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 createFeatureCardGridBlock,\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 FeatureCardGridPreview,\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 Card Grid\", Preview: FeatureCardGridPreview, factory: () => createFeatureCardGridBlock(2, 4) },\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, useRef, useMemo } 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, IconButton, Chip, Tooltip } 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 {\n DndContext,\n PointerSensor,\n KeyboardSensor,\n closestCenter,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from \"@dnd-kit/sortable\";\nimport { restrictToVerticalAxis, restrictToParentElement } from \"@dnd-kit/modifiers\";\nimport { CSS } from \"@dnd-kit/utilities\";\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 STICKY_POSITION_OPTIONS,\n STICKY_TYPE_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 MOBILE_ACTION_TYPES,\n CALL_TO_ACTION_TYPES,\n CALL_TO_ACTION_TYPE_OPTIONS,\n CountryDialCodes,\n BOTTOM_NAV_TAB_TYPES,\n BOTTOM_NAV_TAB_TYPE_OPTIONS,\n MAX_BOTTOM_NAVIGATION_TABS,\n DASHBOARD_COMPONENT_TYPES,\n DEFAULT_BACKGROUND_OPACITY,\n} from \"@/utils/FormConstants\";\nimport { extractPlaceholderKeys } from \"@/utils/PlaceholderUtil\";\nimport { generateUUID } from \"@/utils/UUIDgenerator\";\nimport { svgToCssUrl } from \"./dashboardLayoutUtils\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\n\nconst ACTION_TYPE_OPTIONS = [\n { label: \"Navigate to Feature\", value: MOBILE_ACTION_TYPES.NAVIGATE },\n { label: \"Call to Action\", value: MOBILE_ACTION_TYPES.CALL_TO_ACTION },\n { label: \"None\", value: MOBILE_ACTION_TYPES.NONE },\n];\n\nconst renderActionFields = (actionType, navigationFields, callToActionFields) => {\n if (actionType === MOBILE_ACTION_TYPES.NONE) return null;\n return actionType === MOBILE_ACTION_TYPES.NAVIGATE ? navigationFields : callToActionFields;\n};\n\nconst COUNTRY_CODE_SOURCE_OPTIONS = [\n { label: \"Static (pick a country)\", value: \"STATIC\" },\n { label: \"Dynamic (from profile data)\", value: \"DYNAMIC\" },\n];\n\nconst CUSTOM_PARAM_SOURCE_OPTIONS = [\n { label: \"Text with placeholders\", value: \"TEMPLATE\" },\n { label: \"Value\", value: \"VALUE\" },\n];\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 CallToActionValueField = ({ label, value, valueType, onChange, helperText }) => {\n const isCustomValue = valueType === OPERAND_TYPES.CUSTOM_VALUE;\n const isCustomPath = valueType === OPERAND_TYPES.CUSTOM_PATH;\n const displayValue = isCustomValue\n ? CUSTOM_VALUE_OPTION\n : isCustomPath\n ? CUSTOM_PATH_OPTION\n : value || \"\";\n\n const handleValueChange = (newValue) => {\n const val = newValue || \"\";\n if (val === CUSTOM_VALUE_OPTION) {\n onChange({ value: \"\", valueType: OPERAND_TYPES.CUSTOM_VALUE });\n } else if (val === CUSTOM_PATH_OPTION) {\n onChange({ value: \"\", valueType: OPERAND_TYPES.CUSTOM_PATH });\n } else {\n onChange({ value: val, valueType: classifyNavParamValue(val) });\n }\n };\n\n return (\n <Box>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 1.5, alignItems: \"flex-start\" }}>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={NAV_PARAM_OPERAND_OPTIONS}\n value={displayValue || null}\n onChange={(event, newValue) => handleValueChange(newValue)}\n onBlur={(event) => {\n const typed = event.target.value;\n if (typed && typed !== displayValue) handleValueChange(typed);\n }}\n renderInput={(params) => (\n <TextField {...params} label={label} placeholder=\"Select value source, or type a custom value\" />\n )}\n sx={{ flex: (isCustomValue || isCustomPath) ? \"1 1 calc(50% - 12px)\" : \"1 1 100%\" }}\n />\n {(isCustomValue || isCustomPath) && (\n <TextField\n size=\"small\"\n label={isCustomValue ? \"Custom Value\" : \"Custom Path\"}\n value={value || \"\"}\n onChange={(e) => onChange({ value: e.target.value })}\n sx={{ flex: \"1 1 calc(50% - 12px)\" }}\n />\n )}\n </Box>\n {helperText && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {helperText}\n </Typography>\n )}\n </Box>\n );\n};\nCallToActionValueField.propTypes = {\n label: PropTypes.string,\n value: PropTypes.string,\n valueType: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n helperText: PropTypes.string,\n};\n\nconst PlaceholderInsertButton = ({ onInsert }) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const [value, setValue] = useState(\"\");\n const [valueType, setValueType] = useState(\"\");\n const [name, setName] = useState(\"\");\n const open = Boolean(anchorEl);\n\n const resetAndClose = () => {\n setAnchorEl(null);\n setValue(\"\");\n setValueType(\"\");\n setName(\"\");\n };\n\n const handleValueChange = (newValue) => {\n const val = newValue || \"\";\n if (val === CUSTOM_VALUE_OPTION) {\n setValue(\"\");\n setValueType(OPERAND_TYPES.CUSTOM_VALUE);\n setName(\"\");\n } else if (val === CUSTOM_PATH_OPTION) {\n setValue(\"\");\n setValueType(OPERAND_TYPES.CUSTOM_PATH);\n setName(\"\");\n } else {\n setValue(val);\n setValueType(classifyNavParamValue(val));\n setName(val);\n }\n };\n\n const isCustomValue = valueType === OPERAND_TYPES.CUSTOM_VALUE;\n const isCustomPath = valueType === OPERAND_TYPES.CUSTOM_PATH;\n const displayValue = isCustomValue ? CUSTOM_VALUE_OPTION : isCustomPath ? CUSTOM_PATH_OPTION : value;\n\n const handleInsert = () => {\n if (!name.trim() || !valueType) return;\n onInsert({ name: name.trim(), value, valueType });\n resetAndClose();\n };\n\n return (\n <>\n <Tooltip title=\"Insert a placeholder bound to a dynamic value\" arrow>\n <IconButton\n size=\"small\"\n onClick={(e) => setAnchorEl(e.currentTarget)}\n sx={{ border: \"1px solid var(--color-gray3)\", borderRadius: \"8px\", height: 40, width: 40, flexShrink: 0 }}\n >\n <FontAwesomeIcons iconName=\"faPlus\" />\n </IconButton>\n </Tooltip>\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={resetAndClose}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n transformOrigin={{ vertical: \"top\", horizontal: \"right\" }}\n >\n <Box sx={{ p: 2, width: 300, display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\n <Autocomplete\n freeSolo\n size=\"small\"\n options={NAV_PARAM_OPERAND_OPTIONS}\n value={displayValue || null}\n onChange={(event, newValue) => handleValueChange(newValue)}\n onBlur={(event) => {\n const typed = event.target.value;\n if (typed && typed !== displayValue) handleValueChange(typed);\n }}\n renderInput={(params) => (\n <TextField {...params} label=\"Value to insert\" placeholder=\"Select a source, or type a custom value\" />\n )}\n />\n {(isCustomValue || isCustomPath) && (\n <TextField\n size=\"small\"\n label={isCustomValue ? \"Custom Value\" : \"Custom Path\"}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n />\n )}\n <TextField\n size=\"small\"\n label=\"Placeholder name\"\n value={name}\n onChange={(e) => setName(e.target.value.replace(/[^a-zA-Z0-9_]/g, \"\"))}\n helperText={name ? `Inserted as {{${name}}}` : \"Letters, numbers, underscore only\"}\n />\n <Box sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1 }}>\n <Button size=\"small\" onClick={resetAndClose}>Cancel</Button>\n <Button size=\"small\" variant=\"contained\" onClick={handleInsert} disabled={!name.trim() || !valueType}>\n Insert\n </Button>\n </Box>\n </Box>\n </Popover>\n </>\n );\n};\nPlaceholderInsertButton.propTypes = {\n onInsert: PropTypes.func.isRequired,\n};\n\nconst CallToActionFields = ({ callToAction, onChange }) => {\n const cta = callToAction || {};\n const linkType = cta.linkType || \"CALL\";\n const typeConfig = CALL_TO_ACTION_TYPES[linkType] || CALL_TO_ACTION_TYPES.CALL;\n const textFieldRefs = useRef({});\n\n const handleLinkTypeChange = (newLinkType) => {\n const newTypeConfig = CALL_TO_ACTION_TYPES[newLinkType] || {};\n const clearedParams = Object.fromEntries(\n (newTypeConfig.params || []).map((param) => [param.key, \"\"]),\n );\n onChange({\n linkType: newLinkType,\n value: \"\",\n valueType: \"\",\n countryCodeType: \"STATIC\",\n countryCode: \"\",\n countryCodeValue: \"\",\n countryCodeValueType: \"\",\n baseUrl: newTypeConfig.defaultBaseUrl || \"\",\n customParams: undefined,\n subject: undefined,\n body: undefined,\n cc: undefined,\n ccValueType: undefined,\n bcc: undefined,\n bccValueType: undefined,\n text: undefined,\n placeholders: undefined,\n placeholdersType: undefined,\n ...clearedParams,\n });\n };\n\n const handleInsertPlaceholder = (paramKey, { name, value, valueType }) => {\n const currentText = cta[paramKey] || \"\";\n const token = `{{${name}}}`;\n const el = textFieldRefs.current[paramKey];\n const newText =\n el && typeof el.selectionStart === \"number\"\n ? currentText.slice(0, el.selectionStart) + token + currentText.slice(el.selectionEnd)\n : currentText\n ? `${currentText} ${token}`\n : token;\n onChange({\n [paramKey]: newText,\n placeholders: { ...(cta.placeholders || {}), [name]: value },\n placeholdersType: { ...(cta.placeholdersType || {}), [name]: valueType },\n });\n };\n\n const placeholderKeys = useMemo(() => {\n const keys = [];\n const collect = (text) => {\n extractPlaceholderKeys(text).forEach((key) => {\n if (!keys.includes(key)) keys.push(key);\n });\n };\n (typeConfig.params || [])\n .filter((param) => param.kind === \"TEMPLATE\")\n .forEach((param) => collect(cta[param.key]));\n (cta.customParams || [])\n .filter((row) => row.kind === \"TEMPLATE\")\n .forEach((row) => collect(row.text));\n return keys;\n }, [typeConfig, cta]);\n\n const updatePlaceholderMapping = (key, patch) => {\n const nextPlaceholders = { ...(cta.placeholders || {}) };\n const nextTypes = { ...(cta.placeholdersType || {}) };\n if (\"value\" in patch) nextPlaceholders[key] = patch.value;\n if (\"valueType\" in patch) nextTypes[key] = patch.valueType;\n onChange({ placeholders: nextPlaceholders, placeholdersType: nextTypes });\n };\n\n const updateCustomParam = (index, patch) => {\n const rows = [...(cta.customParams || [])];\n rows[index] = { ...rows[index], ...patch };\n onChange({ customParams: rows });\n };\n\n const updateCustomParamKind = (index, newKind) => {\n updateCustomParam(index, {\n kind: newKind,\n ...(newKind === \"TEMPLATE\" ? { value: \"\", valueType: \"\" } : { text: \"\" }),\n });\n };\n\n const addCustomParam = () => {\n onChange({\n customParams: [\n ...(cta.customParams || []),\n { key: \"\", kind: \"VALUE\", value: \"\", valueType: \"\", text: \"\" },\n ],\n });\n };\n\n const handleInsertCustomParamPlaceholder = (index, { name, value, valueType }) => {\n const rows = [...(cta.customParams || [])];\n const row = rows[index] || {};\n const currentText = row.text || \"\";\n const token = `{{${name}}}`;\n const el = textFieldRefs.current[`customParams.${index}`];\n const newText =\n el && typeof el.selectionStart === \"number\"\n ? currentText.slice(0, el.selectionStart) + token + currentText.slice(el.selectionEnd)\n : currentText\n ? `${currentText} ${token}`\n : token;\n rows[index] = { ...row, text: newText };\n onChange({\n customParams: rows,\n placeholders: { ...(cta.placeholders || {}), [name]: value },\n placeholdersType: { ...(cta.placeholdersType || {}), [name]: valueType },\n });\n };\n\n const removeCustomParam = (index) => {\n const rows = [...(cta.customParams || [])];\n rows.splice(index, 1);\n onChange({ customParams: rows });\n };\n\n return (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5, mb: 1 }}>\n <TextField\n select\n size=\"small\"\n fullWidth\n label=\"Call to Action Type\"\n value={linkType}\n onChange={(e) => handleLinkTypeChange(e.target.value)}\n >\n {CALL_TO_ACTION_TYPE_OPTIONS.map((key) => (\n <MenuItem key={key} value={key}>\n {CALL_TO_ACTION_TYPES[key].label}\n </MenuItem>\n ))}\n </TextField>\n\n {typeConfig.valueKind !== \"NONE\" && (\n <CallToActionValueField\n label={typeConfig.valueLabel || \"Value\"}\n value={cta.value}\n valueType={cta.valueType}\n onChange={onChange}\n helperText=\"Resolved from a custom value, custom path, or profile data when the action fires.\"\n />\n )}\n\n {typeConfig.requiresCountryCode && (\n <>\n <TextField\n select\n size=\"small\"\n fullWidth\n label=\"Country Code Source\"\n value={cta.countryCodeType || \"STATIC\"}\n onChange={(e) => onChange({ countryCodeType: e.target.value })}\n >\n {COUNTRY_CODE_SOURCE_OPTIONS.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n\n {(cta.countryCodeType || \"STATIC\") === \"STATIC\" ? (\n <Box>\n <Autocomplete\n size=\"small\"\n options={CountryDialCodes}\n getOptionLabel={(option) => `${option.name} (${option.dialCode})`}\n isOptionEqualToValue={(option, selected) => option.dialCode === selected.dialCode}\n value={CountryDialCodes.find((c) => c.dialCode === cta.countryCode) || null}\n onChange={(event, selected) => onChange({ countryCode: selected?.dialCode || \"\" })}\n renderInput={(params) => <TextField {...params} label=\"Country Code\" />}\n />\n <Typography variant=\"caption\" color=\"textSecondary\">\n Prepended when the resolved number has no country code.\n </Typography>\n </Box>\n ) : (\n <CallToActionValueField\n label=\"Country Code\"\n value={cta.countryCodeValue}\n valueType={cta.countryCodeValueType}\n onChange={(patch) =>\n onChange({\n ...(\"value\" in patch ? { countryCodeValue: patch.value } : {}),\n ...(\"valueType\" in patch ? { countryCodeValueType: patch.valueType } : {}),\n })\n }\n helperText='Resolved when the card is tapped, e.g. \"+91\" or \"91\".'\n />\n )}\n </>\n )}\n\n <TextField\n size=\"small\"\n fullWidth\n label=\"Base URL\"\n value={cta.baseUrl ?? typeConfig.defaultBaseUrl ?? \"\"}\n onChange={(e) => onChange({ baseUrl: e.target.value })}\n helperText={\n (typeConfig.defaultBaseUrl ? `Default: ${typeConfig.defaultBaseUrl}. ` : \"\") +\n (typeConfig.valueKind !== \"NONE\"\n ? \"The resolved value is appended directly after this URL.\"\n : \"The parameters below are appended to this URL as a query string.\")\n }\n />\n\n {(typeConfig.params || []).length > 0 && (\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mt: 0.5 }}>\n Optional Parameters\n </Typography>\n )}\n\n {(typeConfig.params || []).map((param) =>\n param.kind === \"EMAIL_LIST\" ? (\n <CallToActionValueField\n key={param.key}\n label={`${param.label} (optional)`}\n value={cta[param.key]}\n valueType={cta[`${param.key}ValueType`]}\n onChange={(patch) =>\n onChange({\n ...(\"value\" in patch ? { [param.key]: patch.value } : {}),\n ...(\"valueType\" in patch\n ? { [`${param.key}ValueType`]: patch.valueType }\n : {}),\n })\n }\n helperText=\"One address, or several separated by commas.\"\n />\n ) : (\n <Box key={param.key}>\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"flex-start\" }}>\n <TextField\n inputRef={(el) => {\n textFieldRefs.current[param.key] = el;\n }}\n size=\"small\"\n fullWidth\n label={`${param.label} (optional)`}\n value={cta[param.key] || \"\"}\n onChange={(e) => onChange({ [param.key]: e.target.value })}\n multiline={Boolean(param.multiline)}\n minRows={param.multiline ? 2 : undefined}\n />\n <PlaceholderInsertButton\n onInsert={(payload) => handleInsertPlaceholder(param.key, payload)}\n />\n </Box>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Use {\"{{placeholder}}\"} to insert a value resolved at runtime.\n </Typography>\n </Box>\n ),\n )}\n\n {typeConfig.paramsKind === \"DYNAMIC\" && (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Parameters\n </Typography>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Appended to the base URL as ?key=value\n </Typography>\n <Button\n size=\"small\"\n variant=\"contained\"\n startIcon={<FontAwesomeIcons iconName=\"faSquarePlus\" />}\n onClick={addCustomParam}\n >\n Add\n </Button>\n </Box>\n\n {(cta.customParams || []).length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No parameters added — the link will be the base URL on its own.\n </Typography>\n )}\n\n {(cta.customParams || []).map((row, index) => {\n const rowKind = row.kind || \"VALUE\";\n return (\n <Box\n key={index}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 1,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 1,\n }}\n >\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"flex-start\" }}>\n <TextField\n size=\"small\"\n label=\"Key\"\n value={row.key || \"\"}\n onChange={(e) => updateCustomParam(index, { key: e.target.value })}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n size=\"small\"\n label=\"Source\"\n value={rowKind}\n onChange={(e) => updateCustomParamKind(index, e.target.value)}\n sx={{ width: 210 }}\n >\n {CUSTOM_PARAM_SOURCE_OPTIONS.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n <IconButton size=\"small\" color=\"error\" onClick={() => removeCustomParam(index)} sx={{ mt: 0.5 }}>\n <FontAwesomeIcons iconName=\"faTrash\" />\n </IconButton>\n </Box>\n\n {rowKind === \"TEMPLATE\" ? (\n <Box>\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"flex-start\" }}>\n <TextField\n inputRef={(el) => {\n textFieldRefs.current[`customParams.${index}`] = el;\n }}\n size=\"small\"\n fullWidth\n label=\"Text\"\n multiline\n minRows={2}\n value={row.text || \"\"}\n onChange={(e) => updateCustomParam(index, { text: e.target.value })}\n />\n <PlaceholderInsertButton\n onInsert={(payload) => handleInsertCustomParamPlaceholder(index, payload)}\n />\n </Box>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Use {\"{{placeholder}}\"} to insert a value resolved at runtime.\n </Typography>\n </Box>\n ) : (\n <CallToActionValueField\n label=\"Value\"\n value={row.value}\n valueType={row.valueType}\n onChange={(patch) => updateCustomParam(index, patch)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n )}\n\n {placeholderKeys.length > 0 && (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\n <Divider />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Map Placeholders\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ mt: -1 }}>\n Every {\"{{placeholder}}\"} found above, and what it resolves to when the action fires.\n </Typography>\n {placeholderKeys.map((key) => (\n <Box key={key} sx={{ display: \"flex\", gap: 1.5, alignItems: \"center\" }}>\n <Tooltip title={key} arrow>\n <Chip\n label={key}\n variant=\"outlined\"\n sx={{ flex: \"0 0 30%\", maxWidth: \"30%\", justifyContent: \"flex-start\" }}\n />\n </Tooltip>\n <Box sx={{ flex: 1 }}>\n <CallToActionValueField\n label=\"Parameter Value\"\n value={cta.placeholders?.[key]}\n valueType={cta.placeholdersType?.[key]}\n onChange={(patch) => updatePlaceholderMapping(key, patch)}\n />\n </Box>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n};\nCallToActionFields.propTypes = {\n callToAction: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n};\n\n// Opacity is a solid-background setting, so switching to a gradient drops it rather than\n// leaving a value behind that no longer has a field to edit it.\nconst buildBackgroundForType = (background, type) => {\n const next = { ...(background || {}), type };\n if (type === \"GRADIENT\") delete next.opacity;\n return next;\n};\n\nconst 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\nconst 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 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.\",\n });\n return;\n }\n onUploaded(svgContent);\n showToast({ type: \"success\", message: \"SVG loaded successfully.\" });\n };\n reader.onerror = () =>\n showToast({ type: \"error\", message: \"Unable to read the SVG file.\" });\n reader.readAsText(file);\n};\n\nconst LegacyBottomNavItemRow = ({ item, isExpanded, onToggleExpand }) => (\n <Box\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-background)\",\n }}\n >\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={onToggleExpand}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") onToggleExpand();\n }}\n sx={{\n minHeight: 42,\n px: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n cursor: \"pointer\",\n backgroundColor: isExpanded ? \"action.selected\" : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\n }}\n >\n <FontAwesomeIcons iconName={item.iconName || \"faCircle\"} />\n <Typography variant=\"body2\" sx={{ fontWeight: 700, flex: 1 }} noWrap>\n {item.label}\n </Typography>\n <FontAwesomeIcons iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"} />\n </Box>\n {isExpanded && (\n <Box sx={{ p: 1 }}>\n <TextField\n label=\"Label\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={item.label || \"\"}\n disabled\n sx={{ mb: 1.5 }}\n />\n <TextField\n label=\"Navigation Icon\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={item.iconName || \"\"}\n disabled\n sx={{ mb: 1.5 }}\n />\n <TextField\n label=\"Display Order\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={item.displayOrder ?? \"\"}\n disabled\n sx={{ mb: 1.5 }}\n />\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Typography variant=\"body2\">Visible</Typography>\n <Switch checked={item.active !== false} disabled />\n </Box>\n </Box>\n )}\n </Box>\n);\nLegacyBottomNavItemRow.propTypes = {\n item: PropTypes.object.isRequired,\n isExpanded: PropTypes.bool,\n onToggleExpand: PropTypes.func,\n};\n\nconst LegacyBottomNavLockedPanel = ({ items, onMigrateClick }) => {\n const [expandedId, setExpandedId] = useState(null);\n\n return (\n <Box>\n <Alert severity=\"warning\" sx={{ mb: 1.5 }}>\n This menu still uses the legacy Bottom Navigation format. Tab configuration shown below is read-only\n — migrate Bottom Navigation to add, remove, reorder, or otherwise configure tabs.\n </Alert>\n {(items || []).map((item) => (\n <LegacyBottomNavItemRow\n key={item.id}\n item={item}\n isExpanded={expandedId === item.id}\n onToggleExpand={() => setExpandedId((prev) => (prev === item.id ? null : item.id))}\n />\n ))}\n <Button size=\"small\" variant=\"contained\" onClick={onMigrateClick} sx={{ mt: 0.5 }}>\n Migrate Bottom Navigation\n </Button>\n </Box>\n );\n};\nLegacyBottomNavLockedPanel.propTypes = {\n items: PropTypes.array,\n onMigrateClick: PropTypes.func,\n};\n\nconst SortableBottomNavItem = ({\n id,\n item,\n isExpanded,\n onToggleExpand,\n onFieldChange,\n onIconChange,\n onRemove,\n canDelete,\n isMenuTab,\n textField,\n selectField,\n renderMenuTabFeaturePicker,\n showBottomNavigationError,\n firstTabShowNavError,\n isOnlyTab,\n preferredLanguages,\n rolesList,\n}) => {\n const { setNodeRef, attributes, listeners, transform, transition, isDragging } = useSortable({ id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Box\n ref={setNodeRef}\n style={style}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-background)\",\n }}\n >\n <Box\n sx={{\n minHeight: 42,\n pl: 0.5,\n pr: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n backgroundColor: isExpanded ? \"action.selected\" : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flex: 1, minWidth: 0 }}>\n <Box\n {...attributes}\n {...listeners}\n sx={{ display: \"flex\", alignItems: \"center\", cursor: \"grab\", touchAction: \"none\", px: 0.5 }}\n title=\"Drag to reorder\"\n >\n <FontAwesomeIcons iconName=\"faGripLines\" />\n </Box>\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={onToggleExpand}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") onToggleExpand();\n }}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flex: 1, minWidth: 0, cursor: \"pointer\", py: 1 }}\n >\n {item.iconSvg || item.iconName ? (\n renderIcon(item.iconSvg || item.iconName, \"18px\")\n ) : (\n <FontAwesomeIcons iconName=\"faCircle\" />\n )}\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }} noWrap>\n {item.label || item.id}\n </Typography>\n </Box>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n <Tooltip title={canDelete ? \"Delete tab\" : \"At least one tab is required\"}>\n <span>\n <IconButton\n size=\"small\"\n disabled={!canDelete}\n onClick={(event) => {\n event.stopPropagation();\n onRemove();\n }}\n >\n <FontAwesomeIcons iconName=\"faTrashCan\" />\n </IconButton>\n </span>\n </Tooltip>\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={onToggleExpand}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") onToggleExpand();\n }}\n sx={{ display: \"flex\", alignItems: \"center\", cursor: \"pointer\" }}\n >\n <FontAwesomeIcons iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"} />\n </Box>\n </Box>\n </Box>\n {isExpanded && (\n <Box sx={{ p: 1 }}>\n {textField(\"Label\", item.label, (e) => onFieldChange(\"label\", e.target.value))}\n <Typography variant=\"body2\" sx={{ fontWeight: \"bold\", mb: 0.5 }}>\n Navigation Icon\n </Typography>\n {fontAwesomeIconDropdown(\"Navigation Icon\", item.iconName, (icon) =>\n onIconChange({ iconName: icon, iconSvg: \"\" }),\n )}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mb: 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) => onIconChange({ iconName: \"\", iconSvg: iconsvg }));\n }}\n />\n </Button>\n {(item.iconName || item.iconSvg) && (\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() => onIconChange({ iconName: \"\", iconSvg: \"\" })}\n >\n Remove\n </Button>\n )}\n {(item.iconName || item.iconSvg) && (\n <Box\n sx={{\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 }}\n >\n {renderIcon(item.iconSvg || item.iconName, \"24px\")}\n </Box>\n )}\n </Box>\n {selectField(\n \"Tab Type\",\n item.tabType || BOTTOM_NAV_TAB_TYPES.LAYOUT,\n (e) => onFieldChange(\"tabType\", e.target.value),\n BOTTOM_NAV_TAB_TYPE_OPTIONS,\n )}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: isMenuTab ? 1 : 0,\n }}\n >\n <Box>\n <Typography variant=\"body2\">Visible</Typography>\n {isOnlyTab && (\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ display: \"block\" }}>\n The only tab must stay visible.\n </Typography>\n )}\n </Box>\n <Switch\n checked={isOnlyTab || item.visible !== false}\n disabled={isOnlyTab}\n onChange={(e) => onFieldChange(\"visible\", e.target.checked)}\n />\n </Box>\n\n {item.visible !== false && (\n <Box sx={{ mt: 1, mb: 2 }}>\n <VisibilityConditionEditor\n value={item.visibilityConditions}\n onChange={(conditions) => onFieldChange(\"visibilityConditions\", conditions)}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\n )}\n\n <Box sx={{ mb: isMenuTab ? 1 : 0 }}>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Box>\n <Typography variant=\"body2\">Show Bottom Navigation</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n When off, this tab opens without the bottom nav bar (a Back arrow returns to the last tab\n where it was shown).\n </Typography>\n </Box>\n <Switch\n checked={item.showBottomNavigation ?? !isMenuTab}\n onChange={(e) => onFieldChange(\"showBottomNavigation\", e.target.checked)}\n />\n </Box>\n {showBottomNavigationError && (\n <Alert severity=\"error\" sx={{ mt: 1, fontSize: \"0.8rem\" }}>\n At least one visible tab must have &quot;Show Bottom Navigation&quot; enabled, otherwise\n users would have no way back to the bottom navigation bar.\n </Alert>\n )}\n {firstTabShowNavError && (\n <Alert severity=\"error\" sx={{ mt: 1, fontSize: \"0.8rem\" }}>\n The first tab must have &quot;Show Bottom Navigation&quot; enabled while it is visible,\n otherwise users would land without a bottom navigation bar.\n </Alert>\n )}\n </Box>\n {isMenuTab && renderMenuTabFeaturePicker(item.id)}\n </Box>\n )}\n </Box>\n );\n};\nSortableBottomNavItem.propTypes = {\n id: PropTypes.string.isRequired,\n item: PropTypes.object.isRequired,\n isExpanded: PropTypes.bool,\n onToggleExpand: PropTypes.func.isRequired,\n onFieldChange: PropTypes.func.isRequired,\n onIconChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n canDelete: PropTypes.bool,\n isMenuTab: PropTypes.bool,\n textField: PropTypes.func.isRequired,\n selectField: PropTypes.func.isRequired,\n renderMenuTabFeaturePicker: PropTypes.func.isRequired,\n showBottomNavigationError: PropTypes.bool,\n firstTabShowNavError: PropTypes.bool,\n isOnlyTab: PropTypes.bool,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst SortableCarouselImageRow = ({\n id,\n image,\n index,\n isExpanded,\n onToggleExpand,\n documentMasterImages,\n onOpenImagePicker,\n onSelectSvg,\n onConfirmReplace,\n onFieldChange,\n onRemove,\n setPreviewImg,\n featureDropdown,\n renderNavigationParams,\n getNavigationFeatureId,\n getNavigationPageParams,\n buildNavigationTarget,\n selectField,\n preferredLanguages,\n rolesList,\n}) => {\n const { setNodeRef, attributes, listeners, transform, transition, isDragging } = useSortable({ id });\n const svgInputRef = useRef(null);\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n const selectedImg = documentMasterImages.find((img) => img.uuid === image.documentUuid);\n\n return (\n <Box\n ref={setNodeRef}\n style={style}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-background)\",\n }}\n >\n <Box\n sx={{\n minHeight: 42,\n pl: 0.5,\n pr: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n backgroundColor: isExpanded ? \"action.selected\" : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flex: 1, minWidth: 0 }}>\n <Box\n {...attributes}\n {...listeners}\n sx={{ display: \"flex\", alignItems: \"center\", cursor: \"grab\", touchAction: \"none\", px: 0.5 }}\n title=\"Drag to reorder\"\n >\n <FontAwesomeIcons iconName=\"faGripLines\" />\n </Box>\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={onToggleExpand}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") onToggleExpand();\n }}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flex: 1, minWidth: 0, cursor: \"pointer\", py: 1 }}\n >\n {selectedImg && (\n <Box sx={{ width: 28, height: 28, flexShrink: 0 }}>\n <ImageThumbnail img={selectedImg} height=\"28px\" />\n </Box>\n )}\n {!selectedImg && image.svg && (\n <Box\n sx={{\n width: 28,\n height: 28,\n flexShrink: 0,\n borderRadius: \"4px\",\n backgroundImage: svgToCssUrl(image.svg),\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n }}\n />\n )}\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 700, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}\n >\n {selectedImg?.name || (image.svg ? `SVG ${index + 1}` : `Image ${index + 1}`)}\n </Typography>\n </Box>\n </Box>\n <FontAwesomeIcons iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"} onClick={onToggleExpand} style={{ cursor: \"pointer\" }} />\n </Box>\n\n {isExpanded && (\n <Box sx={{ p: 1.5 }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 2, mb: 1, flexWrap: \"wrap\" }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n image.svg\n ? onConfirmReplace(\n \"This slide already has an SVG. Selecting an image will replace it. Are you sure?\",\n onOpenImagePicker,\n )\n : onOpenImagePicker()\n }\n >\n {image.documentUuid ? \"Change Image\" : \"Select Image\"}\n </Button>\n <input\n hidden\n ref={svgInputRef}\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, (svg) => onSelectSvg(svg));\n }}\n />\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n image.documentUuid\n ? onConfirmReplace(\n \"This slide already has an image. Uploading an SVG will replace it. Are you sure?\",\n () => svgInputRef.current?.click(),\n )\n : svgInputRef.current?.click()\n }\n >\n {image.svg ? \"Change SVG\" : \"Upload SVG\"}\n </Button>\n {image.svg && (\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,\n }}\n >\n <Box\n sx={{\n width: 50,\n height: 50,\n flexShrink: 0,\n borderRadius: \"4px\",\n backgroundColor: \"var(--color-background2)\",\n backgroundImage: svgToCssUrl(image.svg),\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n }}\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n SVG slide\n </Typography>\n <Button size=\"small\" color=\"error\" onClick={() => onSelectSvg(\"\")}>\n Remove\n </Button>\n </Box>\n )}\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\": { backgroundColor: \"rgba(0,0,0,0.02)\", borderColor: \"primary.main\" },\n }}\n onClick={() => selectedImg && setPreviewImg(selectedImg)}\n title=\"Click to preview full image\"\n >\n <Box sx={{ width: 50, height: 50, flexShrink: 0 }}>\n <ImageThumbnail img={selectedImg} height=\"50px\" />\n </Box>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}\n title={selectedImg?.name || image.documentUuid}\n >\n {selectedImg?.name || image.documentUuid}\n </Typography>\n </Box>\n )}\n </Box>\n\n {selectField(\n \"Action Type\",\n image.actionType || MOBILE_ACTION_TYPES.NAVIGATE,\n (e) => onFieldChange(\"actionType\", e.target.value),\n ACTION_TYPE_OPTIONS,\n )}\n {renderActionFields(\n image.actionType || MOBILE_ACTION_TYPES.NAVIGATE,\n <>\n {featureDropdown(\n \"Navigation Action\",\n getNavigationFeatureId(image.navigation),\n (featureId) =>\n onFieldChange(\n \"navigation\",\n buildNavigationTarget(featureId, getNavigationPageParams(image.navigation)),\n ),\n )}\n {renderNavigationParams(\n getNavigationFeatureId(image.navigation),\n getNavigationPageParams(image.navigation),\n (newPageParams) =>\n onFieldChange(\n \"navigation\",\n buildNavigationTarget(getNavigationFeatureId(image.navigation), newPageParams),\n ),\n )}\n </>,\n <CallToActionFields\n callToAction={image.callToAction}\n onChange={(patch) => onFieldChange(\"callToAction\", { ...(image.callToAction || {}), ...patch })}\n />,\n )}\n\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mt: 1, mb: 1 }}>\n <Typography variant=\"body2\">Is Visible?</Typography>\n <Switch\n checked={image.isVisible === true}\n onChange={(e) => onFieldChange(\"isVisible\", e.target.checked)}\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) => onFieldChange(\"visibilityConditions\", conditions)}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\n )}\n\n <Button size=\"small\" color=\"error\" onClick={onRemove}>\n Remove\n </Button>\n </Box>\n )}\n </Box>\n );\n};\nSortableCarouselImageRow.propTypes = {\n id: PropTypes.string.isRequired,\n image: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n isExpanded: PropTypes.bool,\n onToggleExpand: PropTypes.func.isRequired,\n documentMasterImages: PropTypes.array,\n onOpenImagePicker: PropTypes.func.isRequired,\n onSelectSvg: PropTypes.func.isRequired,\n onConfirmReplace: PropTypes.func.isRequired,\n onFieldChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n setPreviewImg: PropTypes.func.isRequired,\n featureDropdown: PropTypes.func.isRequired,\n renderNavigationParams: PropTypes.func.isRequired,\n getNavigationFeatureId: PropTypes.func.isRequired,\n getNavigationPageParams: PropTypes.func.isRequired,\n buildNavigationTarget: PropTypes.func.isRequired,\n selectField: PropTypes.func.isRequired,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst SortableAppBarActionRow = ({\n id,\n action,\n isPredefined,\n isExpanded,\n onToggleExpand,\n onFieldChange,\n onRemove,\n fontAwesomeIconDropdown,\n uploadSvgIcon,\n selectField,\n featureDropdown,\n renderNavigationParams,\n getNavigationFeatureId,\n getNavigationPageParams,\n buildNavigationTarget,\n}) => {\n const { setNodeRef, attributes, listeners, transform, transition, isDragging } = useSortable({ id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n const selectedIcon = action.icon || \"\";\n const uploadedSvg = action.iconsvg || action.svg || \"\";\n const expandable = !isPredefined;\n\n return (\n <Box\n ref={setNodeRef}\n style={style}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n backgroundColor: \"var(--color-background)\",\n }}\n >\n <Box\n sx={{\n minHeight: 42,\n pl: 0.5,\n pr: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n backgroundColor: isExpanded ? \"action.selected\" : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"action.hover\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flex: 1, minWidth: 0 }}>\n <Box\n {...attributes}\n {...listeners}\n sx={{ display: \"flex\", alignItems: \"center\", cursor: \"grab\", touchAction: \"none\", px: 0.5 }}\n title=\"Drag to reorder\"\n >\n <FontAwesomeIcons iconName=\"faGripLines\" />\n </Box>\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={expandable ? onToggleExpand : undefined}\n onKeyDown={(event) => {\n if (expandable && (event.key === \"Enter\" || event.key === \" \")) {\n onToggleExpand();\n }\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n flex: 1,\n minWidth: 0,\n cursor: expandable ? \"pointer\" : \"default\",\n }}\n >\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", width: 18, height: 18 }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon || \"faCircle\"} />\n )}\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }} noWrap>\n {action.name}\n </Typography>\n {isPredefined && (\n <Typography variant=\"caption\" sx={{ opacity: 0.6 }}>\n (Predefined)\n </Typography>\n )}\n </Box>\n </Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n {expandable && (\n <IconButton size=\"small\" onClick={onToggleExpand}>\n <FontAwesomeIcons iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"} />\n </IconButton>\n )}\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={onRemove}\n title={isPredefined ? \"Remove from Predefined Actions\" : \"Delete\"}\n >\n <FontAwesomeIcons iconName=\"faTrash\" />\n </IconButton>\n </Box>\n </Box>\n\n {expandable && 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) => onFieldChange(\"name\", e.target.value)}\n sx={{ mb: 1 }}\n />\n <Box sx={{ mb: 1 }}>\n {fontAwesomeIconDropdown(\"Icon\", selectedIcon, (icon) => onFieldChange(\"icon\", icon))}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mt: 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 onFieldChange(\"icon\", \"\");\n onFieldChange(\"iconsvg\", iconsvg);\n });\n }}\n />\n </Button>\n {uploadedSvg && (\n <Button size=\"small\" color=\"error\" onClick={() => onFieldChange(\"iconsvg\", \"\")}>\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={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon} />\n )}\n </Box>\n )}\n </Box>\n {selectField(\n \"Action Type\",\n action.actionType || MOBILE_ACTION_TYPES.NAVIGATE,\n (e) => onFieldChange(\"actionType\", e.target.value),\n ACTION_TYPE_OPTIONS,\n )}\n {renderActionFields(\n action.actionType || MOBILE_ACTION_TYPES.NAVIGATE,\n <>\n {featureDropdown(\n \"Navigation\",\n getNavigationFeatureId(action.navigation),\n (featureId) =>\n onFieldChange(\n \"navigation\",\n buildNavigationTarget(featureId, getNavigationPageParams(action.navigation)),\n ),\n )}\n {renderNavigationParams(\n getNavigationFeatureId(action.navigation),\n getNavigationPageParams(action.navigation),\n (newPageParams) =>\n onFieldChange(\n \"navigation\",\n buildNavigationTarget(getNavigationFeatureId(action.navigation), newPageParams),\n ),\n )}\n </>,\n <CallToActionFields\n callToAction={action.callToAction}\n onChange={(patch) =>\n onFieldChange(\"callToAction\", { ...(action.callToAction || {}), ...patch })\n }\n />,\n )}\n </Box>\n )}\n </Box>\n );\n};\nSortableAppBarActionRow.propTypes = {\n id: PropTypes.string.isRequired,\n action: PropTypes.object.isRequired,\n isPredefined: PropTypes.bool,\n isExpanded: PropTypes.bool,\n onToggleExpand: PropTypes.func.isRequired,\n onFieldChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n fontAwesomeIconDropdown: PropTypes.func.isRequired,\n uploadSvgIcon: PropTypes.func.isRequired,\n selectField: PropTypes.func.isRequired,\n featureDropdown: PropTypes.func.isRequired,\n renderNavigationParams: PropTypes.func.isRequired,\n getNavigationFeatureId: PropTypes.func.isRequired,\n getNavigationPageParams: PropTypes.func.isRequired,\n buildNavigationTarget: 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\n// `summary` states what the section holds while it is collapsed, so the panel can be read without opening every section in turn.\nconst FormAccordion = ({ title, children, expanded, onChange, summary }) => (\n <Accordion expanded={expanded} onChange={onChange} disableGutters elevation={0} sx={{ '&:before': { display: 'none' }, border: '1px solid var(--color-gray3)', mb: 1, borderRadius: '4px', overflow: 'hidden' }}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{\n minHeight: '40px',\n backgroundColor: 'var(--color-background2)',\n '& .MuiAccordionSummary-content': { my: 1, alignItems: 'center', gap: 1, overflow: 'hidden' },\n }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', color: 'var(--color-text)', flexShrink: 0 }}>\n {title}\n </Typography>\n {!expanded && summary && (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n noWrap\n sx={{ ml: 'auto', pl: 1, minWidth: 0 }}\n title={summary}\n >\n {summary}\n </Typography>\n )}\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 summary: PropTypes.string,\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 value={value || \"\"}\n onChange={onChange}\n sx={{\n flex: \"1 1 45%\",\n minWidth: 140,\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 = \"\",\n onAssignFeature,\n onUpdateWorkspaceTab,\n activeTabFeatures = [],\n onUpdateActiveTabFeature,\n appConfiguration = {},\n onSetMenuTabFeature,\n pageParamsByFeature = {},\n legacyBottomNavItems = null,\n hasAnyLegacyBottomNav = false,\n onMigrateBottomNavClick,\n}) => {\n const [expandedBottomNavigationItemId, setExpandedBottomNavigationItemId] =\n useState(null);\n const [expandedActionKey, setExpandedActionKey] = 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 [backgroundSourceConfirm, setBackgroundSourceConfirm] = useState({\n open: false,\n description: \"\",\n onConfirm: null,\n });\n const backgroundSvgInputRef = useRef(null);\n const closeBackgroundSourceConfirm = () =>\n setBackgroundSourceConfirm({ open: false, description: \"\", onConfirm: null });\n const activeTabType =\n bottomNavigationConfig?.find((tab) => tab.id === activeTabId)?.tabType ||\n BOTTOM_NAV_TAB_TYPES.LAYOUT;\n const isActiveTabMenuType = activeTabType === BOTTOM_NAV_TAB_TYPES.MENU;\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 // Selecting a component opens its primary section straight away. Without this, types whose\n // first section is not \"Content\" (carousel, search bar, spacers) open fully collapsed and\n // cost a click before anything can be configured.\n const primaryAccordion = useMemo(() => {\n if (!activeComponent) return \"Content\";\n if (activeComponent.blockName === \"Horizontal Spacer\" || activeComponent.blockName === \"Vertical Spacer\") {\n return \"Spacing\";\n }\n if (\n activeComponent.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL ||\n activeComponent.type === DASHBOARD_COMPONENT_TYPES.SEARCH_BAR\n ) {\n return \"Configuration\";\n }\n return \"Content\";\n }, [activeComponent]);\n\n useEffect(() => {\n setExpandedAccordion(primaryAccordion);\n }, [activeComponent?.id, primaryAccordion]);\n\n const backgroundSummary = (node) => {\n const parts = [];\n parts.push(node?.background?.type === \"GRADIENT\" ? \"Gradient\" : \"Solid\");\n if (node?.backgroundImage?.svg) parts.push(\"SVG\");\n else if (node?.backgroundImage?.documentUuid) parts.push(\"Image\");\n return parts.join(\" · \");\n };\n\n const stickySummary = (node) => {\n const position = node?.sticky?.position;\n if (position !== \"TOP\" && position !== \"BOTTOM\") return \"Not sticky\";\n const type = node?.sticky?.type === \"OVERLAY\" ? \"Overlay\" : \"Scrollable\";\n return `${position === \"TOP\" ? \"Top\" : \"Bottom\"} · ${type}`;\n };\n const [positionTab, setPositionTab] = useState(\"icon\");\n const [expandedFeatureConfigId, setExpandedFeatureConfigId] = useState(null);\n const [featureConfigSubTab, setFeatureConfigSubTab] = useState({});\n const [isFeatureConfigSectionExpanded, setIsFeatureConfigSectionExpanded] = useState(true);\n const [expandedImageId, setExpandedImageId] = useState(null);\n const [featureCardActionsTab, setFeatureCardActionsTab] = useState(\"card\");\n const imageDndSensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\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 hasCtaButton = Boolean(activeComponent?.cta?.button);\n useEffect(() => {\n if (positionTab === \"button\" && !hasCtaButton) {\n setPositionTab(\"icon\");\n }\n }, [hasCtaButton, 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 && isActiveTabMenuType);\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 && isActiveTabMenuType) {\n return activeTabFeatures || [];\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 && isActiveTabMenuType) {\n onUpdateActiveTabFeature?.(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 && isActiveTabMenuType);\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 isFeatureCard = activeComponent?.type === \"FEATURE_CARD\";\n const hideCtaTab = isFeatureCard || !activeComponent;\n const activeSubTab = hideCtaTab ? \"navigation\" : (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 ...(hideCtaTab ? [] : [{ 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 <>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ fontStyle: \"italic\", mb: 1.5 }}>\n When set, tapping this feature triggers this action instead of navigating to its screen.\n </Typography>\n {selectField(\n \"Call to Action\",\n feature.actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION ? \"ENABLED\" : \"DISABLED\",\n (e) =>\n updateAssignedFeatureProperties(feature.id, {\n actionType:\n e.target.value === \"ENABLED\"\n ? MOBILE_ACTION_TYPES.CALL_TO_ACTION\n : MOBILE_ACTION_TYPES.NAVIGATE,\n }),\n [\n { label: \"Disabled (navigate to screen)\", value: \"DISABLED\" },\n { label: \"Enabled\", value: \"ENABLED\" },\n ],\n )}\n {feature.actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION && (\n <CallToActionFields\n callToAction={feature.callToAction}\n onChange={(patch) =>\n updateAssignedFeatureProperties(feature.id, {\n callToAction: { ...(feature.callToAction || {}), ...patch },\n })\n }\n />\n )}\n </>\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 // Bottom Navigation edits apply immediately\n const updateBottomNavigationItemFields = (itemId, patch) => {\n const updatedItems = (bottomNavigationConfig || []).map((item) =>\n item.id === itemId ? { ...item, ...patch } : item,\n );\n onBottomNavigationSave?.(updatedItems);\n };\n\n const updateBottomNavigationItem = (itemId, property, value) =>\n updateBottomNavigationItemFields(itemId, { [property]: value });\n\n const addBottomNavigationItem = () => {\n const items = bottomNavigationConfig || [];\n if (items.length >= MAX_BOTTOM_NAVIGATION_TABS) return;\n const newItem = {\n id: generateUUID(),\n label: \"New Tab\",\n iconName: \"faCircle\",\n displayOrder: items.length + 1,\n visible: true,\n tabType: BOTTOM_NAV_TAB_TYPES.LAYOUT,\n showBottomNavigation: true,\n };\n setExpandedBottomNavigationItemId(newItem.id);\n onBottomNavigationSave?.([...items, newItem]);\n };\n\n const removeBottomNavigationItem = (itemId) => {\n const remainingItems = (bottomNavigationConfig || []).filter((item) => item.id !== itemId);\n const updatedItems = remainingItems.map((item, index) => ({\n ...item,\n displayOrder: index + 1,\n ...(remainingItems.length === 1 ? { visible: true } : {}),\n }));\n setExpandedBottomNavigationItemId((prev) => (prev === itemId ? null : prev));\n onBottomNavigationSave?.(updatedItems);\n };\n\n const handleBottomNavigationDragEnd = (event) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const items = bottomNavigationConfig || [];\n const oldIndex = items.findIndex((item) => item.id === active.id);\n const newIndex = items.findIndex((item) => item.id === over.id);\n if (oldIndex === -1 || newIndex === -1) return;\n const reordered = arrayMove(items, oldIndex, newIndex).map((item, index) => ({\n ...item,\n displayOrder: index + 1,\n }));\n onBottomNavigationSave?.(reordered);\n };\n\n const renderMenuTabFeaturePicker = (tabId) => {\n const assignedFeature = (appConfiguration?.[tabId] || [])[0] || null;\n const formInfo = assignedFeature ? pageParamsByFeature?.[String(assignedFeature.id)] : null;\n const pageParamNames = formInfo?.pageParams || [];\n const existingPageParams = Array.isArray(assignedFeature?.pageParams) ? assignedFeature.pageParams : [];\n\n return (\n <Box sx={{ mt: 1 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: \"bold\", mb: 0.5 }}>\n Feature\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ display: \"block\", mb: 1 }}>\n Click a feature to assign it to this tab; click the assigned feature again to remove it.\n </Typography>\n <Grid\n container\n spacing={0.5}\n sx={{ maxHeight: 220, overflowY: \"auto\", border: \"1px solid var(--color-gray3)\", borderRadius: \"6px\", p: 1 }}\n >\n {separatedFeatures.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ p: 1, fontStyle: \"italic\" }}>\n No standalone features available.\n </Typography>\n )}\n {separatedFeatures.map((feature) => {\n const isAssigned = String(assignedFeature?.id) === String(feature.id);\n return (\n <Grid item xs={12} key={feature.id}>\n <Box\n onClick={() => onSetMenuTabFeature?.(tabId, isAssigned ? null : feature)}\n sx={{\n width: \"fit-content\",\n p: \"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 \"&: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 </Grid>\n {assignedFeature && (\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n This tab will open{\" \"}\n <strong>{assignedFeature.navigationAction || formInfo?.formCode || \"this feature\"}</strong>\n {\" \"}when tapped.\n </Typography>\n )}\n {assignedFeature && (\n <Box sx={{ mt: 1.5 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: \"bold\", mb: 0.5 }}>\n Page Params\n </Typography>\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((p) => p.paramName === paramName);\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 onUpdateActiveTabFeature?.(\n assignedFeature.id,\n { navigationAction: formInfo?.formCode || \"\", pageParams: newPageParams },\n tabId,\n );\n }}\n />\n );\n })\n )}\n </Box>\n )}\n </Box>\n );\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, fieldProps = {}) =>\n textField(label, value, onChange, {\n type: \"number\",\n ...fieldProps,\n fullWidth: false,\n sx: { ...fieldSx, flex: \"1 1 45%\", minWidth: 140, ...(fieldProps.sx || {}) },\n });\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 select\n value={value || \"\"}\n onChange={onChange}\n sx={{ ...fieldSx, flex: \"1 1 45%\", minWidth: 140 }}\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, svgConfig) => {\n const selectedImg = documentMasterImages.find(\n (document) => document.uuid === value,\n );\n const svgValue = svgConfig?.value || \"\";\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, flexWrap: \"wrap\" }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n svgValue\n ? setBackgroundSourceConfirm({\n open: true,\n description:\n \"This component already has an SVG background. Selecting an image will replace it. Are you sure?\",\n onConfirm: onOpenPicker,\n })\n : onOpenPicker()\n }\n >\n {value ? \"Change Image\" : \"Select Image\"}\n </Button>\n {svgConfig && (\n <>\n <input\n hidden\n ref={backgroundSvgInputRef}\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, (svg) => svgConfig.onChange(svg));\n }}\n />\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n value\n ? setBackgroundSourceConfirm({\n open: true,\n description:\n \"This component already has a background image. Uploading an SVG will replace it. Are you sure?\",\n onConfirm: () => backgroundSvgInputRef.current?.click(),\n })\n : backgroundSvgInputRef.current?.click()\n }\n >\n {svgValue ? \"Change SVG\" : \"Upload SVG\"}\n </Button>\n </>\n )}\n {svgValue && (\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,\n }}\n >\n <Box\n sx={{\n width: 40,\n height: 40,\n flexShrink: 0,\n borderRadius: \"4px\",\n backgroundColor: \"var(--color-background2)\",\n backgroundImage: svgToCssUrl(svgValue),\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n }}\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n SVG background\n </Typography>\n <Button size=\"small\" color=\"error\" onClick={() => svgConfig.onChange(\"\")}>\n Remove\n </Button>\n </Box>\n )}\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 renderNavigationParams = (featureId, pageParams, onParamsChange) => {\n if (!featureId) return null;\n const formInfo = pageParamsByFeature?.[String(featureId)];\n const pageParamNames = formInfo?.pageParams || [];\n if (pageParamNames.length === 0) return null;\n const existingPageParams = Array.isArray(pageParams) ? pageParams : [];\n\n return (\n <Box sx={{ mt: 1, mb: 1.5 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: \"bold\", mb: 0.5 }}>\n Page Params\n </Typography>\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((p) => p.paramName === paramName);\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 onParamsChange(newPageParams);\n }}\n />\n );\n })}\n </Box>\n );\n };\n\n const getNavigationFeatureId = (navigation) =>\n navigation && typeof navigation === \"object\" ? navigation.id ?? navigation.action : navigation;\n\n const getNavigationPageParams = (navigation) =>\n navigation && typeof navigation === \"object\" && Array.isArray(navigation.pageParams)\n ? navigation.pageParams\n : [];\n\n const buildNavigationTarget = (featureId, pageParams) => {\n if (featureId === \"\" || featureId === null || featureId === undefined) return \"\";\n const feature = featureOptions.find((f) => String(f.id) === String(featureId));\n const formInfo = pageParamsByFeature?.[String(featureId)];\n const target = {\n type: DASHBOARD_COMPONENT_TYPES.FEATURE,\n id: feature?.id ?? featureId,\n menuName: feature?.name || \"\",\n };\n if (formInfo?.formCode) target.navigationAction = formInfo.formCode;\n const existingPageParams = Array.isArray(pageParams) ? pageParams : [];\n if (existingPageParams.length > 0) target.pageParams = existingPageParams;\n target.actionType = MOBILE_ACTION_TYPES.NAVIGATE;\n return target;\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 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 {(selectedIcon || 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 isPredefinedAction = (action) => PREDEFINED_ACTION_KEYS.includes(action.name);\n const getActionKey = (action, index) =>\n isPredefinedAction(action) ? action.name : action.id || `action-${index}`;\n const selectedPredefined = allActions\n .filter(isPredefinedAction)\n .map((a) => a.name);\n\n const handlePredefinedChange = (event, selectedKeys) => {\n const removedKeys = selectedPredefined.filter((key) => !selectedKeys.includes(key));\n const addedKeys = selectedKeys.filter((key) => !selectedPredefined.includes(key));\n const remaining = allActions.filter((a) => !removedKeys.includes(a.name));\n const newActions = [...remaining, ...addedKeys.map((key) => PREDEFINED_ACTIONS[key])];\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionChange = (key, property, value) => {\n const newActions = allActions.map((a, index) =>\n getActionKey(a, index) === key ? { ...a, [property]: value } : a,\n );\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionAdd = () => {\n const newAction = {\n id: crypto.randomUUID(),\n name: \"New Action\",\n icon: \"\",\n iconsvg: \"\",\n navigation: null,\n };\n onAppBarUpdate(\"actions\", [...allActions, newAction]);\n setExpandedActionKey(newAction.id);\n };\n\n const handleActionRemove = (key) => {\n const newActions = allActions.filter((a, index) => getActionKey(a, index) !== key);\n onAppBarUpdate(\"actions\", newActions);\n if (expandedActionKey === key) {\n setExpandedActionKey(null);\n }\n };\n\n const handleActionReorder = (oldIndex, newIndex) => {\n onAppBarUpdate(\"actions\", arrayMove(allActions, oldIndex, newIndex));\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 <DndContext\n sensors={imageDndSensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n onDragEnd={(event) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIndex = allActions.findIndex((a, i) => getActionKey(a, i) === active.id);\n const newIndex = allActions.findIndex((a, i) => getActionKey(a, i) === over.id);\n if (oldIndex === -1 || newIndex === -1) return;\n handleActionReorder(oldIndex, newIndex);\n }}\n >\n <SortableContext\n items={allActions.map((a, i) => getActionKey(a, i))}\n strategy={verticalListSortingStrategy}\n >\n {allActions.map((action, index) => {\n const key = getActionKey(action, index);\n const isExpanded = expandedActionKey === key;\n return (\n <SortableAppBarActionRow\n key={key}\n id={key}\n action={action}\n isPredefined={isPredefinedAction(action)}\n isExpanded={isExpanded}\n onToggleExpand={() => setExpandedActionKey(isExpanded ? null : key)}\n onFieldChange={(property, value) => handleActionChange(key, property, value)}\n onRemove={() =>\n isPredefinedAction(action)\n ? handlePredefinedChange(null, selectedPredefined.filter((k) => k !== action.name))\n : handleActionRemove(key)\n }\n fontAwesomeIconDropdown={fontAwesomeIconDropdown}\n uploadSvgIcon={uploadSvgIcon}\n selectField={selectField}\n featureDropdown={featureDropdown}\n renderNavigationParams={renderNavigationParams}\n getNavigationFeatureId={getNavigationFeatureId}\n getNavigationPageParams={getNavigationPageParams}\n buildNavigationTarget={buildNavigationTarget}\n />\n );\n })}\n </SortableContext>\n </DndContext>\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 {legacyBottomNavItems ? (\n <LegacyBottomNavLockedPanel\n items={legacyBottomNavItems}\n onMigrateClick={onMigrateBottomNavClick}\n />\n ) : (\n <>\n {hasAnyLegacyBottomNav && (\n <Alert\n severity=\"warning\"\n sx={{ mb: 1.5 }}\n action={\n <Button color=\"inherit\" size=\"small\" onClick={onMigrateBottomNavClick}>\n Migrate Bottom Navigation\n </Button>\n }\n >\n Other tab(s) in this menu still use the legacy Bottom Navigation format.\n </Alert>\n )}\n <DndContext\n sensors={imageDndSensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n onDragEnd={handleBottomNavigationDragEnd}\n >\n <SortableContext\n items={(bottomNavigationConfig || []).map((item) => item.id)}\n strategy={verticalListSortingStrategy}\n >\n {(bottomNavigationConfig || []).map((item) => {\n const navItems = bottomNavigationConfig || [];\n const hasMultipleTabs = navItems.length > 1;\n const showsBottomNav = (navItem) =>\n navItem.showBottomNavigation ?? navItem.tabType !== BOTTOM_NAV_TAB_TYPES.MENU;\n const firstNavItem = [...navItems].sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n )[0];\n const isFirstTab = hasMultipleTabs && firstNavItem?.id === item.id;\n\n return (\n <SortableBottomNavItem\n key={item.id}\n id={item.id}\n item={item}\n isExpanded={expandedBottomNavigationItemId === item.id}\n onToggleExpand={() =>\n setExpandedBottomNavigationItemId((prev) => (prev === item.id ? null : item.id))\n }\n onFieldChange={(property, value) => updateBottomNavigationItem(item.id, property, value)}\n onIconChange={(patch) => updateBottomNavigationItemFields(item.id, patch)}\n onRemove={() => removeBottomNavigationItem(item.id)}\n canDelete={hasMultipleTabs}\n isOnlyTab={!hasMultipleTabs}\n isMenuTab={item.tabType === BOTTOM_NAV_TAB_TYPES.MENU}\n textField={textField}\n selectField={selectField}\n renderMenuTabFeaturePicker={renderMenuTabFeaturePicker}\n showBottomNavigationError={\n hasMultipleTabs &&\n !navItems.some((navItem) => navItem.visible !== false && showsBottomNav(navItem))\n }\n firstTabShowNavError={\n isFirstTab && item.visible !== false && !showsBottomNav(item)\n }\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n );\n })}\n </SortableContext>\n </DndContext>\n <Box sx={{ display: \"flex\", justifyContent: \"flex-start\", mt: 1 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n disabled={(bottomNavigationConfig || []).length >= MAX_BOTTOM_NAVIGATION_TABS}\n onClick={addBottomNavigationItem}\n >\n Add Tab ({(bottomNavigationConfig || []).length}/{MAX_BOTTOM_NAVIGATION_TABS})\n </Button>\n </Box>\n </>\n )}\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 <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\n </FormAccordion>\n\n <FormAccordion title=\"Appearance\" summary={backgroundSummary(activeComponent)} expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(\n activeComponent.id,\n \"background\",\n buildBackgroundForType(activeComponent.background, e.target.value),\n ),\n BACKGROUND_TYPE_OPTIONS,\n )}\n </Box>\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 (Light Mode)\",\n activeComponent.background?.gradientStartColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: {\n ...(activeComponent.background?.gradientStartColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient End Color (Light Mode)\",\n activeComponent.background?.gradientEndColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: {\n ...(activeComponent.background?.gradientEndColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient Start Color (Dark Mode)\",\n activeComponent.background?.gradientStartColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: {\n ...(activeComponent.background?.gradientStartColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient End Color (Dark Mode)\",\n activeComponent.background?.gradientEndColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: {\n ...(activeComponent.background?.gradientEndColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\n )}\n {(activeComponent.background?.type || \"SOLID\") !== \"GRADIENT\" && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </Box>\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 value: activeComponent.backgroundImage?.svg,\n onChange: (svg) =>\n onUpdate(activeComponent.id, \"backgroundImage\", svg ? { svg } : undefined),\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 <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 \"Title Font Weight\",\n activeComponent.style?.titleFontWeight || \"700\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n titleFontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 {selectField(\n \"Subtitle Font Weight\",\n activeComponent.style?.subtitleFontWeight || \"400\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n subtitleFontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Title Color (Light Mode)\",\n activeComponent.style?.titleColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n titleColor: { ...(activeComponent.style?.titleColor || {}), lightMode: e.target.value },\n }),\n )}\n {colorField(\n \"Title Color (Dark Mode)\",\n activeComponent.style?.titleColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n titleColor: { ...(activeComponent.style?.titleColor || {}), darkMode: e.target.value },\n }),\n )}\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Subtitle Color (Light Mode)\",\n activeComponent.style?.subtitleColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n subtitleColor: { ...(activeComponent.style?.subtitleColor || {}), lightMode: e.target.value },\n }),\n )}\n {colorField(\n \"Subtitle Color (Dark Mode)\",\n activeComponent.style?.subtitleColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n subtitleColor: { ...(activeComponent.style?.subtitleColor || {}), darkMode: e.target.value },\n }),\n )}\n </Box>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Typography variant=\"body2\">Show Leading Arrow</Typography>\n <Switch\n checked={Boolean(activeComponent.showLeadingArrow)}\n onChange={(e) => onUpdate(activeComponent.id, \"showLeadingArrow\", e.target.checked)}\n />\n </Box>\n {Boolean(activeComponent.showLeadingArrow) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Foreground Element Color (Light Mode)\",\n activeComponent.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n lightMode: e.target.value,\n }),\n )}\n {colorField(\n \"Foreground Element Color (Dark Mode)\",\n activeComponent.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n darkMode: e.target.value,\n }),\n )}\n </Box>\n )}\n </FormAccordion>\n\n <FormAccordion title=\"Actions\" expanded={expandedAccordion === 'CTA'} onChange={handleAccordionChange('CTA')}>\n <Box sx={{ display: \"flex\", gap: 1, mb: 2 }}>\n {[\n { id: \"card\", label: \"Card Actions\" },\n { id: \"button\", label: \"Button Actions\" },\n ].map((tab) => (\n <Button\n key={tab.id}\n variant={featureCardActionsTab === tab.id ? \"contained\" : \"outlined\"}\n onClick={() => setFeatureCardActionsTab(tab.id)}\n sx={{\n flex: 1,\n textTransform: \"none\",\n boxShadow: \"none\",\n borderColor: featureCardActionsTab === tab.id ? \"primary.main\" : \"divider\",\n \"&:hover\": { boxShadow: \"none\" },\n }}\n >\n {tab.label}\n </Button>\n ))}\n </Box>\n\n {featureCardActionsTab === \"card\" && (() => {\n const hasAssignedFeature = (activeComponent.children || []).some(\n (child) => child.type === \"FEATURE\",\n );\n const cardAction = activeComponent.cta?.cardAction || {};\n const cardActionType = cardAction.actionType || MOBILE_ACTION_TYPES.NAVIGATE;\n const callToActionEnabled = !hasAssignedFeature && cardActionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION;\n const updateCardAction = (patch) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n cardAction: { ...(activeComponent.cta?.cardAction || {}), ...patch },\n });\n\n return (\n <>\n {hasAssignedFeature && (\n <Alert severity=\"info\" sx={{ fontSize: \"0.85rem\", mb: 1 }}>\n Call to Action can be enabled only when a feature is not assigned to the feature card.\n </Alert>\n )}\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Typography variant=\"body2\" color={hasAssignedFeature ? \"text.disabled\" : \"text.primary\"}>\n Enable Call to Action\n </Typography>\n <Switch\n checked={callToActionEnabled}\n disabled={hasAssignedFeature}\n onChange={(e) =>\n updateCardAction({\n actionType: e.target.checked\n ? MOBILE_ACTION_TYPES.CALL_TO_ACTION\n : MOBILE_ACTION_TYPES.NAVIGATE,\n })\n }\n />\n </Box>\n\n {callToActionEnabled && (\n <>\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ mt: 1 }}>\n When enabled, tapping the card triggers this instead of navigating to the assigned feature.\n </Typography>\n <CallToActionFields\n callToAction={cardAction.callToAction}\n onChange={(patch) =>\n updateCardAction({ callToAction: { ...(cardAction.callToAction || {}), ...patch } })\n }\n />\n </>\n )}\n </>\n );\n })()}\n\n {featureCardActionsTab === \"button\" && (() => {\n const buttonEnabled = Boolean(activeComponent.cta?.button);\n const buttonStyle = activeComponent.cta?.button?.style || {};\n const buttonAction = activeComponent.cta?.button?.buttonAction || {};\n const updateButtonStyle = (patch) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n button: {\n ...(activeComponent.cta?.button || {}),\n style: { ...(activeComponent.cta?.button?.style || {}), ...patch },\n },\n });\n const updateButtonAction = (patch) =>\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n button: {\n ...(activeComponent.cta?.button || {}),\n buttonAction: { ...(activeComponent.cta?.button?.buttonAction || {}), ...patch },\n },\n });\n const buttonActionType = buttonAction.actionType || MOBILE_ACTION_TYPES.NAVIGATE;\n\n return (\n <>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <Typography variant=\"body2\">Show Button</Typography>\n <Switch\n checked={buttonEnabled}\n onChange={(e) => {\n if (e.target.checked) {\n onUpdate(activeComponent.id, \"cta\", {\n ...(activeComponent.cta || {}),\n button: {\n style: {\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 borderRadius: 8,\n ...(activeComponent.cta?.button?.style || {}),\n },\n buttonAction: {\n actionType: MOBILE_ACTION_TYPES.NAVIGATE,\n ...(activeComponent.cta?.button?.buttonAction || {}),\n },\n },\n });\n } else {\n onUpdate(activeComponent.id, \"cta\", { ...(activeComponent.cta || {}), button: undefined });\n }\n }}\n />\n </Box>\n\n {buttonEnabled && (\n <>\n {textField(\"Button Text\", buttonStyle.text ?? \"Click Here\", (e) =>\n updateButtonStyle({ text: e.target.value }),\n )}\n\n {selectField(\n \"Action Type\",\n buttonActionType,\n (e) => updateButtonAction({ actionType: e.target.value }),\n ACTION_TYPE_OPTIONS,\n )}\n {renderActionFields(\n buttonActionType,\n <>\n {featureDropdown(\n \"Navigation Action\",\n getNavigationFeatureId(buttonAction.navigation),\n (featureId) =>\n updateButtonAction({\n navigation: buildNavigationTarget(\n featureId,\n getNavigationPageParams(buttonAction.navigation),\n ),\n }),\n )}\n {renderNavigationParams(\n getNavigationFeatureId(buttonAction.navigation),\n getNavigationPageParams(buttonAction.navigation),\n (newPageParams) =>\n updateButtonAction({\n navigation: buildNavigationTarget(\n getNavigationFeatureId(buttonAction.navigation),\n newPageParams,\n ),\n }),\n )}\n </>,\n <CallToActionFields\n callToAction={buttonAction.callToAction}\n onChange={(patch) =>\n updateButtonAction({ callToAction: { ...(buttonAction.callToAction || {}), ...patch } })\n }\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(buttonStyle.icon) ? buttonStyle.icon : null}\n onChange={(event, newValue) => {\n updateButtonStyle({ icon: newValue || \"\", iconType: 'fa' });\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 updateButtonStyle({ icon: result, iconType: 'svg' });\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 {buttonStyle.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 buttonStyle.iconPosition || \"LEFT\",\n (e) => updateButtonStyle({ iconPosition: e.target.value }),\n [\n { label: \"Left of Text\", value: \"LEFT\" },\n { label: \"Right of Text\", value: \"RIGHT\" }\n ]\n )}\n\n {selectField(\n \"Background Style\",\n buttonStyle.backgroundStyle || \"SOLID\",\n (e) => updateButtonStyle({ backgroundStyle: e.target.value }),\n [\n { label: \"Solid Color\", value: \"SOLID\" },\n { label: \"Gradient Color\", value: \"GRADIENT\" },\n { label: \"Transparent\", value: \"TRANSPARENT\" }\n ]\n )}\n {buttonStyle.backgroundStyle === \"SOLID\" && (\n <>\n {colorField(\n \"Background Color (Light Mode)\",\n buttonStyle.backgroundColor?.lightMode || \"#4f46e5\",\n (e) =>\n updateButtonStyle({\n backgroundColor: { ...(buttonStyle.backgroundColor || {}), lightMode: e.target.value },\n })\n )}\n {colorField(\n \"Background Color (Dark Mode)\",\n buttonStyle.backgroundColor?.darkMode || \"#6366f1\",\n (e) =>\n updateButtonStyle({\n backgroundColor: { ...(buttonStyle.backgroundColor || {}), darkMode: e.target.value },\n })\n )}\n </>\n )}\n {buttonStyle.backgroundStyle === \"GRADIENT\" && (\n <>\n {colorField(\n \"Gradient Start (Light Mode)\",\n buttonStyle.backgroundGradientStart?.lightMode || \"#4f46e5\",\n (e) =>\n updateButtonStyle({\n backgroundGradientStart: {\n ...(buttonStyle.backgroundGradientStart || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient End (Light Mode)\",\n buttonStyle.backgroundGradientEnd?.lightMode || \"#ec4899\",\n (e) =>\n updateButtonStyle({\n backgroundGradientEnd: {\n ...(buttonStyle.backgroundGradientEnd || {}),\n lightMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient Start (Dark Mode)\",\n buttonStyle.backgroundGradientStart?.darkMode || \"#6366f1\",\n (e) =>\n updateButtonStyle({\n backgroundGradientStart: {\n ...(buttonStyle.backgroundGradientStart || {}),\n darkMode: e.target.value,\n },\n })\n )}\n {colorField(\n \"Gradient End (Dark Mode)\",\n buttonStyle.backgroundGradientEnd?.darkMode || \"#f472b6\",\n (e) =>\n updateButtonStyle({\n backgroundGradientEnd: {\n ...(buttonStyle.backgroundGradientEnd || {}),\n darkMode: e.target.value,\n },\n })\n )}\n </>\n )}\n\n {colorField(\n \"Text Color (Light Mode)\",\n buttonStyle.textColor?.lightMode || \"#ffffff\",\n (e) =>\n updateButtonStyle({ textColor: { ...(buttonStyle.textColor || {}), lightMode: e.target.value } })\n )}\n {colorField(\n \"Text Color (Dark Mode)\",\n buttonStyle.textColor?.darkMode || \"#ffffff\",\n (e) =>\n updateButtonStyle({ textColor: { ...(buttonStyle.textColor || {}), darkMode: e.target.value } })\n )}\n\n {colorField(\n \"Border Color (Light Mode)\",\n buttonStyle.borderColor?.lightMode || \"transparent\",\n (e) =>\n updateButtonStyle({ borderColor: { ...(buttonStyle.borderColor || {}), lightMode: e.target.value } })\n )}\n {colorField(\n \"Border Color (Dark Mode)\",\n buttonStyle.borderColor?.darkMode || \"transparent\",\n (e) =>\n updateButtonStyle({ borderColor: { ...(buttonStyle.borderColor || {}), darkMode: e.target.value } })\n )}\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\n \"Button Border Radius\",\n buttonStyle.borderRadius ?? 8,\n (e) => updateButtonStyle({ borderRadius: Number(e.target.value || 0) }),\n )}\n {numberField(\n \"Button Height\",\n buttonStyle.height ?? 30,\n (e) => updateButtonStyle({ height: Number(e.target.value || 0) }),\n )}\n </Box>\n\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant=\"body2\">Button Box Shadow</Typography>\n <Switch\n checked={Boolean(buttonStyle.boxShadow)}\n onChange={(e) =>\n updateButtonStyle({\n boxShadow: e.target.checked,\n ...(e.target.checked && buttonStyle.boxShadowElevation == null\n ? { boxShadowElevation: 4 }\n : {}),\n ...(e.target.checked && buttonStyle.boxShadowOpacity == null\n ? { boxShadowOpacity: 0.3 }\n : {}),\n })\n }\n />\n </Box>\n {Boolean(buttonStyle.boxShadow) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\n \"Button Shadow Elevation (0-24)\",\n buttonStyle.boxShadowElevation ?? 0,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n updateButtonStyle({ boxShadowElevation: 0 });\n return;\n }\n const val = Math.round(Number(raw));\n if (!Number.isNaN(val) && val >= 0 && val <= 24) {\n updateButtonStyle({ boxShadowElevation: val });\n }\n },\n { inputProps: { min: 0, max: 24, step: 1 } },\n )}\n {numberField(\n \"Button Shadow Opacity (0–1)\",\n buttonStyle.boxShadowOpacity ?? 0.00,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n updateButtonStyle({ boxShadowOpacity: 0 });\n return;\n }\n const val = Number(raw);\n if (!Number.isNaN(val) && val >= 0 && val <= 1) {\n updateButtonStyle({ boxShadowOpacity: val });\n }\n },\n { inputProps: { min: 0, max: 1, step: 0.01 } },\n )}\n </Box>\n )}\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?.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\" summary={backgroundSummary(activeComponent)} expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\n\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Icon Styling\n </Typography>\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Icon Color (Light Mode)\",\n activeComponent.style?.iconColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconColor: { ...(activeComponent.style?.iconColor || {}), lightMode: e.target.value },\n }),\n )}\n {colorField(\n \"Icon Color (Dark Mode)\",\n activeComponent.style?.iconColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconColor: { ...(activeComponent.style?.iconColor || {}), darkMode: e.target.value },\n }),\n )}\n </Box>\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Icon Size\",\n normalizeSizeOption(activeComponent.style?.iconSize),\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n {Boolean(activeComponent.style?.iconBorderWidth) &&\n numberField(\n \"Icon Border Radius\",\n activeComponent.style?.iconBorderRadius,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBorderRadius: Number(e.target.value || 0),\n }),\n )}\n </Box>\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\n \"Icon Padding\",\n activeComponent.style?.iconPadding,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconPadding: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \"Icon Border Width\",\n activeComponent.style?.iconBorderWidth,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBorderWidth: Number(e.target.value || 0),\n }),\n )}\n </Box>\n\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant=\"body2\">Icon Background</Typography>\n <Switch\n checked={Boolean(activeComponent.style?.iconBackground)}\n onChange={(e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBackground: e.target.checked,\n })\n }\n />\n </Box>\n {Boolean(activeComponent.style?.iconBackground) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Icon Background Color (Light Mode)\",\n activeComponent.style?.iconBackgroundColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBackgroundColor: {\n ...(activeComponent.style?.iconBackgroundColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Icon Background Color (Dark Mode)\",\n activeComponent.style?.iconBackgroundColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBackgroundColor: {\n ...(activeComponent.style?.iconBackgroundColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n </Box>\n )}\n\n {Boolean(activeComponent.style?.iconBorderWidth) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {colorField(\n \"Icon Border Color (Light Mode)\",\n activeComponent.style?.iconBorderColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBorderColor: {\n ...(activeComponent.style?.iconBorderColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Icon Border Color (Dark Mode)\",\n activeComponent.style?.iconBorderColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBorderColor: {\n ...(activeComponent.style?.iconBorderColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n </Box>\n )}\n\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant=\"body2\">Icon Box Shadow</Typography>\n <Switch\n checked={Boolean(activeComponent.style?.iconBoxShadow)}\n onChange={(e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBoxShadow: e.target.checked,\n ...(e.target.checked && activeComponent.style?.iconBoxShadowElevation == null\n ? { iconBoxShadowElevation: 4 }\n : {}),\n ...(e.target.checked && activeComponent.style?.iconBoxShadowOpacity == null\n ? { iconBoxShadowOpacity: 0.3 }\n : {}),\n })\n }\n />\n </Box>\n {Boolean(activeComponent.style?.iconBoxShadow) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\n \"Icon Box Shadow Elevation (0-24)\",\n activeComponent.style?.iconBoxShadowElevation ?? 0,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBoxShadowElevation: 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, \"style\", {\n ...(activeComponent.style || {}),\n iconBoxShadowElevation: val,\n });\n }\n },\n { inputProps: { min: 0, max: 24, step: 1 } },\n )}\n {numberField(\n \"Icon Box Shadow Opacity (0–1)\",\n activeComponent.style?.iconBoxShadowOpacity ?? 0.00,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBoxShadowOpacity: 0,\n });\n return;\n }\n const val = Number(raw);\n if (!Number.isNaN(val) && val >= 0 && val <= 1) {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconBoxShadowOpacity: val,\n });\n }\n },\n { inputProps: { min: 0, max: 1, step: 0.01 } },\n )}\n </Box>\n )}\n\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Typography variant=\"body2\">Icon Drop Shadow</Typography>\n <Switch\n checked={Boolean(activeComponent.style?.iconDropShadow)}\n onChange={(e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconDropShadow: e.target.checked,\n ...(e.target.checked && activeComponent.style?.iconDropShadowElevation == null\n ? { iconDropShadowElevation: 4 }\n : {}),\n ...(e.target.checked && activeComponent.style?.iconDropShadowOpacity == null\n ? { iconDropShadowOpacity: 0.3 }\n : {}),\n })\n }\n />\n </Box>\n {Boolean(activeComponent.style?.iconDropShadow) && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\n \"Icon Drop Shadow Elevation (0-24)\",\n activeComponent.style?.iconDropShadowElevation ?? 0,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconDropShadowElevation: 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, \"style\", {\n ...(activeComponent.style || {}),\n iconDropShadowElevation: val,\n });\n }\n },\n { inputProps: { min: 0, max: 24, step: 1 } },\n )}\n {numberField(\n \"Icon Drop Shadow Opacity (0–1)\",\n activeComponent.style?.iconDropShadowOpacity ?? 0.00,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconDropShadowOpacity: 0,\n });\n return;\n }\n const val = Number(raw);\n if (!Number.isNaN(val) && val >= 0 && val <= 1) {\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n iconDropShadowOpacity: val,\n });\n }\n },\n { inputProps: { min: 0, max: 1, step: 0.01 } },\n )}\n </Box>\n )}\n\n <Divider sx={{ my: 1 }} />\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Card Styling\n </Typography>\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\n\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(\n activeComponent.id,\n \"background\",\n buildBackgroundForType(activeComponent.background, e.target.value),\n ),\n BACKGROUND_TYPE_OPTIONS,\n )}\n </Box>\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 (Light Mode)\",\n activeComponent.background?.gradientStartColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: {\n ...(activeComponent.background?.gradientStartColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient End Color (Light Mode)\",\n activeComponent.background?.gradientEndColor?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: {\n ...(activeComponent.background?.gradientEndColor || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient Start Color (Dark Mode)\",\n activeComponent.background?.gradientStartColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: {\n ...(activeComponent.background?.gradientStartColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Gradient End Color (Dark Mode)\",\n activeComponent.background?.gradientEndColor?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: {\n ...(activeComponent.background?.gradientEndColor || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\n )}\n {(activeComponent.background?.type || \"SOLID\") !== \"GRADIENT\" && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? DEFAULT_BACKGROUND_OPACITY,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </Box>\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 value: activeComponent.backgroundImage?.svg,\n onChange: (svg) =>\n onUpdate(activeComponent.id, \"backgroundImage\", svg ? { svg } : undefined),\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 <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {numberField(\"Height\", activeComponent.height, (e) =>\n onUpdate(activeComponent.id, \"height\", Number(e.target.value || 0)),\n )}\n {numberField(\"Border Radius\", activeComponent.borderRadius, (e) =>\n onUpdate(\n activeComponent.id,\n \"borderRadius\",\n Number(e.target.value || 0),\n ),\n )}\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mt: 1 }}>\n <Typography variant=\"body2\">Auto-Scroll</Typography>\n <Switch\n checked={activeComponent.autoScrollEnabled !== false}\n onChange={(e) =>\n onUpdate(activeComponent.id, \"autoScrollEnabled\", e.target.checked)\n }\n />\n </Box>\n {activeComponent.autoScrollEnabled !== false && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2, mt: 1 }}>\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 </Box>\n )}\n </FormAccordion>\n\n <FormAccordion title=\"Images\" summary={`${(activeComponent.images || []).length} added`} 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={() => {\n // The new slide lands at the end, so expand that row to configure it straight away.\n setExpandedImageId(String((activeComponent.images || []).length));\n onAddCarouselImage(activeComponent.id);\n }}\n >\n Add Image\n </Button>\n </Box>\n <DndContext\n sensors={imageDndSensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n onDragEnd={(event) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const images = activeComponent.images || [];\n const oldIndex = Number(active.id);\n const newIndex = Number(over.id);\n if (Number.isNaN(oldIndex) || Number.isNaN(newIndex)) return;\n const reordered = arrayMove(images, oldIndex, newIndex);\n onUpdate(activeComponent.id, \"images\", reordered);\n setExpandedImageId((prev) =>\n prev === String(oldIndex) ? String(newIndex) : prev,\n );\n }}\n >\n <SortableContext\n items={(activeComponent.images || []).map((_, index) => String(index))}\n strategy={verticalListSortingStrategy}\n >\n {(activeComponent.images || []).map((image, index) => {\n const dndId = String(index);\n return (\n <SortableCarouselImageRow\n key={dndId}\n id={dndId}\n image={image}\n index={index}\n isExpanded={expandedImageId === dndId}\n onToggleExpand={() =>\n setExpandedImageId((prev) => (prev === dndId ? null : dndId))\n }\n documentMasterImages={documentMasterImages}\n onOpenImagePicker={() =>\n setImagePickerState({ open: true, target: \"carousel\", imageIndex: index })\n }\n onSelectSvg={(svg) => {\n // Only the configured source is kept, so a slide never carries both.\n onUpdateCarouselImage(activeComponent.id, index, \"svg\", svg || undefined);\n if (svg) {\n onUpdateCarouselImage(activeComponent.id, index, \"documentUuid\", undefined);\n }\n }}\n onConfirmReplace={(description, onConfirm) =>\n setBackgroundSourceConfirm({ open: true, description, onConfirm })\n }\n onFieldChange={(field, value) =>\n onUpdateCarouselImage(activeComponent.id, index, field, value)\n }\n onRemove={() => onRemoveCarouselImage(activeComponent.id, index)}\n setPreviewImg={setPreviewImg}\n featureDropdown={featureDropdown}\n renderNavigationParams={renderNavigationParams}\n getNavigationFeatureId={getNavigationFeatureId}\n getNavigationPageParams={getNavigationPageParams}\n buildNavigationTarget={buildNavigationTarget}\n selectField={selectField}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n );\n })}\n </SortableContext>\n </DndContext>\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 <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\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\" summary={backgroundSummary(activeComponent)} expanded={expandedAccordion === 'Appearance'} onChange={handleAccordionChange('Appearance')}>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\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 </Box>\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 {numberField(\n \"Height (px)\",\n activeComponent.style?.height ?? \"\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n height: Number(e.target.value || 0),\n }),\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 {numberField(\n \"Width (px)\",\n activeComponent.style?.width ?? \"\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n width: Number(e.target.value || 0),\n }),\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 summary={activeComponent.visibilityConditions?.conditions ? \"Conditional\" : \"Always visible\"}\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 renderStickyConfig = () => {\n if (!activeComponent) return null;\n\n if (activeComponent.type === DASHBOARD_COMPONENT_TYPES.FEATURE) return null;\n\n const isTopLevelComponent = (activeTabFeatures || []).some(\n (node) => node?.id === activeComponent.id,\n );\n if (!isTopLevelComponent) return null;\n\n const stickyPosition = activeComponent.sticky?.position || \"NONE\";\n\n return (\n <FormAccordion\n title=\"Sticky\"\n summary={stickySummary(activeComponent)}\n expanded={expandedAccordion === 'Sticky'}\n onChange={handleAccordionChange('Sticky')}\n >\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n {selectField(\n \"Make Sticky\",\n stickyPosition,\n (e) =>\n onUpdate(\n activeComponent.id,\n \"sticky\",\n e.target.value === \"NONE\"\n ? undefined\n : {\n ...(activeComponent.sticky || {}),\n position: e.target.value,\n type: activeComponent.sticky?.type || \"SCROLLABLE\",\n },\n ),\n STICKY_POSITION_OPTIONS,\n )}\n {stickyPosition !== \"NONE\" &&\n selectField(\n \"Sticky Type\",\n activeComponent.sticky?.type || \"SCROLLABLE\",\n (e) =>\n onUpdate(activeComponent.id, \"sticky\", {\n ...(activeComponent.sticky || {}),\n type: e.target.value,\n }),\n STICKY_TYPE_OPTIONS,\n )}\n </Box>\n {stickyPosition !== \"NONE\" && (\n <Typography variant=\"caption\" color=\"textSecondary\" sx={{ display: 'block', mt: 1 }}>\n {`Moves to the ${stickyPosition === \"TOP\" ? \"top\" : \"bottom\"} of the screen. `}\n {activeComponent.sticky?.type === \"OVERLAY\"\n ? \"Stays pinned there while the content scrolls underneath.\"\n : \"Scrolls away with the content when the screen overflows.\"}\n </Typography>\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 onUpdateCarouselImage(\n activeComponent.id,\n imagePickerState.imageIndex,\n \"svg\",\n undefined,\n );\n } else if (imagePickerState.target === \"backgroundImage\") {\n // Only the configured source is kept, so the saved JSON never carries both.\n onUpdate(activeComponent.id, \"backgroundImage\", { documentUuid: selectedUuid });\n }\n }}\n />\n\n {previewImg && (\n <FullImagePreviewDialog\n open={!!previewImg}\n onClose={() => setPreviewImg(null)}\n img={previewImg}\n />\n )}\n\n <CustomConfirmationModal\n open={backgroundSourceConfirm.open}\n handleClose={closeBackgroundSourceConfirm}\n handleClick={() => {\n const { onConfirm } = backgroundSourceConfirm;\n closeBackgroundSourceConfirm();\n onConfirm?.();\n }}\n title=\"Replace Background\"\n description={backgroundSourceConfirm.description}\n dataTestId=\"background-source-confirmation\"\n />\n </>\n );\n\n if (hideGlobalConfig) {\n return (\n <Box>\n {renderSelectedConfig()}\n {renderStickyConfig()}\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 {renderStickyConfig()}\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.array,\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 activeTabFeatures: PropTypes.array,\n onUpdateActiveTabFeature: PropTypes.func,\n appConfiguration: PropTypes.object,\n onSetMenuTabFeature: PropTypes.func,\n pageParamsByFeature: PropTypes.object,\n legacyBottomNavItems: PropTypes.array,\n hasAnyLegacyBottomNav: PropTypes.bool,\n onMigrateBottomNavClick: PropTypes.func,\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 Card,\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 BOTTOM_NAV_TAB_TYPES,\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 resolveMobileActionType,\n buildMobileActionPayload,\n isLegacyBottomNavigationConfig,\n migrateLegacyBottomNavigation,\n extractLegacyBottomNavRaw,\n} from \"./dashboardLayoutUtils\";\nimport { getPreferredLanguage } from \"../../services/Users\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n\nconst buildDefaultTabStatus = (bottomNavigationTabs) =>\n (bottomNavigationTabs || []).reduce((acc, tab) => ({ ...acc, [tab.id]: true }), {});\n\nconst buildDefaultAppConfiguration = (bottomNavigationTabs) =>\n (bottomNavigationTabs || []).reduce((acc, tab) => ({ ...acc, [tab.id]: [] }), {});\n\nconst pickInitialActiveTabId = (bottomNavigationTabs) => {\n const items = bottomNavigationTabs || [];\n const sorted = [...items].sort((a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0));\n const firstVisible = sorted.find((item) => item.visible !== false);\n return (firstVisible || sorted[0])?.id;\n};\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 normalizedConfig.actions = normalizedConfig.actions.map((action) => {\n const actionType = resolveMobileActionType(action?.actionType);\n const { navigation, callToAction, ...restAction } = action || {};\n return {\n ...restAction,\n actionType,\n ...buildMobileActionPayload(actionType, navigation, callToAction),\n };\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\nconst NAV_SECTION_STORAGE_KEY = \"medplat_copied_nav_section\";\n\nconst extractFeatureMapFromLayout = (nodes) => {\n const features = new Map();\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 || node.menuName || `Component ID: ${node.id}`);\n }\n if (Array.isArray(node.children)) node.children.forEach(traverseNode);\n if (Array.isArray(node.menus)) node.menus.forEach(traverseNode);\n };\n\n (nodes || []).forEach(traverseNode);\n\n return features;\n};\n\nconst clearOrphanedFeatureCards = (nodes) => {\n if (!Array.isArray(nodes)) return nodes;\n return nodes.map((node) => {\n if (!node || typeof node !== \"object\") return node;\n\n const children = Array.isArray(node.children) ? clearOrphanedFeatureCards(node.children) : node.children;\n const updatedNode = children !== node.children ? { ...node, children } : node;\n\n if (\n updatedNode.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD &&\n !(updatedNode.children || []).some((child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE)\n ) {\n return clearFeatureCardConfig({ ...updatedNode, children: [] });\n }\n\n return updatedNode;\n });\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 [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 [rights, setRights] = useState(null);\n const [legacyBottomNavRaw, setLegacyBottomNavRaw] = useState(null);\n const [migrateBottomNavModalOpen, setMigrateBottomNavModalOpen] = useState(false);\n const { user } = useSelector((state) => state.Authenticate);\n const canUpdate = GeneralUtil.hasCheckRights(rights?.['update.admin.mobileMenuManagement']);\n\n useEffect(() => {\n (async () => {\n try {\n const { data } = await getAssignedFeatures('techo.admin.mobileMenuManagement');\n setRights(JSON.parse(data));\n } catch (error) {\n console.error(error);\n }\n })();\n }, []);\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 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 setAppBarConfig(reconstructed.appBar);\n setBottomNavigationConfig(reconstructed.bottomNavigation);\n setActiveTabId(pickInitialActiveTabId(reconstructed.bottomNavigation));\n formCtrl.setValue(\"isAttendanceRequired\", reconstructed.isAttendanceRequired);\n setOnLoadSteps(reconstructed.onLoadSteps || []);\n setLegacyBottomNavRaw(reconstructed.legacyBottomNavRaw || null);\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 legacyBottomNavRaw: tabReconstructed.legacyBottomNavRaw || null,\n };\n });\n setWorkspaceTabs(hydratedTabs);\n setActiveWorkspaceIndex(0);\n }\n }\n }, [masterFeatureList]);\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, masterFeatureList, groupedFeatures) =>\n hydrateDashboardLayout(canonicalLayout || [], (feature, parentId) =>\n hydrateFeature(feature, parentId, masterFeatureList, groupedFeatures)\n );\n\n const NON_TAB_CONFIG_KEYS = [\"isAttendanceRequired\", \"onLoadSteps\", \"appBar\", \"bottomNavigation\"];\n\n const reconstructAppState = (rawCanonicalConfig) => {\n const isLegacy = isLegacyBottomNavigationConfig(rawCanonicalConfig);\n const canonicalConfig = isLegacy\n ? migrateLegacyBottomNavigation(rawCanonicalConfig)\n : rawCanonicalConfig;\n const legacyBottomNavRaw = isLegacy ? extractLegacyBottomNavRaw(rawCanonicalConfig) : null;\n\n const isAttendanceRequired = canonicalConfig?.isAttendanceRequired?.value || false;\n const appBar = normalizeAppBarConfig(canonicalConfig?.appBar);\n const onLoadSteps = canonicalConfig?.onLoadSteps || [];\n const newAppConfiguration = {};\n const newTabStatus = {};\n const rawBottomNavigationItems = Array.isArray(canonicalConfig?.bottomNavigation?.items)\n ? canonicalConfig.bottomNavigation.items\n : defaultBottomNavigationConfig;\n // bottomNavigationConfig tracks tab metadata\n const bottomNavigation = rawBottomNavigationItems.map((item) => ({\n ...item,\n iconName: item.iconName || item.iconDocumentUuid || \"\",\n ...(rawBottomNavigationItems.length === 1 ? { visible: true } : {}),\n }));\n\n for (const tabId in canonicalConfig) {\n if (NON_TAB_CONFIG_KEYS.includes(tabId)) continue;\n const tabData = canonicalConfig[tabId];\n if (!tabData || typeof tabData !== \"object\") continue;\n newTabStatus[tabId] = tabData.active;\n\n if (tabData.tabType === BOTTOM_NAV_TAB_TYPES.MENU) {\n newAppConfiguration[tabId] =\n tabData.active && tabData.feature\n ? hydrateLayout([tabData.feature], masterFeatureList, groupedFeatures)\n : [];\n } else {\n newAppConfiguration[tabId] = tabData.active\n ? hydrateLayout(tabData.layout, masterFeatureList, groupedFeatures)\n : [];\n }\n }\n\n return {\n appConfiguration: newAppConfiguration,\n tabStatus: newTabStatus,\n isAttendanceRequired,\n appBar,\n bottomNavigation,\n onLoadSteps,\n legacyBottomNavRaw,\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 collectFeatureStubs = (nodes) =>\n (nodes || []).reduce((acc, node) => {\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n acc.push({ id: node.id, navigationAction: node.navigationAction || \"\", pageParams: node.pageParams || [] });\n }\n if (Array.isArray(node.children)) {\n acc.push(...collectFeatureStubs(node.children));\n }\n return acc;\n }, []);\n\n const generateTabConfig = (tabData) => {\n const finalConfig = {\n appBar: normalizeAppBarConfig(tabData.appBarConfig),\n };\n\n if (tabData.legacyBottomNavRaw) {\n const legacyRaw = tabData.legacyBottomNavRaw;\n const liveItems = tabData.bottomNavigationConfig || [];\n const legacyShaped = { ...finalConfig };\n\n if (legacyRaw.bottomNavigation) {\n legacyShaped.bottomNavigation = legacyRaw.bottomNavigation;\n }\n\n Object.keys(legacyRaw).forEach((legacyId) => {\n if (legacyId === \"bottomNavigation\") return;\n const originalEntry = legacyRaw[legacyId] || {};\n const liveId = liveItems.find((it) => it.legacyId === legacyId)?.id;\n const isEnabled = liveId ? tabData.tabStatus?.[liveId] !== false : originalEntry.active !== false;\n const rawLiveLayout = liveId ? tabData.appConfiguration?.[liveId] : null;\n\n if (legacyId === \"programs\") {\n legacyShaped[legacyId] = {\n active: isEnabled,\n features:\n isEnabled && rawLiveLayout\n ? collectFeatureStubs(sanitizeDashboardLayout(rawLiveLayout, undefined, pageParamsByFeature))\n : originalEntry.features || [],\n };\n } else if (legacyId === \"familyManagement\") {\n legacyShaped[legacyId] = { ...originalEntry, active: isEnabled };\n } else {\n legacyShaped[legacyId] = {\n active: isEnabled,\n layout:\n isEnabled && rawLiveLayout\n ? sanitizeDashboardLayout(rawLiveLayout, undefined, pageParamsByFeature)\n : originalEntry.layout || [],\n };\n }\n });\n\n return legacyShaped;\n }\n\n // Renumber displayOrder sequentially on every save\n const sortedItems = [...(tabData.bottomNavigationConfig || [])]\n .sort((a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0))\n .map(({ legacyId: _legacyId, ...tab }, index) => ({\n ...tab,\n displayOrder: index + 1,\n showBottomNavigation:\n tab.showBottomNavigation ?? tab.tabType !== BOTTOM_NAV_TAB_TYPES.MENU,\n }));\n\n // Every tab's content lives in a top-level entry keyed by its own id.\n const items = sortedItems.map((tab) => {\n const tabId = tab.id;\n const isEnabled = tabData.tabStatus?.[tabId];\n const isMenuTab = tab.tabType === BOTTOM_NAV_TAB_TYPES.MENU;\n\n const tabEntry = {\n active: isEnabled,\n tabType: tab.tabType || BOTTOM_NAV_TAB_TYPES.LAYOUT,\n };\n\n if (isMenuTab) {\n if (isEnabled) {\n const rawFeature = tabData.appConfiguration?.[tabId] || [];\n tabEntry.feature = sanitizeDashboardLayout(rawFeature, undefined, pageParamsByFeature)[0] || null;\n } else {\n tabEntry.feature = null;\n }\n } else if (isEnabled) {\n const rawLayout = tabData.appConfiguration?.[tabId] || [];\n tabEntry.layout = sanitizeDashboardLayout(rawLayout, undefined, pageParamsByFeature);\n }\n\n finalConfig[tabId] = tabEntry;\n return tab;\n });\n\n finalConfig.bottomNavigation = { items };\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 (!canUpdate) return;\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 = useMemo(\n () => (bottomNavigationConfig || []).map((tab) => ({ id: tab.id, name: tab.label, tabType: tab.tabType })),\n [bottomNavigationConfig]\n );\n const isMenuTypeTab = (tabId) =>\n navTabs.find((tab) => tab.id === tabId)?.tabType === BOTTOM_NAV_TAB_TYPES.MENU;\n\n const [tabStatus, setTabStatus] = useState(() => {\n const initial = {};\n (bottomNavigationConfig || []).forEach((tab) => {\n initial[tab.id] = true;\n });\n return initial;\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 [activeId, setActiveId] = useState(null);\n const [activeElementId, setActiveElementId] = useState(null);\n const [activeTabId, setActiveTabId] = useState(() => pickInitialActiveTabId(defaultBottomNavigationConfig));\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 [sectionPasteValidationModal, setSectionPasteValidationModal] = useState({\n open: false,\n strippedFeatures: [],\n sourceLabel: \"\",\n targetLabel: \"\",\n onConfirm: null,\n onCancel: null,\n });\n const [replacePasteConfirmModal, setReplacePasteConfirmModal] = useState({ open: false, targetTabId: null });\n const [activeWorkspaceIndex, setActiveWorkspaceIndex] = useState(0);\n\n const getCurrentWorkspaceData = () => ({\n appBarConfig,\n bottomNavigationConfig,\n appConfiguration,\n tabStatus,\n legacyBottomNavRaw,\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 nextBottomNavigationConfig = newWorkspace.bottomNavigationConfig || defaultBottomNavigationConfig;\n const nextTabStatus =\n newWorkspace.tabStatus ||\n nextBottomNavigationConfig.reduce((acc, tab) => ({ ...acc, [tab.id]: true }), {});\n\n setAppBarConfig(newWorkspace.appBarConfig || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(nextBottomNavigationConfig);\n setLegacyBottomNavRaw(newWorkspace.legacyBottomNavRaw || null);\n\n const nextAppConfig = newWorkspace.appConfiguration\n ? JSON.parse(JSON.stringify(newWorkspace.appConfiguration))\n : nextBottomNavigationConfig.reduce((acc, tab) => ({ ...acc, [tab.id]: [] }), {});\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 hasAnyLegacyBottomNav =\n Boolean(legacyBottomNavRaw) || workspaceTabs.some((tab) => tab.legacyBottomNavRaw);\n\n const legacyBottomNavItems = legacyBottomNavRaw\n ? (bottomNavigationConfig || []).map((item) => ({\n id: item.id,\n label: item.label,\n iconName: item.iconName,\n tabType: item.tabType,\n displayOrder: item.displayOrder,\n active: tabStatus[item.id] !== false,\n }))\n : null;\n\n const handleConfirmMigrateBottomNav = () => {\n setLegacyBottomNavRaw(null);\n\n if (workspaceTabs.length > 0) {\n setWorkspaceTabs((prev) =>\n prev.map((tab, idx) =>\n idx === activeWorkspaceIndex || tab.legacyBottomNavRaw\n ? { ...tab, legacyBottomNavRaw: null }\n : tab,\n ),\n );\n }\n\n setMigrateBottomNavModalOpen(false);\n showToast({ type: \"success\", message: \"Bottom Navigation migrated successfully.\" });\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 let hasBottomNavVisibilityError = 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\n if (!tabData.legacyBottomNavRaw) {\n const navItems = [...(tabData.bottomNavigationConfig || [])].sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n );\n\n if (navItems.length > 1) {\n const showsBottomNav = (item) =>\n item.showBottomNavigation ?? item.tabType !== BOTTOM_NAV_TAB_TYPES.MENU;\n\n const hasVisibleShowableTab = navItems.some(\n (item) => item.visible !== false && showsBottomNav(item),\n );\n if (!hasVisibleShowableTab) {\n hasBottomNavVisibilityError = true;\n if (firstErrorTabIdx === null) {\n firstErrorTabIdx = idx;\n }\n showToast({\n type: \"warn\",\n message: `Validation Error in \"${tabName}\": at least one visible Bottom Navigation tab must have \"Show Bottom Navigation\" enabled.`,\n });\n }\n\n const firstNavItem = navItems[0];\n if (firstNavItem.visible !== false && !showsBottomNav(firstNavItem)) {\n hasBottomNavVisibilityError = true;\n if (firstErrorTabIdx === null) {\n firstErrorTabIdx = idx;\n }\n showToast({\n type: \"warn\",\n message: `Validation Error in \"${tabName}\": the first Bottom Navigation tab must have \"Show Bottom Navigation\" enabled while it is visible.`,\n });\n }\n }\n }\n }\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 || hasBottomNavVisibilityError || 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: buildDefaultAppConfiguration(defaultBottomNavigationConfig),\n tabStatus: buildDefaultTabStatus(defaultBottomNavigationConfig),\n legacyBottomNavRaw: null,\n });\n return newTabs;\n });\n\n setActiveWorkspaceIndex(workspaceTabs.length === 0 ? 1 : workspaceTabs.length);\n setAppBarConfig(normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(defaultBottomNavigationConfig);\n setAppConfiguration(buildDefaultAppConfiguration(defaultBottomNavigationConfig));\n setTabStatus(buildDefaultTabStatus(defaultBottomNavigationConfig));\n setLegacyBottomNavRaw(null);\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 legacyBottomNavRaw: reconstructed.legacyBottomNavRaw || null,\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 setLegacyBottomNavRaw(reconstructed.legacyBottomNavRaw || null);\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 setLegacyBottomNavRaw(reconstructed.legacyBottomNavRaw || null);\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 legacyBottomNavRaw: reconstructed.legacyBottomNavRaw || null,\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 handleCopyNavSection = (tabId) => {\n if (isMenuTypeTab(tabId)) return;\n\n const rawEntry = appConfiguration?.[tabId] || [];\n if (rawEntry.length === 0) {\n showToast({ type: \"warn\", message: \"Nothing to copy — this tab has no layout configured.\" });\n return;\n }\n const canonicalEntry = { layout: sanitizeDashboardLayout(rawEntry, undefined, pageParamsByFeature) };\n\n localStorage.setItem(NAV_SECTION_STORAGE_KEY, JSON.stringify({ sourceTabId: tabId, rawEntry, canonicalEntry }));\n showToast({ type: \"success\", message: \"Layout copied!\" });\n };\n\n const handlePasteNavSection = (targetTabId, mode = \"replace\") => {\n if (isMenuTypeTab(targetTabId)) return;\n if (mode === \"replace\") {\n setReplacePasteConfirmModal({ open: true, targetTabId });\n return;\n }\n performPasteNavSection(targetTabId, mode);\n };\n\n const performPasteNavSection = (targetTabId, mode) => {\n if (isMenuTypeTab(targetTabId)) return;\n\n const jsonStr = localStorage.getItem(NAV_SECTION_STORAGE_KEY);\n if (!jsonStr) {\n showToast({ type: \"warn\", message: \"No layout copied yet.\" });\n return;\n }\n\n try {\n const parsed = JSON.parse(jsonStr);\n const actionLabel = mode === \"append\" ? \"appended\" : \"pasted\";\n\n let hydratedResult = hydrateLayout(parsed.canonicalEntry.layout, masterFeatureList, groupedFeatures);\n hydratedResult = clearOrphanedFeatureCards(hydratedResult);\n\n const originalFeatures = extractFeatureMapFromLayout(parsed.rawEntry);\n const remainingFeatures = extractFeatureMapFromLayout(hydratedResult);\n\n const strippedFeatures = [];\n originalFeatures.forEach((name, id) => {\n if (!remainingFeatures.has(id)) strippedFeatures.push(name);\n });\n\n const targetTabLabel =\n bottomNavigationConfig.find((tab) => tab.id === targetTabId)?.label || targetTabId;\n\n const applyPaste = () => {\n setAppConfiguration((prev) => ({\n ...prev,\n [targetTabId]:\n mode === \"append\" ? [...(prev[targetTabId] || []), ...hydratedResult] : hydratedResult,\n }));\n setTabStatus((prev) => ({ ...prev, [targetTabId]: true }));\n };\n\n if (strippedFeatures.length > 0) {\n setSectionPasteValidationModal({\n open: true,\n strippedFeatures,\n sourceLabel: targetTabLabel,\n targetLabel: targetTabLabel,\n onConfirm: () => {\n applyPaste();\n setSectionPasteValidationModal({\n open: false,\n strippedFeatures: [],\n sourceLabel: \"\",\n targetLabel: \"\",\n onConfirm: null,\n onCancel: null,\n });\n showToast({ type: \"success\", message: `${targetTabLabel} layout ${actionLabel}!` });\n },\n onCancel: () => {\n setSectionPasteValidationModal({\n open: false,\n strippedFeatures: [],\n sourceLabel: \"\",\n targetLabel: \"\",\n onConfirm: null,\n onCancel: null,\n });\n },\n });\n } else {\n applyPaste();\n showToast({ type: \"success\", message: `${targetTabLabel} layout ${actionLabel}!` });\n }\n } catch (e) {\n console.error(\"Failed to parse copied layout\", e);\n showToast({ type: \"error\", message: \"Failed to parse copied layout.\" });\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 nextBottomNavigationConfig = tabToLoad.bottomNavigationConfig || defaultBottomNavigationConfig;\n const nextTabStatus = tabToLoad.tabStatus || buildDefaultTabStatus(nextBottomNavigationConfig);\n setAppBarConfig(tabToLoad.appBarConfig || normalizeAppBarConfig(defaultAppBarConfig));\n setBottomNavigationConfig(nextBottomNavigationConfig);\n setLegacyBottomNavRaw(tabToLoad.legacyBottomNavRaw || null);\n const nextAppConfig = tabToLoad.appConfiguration\n ? JSON.parse(JSON.stringify(tabToLoad.appConfiguration))\n : buildDefaultAppConfiguration(nextBottomNavigationConfig);\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 featureOptions = useMemo(\n () => Object.values(masterFeatureList).filter((feature) => feature?.type === \"FEATURE\"),\n [masterFeatureList]\n );\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 (isMenuTypeTab(activeTabId)) {\n showToast({\n type: \"warn\",\n message: \"Blocks from the Block Library can only be added to Layout Configuration tabs.\",\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 const previousItemsById = bottomNavigationConfig.reduce((map, tab) => {\n map[tab.id] = tab;\n return map;\n }, {});\n\n setBottomNavigationConfig(savedItems);\n\n setTabStatus((prevStatus) => {\n const nextStatus = { ...prevStatus };\n savedItems.forEach((item) => {\n nextStatus[item.id] = item.visible !== false;\n });\n return nextStatus;\n });\n\n setAppConfiguration((prevConfig) => {\n const nextConfig = { ...prevConfig };\n savedItems.forEach((item) => {\n const previousItem = previousItemsById[item.id];\n if (!previousItem || previousItem.tabType !== item.tabType || !nextConfig[item.id]) {\n nextConfig[item.id] = [];\n }\n });\n return nextConfig;\n });\n\n const activeItem = savedItems.find((item) => item.id === activeTabId);\n if (!activeItem || 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: \"\", isVisible: true }],\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 && isMenuTypeTab(activeTabId)) {\n setAppConfiguration((prevConfig) => {\n const currentFeatures = prevConfig[activeTabId] || [];\n const alreadyAssigned = currentFeatures.some((f) => String(f.id) === String(featureData.id));\n const newFeatures = alreadyAssigned\n ? []\n : [createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, featureData, null)];\n return {\n ...prevConfig,\n [activeTabId]: newFeatures,\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 handleUpdateActiveTabFeature = (featureId, patch, tabId = activeTabId) => {\n setAppConfiguration((prevConfig) => {\n const currentFeatures = prevConfig[tabId] || [];\n const newFeatures = currentFeatures.map((feature) =>\n String(feature.id) === String(featureId) ? { ...feature, ...patch } : feature\n );\n\n return {\n ...prevConfig,\n [tabId]: newFeatures,\n };\n });\n };\n\n // defaults the tab's own icon to the assigned feature's icon.\n const handleSetMenuTabFeature = (tabId, featureData) => {\n const newFeatureNode = featureData\n ? createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, featureData, null)\n : null;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [tabId]: newFeatureNode ? [newFeatureNode] : [],\n }));\n\n setBottomNavigationConfig((prevItems) =>\n prevItems.map((item) =>\n item.id === tabId\n ? {\n ...item,\n iconName: \"\",\n iconSvg: newFeatureNode?.icon?.content || \"\",\n }\n : item,\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 (!isMenuTypeTab(activeTabId) && !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 && isMenuTypeTab(activeTabId) && draggedType === COMPONENT_TYPES.FEATURE) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n const newFeature = createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, droppedFeature, null);\n if (!newFeature) return;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]: [newFeature],\n }));\n return;\n }\n if (over?.id === \"trash-zone\") {\n const instanceIdToDelete = active.id;\n const parentSectionId = active.data.current.sectionId;\n if (!isMenuTypeTab(activeTabId)) {\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 {\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]: (prevConfig[activeTabId] || []).filter((f) => f.instanceId !== instanceIdToDelete),\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 !isMenuTypeTab(activeTabId) &&\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 (!isMenuTypeTab(activeTabId) && 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 (!isMenuTypeTab(activeTabId) && (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 && isMenuTypeTab(activeTabId)) {\n setAppConfiguration((prevConfig) => {\n const currentFeatures = prevConfig[activeTabId] || [];\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 [activeTabId]: newFeatures,\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 === \"MENU_ROOT_DROP_ZONE\") {\n if (draggedType === COMPONENT_TYPES.GROUP) {\n showToast({\n type: \"warn\",\n message: `Groups cannot be dropped directly onto a Menu Configuration 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 const newFeature = createDashboardChildFromDrag(COMPONENT_TYPES.FEATURE, droppedFeature, null);\n if (!newFeature) return;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]: [newFeature],\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 = \"390px\";\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 rootFeatureTile = currentLayout?.find((f) => f.instanceId === activeId);\n if (rootFeatureTile) {\n return { type: \"FEATURE_TILE\", data: rootFeatureTile };\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 isDraggingRootFeatureTile = currentLayout.some((f) => f.instanceId === activeId);\n\n return isDraggingTopLevel || isDraggingFeatureTile || isDraggingRootFeatureTile;\n }, [activeId, currentLayout]);\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 && isMenuTypeTab(activeTabId)) {\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 (!isMenuTypeTab(activeTabId)) {\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 if (rights !== null && !canUpdate) {\n return (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", width: \"100%\", height: \"80vh\" }}>\n <Card sx={{ height: 320, width: 600, display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to manage Mobile Menu Configurations\n </Typography>\n </Card>\n </Box>\n );\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 {canUpdate && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n sx={{ fontSize: \"0.8rem\", height: \"30px\" }}\n type=\"submit\"\n >\n Save\n </Button>\n )}\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 SvgIconBox={SvgIconBox}\n setCurrentLayoutComponents={setCurrentLayoutComponents}\n appBarConfig={appBarConfig}\n bottomNavigationConfig={bottomNavigationConfig}\n pageParamsByFeature={pageParamsByFeature}\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 onCopyNavSection={handleCopyNavSection}\n onPasteNavSection={handlePasteNavSection}\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 activeTabFeatures={currentLayout}\n onUpdateActiveTabFeature={handleUpdateActiveTabFeature}\n appConfiguration={appConfiguration}\n onSetMenuTabFeature={handleSetMenuTabFeature}\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 activeTabFeatures={currentLayout}\n onUpdateActiveTabFeature={handleUpdateActiveTabFeature}\n appConfiguration={appConfiguration}\n onSetMenuTabFeature={handleSetMenuTabFeature}\n pageParamsByFeature={pageParamsByFeature}\n legacyBottomNavItems={legacyBottomNavItems}\n hasAnyLegacyBottomNav={hasAnyLegacyBottomNav}\n onMigrateBottomNavClick={() => setMigrateBottomNavModalOpen(true)}\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 <CustomConfirmationModal\n open={replacePasteConfirmModal.open}\n handleClose={() => {\n setReplacePasteConfirmModal({ open: false, targetTabId: null });\n }}\n handleClick={() => {\n const { targetTabId } = replacePasteConfirmModal;\n setReplacePasteConfirmModal({ open: false, targetTabId: null });\n performPasteNavSection(targetTabId, \"replace\");\n }}\n title=\"Replace & Paste\"\n description={`If you replace and paste then your current configuration will be replaced by your pasted configuration. Are you sure you want to replace & paste?`}\n dataTestId=\"replace-paste-confirmation\"\n />\n\n <CustomConfirmationModal\n open={migrateBottomNavModalOpen}\n handleClose={() => setMigrateBottomNavModalOpen(false)}\n handleClick={handleConfirmMigrateBottomNav}\n title=\"Migrate Bottom Navigation\"\n description={\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n This will migrate the Bottom Navigation configuration for this menu (across every tab) to the\n new format:\n </Typography>\n <List dense sx={{ listStyleType: \"disc\", pl: 3 }}>\n <ListItem sx={{ display: \"list-item\", py: 0.25 }} disableGutters>\n Bottom Navigation tabs become independently addable, removable, and reorderable.\n </ListItem>\n <ListItem sx={{ display: \"list-item\", py: 0.25 }} disableGutters>\n Each tab can be a &quot;Layout&quot; tab (a custom page) or a &quot;Menu&quot; tab (a single feature).\n </ListItem>\n <ListItem sx={{ display: \"list-item\", py: 0.25 }} disableGutters>\n Home, Programs, and Analytics content carries over as-is.\n </ListItem>\n <ListItem sx={{ display: \"list-item\", py: 0.25 }} disableGutters>\n Family Management&apos;s form assignment does not carry over automatically — it will need to\n be reassigned as a Feature after migrating.\n </ListItem>\n </List>\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n This action cannot be undone from within the editor. Are you sure you want to migrate?\n </Typography>\n </Box>\n }\n dataTestId=\"migrate-bottom-navigation-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\n open={sectionPasteValidationModal.open}\n onClose={sectionPasteValidationModal.onCancel}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Layout Pasted</DialogTitle>\n <DialogContent dividers>\n <Typography variant=\"body1\" gutterBottom>\n The following feature(s) from \"{sectionPasteValidationModal.sourceLabel}\" are not available for this\n role and were stripped:\n </Typography>\n <List dense>\n {sectionPasteValidationModal.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 into \"{sectionPasteValidationModal.targetLabel}\" without these features?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={sectionPasteValidationModal.onCancel} color=\"inherit\">\n Cancel Paste\n </Button>\n <Button onClick={sectionPasteValidationModal.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","isDarkMode","validationAttempted","useContext","PreviewContext","currentIndex","setCurrentIndex","images","intervalTime","timer","prevIndex","handlePrev","handleNext","carouselHeight","borderRadius","faImage","activeImage","targetUuid","targetId","imgProp","d","svgToCssUrl","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","mapIconSize","GRADIENT_DIRECTION_CSS","hexToRgba","hex","opacity","normalized","ch","r","g","b","resolveGradientColor","colorValue","fallback","buildGradientCss","background","startColor","DEFAULT_BACKGROUND_OPACITY","endColor","DashboardLayoutNode","onDeleteNode","activeElementId","zoomedNodeId","setZoomedNodeId","isSectionChild","compactToolbar","resolveNodeBackgroundImage","n","svg","_b","_c","_d","_e","_f","_g","backdropSx","renderNodeBackgroundImage","colorCss","colorOverlay","getSolidBgColor","defaultBg","fallbackLight","fallbackDark","getBackgroundCss","getConfiguredBackgroundCss","configured","getFgColor","defaultFg","getHeaderColor","defaultColor","nodeKey","setDraggableRef","useDraggable","setDropTargetRef","isNodeOver","setCombinedRef","useCallback","element","isHovered","setIsHovered","dragHandleProps","draggableStyle","isNodeActive","ActionButtons","VisibilityBadge","FontAwesomeIcons","searchBg","searchText","borderRadiusVal","placeholderText","featureFg","sectionChildren","sectionBg","sectionHasBgImage","headerColor","child","cardBg","cardHasBgImage","cardFg","hasIcon","hasTitle","_h","_i","hasSubTitle","_j","_k","hasContent","_l","contentLayout","ensureItem","type","defaultH","defaultV","group","_m","layoutType","alignItems","justifyContent","getAnchorStyles","pos","h","v","styles","padding","rightSpacing","renderCtaButton","button","cardContent","loc","item","isHorizontalGroup","gap","anchorStyles","iconPx","iconStyle","iconColor","iconBackgroundColor","iconBorderColor","iconPadding","iconBorderRadius","iconBoxShadowElevation","iconBoxShadowOpacity","iconDropShadowElevation","iconDropShadowOpacity","titleColor","_n","_o","subtitleColor","_q","_p","_s","_r","_t","_u","_v","rowChildren","visibleColumns","_w","_x","_y","_z","_A","_B","_C","isVerticalDivider","_D","dividerThickness","_E","dividerColor","_F","_G","_H","fontWeightMap","textFontSize","_I","_J","textFontWeight","_K","_L","textAlignment","_M","_N","textColor","textContent","_O","_P","_Q","_R","DashboardSectionNode","MobileDisplay","tabErrorCounts","tabStatus","layoutComponents","activeTabId","handleTabSwitch","setCurrentLayoutComponents","appBarConfig","bottomNavigationConfig","pageParamsByFeature","onDeselectComponent","workspaceTabs","activeWorkspaceIndex","onAddWorkspaceTab","onWorkspaceTabChange","onDeleteWorkspaceTab","onCopyWorkspaceTab","onPasteWorkspaceTab","onCopyNavSection","onPasteNavSection","onDuplicateWorkspaceTab","onUpdateWorkspaceTab","onMoveWorkspaceTabLeft","onMoveWorkspaceTabRight","onEditWorkspaceTab","useTheme","stickyNodeRefs","stickyHeights","setStickyHeights","orderedLayoutComponents","orderNodesBySticky","overlayStickyIds","useLayoutEffect","ids","prev","measure","next","changed","observer","stickyOffsets","offsets","overlayNodes","topOffset","bottomOffset","firstBottomStickyId","hasStickyComponents","getStickyWrapperSx","position","sx","sensors","useSensors","useSensor","PointerSensor","tabMenuAnchorEl","setTabMenuAnchorEl","tabMenuIndex","setTabMenuIndex","handleOpenTabMenu","handleCloseTabMenu","isMenuTypeTab","tabId","tab","BOTTOM_NAV_TAB_TYPES","showsBottomNavigation","t","getFirstVisibleNavTabId","a","lastActiveLayoutTabIdRef","isBottomNavBarHidden","hasSingleNavTab","handleBackToBottomNavigation","target","hoveredNavItemId","setHoveredNavItemId","dropZoneId","dropZoneType","zoomedNode","findNodeById","setDroppableRef","navItems","HomeIcon","ProgramsIcon","AnalyticsIcon","FamilyManagementIcon","visibleNavItems","navItem","popoverState","setPopoverState","handleOpenGroupPopover","anchorElement","handleCloseGroupPopover","renderFeatureTile","handleGroupInternalSort","active","over","groupId","newGroupData","prevComponents","section","oldIndex","newIndex","newMenus","arrayMove","handleNestedFeatureClick","faWifi","faSignal","faBatteryFull","errorCount","faEllipsisV","Menu","MenuItem","faEdit","Divider","faArrowLeft","faArrowRight","faPaste","faTrashAlt","faLocationDot","faHospital","selectedActions","action","uploadedSvg","fontAwesomeIcon","formInfo","navigationAction","configuredParams","param","component","stickySx","sectionNode","DndContext","MobileGroupPopover","name","parts","part","size","color","groupData","anchorEl","features","anchorRect","Paper","faTimes","createSearchBarBlock","createLayoutNode","createCarouselBlock","createFeatureCardRowBlock","cardCount","row","i","createHeroCardBlock","card","createFeatureCardGridBlock","rowCount","cardsPerRow","column","rowIndex","cardIndex","createVerticalCardStackBlock","col","createTextBlock","createDividerBlock","createEmptySectionBlock","createHorizontalSpacerBlock","createVerticalSpacerBlock","PreviewBox","SearchBarPreview","CarouselPreview","FeatureCardRowPreview","HeroCardPreview","FeatureCardGridPreview","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","FormControl","Autocomplete","params","ConditionRow","condition","onChange","preferredLanguages","rolesList","operandOne","operator","operandTwo","operandOneType","operandTwoType","handleChange","field","updateCondition","updates","isOperandOneUserData","patch","InputLabel","Select","operatorSummaryLabels","key","lang","option","opt","ConditionGroup","isRoot","rule","options","handleAddCondition","newOptions","handleAddGroup","newRule","handleToggleRule","handleUpdateOption","updatedOption","handleDeleteOption","Chip","faRotate","updatedGroup","updatedCondition","VisibilityConditionEditor","hasConditions","handleCreateRoot","handleClear","theme","faCodeBranch","faLayerGroup","ACTION_TYPE_OPTIONS","MOBILE_ACTION_TYPES","renderActionFields","actionType","navigationFields","callToActionFields","COUNTRY_CODE_SOURCE_OPTIONS","CUSTOM_PARAM_SOURCE_OPTIONS","NAV_PARAM_OPERAND_OPTIONS","classifyNavParamValue","NavigationParamRow","paramName","entry","paramValue","paramType","handleValueChange","CallToActionValueField","valueType","helperText","typed","PlaceholderInsertButton","onInsert","setAnchorEl","setValue","setValueType","setName","resetAndClose","handleInsert","Popover","CallToActionFields","callToAction","cta","linkType","typeConfig","CALL_TO_ACTION_TYPES","textFieldRefs","handleLinkTypeChange","newLinkType","newTypeConfig","clearedParams","handleInsertPlaceholder","paramKey","currentText","token","el","newText","placeholderKeys","keys","collect","text","extractPlaceholderKeys","updatePlaceholderMapping","nextPlaceholders","nextTypes","updateCustomParam","rows","updateCustomParamKind","newKind","addCustomParam","handleInsertCustomParamPlaceholder","removeCustomParam","CALL_TO_ACTION_TYPE_OPTIONS","CountryDialCodes","selected","c","payload","rowKind","buildBackgroundForType","fontAwesomeIconDropdown","FontAwesomeIconsNames","uploadSvgIcon","onUploaded","showToast","reader","LegacyBottomNavItemRow","isExpanded","onToggleExpand","Switch","LegacyBottomNavLockedPanel","items","onMigrateClick","expandedId","setExpandedId","Alert","SortableBottomNavItem","onFieldChange","onIconChange","onRemove","canDelete","isMenuTab","textField","selectField","renderMenuTabFeaturePicker","showBottomNavigationError","firstTabShowNavError","isOnlyTab","renderIcon","icon","iconsvg","BOTTOM_NAV_TAB_TYPE_OPTIONS","conditions","SortableCarouselImageRow","image","onOpenImagePicker","onSelectSvg","onConfirmReplace","featureDropdown","renderNavigationParams","getNavigationFeatureId","getNavigationPageParams","buildNavigationTarget","svgInputRef","selectedImg","featureId","newPageParams","SortableAppBarActionRow","isPredefined","selectedIcon","expandable","normalizedSvg","svgElement","width","FormAccordion","title","expanded","summary","Accordion","AccordionSummary","ExpandMoreIcon","AccordionDetails","ColorPickerField","handleClick","handleClose","SketchPicker","fakeEvent","InspectorPanel","activeComponent","onDeselect","mobileQueries","onAppBarUpdate","onBottomNavigationSave","onAddCarouselImage","onUpdateCarouselImage","onRemoveCarouselImage","featureOptions","hideGlobalConfig","separatedGroups","separatedFeatures","onAssignFeature","activeTabFeatures","onUpdateActiveTabFeature","appConfiguration","onSetMenuTabFeature","legacyBottomNavItems","hasAnyLegacyBottomNav","onMigrateBottomNavClick","expandedBottomNavigationItemId","setExpandedBottomNavigationItemId","expandedActionKey","setExpandedActionKey","imagePickerState","setImagePickerState","backgroundSourceConfirm","setBackgroundSourceConfirm","backgroundSvgInputRef","closeBackgroundSourceConfirm","isActiveTabMenuType","isMenuGroupsExpanded","setIsMenuGroupsExpanded","isStandaloneExpanded","setIsStandaloneExpanded","setActiveGroupId","expandedAccordion","setExpandedAccordion","primaryAccordion","backgroundSummary","stickySummary","positionTab","setPositionTab","expandedFeatureConfigId","setExpandedFeatureConfigId","featureConfigSubTab","setFeatureConfigSubTab","isFeatureConfigSectionExpanded","setIsFeatureConfigSectionExpanded","expandedImageId","setExpandedImageId","featureCardActionsTab","setFeatureCardActionsTab","imageDndSensors","KeyboardSensor","sortableKeyboardCoordinates","hasCtaButton","handleAccordionChange","panel","handleGroupAccordionToggle","isFeatureAssigned","isGroupMember","isAssigned","renderFeatureSelection","menu","getAssignedFeaturesForConfig","updateAssignedFeatureProperties","updatedChildren","renderFeatureConfiguration","assignedFeatures","featureKey","hideCtaTab","activeSubTab","pageParamNames","existingPageParams","p","existingIndex","updatedEntry","updateBottomNavigationItemFields","itemId","updatedItems","updateBottomNavigationItem","property","addBottomNavigationItem","MAX_BOTTOM_NAVIGATION_TABS","newItem","generateUUID","removeBottomNavigationItem","remainingItems","handleBottomNavigationDragEnd","reordered","assignedFeature","fieldSx","numberField","fieldProps","colorField","imagePickerField","onOpenPicker","svgConfig","document","svgValue","pageParams","onParamsChange","navigation","selectedFeature","selectedValue","featureCardIconPicker","normalizeSizeOption","renderGlobalConfig","isGreetingVisible","locationVisible","healthInfrastructureVisible","PREDEFINED_ACTION_KEYS","PREDEFINED_ACTIONS","allActions","isPredefinedAction","getActionKey","selectedPredefined","handlePredefinedChange","selectedKeys","removedKeys","addedKeys","newActions","handleActionChange","handleActionAdd","newAction","handleActionRemove","handleActionReorder","extractedVarsMatch","extractedVars","m","uniqueExtractedVars","greetingValues","activeUsedValues","extractedVar","newVals","closestCenter","restrictToVerticalAxis","restrictToParentElement","k","hasMultipleTabs","showsBottomNav","firstNavItem","isFirstTab","renderSelectedConfig","queryOptions","opacityOptions","percentage","FONT_SIZE_OPTIONS","FONT_WEIGHT_OPTIONS","BACKGROUND_TYPE_OPTIONS","GRADIENT_TYPE_OPTIONS","GRADIENT_DIRECTION_OPTIONS","_S","hasAssignedFeature","cardAction","cardActionType","callToActionEnabled","updateCardAction","buttonEnabled","buttonStyle","buttonAction","updateButtonStyle","updateButtonAction","buttonActionType","result","faBox","raw","_T","faMousePointer","vPos","hPos","elType","cl","currentGroup","isActive","groupAtCell","cellHasItems","getIconForType","newLayout","existingGroupIndex","faGripLines","faGripLinesVertical","newItems","Slider","_V","_U","_X","_W","_Y","_Z","__","_$","_aa","_ba","_ca","_ea","_da","_ga","_fa","_ha","_ja","_ia","_la","_ka","_ma","_na","_oa","_pa","_qa","_ra","_sa","_ta","_ua","_va","_wa","_xa","_ya","_za","_Aa","_Ba","_Ca","_Da","_Ea","_Ga","_Fa","_Ia","_Ha","_Ka","_Ja","_Ma","_La","_Na","_Oa","_Pa","_Qa","_Ra","_Sa","_Ta","_Ua","dndId","description","onConfirm","_Va","_Wa","_Xa","_Ya","TEXT_STYLE_OPTIONS","_Za","TEXT_DECORATION_OPTIONS","__a","CONTENT_ALIGNMENT_OPTIONS","_$a","_ab","_bb","ORIENTATION_OPTIONS","_cb","_db","_eb","_fb","renderVisibilityConfig","renderStickyConfig","stickyPosition","STICKY_POSITION_OPTIONS","STICKY_TYPE_OPTIONS","imagePickerDialogs","CustomConfirmationModal","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","pIndex","ON_LOAD_DROPDOWN_VALUES","OnLoadConfigurationPanel","onLoadSteps","setOnLoadSteps","isModal","setIsExpanded","addStep","fieldOrFields","prevSteps","updatedStep","updatedConfigType","handleDragEnd","content","s","buildDefaultTabStatus","bottomNavigationTabs","acc","buildDefaultAppConfiguration","pickInitialActiveTabId","sorted","normalizeAppBarConfig","normalizedConfig","defaultAppBarConfig","resolveMobileActionType","restAction","buildMobileActionPayload","NAV_SECTION_STORAGE_KEY","extractFeatureMapFromLayout","nodes","traverseNode","clearOrphanedFeatureCards","updatedNode","clearFeatureCardConfig","AddMenuConfiguration","location","useLocation","state","navigate","useNavigate","setRolesList","isEditMode","setIsEditMode","setMobileQueries","setOnlineQueries","setDocumentMasterImages","masterFeatureList","setMasterFeatureList","groupedFeatures","setGroupedFeatures","setPageParamsByFeature","backModalOpen","setBackModalOpen","setIsPreviewMode","setTabErrorCounts","setValidationAttempted","onLoadModalOpen","setOnLoadModalOpen","tempOnLoadSteps","setTempOnLoadSteps","setAppBarConfig","setBottomNavigationConfig","defaultBottomNavigationConfig","setPreferredLanguages","rights","setRights","legacyBottomNavRaw","setLegacyBottomNavRaw","migrateBottomNavModalOpen","setMigrateBottomNavModalOpen","user","useSelector","canUpdate","GeneralUtil","getAssignedFeatures","error","formCtrl","useForm","fetchRoles","fetchMobileQueries","fetchDocumentMasterImages","fetchPreferredLanguages","fetchMenus","response","getPreferredLanguage","configJson","activeConfig","loadedTabs","reconstructed","reconstructAppState","setAppConfiguration","setTabStatus","setActiveTabId","hydratedTabs","tabData","tabReconstructed","setWorkspaceTabs","setActiveWorkspaceIndex","execute","onlineResponse","allowedImageExtensions","uploadDocument","api","normalizeExtension","fileName","extension","extensionFromName","imageOptions","uploadDocumentMasterImage","documentUUID","nextDocument","existingDocuments","roleId","transformListData","fetchPageParamsByRole","map","rawPageParams","parsedPageParams","findMetadataById","hydrateFeature","canonicalFeature","parentInstanceId","masterData","instanceUuid","hydratedMenus","menuItem","masterMenuItem","instancePrefix","hydrateLayout","canonicalLayout","hydrateDashboardLayout","parentId","NON_TAB_CONFIG_KEYS","rawCanonicalConfig","isLegacy","isLegacyBottomNavigationConfig","canonicalConfig","migrateLegacyBottomNavigation","extractLegacyBottomNavRaw","isAttendanceRequired","appBar","newAppConfiguration","newTabStatus","rawBottomNavigationItems","bottomNavigation","groupedList","masterFeatureMap","seenStandaloneIds","processedMenus","transformedMenu","uniqueMenus","seenMenuIds","collectFeatureStubs","generateTabConfig","finalConfig","legacyRaw","liveItems","legacyShaped","legacyId","originalEntry","liveId","it","isEnabled","rawLiveLayout","sanitizeDashboardLayout","_legacyId","tabEntry","rawFeature","rawLayout","createCanonicalConfig","tabsToSave","getCurrentWorkspaceData","baseConfig","onSubmit","validateMobileLayout","configJsonString","navTabs","initial","COMPONENT_TYPES","activeId","setActiveId","setActiveElementId","initialConfig","searchTerm","setSearchTerm","pasteValidationModal","setPasteValidationModal","sectionPasteValidationModal","setSectionPasteValidationModal","replacePasteConfirmModal","setReplacePasteConfirmModal","syncWorkspaceTab","dataToSync","newTabs","handleWorkspaceTabChange","currentData","newWorkspace","nextBottomNavigationConfig","nextTabStatus","nextAppConfig","firstActive","handleConfirmMigrateBottomNav","recalculateTabErrors","tabsToValidate","newErrorCounts","appConfig","totalTabErrors","layoutKey","layoutNodes","emptyNodes","findAllEmptyDashboardLayoutNodes","updatedErrorCounts","hasGreetingError","tabName","unmappedVars","firstErrorTabIdx","hasBottomNavVisibilityError","handleAddWorkspaceTab","newTabIndex","handleDuplicateWorkspaceTab","indexToDuplicate","dataToDuplicate","parsedData","nextIndex","handleCopyWorkspaceTab","indexToCopy","handlePasteWorkspaceTab","indexToPaste","jsonStr","parsed","dataToPaste","extractFeaturesFromAppConfig","tabContent","originalFeatures","remainingFeatures","strippedFeatures","applyPaste","handleCopyNavSection","rawEntry","canonicalEntry","handlePasteNavSection","targetTabId","mode","performPasteNavSection","actionLabel","hydratedResult","targetTabLabel","handleDeleteWorkspaceTab","indexToDelete","currentTabs","nextActiveIndex","tabToLoad","selectedIndex","handleUpdateWorkspaceTab","handleMoveWorkspaceTabLeft","temp","handleMoveWorkspaceTabRight","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","previousItemsById","prevStatus","nextStatus","previousItem","activeItem","firstVisibleItem","addCarouselImage","componentId","documentUuid","updateCarouselImage","imageIndex","removeCarouselImage","createDashboardChildFromDrag","draggedType","dragData","createFeatureNode","handleAssignFeature","featureData","newFeatures","existingFeature","cardNode","newChild","cardWithChild","autoConfigureFeatureCardFromChild","newChildren","scopeNode","getDuplicateCheckScopeNode","hasFeatureInDashboardLayout","handleUpdateActiveTabFeature","handleSetMenuTabFeature","newFeatureNode","prevItems","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","currentFeatures","droppedGroup","targetSectionIndex","targetSection","sourceIdString","newGroupItem","updatedSection","searchBar","sortableList","oldSortableIndex","newSortableIndex","finalLayout","targetZoneType","newComponent","SCREEN_CONTENT_WIDTH","OverlayMobileSearchBar","OverlayMobileSection","OverlayFeatureTile","OverlaySidebarFeature","iconElement","getActiveLayoutItem","sourceItem","itemType","rootFeatureTile","layoutNode","renderActiveOverlay","isDraggingSortable","isDraggingTopLevel","isDraggingFeatureTile","isDraggingRootFeatureTile","sortableSectionIds","customCollisionDetection","args","droppableContainers","container","rectIntersection","dashboardDropTargets","targetType","validSectionDropTargets","Card","CustomDropdown","TrashZone","faGear","FormControlLabel","DragOverlay","List","ListItem","DialogTitle","ListItemText","DialogActions","keySet","hasOnLoadError","faTrashCan","svgHtml","setSvgHtml","serializedSvg"],"mappings":"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"}