@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.
- package/dist/{AccessRights-xrday-L1.js → AccessRights-DBjTQA1-.js} +395 -390
- package/dist/AccessRights-DBjTQA1-.js.map +1 -0
- package/dist/{AddFeatures-D1sU8RjY.js → AddFeatures-COj4ZTIM.js} +2 -2
- package/dist/{AddFeatures-D1sU8RjY.js.map → AddFeatures-COj4ZTIM.js.map} +1 -1
- package/dist/AddMenuConfiguration-Creeib5X.js +11223 -0
- package/dist/AddMenuConfiguration-Creeib5X.js.map +1 -0
- package/dist/AddMenuConfiguration.css +1 -1
- package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js → BrandsPage-CdcAvaml-ZtVTX6vX.js} +43 -43
- package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js.map → BrandsPage-CdcAvaml-ZtVTX6vX.js.map} +1 -1
- package/dist/{CategoriesPage-BsS5IQh3-B03lWRY5.js → CategoriesPage-BprQEYJw-CclreTv1.js} +109 -102
- package/dist/CategoriesPage-BprQEYJw-CclreTv1.js.map +1 -0
- package/dist/{ChangePasswordModalCore-BPsJquTS.js → ChangePasswordModalCore-DZGOkbRY.js} +3 -3
- package/dist/{ChangePasswordModalCore-BPsJquTS.js.map → ChangePasswordModalCore-DZGOkbRY.js.map} +1 -1
- package/dist/ConditionConfig-Bpm6OoV5.js +408 -0
- package/dist/ConditionConfig-Bpm6OoV5.js.map +1 -0
- package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js → DashboardPage-CTiGSx71-CsYohJ5e.js} +32 -32
- package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js.map → DashboardPage-CTiGSx71-CsYohJ5e.js.map} +1 -1
- package/dist/EntityManagement-BGwJGl9k.js +62 -0
- package/dist/EntityManagement-BGwJGl9k.js.map +1 -0
- package/dist/EventConfig-BY2cgGyx.js +27 -0
- package/dist/{EventConfig-BmLemzX3.js.map → EventConfig-BY2cgGyx.js.map} +1 -1
- package/dist/EventConfigurations-B-z7xHh_.js +544 -0
- package/dist/EventConfigurations-B-z7xHh_.js.map +1 -0
- package/dist/EventConfigurations.css +1 -1
- package/dist/EventsExceptionModal-DafomIv6.js +188 -0
- package/dist/EventsExceptionModal-DafomIv6.js.map +1 -0
- package/dist/EventsUi-Dl_yckSA.js +263 -0
- package/dist/EventsUi-Dl_yckSA.js.map +1 -0
- package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js +112 -0
- package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map +1 -0
- package/dist/{FeatureMenu-DYJmDt7q.js → FeatureMenu-Kc73yPHH.js} +9 -5
- package/dist/FeatureMenu-Kc73yPHH.js.map +1 -0
- package/dist/{FhirServerList-DuTwnngN.js → FhirServerList-CrIHMAxz.js} +16 -16
- package/dist/{FhirServerList-DuTwnngN.js.map → FhirServerList-CrIHMAxz.js.map} +1 -1
- package/dist/{FhirServerProfile-CUOwC6Wb.js → FhirServerProfile-D3aYcpwY.js} +8 -8
- package/dist/{FhirServerProfile-CUOwC6Wb.js.map → FhirServerProfile-D3aYcpwY.js.map} +1 -1
- package/dist/{FhirServerWizard-DZI8Olku.js → FhirServerWizard-Db6Hm4bQ.js} +15 -15
- package/dist/{FhirServerWizard-DZI8Olku.js.map → FhirServerWizard-Db6Hm4bQ.js.map} +1 -1
- package/dist/{GrantPermissionModal-BDN66Atn.js → GrantPermissionModal-D7iNZd0M.js} +54 -51
- package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-lKsJZMak.js +8060 -0
- package/dist/ImmunizationConfigurationBase-lKsJZMak.js.map +1 -0
- package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js +1017 -0
- package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js.map +1 -0
- package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js +1344 -0
- package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js.map +1 -0
- package/dist/{ManageDynamicFeature-BU0I45dd.js → ManageDynamicFeature-CuyYfx_P.js} +104 -97
- package/dist/ManageDynamicFeature-CuyYfx_P.js.map +1 -0
- package/dist/ManageEventConfiguration-DqPbn3Oi.js +1216 -0
- package/dist/ManageEventConfiguration-DqPbn3Oi.js.map +1 -0
- package/dist/ManageEventConfiguration.css +1 -1
- package/dist/ManageRole-CyfpySt9.js +981 -0
- package/dist/ManageRole-CyfpySt9.js.map +1 -0
- package/dist/{ManageUser-DCFkUMV9.js → ManageUser-Dm0l833u.js} +286 -286
- package/dist/{ManageUser-DCFkUMV9.js.map → ManageUser-Dm0l833u.js.map} +1 -1
- package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js → MemberProfileCard-01d_jz3w-DYHtbgMX.js} +46 -46
- package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js.map → MemberProfileCard-01d_jz3w-DYHtbgMX.js.map} +1 -1
- package/dist/MobileAnalytics-C9oc2yAo.js +18399 -0
- package/dist/MobileAnalytics-C9oc2yAo.js.map +1 -0
- package/dist/MobileMenuManagement-BmzTPXy7.js +231 -0
- package/dist/MobileMenuManagement-BmzTPXy7.js.map +1 -0
- package/dist/MobileTypeEventConfigModal-DodU3beR.js +752 -0
- package/dist/MobileTypeEventConfigModal-DodU3beR.js.map +1 -0
- package/dist/{NewServerManagement-Cxe0dV0O.js → NewServerManagement-BdayO78D.js} +368 -352
- package/dist/NewServerManagement-BdayO78D.js.map +1 -0
- package/dist/OtherTypeEventConfigModal-D_9S50aI.js +1414 -0
- package/dist/OtherTypeEventConfigModal-D_9S50aI.js.map +1 -0
- package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js} +58 -58
- package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map} +1 -1
- package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js → PaymentsPage-CHieGNrn-BnYCtqHd.js} +37 -37
- package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js.map → PaymentsPage-CHieGNrn-BnYCtqHd.js.map} +1 -1
- package/dist/{PermissionsModal-CCYkcKlC.js → PermissionsModal-Dxbkkrqe.js} +18 -18
- package/dist/PermissionsModal-Dxbkkrqe.js.map +1 -0
- package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js} +2 -2
- package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map} +1 -1
- package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js +801 -0
- package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js.map +1 -0
- package/dist/{PickupsPage-Ctpghavs-CUp4uIZq.js → PickupsPage-BWblMlic-CWkgeBw0.js} +132 -132
- package/dist/PickupsPage-BWblMlic-CWkgeBw0.js.map +1 -0
- package/dist/PmGuard-BvUUbU80-BpYNaDzl.js +641 -0
- package/dist/PmGuard-BvUUbU80-BpYNaDzl.js.map +1 -0
- package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js +1523 -0
- package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map +1 -0
- package/dist/{ProductsPage-CupVmOD4-D45a_hf-.js → ProductsPage-BI22nPb4-CQBjnc-n.js} +44 -43
- package/dist/ProductsPage-BI22nPb4-CQBjnc-n.js.map +1 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js +724 -0
- package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map +1 -0
- package/dist/{PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js → PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js} +428 -418
- package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map +1 -0
- package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js} +65 -65
- package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map} +1 -1
- package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js → PurchasesPage-Djl1AqD_-DXeYFMrX.js} +55 -55
- package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js.map → PurchasesPage-Djl1AqD_-DXeYFMrX.js.map} +1 -1
- package/dist/{RoleManagement-s8iNx2Mu.js → RoleManagement-DVYufwy-.js} +3 -3
- package/dist/{RoleManagement-s8iNx2Mu.js.map → RoleManagement-DVYufwy-.js.map} +1 -1
- package/dist/Roles-BoNGJhtR.js +19 -0
- package/dist/Roles-BoNGJhtR.js.map +1 -0
- package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js → SaleCreatePage-DHBLmlBr-BlgjVsq6.js} +39 -39
- package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map → SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map} +1 -1
- package/dist/{SalesPage-D18DCseD-BxktGDRQ.js → SalesPage-eF9Yr42z-BQ9FlXC3.js} +61 -61
- package/dist/{SalesPage-D18DCseD-BxktGDRQ.js.map → SalesPage-eF9Yr42z-BQ9FlXC3.js.map} +1 -1
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js +741 -0
- package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js.map +1 -0
- package/dist/{ShowFlywayQuery-D1y_4A1u.js → ShowFlywayQuery-DIOUdYfG.js} +26 -19
- package/dist/{ShowFlywayQuery-D1y_4A1u.js.map → ShowFlywayQuery-DIOUdYfG.js.map} +1 -1
- package/dist/{StorageUnitsPage-7EqwuMOI-BwUso1Th.js → StorageUnitsPage-CTEVuemZ-B4osG74N.js} +253 -223
- package/dist/StorageUnitsPage-CTEVuemZ-B4osG74N.js.map +1 -0
- package/dist/{SubMenu-eEDhZUvh.js → SubMenu-OO2zhKiu.js} +5 -3
- package/dist/SubMenu-OO2zhKiu.js.map +1 -0
- package/dist/{TableDetails-BtafRxXb.js → TableDetails-Cc40dEUs.js} +272 -267
- package/dist/TableDetails-Cc40dEUs.js.map +1 -0
- package/dist/{TableList-Dpo6dO7S.js → TableList-B5tX4wII.js} +316 -312
- package/dist/TableList-B5tX4wII.js.map +1 -0
- package/dist/{TransactionsPage-DrH53pVS-BkhIGB6C.js → TransactionsPage-Zuu7sjID-B-ACzvd1.js} +195 -180
- package/dist/TransactionsPage-Zuu7sjID-B-ACzvd1.js.map +1 -0
- package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js +635 -0
- package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map +1 -0
- package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js +600 -0
- package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js.map +1 -0
- package/dist/TypeConfiguration-EaFiOzRE.js +114 -0
- package/dist/TypeConfiguration-EaFiOzRE.js.map +1 -0
- package/dist/UserList-Cf5B-o_1.js +1904 -0
- package/dist/UserList-Cf5B-o_1.js.map +1 -0
- package/dist/Users-MC7txo1V.js +43 -0
- package/dist/{Users-Bpc4Sazd.js.map → Users-MC7txo1V.js.map} +1 -1
- package/dist/VaccineEducation-T_UE57Ef.js +231 -0
- package/dist/VaccineEducation-T_UE57Ef.js.map +1 -0
- package/dist/VaccineEducation.css +1 -0
- package/dist/VaccineEducationConfigurator-CWc20_rv.js +50948 -0
- package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +1 -0
- package/dist/VaccineEducationConfigurator.css +4 -0
- package/dist/VaccineEducationList-Ok7_5EFb.js +334 -0
- package/dist/VaccineEducationList-Ok7_5EFb.js.map +1 -0
- package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js +457 -0
- package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js.map +1 -0
- package/dist/{constants-ClZJY2x1-MkSWn6TZ.js → constants-BTpJFQe_-CYPZIqQF.js} +166 -56
- package/dist/constants-BTpJFQe_-CYPZIqQF.js.map +1 -0
- package/dist/dashboardLayoutUtils--xUnoKPa.js +615 -0
- package/dist/dashboardLayoutUtils--xUnoKPa.js.map +1 -0
- package/dist/index-mfoqII2U.js +524 -0
- package/dist/index-mfoqII2U.js.map +1 -0
- package/dist/{index-D9YNFPn9.js → index-o8Pyt1Bt.js} +445 -439
- package/dist/index-o8Pyt1Bt.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/dist/index.lib-BySa9-Z-.js +936 -0
- package/dist/index.lib-BySa9-Z-.js.map +1 -0
- package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js +43 -0
- package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js.map +1 -0
- package/package.json +5 -1
- package/dist/AccessRights-xrday-L1.js.map +0 -1
- package/dist/AddMenuConfiguration-e5BVXhmw.js +0 -8547
- package/dist/AddMenuConfiguration-e5BVXhmw.js.map +0 -1
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +0 -1
- package/dist/ConditionConfig-Ddz9halE.js +0 -395
- package/dist/ConditionConfig-Ddz9halE.js.map +0 -1
- package/dist/ConditionConfig.css +0 -1
- package/dist/EntityManagement-CPQL6qBj.js +0 -50
- package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
- package/dist/EventConfig-BmLemzX3.js +0 -26
- package/dist/EventConfigurations-Bzh1qWXU.js +0 -450
- package/dist/EventConfigurations-Bzh1qWXU.js.map +0 -1
- package/dist/EventsExceptionModal-B2SRrnB1.js +0 -200
- package/dist/EventsExceptionModal-B2SRrnB1.js.map +0 -1
- package/dist/EventsSkeleton-BIcPks4T.js +0 -61
- package/dist/EventsSkeleton-BIcPks4T.js.map +0 -1
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +0 -79
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +0 -1
- package/dist/FeatureMenu-DYJmDt7q.js.map +0 -1
- package/dist/GrantPermissionModal-BDN66Atn.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +0 -7639
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +0 -1
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +0 -665
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +0 -1
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
- package/dist/ManageEventConfiguration-CoYcpjR9.js +0 -1085
- package/dist/ManageEventConfiguration-CoYcpjR9.js.map +0 -1
- package/dist/ManageRole-CNZBRKGU.js +0 -776
- package/dist/ManageRole-CNZBRKGU.js.map +0 -1
- package/dist/MobileAnalytics-pQoE8cG1.js +0 -16888
- package/dist/MobileAnalytics-pQoE8cG1.js.map +0 -1
- package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js +0 -783
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +0 -1
- package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js +0 -2046
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +0 -1
- package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +0 -783
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +0 -1
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +0 -1
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +0 -599
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +0 -1
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +0 -1302
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +0 -1
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +0 -1
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +0 -648
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +0 -1
- package/dist/Roles-BIyiic67.js +0 -14
- package/dist/Roles-BIyiic67.js.map +0 -1
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +0 -747
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +0 -1
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +0 -1
- package/dist/SubMenu-eEDhZUvh.js.map +0 -1
- package/dist/TableDetails-BtafRxXb.js.map +0 -1
- package/dist/TableList-Dpo6dO7S.js.map +0 -1
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +0 -1
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +0 -315
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +0 -1
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +0 -476
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +0 -1
- package/dist/TypeConfiguration-3O6ABrK-.js +0 -117
- package/dist/TypeConfiguration-3O6ABrK-.js.map +0 -1
- package/dist/UserList-DgPxsnj2.js +0 -1129
- package/dist/UserList-DgPxsnj2.js.map +0 -1
- package/dist/Users-Bpc4Sazd.js +0 -41
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +0 -321
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +0 -1
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +0 -1
- package/dist/dashboardLayoutUtils-D1xCAxp3.js +0 -405
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
- package/dist/index-D9YNFPn9.js.map +0 -1
- package/dist/index.lib-Dn8PMkeD.js +0 -862
- package/dist/index.lib-Dn8PMkeD.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboardLayoutUtils--xUnoKPa.js","sources":["../src/views/MobileMenuManagement/dashboardLayoutUtils.js"],"sourcesContent":["import { generateUUID } from \"@/utils/UUIDgenerator\";\nimport {\n DASHBOARD_ALLOWED_CHILDREN as ALLOWED_CHILDREN,\n DASHBOARD_COMPONENT_TYPES,\n DASHBOARD_LAYOUT_STYLE_DEFAULTS as styleDefaults,\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 LEGACY_BOTTOM_NAVIGATION_TAB_DEFAULTS,\n BOTTOM_NAV_TAB_TYPES,\n MOBILE_ACTION_TYPES,\n CALL_TO_ACTION_TYPES,\n CALL_TO_ACTION_TYPE_OPTIONS,\n DEFAULT_BACKGROUND_OPACITY,\n} from \"@/utils/FormConstants\";\nimport { extractPlaceholderKeys } from \"@/utils/PlaceholderUtil\";\n\nexport {\n ALLOWED_CHILDREN,\n DASHBOARD_COMPONENT_TYPES,\n NODE_DROP_ZONE,\n ROOT_DROP_ZONE,\n defaultAppBarConfig,\n defaultBottomNavigationConfig,\n};\n\n// Uploaded SVG markup is painted as a CSS background rather than injected into the DOM,\n// so a background never runs script the way inline <svg> markup can.\nexport const svgToCssUrl = (svg) =>\n svg ? `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")` : \"none\";\n\nexport const sanitizeCallToAction = (raw) => {\n const source = raw || {};\n const linkType = CALL_TO_ACTION_TYPE_OPTIONS.includes(source.linkType)\n ? source.linkType\n : CALL_TO_ACTION_TYPE_OPTIONS[0];\n const typeConfig = CALL_TO_ACTION_TYPES[linkType];\n\n const sanitized = {\n linkType,\n baseUrl: source.baseUrl || typeConfig.defaultBaseUrl || \"\",\n };\n\n if (typeConfig.valueKind !== \"NONE\") {\n sanitized.value = source.value || \"\";\n sanitized.valueType = source.valueType || \"\";\n }\n\n if (typeConfig.requiresCountryCode) {\n const countryCodeType = source.countryCodeType === \"DYNAMIC\" ? \"DYNAMIC\" : \"STATIC\";\n sanitized.countryCodeType = countryCodeType;\n if (countryCodeType === \"DYNAMIC\") {\n sanitized.countryCodeValue = source.countryCodeValue || \"\";\n sanitized.countryCodeValueType = source.countryCodeValueType || \"\";\n } else {\n sanitized.countryCode = source.countryCode || \"\";\n }\n }\n\n (typeConfig.params || []).forEach((param) => {\n sanitized[param.key] = source[param.key] || \"\";\n if (param.kind === \"EMAIL_LIST\") {\n sanitized[`${param.key}ValueType`] = source[`${param.key}ValueType`] || \"\";\n }\n });\n\n if (typeConfig.paramsKind === \"DYNAMIC\") {\n sanitized.customParams = (source.customParams || []).map((row) => {\n const kind = row?.kind === \"TEMPLATE\" ? \"TEMPLATE\" : \"VALUE\";\n return kind === \"TEMPLATE\"\n ? { key: row?.key || \"\", kind, text: row?.text || \"\" }\n : { key: row?.key || \"\", kind, value: row?.value || \"\", valueType: row?.valueType || \"\" };\n });\n }\n\n const templateTexts = [\n ...(typeConfig.params || [])\n .filter((param) => param.kind === \"TEMPLATE\")\n .map((param) => sanitized[param.key]),\n ...(sanitized.customParams || [])\n .filter((row) => row.kind === \"TEMPLATE\")\n .map((row) => row.text),\n ];\n const relevantPlaceholderKeys = [];\n templateTexts.forEach((text) => {\n extractPlaceholderKeys(text).forEach((key) => {\n if (!relevantPlaceholderKeys.includes(key)) relevantPlaceholderKeys.push(key);\n });\n });\n if (relevantPlaceholderKeys.length > 0) {\n sanitized.placeholders = {};\n sanitized.placeholdersType = {};\n relevantPlaceholderKeys.forEach((key) => {\n sanitized.placeholders[key] = source.placeholders?.[key] || \"\";\n sanitized.placeholdersType[key] = source.placeholdersType?.[key] || \"\";\n });\n }\n\n return sanitized;\n};\n\n// An action can be NONE, a call to action or a navigation. NONE carries no payload at all.\nexport const resolveMobileActionType = (actionType) =>\n actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION || actionType === MOBILE_ACTION_TYPES.NONE\n ? actionType\n : MOBILE_ACTION_TYPES.NAVIGATE;\n\nexport const buildMobileActionPayload = (actionType, navigation, callToAction) => {\n if (actionType === MOBILE_ACTION_TYPES.NONE) return {};\n return actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION\n ? { callToAction: sanitizeCallToAction(callToAction) }\n : { navigation: normalizeNavigationTarget(navigation) };\n};\n\nexport const isLegacyBottomNavigationConfig = (canonicalConfig) => {\n const items = canonicalConfig?.bottomNavigation?.items;\n if (!Array.isArray(items) || items.length === 0) return true;\n return items.some((item) => !item?.tabType);\n};\n\n// Runs once on load; the next Save persists the new Configuration\nexport const migrateLegacyBottomNavigation = (canonicalConfig) => {\n if (!canonicalConfig || typeof canonicalConfig !== \"object\") return canonicalConfig;\n\n const existingItems = Array.isArray(canonicalConfig?.bottomNavigation?.items)\n ? canonicalConfig.bottomNavigation.items\n : [];\n const existingItemsById = existingItems.reduce((map, item) => {\n if (item?.id) map[item.id] = item;\n return map;\n }, {});\n\n const legacyTabIds = Object.keys(LEGACY_BOTTOM_NAVIGATION_TAB_DEFAULTS);\n const presentLegacyIds = legacyTabIds.filter(\n (legacyId) =>\n existingItemsById[legacyId] || Object.prototype.hasOwnProperty.call(canonicalConfig, legacyId),\n );\n const legacyIds = presentLegacyIds.length > 0 ? presentLegacyIds : legacyTabIds;\n\n const migratedConfig = { ...canonicalConfig };\n\n // Legacy tab ids (home/programs/analytics/familyManagement)\n // every tab — legacy or user-added — now gets a generated id.\n const newIdByLegacyId = legacyIds.reduce((map, legacyId) => {\n map[legacyId] = generateUUID();\n return map;\n }, {});\n\n legacyIds.forEach((legacyId) => {\n delete migratedConfig[legacyId];\n });\n\n const migratedItems = legacyIds.map((legacyId, index) => {\n const existingItem = existingItemsById[legacyId] || {};\n const legacyDefault = LEGACY_BOTTOM_NAVIGATION_TAB_DEFAULTS[legacyId];\n const item = {\n id: newIdByLegacyId[legacyId],\n legacyId,\n label: existingItem.label || legacyDefault.label,\n iconName: existingItem.iconName || existingItem.iconDocumentUuid || legacyDefault.iconName,\n displayOrder: existingItem.displayOrder || index + 1,\n visible: existingItem.visible !== false,\n tabType: legacyDefault.tabType,\n showBottomNavigation:\n existingItem.showBottomNavigation ?? legacyDefault.tabType !== BOTTOM_NAV_TAB_TYPES.MENU,\n };\n return item;\n });\n\n legacyIds.forEach((legacyId) => {\n const tabEntry = canonicalConfig[legacyId];\n if (!tabEntry) return;\n const newId = newIdByLegacyId[legacyId];\n\n if (legacyId === \"familyManagement\") {\n migratedConfig[newId] = {\n active: tabEntry.active,\n tabType: BOTTOM_NAV_TAB_TYPES.MENU,\n feature: null,\n };\n return;\n }\n\n if (legacyId === \"programs\") {\n const rawFeatures = Array.isArray(tabEntry.features) ? tabEntry.features : [];\n migratedConfig[newId] = {\n active: tabEntry.active,\n tabType: BOTTOM_NAV_TAB_TYPES.LAYOUT,\n layout: rawFeatures.length\n ? [\n {\n type: DASHBOARD_COMPONENT_TYPES.SECTION,\n id: `node-${generateUUID()}`,\n children: rawFeatures.map((feature) => ({\n type: DASHBOARD_COMPONENT_TYPES.FEATURE,\n id: feature.id,\n navigationAction: feature.navigationAction || \"\",\n pageParams: feature.pageParams || [],\n })),\n },\n ]\n : [],\n };\n } else {\n // \"home\" and \"analytics\" default to a plain block layout array.\n migratedConfig[newId] = {\n active: tabEntry.active,\n tabType: BOTTOM_NAV_TAB_TYPES.LAYOUT,\n layout: Array.isArray(tabEntry.layout) ? tabEntry.layout : [],\n };\n }\n });\n\n migratedConfig.bottomNavigation = {\n items: migratedItems,\n };\n\n return migratedConfig;\n};\n\nconst getPresentLegacyBottomNavIds = (canonicalConfig) =>\n Object.keys(LEGACY_BOTTOM_NAVIGATION_TAB_DEFAULTS).filter((legacyId) =>\n Object.prototype.hasOwnProperty.call(canonicalConfig || {}, legacyId),\n );\n\n// Pulls out just the legacy Bottom Navigation keys so Save can write them back untouched until the user explicitly migrates.\nexport const extractLegacyBottomNavRaw = (canonicalConfig) => {\n if (!canonicalConfig || typeof canonicalConfig !== \"object\") return null;\n const presentLegacyIds = getPresentLegacyBottomNavIds(canonicalConfig);\n const raw = {};\n presentLegacyIds.forEach((legacyId) => {\n raw[legacyId] = canonicalConfig[legacyId];\n });\n if (canonicalConfig.bottomNavigation) {\n raw.bottomNavigation = canonicalConfig.bottomNavigation;\n }\n return raw;\n};\n\nexport const createLayoutNode = (type, overrides = {}) => ({\n id: `node-${generateUUID()}`,\n type,\n children: [],\n ...(styleDefaults[type] || {}),\n ...overrides,\n});\n\nexport const createFeatureNode = (feature, parentId) => ({\n id: feature.id,\n name: feature.name,\n type: DASHBOARD_COMPONENT_TYPES.FEATURE,\n instanceId: `${parentId || \"DASHBOARD\"}_${feature.id}_${generateUUID()}`,\n icon: {\n id: `svg-icon-${feature.id}`,\n content: feature.icon,\n type: \"svg\",\n },\n});\n\nexport const autoConfigureFeatureCardFromChild = (cardNode, featureNode) => {\n if (\n !cardNode ||\n cardNode.type !== DASHBOARD_COMPONENT_TYPES.FEATURE_CARD ||\n !featureNode\n ) {\n return cardNode;\n }\n const featureTitle =\n featureNode.name ||\n featureNode.menuName ||\n featureNode.title ||\n featureNode.content?.title ||\n \"\";\n return {\n ...cardNode,\n content: {\n ...(cardNode.content || {}),\n title: featureTitle,\n subTitle: \"\",\n },\n icon: {\n icon: \"\",\n iconsvg: featureNode.icon?.content || featureNode.icon?.svg || featureNode.icon?.iconsvg || \"\",\n },\n };\n};\n\nexport const clearFeatureCardConfig = (cardNode) => {\n if (!cardNode || cardNode.type !== DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n return cardNode;\n }\n return {\n ...cardNode,\n content: {\n ...(cardNode.content || {}),\n title: \"\",\n subTitle: \"\",\n },\n icon: {\n icon: \"\",\n iconsvg: \"\",\n },\n };\n};\n\nexport const getDashboardDropValidationMessage = (\n parentType,\n childType,\n parentNode = null,\n childName = null\n) => {\n const allowed = ALLOWED_CHILDREN[parentType] || [];\n const rawDisplayName = childName || childType;\n const displayName =\n rawDisplayName === \"FEATURE_CARD\"\n ? \"Feature Card\"\n : rawDisplayName === \"SECTION\"\n ? \"Section\"\n : rawDisplayName === \"ROW\" || rawDisplayName === \"COLUMN\"\n ? \"Card Stack\"\n : rawDisplayName === \"FEATURE\"\n ? \"Feature\"\n : rawDisplayName === \"SEARCH_BAR\"\n ? \"Search Bar\"\n : rawDisplayName === \"CAROUSEL\"\n ? \"Image Carousel\"\n : rawDisplayName === \"DIVIDER\"\n ? \"Divider\"\n : rawDisplayName === \"TEXT\"\n ? \"Text Heading\"\n : rawDisplayName;\n\n if (parentNode) {\n if (parentType === DASHBOARD_COMPONENT_TYPES.ROW && parentNode.style?.height) {\n return `Cannot place ${displayName} inside a horizontal spacer.`;\n }\n if (parentType === DASHBOARD_COMPONENT_TYPES.COLUMN && parentNode.style?.width) {\n return `Cannot place ${displayName} inside a vertical spacer.`;\n }\n }\n\n if (!allowed.includes(childType)) {\n if (childType === DASHBOARD_COMPONENT_TYPES.SECTION)\n return `${displayName} can only be placed directly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.DIVIDER)\n return `${displayName} can only be placed inside a Section or Card Stack or direcly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.CAROUSEL)\n return `${displayName} can only be placed directly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.SEARCH_BAR)\n return `${displayName} can only be placed directly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD)\n return `${displayName} can only be placed inside a Section or Card Stack.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.ROW)\n return `${displayName} can only be placed inside a Section or directly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.COLUMN)\n return `${displayName} can only be placed inside a Section or directly inside the layout.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.FEATURE)\n return `${displayName} can only be assigned to a Feature Card or Section or card stack.`;\n if (childType === DASHBOARD_COMPONENT_TYPES.TEXT)\n return `${displayName} can only be placed inside a Section or directly inside the layout.`;\n return `${displayName} cannot be placed in this container.`;\n }\n\n if (\n parentType === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD &&\n childType === DASHBOARD_COMPONENT_TYPES.FEATURE &&\n parentNode?.children?.some(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n )\n ) {\n return \"A Feature Card can only contain one feature.\";\n }\n\n if (\n parentType === DASHBOARD_COMPONENT_TYPES.ROW &&\n (parentNode?.children || []).length >= 4\n ) {\n return \"This card stack can contain a maximum of 4 items.\";\n }\n\n if (\n parentType === DASHBOARD_COMPONENT_TYPES.COLUMN &&\n childType === DASHBOARD_COMPONENT_TYPES.COLUMN &&\n (parentNode?.children || []).filter(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.COLUMN,\n ).length >= 4\n ) {\n return \"This container can contain a maximum of 4 items.\";\n }\n\n return \"\";\n};\n\nexport const findNodeById = (nodes, id) => {\n for (const node of nodes || []) {\n if (node.id === id || node.instanceId === id) return node;\n const child = findNodeById(node.children, id);\n if (child) return child;\n }\n return null;\n};\n\nexport const findParentNodeInfo = (\n nodes,\n id,\n parentInfo = { id: ROOT_DROP_ZONE, type: \"HOME\", node: null },\n) => {\n for (const node of nodes || []) {\n if (node.id === id || node.instanceId === id) return parentInfo;\n const childParent = findParentNodeInfo(node.children || [], id, {\n id: node.instanceId || node.id,\n type: node.type,\n node,\n });\n if (childParent) return childParent;\n }\n return null;\n};\n\nexport const mapLayoutTree = (nodes, updater) =>\n (nodes || []).map((node) => {\n const updatedNode = updater(node);\n if (updatedNode.children) {\n return {\n ...updatedNode,\n children: mapLayoutTree(updatedNode.children, updater),\n };\n }\n return updatedNode;\n });\n\nexport const addChildToParent = (nodes, parentId, childNode) => {\n if (parentId === ROOT_DROP_ZONE) {\n return [...(nodes || []), childNode];\n }\n return mapLayoutTree(nodes, (node) => {\n if (node.id === parentId || node.instanceId === parentId) {\n let updatedNode = {\n ...node,\n children: [...(node.children || []), childNode],\n };\n if (\n updatedNode.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD &&\n childNode.type === DASHBOARD_COMPONENT_TYPES.FEATURE\n ) {\n updatedNode = autoConfigureFeatureCardFromChild(updatedNode, childNode);\n }\n return updatedNode;\n }\n return node;\n });\n};\n\nexport const removeNodeById = (nodes, nodeId) =>\n (nodes || [])\n .filter((node) => node.id !== nodeId && node.instanceId !== nodeId)\n .map((node) => {\n const nextChildren = removeNodeById(node.children, nodeId);\n let updatedNode = {\n ...node,\n children: nextChildren,\n };\n return updatedNode;\n });\n\nexport const updateNodeById = (nodes, nodeId, updater) =>\n mapLayoutTree(nodes, (node) =>\n node.id === nodeId || node.instanceId === nodeId ? updater(node) : node,\n );\n\nexport const duplicateNode = (nodes, nodeId) => {\n const cloneNode = (node) => {\n const newNode = { ...node, id: `node-${generateUUID()}` };\n if (newNode.instanceId) {\n newNode.instanceId = `DASHBOARD_DUP_${generateUUID()}`;\n }\n if (newNode.children) {\n newNode.children = newNode.children.map(cloneNode);\n }\n return newNode;\n };\n\n let found = false;\n const processNodesPure = (currentNodes) => {\n let changed = false;\n const result = [];\n for (const node of currentNodes) {\n result.push(node);\n if (!found && (node.id === nodeId || node.instanceId === nodeId)) {\n found = true;\n changed = true;\n result.push(cloneNode(node));\n } else if (node.children) {\n const newChildren = processNodesPure(node.children);\n if (newChildren !== node.children) {\n changed = true;\n result[result.length - 1] = { ...node, children: newChildren };\n }\n }\n }\n return changed ? result : currentNodes;\n };\n return processNodesPure(nodes || []);\n};\n\nexport const getStickyGroup = (node) =>\n node?.sticky?.position === \"TOP\" || node?.sticky?.position === \"BOTTOM\"\n ? node.sticky.position\n : \"FLOW\";\n\n// Sticky components are laid out top group first, then normal flow, then bottom group,\n// keeping the user's arrangement within each group. Stable and idempotent, so applying it\n// to an already ordered list is a no-op.\nexport const orderNodesBySticky = (nodes) => {\n const list = nodes || [];\n const topNodes = list.filter((node) => getStickyGroup(node) === \"TOP\");\n const bottomNodes = list.filter((node) => getStickyGroup(node) === \"BOTTOM\");\n if (topNodes.length === 0 && bottomNodes.length === 0) return list;\n const flowNodes = list.filter((node) => getStickyGroup(node) === \"FLOW\");\n return [...topNodes, ...flowNodes, ...bottomNodes];\n};\n\n// Sticky components render grouped at the top/bottom, so a move has to swap with the\n// nearest sibling in the same group — an adjacent swap across groups changes nothing on screen.\nconst findStickyGroupNeighbour = (nodes, index, step) => {\n const group = getStickyGroup(nodes[index]);\n for (let i = index + step; i >= 0 && i < nodes.length; i += step) {\n if (getStickyGroup(nodes[i]) === group) return i;\n }\n return -1;\n};\n\nexport const moveNodeUp = (nodes, nodeId) => {\n const processNodes = (currentNodes) => {\n const index = currentNodes.findIndex(n => n.id === nodeId || n.instanceId === nodeId);\n const targetIndex = index > 0 ? findStickyGroupNeighbour(currentNodes, index, -1) : -1;\n if (targetIndex >= 0) {\n const result = [...currentNodes];\n [result[targetIndex], result[index]] = [result[index], result[targetIndex]];\n return result;\n }\n\n let changed = false;\n const newNodes = currentNodes.map(node => {\n if (node.children) {\n const newChildren = processNodes(node.children);\n if (newChildren !== node.children) {\n changed = true;\n return { ...node, children: newChildren };\n }\n }\n return node;\n });\n return changed ? newNodes : currentNodes;\n };\n return processNodes(nodes || []);\n};\n\nexport const moveNodeDown = (nodes, nodeId) => {\n const processNodes = (currentNodes) => {\n const index = currentNodes.findIndex(n => n.id === nodeId || n.instanceId === nodeId);\n const targetIndex =\n index >= 0 && index < currentNodes.length - 1\n ? findStickyGroupNeighbour(currentNodes, index, 1)\n : -1;\n if (targetIndex >= 0) {\n const result = [...currentNodes];\n [result[index], result[targetIndex]] = [result[targetIndex], result[index]];\n return result;\n }\n\n let changed = false;\n const newNodes = currentNodes.map(node => {\n if (node.children) {\n const newChildren = processNodes(node.children);\n if (newChildren !== node.children) {\n changed = true;\n return { ...node, children: newChildren };\n }\n }\n return node;\n });\n return changed ? newNodes : currentNodes;\n };\n return processNodes(nodes || []);\n};\n\nconst getNodeKey = (node) => node?.instanceId || node?.id;\n\nconst removeNodeWithResult = (nodes, nodeId) => {\n let removedNode = null;\n\n const nextNodes = (nodes || []).reduce((acc, node) => {\n if (node.id === nodeId || node.instanceId === nodeId) {\n removedNode = node;\n return acc;\n }\n\n const childResult = removeNodeWithResult(node.children || [], nodeId);\n if (childResult.removedNode) {\n removedNode = childResult.removedNode;\n let updatedNode = { ...node, children: childResult.nodes };\n acc.push(updatedNode);\n return acc;\n }\n\n acc.push(node);\n return acc;\n }, []);\n\n return { nodes: nextNodes, removedNode };\n};\n\nconst insertNodeBeforeTarget = (nodes, targetId, nodeToInsert) => {\n let didInsert = false;\n\n const nextNodes = (nodes || []).reduce((acc, node) => {\n if (node.id === targetId || node.instanceId === targetId) {\n acc.push(nodeToInsert, node);\n didInsert = true;\n return acc;\n }\n\n const childResult = insertNodeBeforeTarget(\n node.children || [],\n targetId,\n nodeToInsert,\n );\n if (childResult.didInsert) {\n didInsert = true;\n acc.push({ ...node, children: childResult.nodes });\n return acc;\n }\n\n acc.push(node);\n return acc;\n }, []);\n\n return { nodes: nextNodes, didInsert };\n};\n\nconst hasNodeInTree = (node, targetId) => {\n if (!node) return false;\n if (node.id === targetId || node.instanceId === targetId) return true;\n return (node.children || []).some((child) => hasNodeInTree(child, targetId));\n};\n\nconst replaceNodeInTree = (nodes, replacementNode) => {\n const replacementId = getNodeKey(replacementNode);\n return mapLayoutTree(nodes, (node) =>\n node.id === replacementId || node.instanceId === replacementId\n ? replacementNode\n : node,\n );\n};\n\nexport const addNodeBeforeTarget = (nodes, targetId, nodeToInsert) => {\n const result = insertNodeBeforeTarget(nodes, targetId, nodeToInsert);\n return result.didInsert ? result.nodes : nodes;\n};\n\nexport const moveNodeToParent = (nodes, nodeId, parentId) => {\n const { nodes: withoutNode, removedNode } = removeNodeWithResult(\n nodes,\n nodeId,\n );\n if (!removedNode) return nodes;\n if (parentId !== ROOT_DROP_ZONE && hasNodeInTree(removedNode, parentId))\n return nodes;\n return addChildToParent(withoutNode, parentId, removedNode);\n};\n\nexport const moveNodeBeforeTarget = (nodes, nodeId, targetId) => {\n if (nodeId === targetId) return nodes;\n const sourceNode = findNodeById(nodes, nodeId);\n const targetNode = findNodeById(nodes, targetId);\n if (!sourceNode || !targetNode || hasNodeInTree(sourceNode, targetId))\n return nodes;\n\n const { nodes: withoutNode, removedNode } = removeNodeWithResult(\n nodes,\n nodeId,\n );\n if (!removedNode) return nodes;\n\n const result = insertNodeBeforeTarget(withoutNode, targetId, removedNode);\n if (result.didInsert) return result.nodes;\n\n return replaceNodeInTree(withoutNode, sourceNode);\n};\n\nconst migrateFeatureCardLayout = (node) => {\n if (node.contentLayout) return node;\n\n const contentAlignment = node.style?.contentAlignment?.toUpperCase() || 'LEFT';\n const isHorizontal = node.style?.layoutType === 'HORIZONTAL';\n const oldAlign = contentAlignment;\n const defaultHorizontal = oldAlign === 'START' ? 'LEFT' : oldAlign === 'END' ? 'RIGHT' : (oldAlign === 'CENTER' ? 'CENTER' : 'LEFT');\n const defaultVertical = 'MIDDLE';\n\n const positions = {\n ICON: (oldAlign === 'CENTER' || oldAlign === 'RIGHT' ? { horizontal: defaultHorizontal, vertical: defaultVertical } : { horizontal: 'LEFT', vertical: 'MIDDLE' }),\n TITLE: (oldAlign === 'CENTER' || oldAlign === 'RIGHT' ? { horizontal: defaultHorizontal, vertical: defaultVertical } : { horizontal: 'CENTER', vertical: 'MIDDLE' }),\n SUBTITLE: (oldAlign === 'CENTER' || oldAlign === 'RIGHT' ? { horizontal: defaultHorizontal, vertical: defaultVertical } : { horizontal: 'LEFT', vertical: 'BOTTOM' }),\n BUTTON: { horizontal: 'RIGHT', vertical: 'MIDDLE' }\n };\n\n const layoutMap = {};\n const orderedElements = [\"ICON\", \"TITLE\", \"SUBTITLE\", \"BUTTON\"];\n orderedElements.forEach(el => {\n const pos = positions[el];\n const key = `${pos.horizontal}_${pos.vertical}`;\n if (!layoutMap[key]) {\n layoutMap[key] = {\n position: pos,\n items: []\n };\n }\n layoutMap[key].items.push(el);\n });\n\n const contentLayout = Object.values(layoutMap).filter(group => group.items.length > 0).map(group => {\n if (group.items.length > 1) {\n group.alignment = isHorizontal ? \"HORIZONTAL\" : \"VERTICAL\";\n group.spacing = isHorizontal ? 12 : 4;\n }\n return group;\n });\n\n return {\n ...node,\n contentLayout\n };\n};\n\nconst migrateFeatureCardCta = (node) => {\n const cta = node.cta;\n if (!cta) return node;\n\n const alreadyCurrent = cta.type === undefined && (!cta.button || cta.button.buttonAction);\n if (alreadyCurrent) return node;\n\n let buttonStyle;\n let buttonAction;\n\n if (cta.button?.style) {\n buttonStyle = cta.button.style;\n buttonAction = cta.button.buttonAction || cta.button.action;\n } else if (cta.button) {\n const { actionType, navigation, callToAction, ...style } = cta.button;\n buttonStyle = style;\n buttonAction =\n actionType !== undefined || navigation !== undefined || callToAction !== undefined\n ? { actionType, navigation, callToAction }\n : undefined;\n } else if (cta.type === \"BUTTON\") {\n const { navigation, ...style } = cta;\n delete style.type;\n buttonStyle = style;\n buttonAction = navigation !== undefined\n ? { actionType: MOBILE_ACTION_TYPES.NAVIGATE, navigation }\n : undefined;\n }\n\n const cardAction =\n cta.cardAction ||\n (cta.callToActionEnabled || cta.callToAction\n ? {\n actionType: cta.callToActionEnabled\n ? MOBILE_ACTION_TYPES.CALL_TO_ACTION\n : MOBILE_ACTION_TYPES.NAVIGATE,\n callToAction: cta.callToAction,\n }\n : { actionType: MOBILE_ACTION_TYPES.NAVIGATE });\n\n return {\n ...node,\n ...(cta.type === \"ARROW\" ? { showLeadingArrow: node.showLeadingArrow ?? true } : {}),\n cta: {\n cardAction,\n ...(buttonStyle\n ? { button: { style: buttonStyle, buttonAction: buttonAction || { actionType: MOBILE_ACTION_TYPES.NAVIGATE } } }\n : {}),\n },\n };\n};\n\nconst migrateFeatureCardTextColor = (node) => {\n const foreground = node.foreground;\n if (!foreground || (!foreground.lightMode && !foreground.darkMode)) return node;\n\n const hasTitleColor = Boolean(node.style?.titleColor?.lightMode || node.style?.titleColor?.darkMode);\n const hasSubtitleColor = Boolean(node.style?.subtitleColor?.lightMode || node.style?.subtitleColor?.darkMode);\n if (hasTitleColor && hasSubtitleColor) return node;\n\n return {\n ...node,\n style: {\n ...(node.style || {}),\n titleColor: hasTitleColor ? node.style.titleColor : { ...foreground },\n subtitleColor: hasSubtitleColor ? node.style.subtitleColor : { ...foreground },\n },\n };\n};\n\nconst migrateGradientBackgroundColor = (node) => {\n const background = node.background;\n if (!background) return node;\n\n const isLegacyColor = (value) => typeof value === \"string\" && value.length > 0;\n const needsStartMigration = isLegacyColor(background.gradientStartColor);\n const needsEndMigration = isLegacyColor(background.gradientEndColor);\n if (!needsStartMigration && !needsEndMigration) return node;\n\n return {\n ...node,\n background: {\n ...background,\n ...(needsStartMigration\n ? {\n gradientStartColor: {\n lightMode: background.gradientStartColor,\n darkMode: background.gradientStartColor,\n },\n }\n : {}),\n ...(needsEndMigration\n ? {\n gradientEndColor: {\n lightMode: background.gradientEndColor,\n darkMode: background.gradientEndColor,\n },\n }\n : {}),\n },\n };\n};\n\nconst migrateGradientBackgroundOpacity = (node) => {\n if (node.background?.type !== \"GRADIENT\" || node.background.opacity === undefined) return node;\n const background = { ...node.background };\n delete background.opacity;\n return { ...node, background };\n};\n\nexport const hydrateDashboardLayout = (layout, hydrateFeature) => {\n if (!Array.isArray(layout)) return [];\n return layout\n .map((node) => {\n if (\n node.type === DASHBOARD_COMPONENT_TYPES.SECTION &&\n Array.isArray(node.features)\n ) {\n const sectionId = `node-${generateUUID()}`;\n return createLayoutNode(DASHBOARD_COMPONENT_TYPES.SECTION, {\n id: sectionId,\n title: node.title || \"Section\",\n header: {\n ...styleDefaults[DASHBOARD_COMPONENT_TYPES.SECTION].header,\n title: node.title || \"Section\",\n },\n children: node.features\n .map((feature) => hydrateFeature(feature, sectionId))\n .filter(Boolean),\n });\n }\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n return hydrateFeature(node, \"DASHBOARD\");\n }\n if (!node.type) return null;\n const hydratedChildren = hydrateDashboardLayout(\n node.children || [],\n hydrateFeature,\n );\n let updatedNode = createLayoutNode(node.type, {\n ...node,\n id: node.id || `node-${generateUUID()}`,\n children: hydratedChildren,\n });\n updatedNode = migrateGradientBackgroundColor(updatedNode);\n updatedNode = migrateGradientBackgroundOpacity(updatedNode);\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const childFeature = (hydratedChildren || []).find(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n if (childFeature) {\n if (!updatedNode.content?.title && !updatedNode.content?.customTitle) {\n updatedNode = autoConfigureFeatureCardFromChild(updatedNode, childFeature);\n }\n }\n updatedNode = migrateFeatureCardLayout(updatedNode);\n updatedNode = migrateFeatureCardCta(updatedNode);\n updatedNode = migrateFeatureCardTextColor(updatedNode);\n }\n return updatedNode;\n })\n .filter(Boolean);\n};\n\nconst stripRuntimeFeature = (feature, parentType, pageParamsByFeature) => {\n const stripped = {\n type: DASHBOARD_COMPONENT_TYPES.FEATURE,\n id: feature.id,\n menuName: feature.name,\n };\n // The linked form (navigationAction) should be saved whenever the feature has one.\n const navigationAction =\n feature.navigationAction || pageParamsByFeature?.[String(feature.id)]?.formCode || \"\";\n if (navigationAction) {\n stripped.navigationAction = navigationAction;\n }\n if (Array.isArray(feature.pageParams) && feature.pageParams.length > 0) {\n stripped.pageParams = feature.pageParams;\n }\n if (parentType !== DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n stripped.actionType =\n feature.actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION\n ? MOBILE_ACTION_TYPES.CALL_TO_ACTION\n : MOBILE_ACTION_TYPES.NAVIGATE;\n if (stripped.actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION) {\n stripped.callToAction = sanitizeCallToAction(feature.callToAction);\n }\n }\n return stripped;\n};\n\nconst getFeatureChild = (node) =>\n (node.children || []).find(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n\nconst getFeatureTitle = (feature, contentTitle) => {\n const title = String(contentTitle || \"\").trim();\n return title || feature?.name || feature?.menuName || \"\";\n};\n\nconst getFeatureSubTitle = (feature, contentSubTitle) => {\n const subTitle = String(contentSubTitle || \"\").trim();\n return subTitle || feature?.subTitle || feature?.subtitle || \"\";\n};\n\nconst normalizeFeatureCardIcon = (node) => {\n const configuredIcon = node.icon?.icon || node.icon?.iconName || \"\";\n const configuredSvg = node.icon?.iconsvg || node.icon?.svg || \"\";\n\n if (configuredIcon) return { icon: configuredIcon, iconsvg: \"\" };\n if (configuredSvg) return { icon: \"\", iconsvg: configuredSvg };\n\n return { icon: \"\", iconsvg: \"\" };\n};\n\n// Normalizes a \"navigate to feature\" target into this shape - type, id, menuName, navigationAction, pageParams, actionType. \nexport const normalizeNavigationTarget = (navigation) => {\n const isObject = typeof navigation === \"object\" && navigation !== null;\n const rawId = isObject ? navigation.id ?? navigation.action : navigation;\n if (rawId === \"\" || rawId === null || rawId === undefined) return \"\";\n const numericId = Number(rawId);\n const id = Number.isNaN(numericId) ? rawId : numericId;\n\n const target = {\n type: DASHBOARD_COMPONENT_TYPES.FEATURE,\n id,\n menuName: (isObject && navigation.menuName) || \"\",\n };\n if (isObject && navigation.navigationAction) {\n target.navigationAction = navigation.navigationAction;\n }\n if (isObject && Array.isArray(navigation.pageParams) && navigation.pageParams.length > 0) {\n target.pageParams = navigation.pageParams;\n }\n target.actionType = MOBILE_ACTION_TYPES.NAVIGATE;\n return target;\n};\n\n// The picker stores gradient colors as { lightMode, darkMode }\nconst normalizeGradientColor = (color, fallback) => {\n const base = typeof color === \"string\" && color ? { lightMode: color, darkMode: color } : color || {};\n return {\n lightMode: base.lightMode || fallback,\n darkMode: base.darkMode || fallback,\n };\n};\n\nconst normalizeFeatureCardBackground = (background = {}) => {\n const normalizedBackground = { ...background };\n\n if (normalizedBackground.type === \"GRADIENT\") {\n delete normalizedBackground.solidLightModeColor;\n delete normalizedBackground.solidDarkModeColor;\n delete normalizedBackground.solidColor;\n // A gradient carries its transparency per stop, so the solid-only opacity does not apply.\n delete normalizedBackground.opacity;\n // A gradient always ships its full definition, so consumers never have to guess a default.\n normalizedBackground.gradientType = normalizedBackground.gradientType || \"LINEAR\";\n normalizedBackground.direction = normalizedBackground.direction || \"LEFT_TO_RIGHT\";\n normalizedBackground.gradientStartColor = normalizeGradientColor(\n normalizedBackground.gradientStartColor,\n \"#ffffff\",\n );\n normalizedBackground.gradientEndColor = normalizeGradientColor(\n normalizedBackground.gradientEndColor,\n \"#e5e7eb\",\n );\n normalizedBackground.gradientStartOpacity =\n normalizedBackground.gradientStartOpacity ?? DEFAULT_BACKGROUND_OPACITY;\n normalizedBackground.gradientEndOpacity =\n normalizedBackground.gradientEndOpacity ?? DEFAULT_BACKGROUND_OPACITY;\n } else {\n delete normalizedBackground.gradientStartColor;\n delete normalizedBackground.gradientEndColor;\n delete normalizedBackground.gradientType;\n delete normalizedBackground.direction;\n delete normalizedBackground.gradientStartOpacity;\n delete normalizedBackground.gradientEndOpacity;\n delete normalizedBackground.solidColor;\n }\n\n return normalizedBackground;\n};\n\nexport const sanitizeDashboardLayout = (nodes, parentType, pageParamsByFeature) =>\n orderNodesBySticky(nodes).map((node) => {\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n return stripRuntimeFeature(node, parentType, pageParamsByFeature);\n }\n\n const { id, instanceId, icon, name, features, title, ...config } = node;\n const sanitizedNode = {\n ...config,\n children: sanitizeDashboardLayout(node.children || [], node.type, pageParamsByFeature),\n };\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SECTION) {\n // title is stripped above via destructuring; only header.title is kept\n sanitizedNode.background = normalizeFeatureCardBackground(\n config.background,\n );\n // clean up any legacy color field from header\n if (sanitizedNode.header?.color) {\n const { color, ...restHeader } = sanitizedNode.header;\n sanitizedNode.header = restHeader;\n }\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const feature = getFeatureChild(node);\n sanitizedNode.content = {\n ...(config.content || {}),\n title: getFeatureTitle(\n feature,\n config.content?.title || config.content?.customTitle,\n ),\n subTitle: getFeatureSubTitle(\n feature,\n config.content?.subTitle || config.content?.customSubtitle,\n ),\n };\n sanitizedNode.icon = normalizeFeatureCardIcon(node);\n sanitizedNode.background = normalizeFeatureCardBackground(\n config.background,\n );\n if (sanitizedNode.style) {\n delete sanitizedNode.style.flex;\n delete sanitizedNode.style.layoutType;\n delete sanitizedNode.style.contentAlignment;\n\n }\n delete sanitizedNode.content.customTitle;\n delete sanitizedNode.content.customSubtitle;\n delete sanitizedNode.navigation;\n\n\n const existingCardAction = sanitizedNode.cta?.cardAction || {};\n const existingButton = sanitizedNode.cta?.button;\n const hasButton = Boolean(existingButton);\n\n // An assigned feature is the navigation target. Without one, the card either runs its\n // call to action or — with that off too — has nothing to do when tapped.\n let cardActionType = MOBILE_ACTION_TYPES.NAVIGATE;\n if (!feature) {\n cardActionType =\n existingCardAction.actionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION\n ? MOBILE_ACTION_TYPES.CALL_TO_ACTION\n : MOBILE_ACTION_TYPES.NONE;\n }\n\n sanitizedNode.cta = {\n cardAction: {\n actionType: cardActionType,\n ...(cardActionType === MOBILE_ACTION_TYPES.CALL_TO_ACTION\n ? { callToAction: sanitizeCallToAction(existingCardAction.callToAction) }\n : {}),\n },\n };\n\n if (hasButton) {\n const buttonActionType = resolveMobileActionType(existingButton.buttonAction?.actionType);\n sanitizedNode.cta.button = {\n style: existingButton.style || {},\n buttonAction: {\n actionType: buttonActionType,\n ...buildMobileActionPayload(\n buttonActionType,\n existingButton.buttonAction?.navigation,\n existingButton.buttonAction?.callToAction,\n ),\n },\n };\n }\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n delete sanitizedNode.children;\n delete sanitizedNode.navigation;\n sanitizedNode.images = (node.images || []).map((image) => {\n const actionType = resolveMobileActionType(image.actionType);\n const { navigation, callToAction, ...restImage } = image;\n return {\n ...restImage,\n actionType,\n ...buildMobileActionPayload(actionType, navigation, callToAction),\n };\n });\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.TEXT) {\n delete sanitizedNode.children;\n }\n\n if (\n [\n DASHBOARD_COMPONENT_TYPES.SEARCH_BAR,\n DASHBOARD_COMPONENT_TYPES.DIVIDER,\n ].includes(node.type)\n ) {\n delete sanitizedNode.children;\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.DIVIDER) {\n if (sanitizedNode.style) {\n delete sanitizedNode.style.color;\n delete sanitizedNode.style.marginVertical;\n }\n }\n\n\n return sanitizedNode;\n });\n\nexport const collectFeatureNamesFromLayout = (nodes) => {\n if (!nodes) return [];\n const list = Array.isArray(nodes)\n ? nodes\n : typeof nodes === \"object\"\n ? [nodes]\n : [];\n return list.flatMap((node) => {\n if (!node || typeof node !== \"object\") return [];\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n const name =\n node.menuName || node.name || node.title || node.content?.title;\n return name ? [name] : [];\n }\n const children =\n node.children ||\n node.features ||\n node.layout ||\n node.tabs ||\n node.menus ||\n (node.type ? [] : Object.values(node));\n const childNames = collectFeatureNamesFromLayout(children);\n if (node.menuName) {\n return [node.menuName, ...childNames];\n }\n return childNames;\n });\n};\n\nconst EMPTY_CHILD_CONTAINER_TYPES = new Set([\n DASHBOARD_COMPONENT_TYPES.SECTION,\n DASHBOARD_COMPONENT_TYPES.ROW,\n DASHBOARD_COMPONENT_TYPES.COLUMN,\n]);\n\nexport const findEmptyDashboardLayoutNode = (nodes) => {\n for (const node of nodes || []) {\n if (\n EMPTY_CHILD_CONTAINER_TYPES.has(node.type) &&\n !(node.children || []).length\n ) {\n const isHorizontalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.ROW && node.style?.height;\n const isVerticalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.COLUMN && node.style?.width;\n if (!isHorizontalSpacer && !isVerticalSpacer) {\n return node;\n }\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const hasFeature = (node.children || []).some(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n const hasCustomContent = node.content?.customTitle || node.content?.customSubtitle || node.content?.title || node.content?.subTitle || node.icon?.iconsvg || node.icon?.icon;\n if (!hasFeature && !hasCustomContent) return node;\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n if (!(node.images || []).length) return node;\n }\n\n const emptyChild = findEmptyDashboardLayoutNode(node.children || []);\n if (emptyChild) return emptyChild;\n }\n return null;\n};\n\nexport const findAllEmptyDashboardLayoutNodes = (nodes) => {\n const emptyNodes = [];\n const traverse = (items) => {\n for (const node of items || []) {\n if (\n EMPTY_CHILD_CONTAINER_TYPES.has(node.type) &&\n !(node.children || []).length\n ) {\n const isHorizontalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.ROW && node.style?.height;\n const isVerticalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.COLUMN && node.style?.width;\n if (!isHorizontalSpacer && !isVerticalSpacer) {\n emptyNodes.push(node);\n }\n continue;\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const hasFeature = (node.children || []).some(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n const hasCustomContent = node.content?.customTitle || node.content?.customSubtitle || node.content?.title || node.content?.subTitle || node.icon?.iconsvg || node.icon?.icon;\n if (!hasFeature && !hasCustomContent) {\n emptyNodes.push(node);\n continue;\n }\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n if (!(node.images || []).length) {\n emptyNodes.push(node);\n continue;\n }\n }\n\n traverse(node.children || []);\n }\n };\n traverse(nodes);\n return emptyNodes;\n};\n\nexport const isSelfEmptyNode = (node) => {\n if (!node) return false;\n if (\n EMPTY_CHILD_CONTAINER_TYPES.has(node.type) &&\n !(node.children || []).length\n ) {\n const isHorizontalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.ROW && node.style?.height;\n const isVerticalSpacer = node.type === DASHBOARD_COMPONENT_TYPES.COLUMN && node.style?.width;\n if (!isHorizontalSpacer && !isVerticalSpacer) {\n return true;\n }\n }\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const hasFeature = (node.children || []).some(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n const hasCustomContent = node.content?.customTitle || node.content?.customSubtitle || node.content?.title || node.content?.subTitle || node.icon?.iconsvg || node.icon?.icon;\n if (!hasFeature && !hasCustomContent) return true;\n }\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n if (!(node.images || []).length) return true;\n }\n return false;\n};\n\nexport const hasEmptyDashboardLayoutNode = (nodes) =>\n Boolean(findEmptyDashboardLayoutNode(nodes));\n\nexport const getComponentLabel = (node) => {\n if (!node) return 'Block';\n\n if (node.blockName) {\n return node.blockName;\n }\n\n const typeNames = {\n SECTION: 'Empty Section',\n ROW: 'Horizontal Card Stack',\n COLUMN: 'Vertical Card Stack',\n FEATURE_CARD: 'Feature Card',\n CAROUSEL: 'Image Carousel',\n SEARCH_BAR: 'Search Bar',\n TEXT: 'Text Heading',\n DIVIDER: 'Divider',\n };\n\n const typeName = typeNames[node.type] || node.type || 'Block';\n const title = node.title || node.content?.text || node.name;\n if (title && typeof title === 'string' && title.trim()) {\n return `${typeName} (\"${title.trim()}\")`;\n }\n return typeName;\n};\n"],"names":["svgToCssUrl","svg","sanitizeCallToAction","raw","source","linkType","CALL_TO_ACTION_TYPE_OPTIONS","typeConfig","CALL_TO_ACTION_TYPES","sanitized","countryCodeType","param","row","kind","templateTexts","relevantPlaceholderKeys","text","extractPlaceholderKeys","key","_a","_b","resolveMobileActionType","actionType","MOBILE_ACTION_TYPES","buildMobileActionPayload","navigation","callToAction","normalizeNavigationTarget","isLegacyBottomNavigationConfig","canonicalConfig","items","item","migrateLegacyBottomNavigation","existingItemsById","map","legacyTabIds","LEGACY_BOTTOM_NAVIGATION_TAB_DEFAULTS","presentLegacyIds","legacyId","legacyIds","migratedConfig","newIdByLegacyId","generateUUID","migratedItems","index","existingItem","legacyDefault","BOTTOM_NAV_TAB_TYPES","tabEntry","newId","rawFeatures","DASHBOARD_COMPONENT_TYPES","feature","getPresentLegacyBottomNavIds","extractLegacyBottomNavRaw","createLayoutNode","type","overrides","styleDefaults","createFeatureNode","parentId","autoConfigureFeatureCardFromChild","cardNode","featureNode","featureTitle","_c","_d","clearFeatureCardConfig","getDashboardDropValidationMessage","parentType","childType","parentNode","childName","allowed","ALLOWED_CHILDREN","rawDisplayName","displayName","child","findNodeById","nodes","id","node","findParentNodeInfo","parentInfo","ROOT_DROP_ZONE","childParent","mapLayoutTree","updater","updatedNode","addChildToParent","childNode","removeNodeById","nodeId","nextChildren","updateNodeById","duplicateNode","cloneNode","newNode","found","processNodesPure","currentNodes","changed","result","newChildren","getStickyGroup","orderNodesBySticky","list","topNodes","bottomNodes","flowNodes","findStickyGroupNeighbour","step","group","i","moveNodeUp","processNodes","n","targetIndex","newNodes","moveNodeDown","getNodeKey","removeNodeWithResult","removedNode","acc","childResult","insertNodeBeforeTarget","targetId","nodeToInsert","didInsert","hasNodeInTree","replaceNodeInTree","replacementNode","replacementId","addNodeBeforeTarget","moveNodeToParent","withoutNode","moveNodeBeforeTarget","sourceNode","targetNode","migrateFeatureCardLayout","contentAlignment","isHorizontal","oldAlign","defaultHorizontal","defaultVertical","positions","layoutMap","el","pos","contentLayout","migrateFeatureCardCta","cta","buttonStyle","buttonAction","style","cardAction","migrateFeatureCardTextColor","foreground","hasTitleColor","hasSubtitleColor","_f","_e","_h","_g","migrateGradientBackgroundColor","background","isLegacyColor","value","needsStartMigration","needsEndMigration","migrateGradientBackgroundOpacity","hydrateDashboardLayout","layout","hydrateFeature","sectionId","hydratedChildren","childFeature","stripRuntimeFeature","pageParamsByFeature","stripped","navigationAction","getFeatureChild","getFeatureTitle","contentTitle","getFeatureSubTitle","contentSubTitle","normalizeFeatureCardIcon","configuredIcon","configuredSvg","isObject","rawId","numericId","target","normalizeGradientColor","color","fallback","base","normalizeFeatureCardBackground","normalizedBackground","DEFAULT_BACKGROUND_OPACITY","sanitizeDashboardLayout","instanceId","icon","name","features","title","config","sanitizedNode","restHeader","existingCardAction","existingButton","hasButton","cardActionType","buttonActionType","_i","_j","image","restImage","collectFeatureNamesFromLayout","children","childNames","EMPTY_CHILD_CONTAINER_TYPES","findAllEmptyDashboardLayoutNodes","emptyNodes","traverse","isHorizontalSpacer","isVerticalSpacer","hasFeature","hasCustomContent"],"mappings":"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"}
|