@wildo-ai/saas-frontend-lib 1.1.5 → 1.1.6

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 (777) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts +15 -0
  2. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  3. package/dist/esm/components/actions/action-bar.js +15 -0
  4. package/dist/esm/components/actions/action-bar.js.map +1 -1
  5. package/dist/esm/components/ai-elements/decision/approval.d.ts +97 -7
  6. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  7. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  8. package/dist/esm/components/app/AppLayout_AuthenticatedRoute.d.ts.map +1 -1
  9. package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js +8 -3
  10. package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js.map +1 -1
  11. package/dist/esm/components/auth/Auth_EnrollmentRequired.d.ts.map +1 -1
  12. package/dist/esm/components/auth/Auth_EnrollmentRequired.js +5 -1
  13. package/dist/esm/components/auth/Auth_EnrollmentRequired.js.map +1 -1
  14. package/dist/esm/components/auth/Auth_Main.d.ts.map +1 -1
  15. package/dist/esm/components/auth/Auth_Main.js +1 -4
  16. package/dist/esm/components/auth/Auth_Main.js.map +1 -1
  17. package/dist/esm/components/auth/Auth_Register.d.ts.map +1 -1
  18. package/dist/esm/components/auth/Auth_Register.js +1 -3
  19. package/dist/esm/components/auth/Auth_Register.js.map +1 -1
  20. package/dist/esm/components/auth/StepUpAuthDialog.d.ts +7 -0
  21. package/dist/esm/components/auth/StepUpAuthDialog.d.ts.map +1 -1
  22. package/dist/esm/components/auth/StepUpAuthDialog.js +13 -7
  23. package/dist/esm/components/auth/StepUpAuthDialog.js.map +1 -1
  24. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.d.ts.map +1 -1
  25. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.js +32 -33
  26. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.js.map +1 -1
  27. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.d.ts.map +1 -1
  28. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.js +18 -20
  29. package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.js.map +1 -1
  30. package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.d.ts.map +1 -1
  31. package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.js +2 -3
  32. package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.js.map +1 -1
  33. package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.d.ts +13 -16
  34. package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.d.ts.map +1 -1
  35. package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.js +18 -15
  36. package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.js.map +1 -1
  37. package/dist/esm/components/billing/billing-invoice-history.js +2 -2
  38. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  39. package/dist/esm/components/billing/billing-portal-link.js +2 -2
  40. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  41. package/dist/esm/components/billing/billing-pricing-table.d.ts +33 -1
  42. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  43. package/dist/esm/components/billing/billing-pricing-table.js +34 -5
  44. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  45. package/dist/esm/components/billing/billing-subscription-status.js +2 -2
  46. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  47. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +2 -0
  48. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  49. package/dist/esm/components/billing/billing-usage-dashboard.js +1 -0
  50. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  51. package/dist/esm/components/data-display/DisplayField.d.ts.map +1 -1
  52. package/dist/esm/components/data-display/DisplayField.js +15 -1
  53. package/dist/esm/components/data-display/DisplayField.js.map +1 -1
  54. package/dist/esm/components/data-display/DisplayFieldArray.d.ts.map +1 -1
  55. package/dist/esm/components/data-display/DisplayFieldArray.js +11 -0
  56. package/dist/esm/components/data-display/DisplayFieldArray.js.map +1 -1
  57. package/dist/esm/components/data-display/DisplayFieldEditable.d.ts.map +1 -1
  58. package/dist/esm/components/data-display/DisplayFieldEditable.js +2 -2
  59. package/dist/esm/components/data-display/DisplayFieldEditable.js.map +1 -1
  60. package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts +12 -2
  61. package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts.map +1 -1
  62. package/dist/esm/components/data-display/DisplayFieldEditableArray.js +3 -2
  63. package/dist/esm/components/data-display/DisplayFieldEditableArray.js.map +1 -1
  64. package/dist/esm/components/data-display/DisplayFieldReadOnly.d.ts.map +1 -1
  65. package/dist/esm/components/data-display/DisplayFieldReadOnly.js +2 -2
  66. package/dist/esm/components/data-display/DisplayFieldReadOnly.js.map +1 -1
  67. package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.d.ts.map +1 -1
  68. package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.js +8 -2
  69. package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.js.map +1 -1
  70. package/dist/esm/components/data-display/DisplayValueDispatcher.d.ts.map +1 -1
  71. package/dist/esm/components/data-display/DisplayValueDispatcher.js +18 -4
  72. package/dist/esm/components/data-display/DisplayValueDispatcher.js.map +1 -1
  73. package/dist/esm/components/data-display/ResourceAutomaticDisplayer.d.ts.map +1 -1
  74. package/dist/esm/components/data-display/ResourceAutomaticDisplayer.js +61 -3
  75. package/dist/esm/components/data-display/ResourceAutomaticDisplayer.js.map +1 -1
  76. package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts +7 -5
  77. package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts.map +1 -1
  78. package/dist/esm/components/data-display/ResourceSummaryDisplayer.js.map +1 -1
  79. package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts +11 -1
  80. package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts.map +1 -1
  81. package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js +36 -11
  82. package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js.map +1 -1
  83. package/dist/esm/components/data-display/display-field-resolved-props.d.ts +6 -0
  84. package/dist/esm/components/data-display/display-field-resolved-props.d.ts.map +1 -1
  85. package/dist/esm/components/data-display/display-field-resolved-props.js.map +1 -1
  86. package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts +23 -0
  87. package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts.map +1 -0
  88. package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js +35 -0
  89. package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js.map +1 -0
  90. package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts +47 -0
  91. package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts.map +1 -0
  92. package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js +124 -0
  93. package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js.map +1 -0
  94. package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.d.ts +8 -0
  95. package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.d.ts.map +1 -0
  96. package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js +46 -0
  97. package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js.map +1 -0
  98. package/dist/esm/components/feedback/resource-empty-state.d.ts +21 -8
  99. package/dist/esm/components/feedback/resource-empty-state.d.ts.map +1 -1
  100. package/dist/esm/components/feedback/resource-empty-state.js +56 -26
  101. package/dist/esm/components/feedback/resource-empty-state.js.map +1 -1
  102. package/dist/esm/components/flows-actors/approval.d.ts +29 -7
  103. package/dist/esm/components/flows-actors/approval.d.ts.map +1 -1
  104. package/dist/esm/components/flows-actors/approval.js +231 -101
  105. package/dist/esm/components/flows-actors/approval.js.map +1 -1
  106. package/dist/esm/components/flows-actors/approval.labels.d.ts.map +1 -1
  107. package/dist/esm/components/flows-actors/approval.labels.js +57 -0
  108. package/dist/esm/components/flows-actors/approval.labels.js.map +1 -1
  109. package/dist/esm/components/flows-actors/system-catalog.d.ts.map +1 -1
  110. package/dist/esm/components/flows-actors/system-catalog.js +4 -4
  111. package/dist/esm/components/flows-actors/system-catalog.js.map +1 -1
  112. package/dist/esm/components/flows-actors/system-catalog.labels.d.ts.map +1 -1
  113. package/dist/esm/components/flows-actors/system-catalog.labels.js +0 -5
  114. package/dist/esm/components/flows-actors/system-catalog.labels.js.map +1 -1
  115. package/dist/esm/components/form/Form.d.ts +2 -2
  116. package/dist/esm/components/form/Form.js +2 -2
  117. package/dist/esm/components/form/Form.js.map +1 -1
  118. package/dist/esm/components/form/automated/AutomatedArrayField.d.ts +28 -3
  119. package/dist/esm/components/form/automated/AutomatedArrayField.d.ts.map +1 -1
  120. package/dist/esm/components/form/automated/AutomatedArrayField.js +43 -14
  121. package/dist/esm/components/form/automated/AutomatedArrayField.js.map +1 -1
  122. package/dist/esm/components/form/automated/FormField.d.ts +3 -0
  123. package/dist/esm/components/form/automated/FormField.d.ts.map +1 -1
  124. package/dist/esm/components/form/automated/FormField.js +60 -21
  125. package/dist/esm/components/form/automated/FormField.js.map +1 -1
  126. package/dist/esm/components/form/automated/FormFieldArray.d.ts +6 -3
  127. package/dist/esm/components/form/automated/FormFieldArray.d.ts.map +1 -1
  128. package/dist/esm/components/form/automated/FormFieldArray.js +3 -2
  129. package/dist/esm/components/form/automated/FormFieldArray.js.map +1 -1
  130. package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts +5 -4
  131. package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts.map +1 -1
  132. package/dist/esm/components/form/automated/ResourceAutomatedForm.js +148 -55
  133. package/dist/esm/components/form/automated/ResourceAutomatedForm.js.map +1 -1
  134. package/dist/esm/components/form/automated/ResourceFormActionsContext.d.ts +30 -0
  135. package/dist/esm/components/form/automated/ResourceFormActionsContext.d.ts.map +1 -1
  136. package/dist/esm/components/form/automated/ResourceFormActionsContext.js +30 -1
  137. package/dist/esm/components/form/automated/ResourceFormActionsContext.js.map +1 -1
  138. package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.d.ts +79 -0
  139. package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.d.ts.map +1 -0
  140. package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.js +203 -0
  141. package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.js.map +1 -0
  142. package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts +12 -0
  143. package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts.map +1 -1
  144. package/dist/esm/components/form/automated/automated-form-submit.utils.js +11 -0
  145. package/dist/esm/components/form/automated/automated-form-submit.utils.js.map +1 -1
  146. package/dist/esm/components/form/chromes/FormFieldChrome.d.ts.map +1 -1
  147. package/dist/esm/components/form/chromes/FormFieldChrome.js +2 -2
  148. package/dist/esm/components/form/chromes/FormFieldChrome.js.map +1 -1
  149. package/dist/esm/components/form/combobox.d.ts +7 -0
  150. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  151. package/dist/esm/components/form/combobox.js.map +1 -1
  152. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +1 -1
  153. package/dist/esm/components/form/controls/form-field-checkbox-group.js +13 -0
  154. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +1 -1
  155. package/dist/esm/components/form/fields/form-field-address.d.ts +58 -0
  156. package/dist/esm/components/form/fields/form-field-address.d.ts.map +1 -1
  157. package/dist/esm/components/form/fields/form-field-address.js +34 -6
  158. package/dist/esm/components/form/fields/form-field-address.js.map +1 -1
  159. package/dist/esm/components/form/fields/form-field-address.labels.d.ts.map +1 -1
  160. package/dist/esm/components/form/fields/form-field-address.labels.js +60 -1
  161. package/dist/esm/components/form/fields/form-field-address.labels.js.map +1 -1
  162. package/dist/esm/components/form/fields/form-field-file.d.ts +0 -12
  163. package/dist/esm/components/form/fields/form-field-file.d.ts.map +1 -1
  164. package/dist/esm/components/form/fields/form-field-file.js +34 -13
  165. package/dist/esm/components/form/fields/form-field-file.js.map +1 -1
  166. package/dist/esm/components/form/fields/form-field-file.labels.d.ts.map +1 -1
  167. package/dist/esm/components/form/fields/form-field-file.labels.js +46 -0
  168. package/dist/esm/components/form/fields/form-field-file.labels.js.map +1 -1
  169. package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts +73 -0
  170. package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts.map +1 -0
  171. package/dist/esm/components/form/fields/form-field-string-organization-role.js +64 -0
  172. package/dist/esm/components/form/fields/form-field-string-organization-role.js.map +1 -0
  173. package/dist/esm/components/form/fields/form-field-string.d.ts.map +1 -1
  174. package/dist/esm/components/form/fields/form-field-string.js +8 -1
  175. package/dist/esm/components/form/fields/form-field-string.js.map +1 -1
  176. package/dist/esm/components/form/fields/form-field-string.labels.d.ts.map +1 -1
  177. package/dist/esm/components/form/fields/form-field-string.labels.js +4 -0
  178. package/dist/esm/components/form/fields/form-field-string.labels.js.map +1 -1
  179. package/dist/esm/components/form/validation-errors/FormErrorSummary.js +1 -1
  180. package/dist/esm/components/form/validation-errors/FormErrorSummary.js.map +1 -1
  181. package/dist/esm/components/form/validation-errors/resolver-error-nesting.d.ts +31 -0
  182. package/dist/esm/components/form/validation-errors/resolver-error-nesting.d.ts.map +1 -0
  183. package/dist/esm/components/form/validation-errors/resolver-error-nesting.js +81 -0
  184. package/dist/esm/components/form/validation-errors/resolver-error-nesting.js.map +1 -0
  185. package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts +14 -1
  186. package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts.map +1 -1
  187. package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js +14 -0
  188. package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js.map +1 -1
  189. package/dist/esm/components/form/validation-errors/zod-issue-resolver.d.ts +22 -0
  190. package/dist/esm/components/form/validation-errors/zod-issue-resolver.d.ts.map +1 -1
  191. package/dist/esm/components/form/validation-errors/zod-issue-resolver.js +1 -22
  192. package/dist/esm/components/form/validation-errors/zod-issue-resolver.js.map +1 -1
  193. package/dist/esm/components/layout/resizable.d.ts +11 -0
  194. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  195. package/dist/esm/components/layout/resizable.js.map +1 -1
  196. package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.d.ts +11 -1
  197. package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.d.ts.map +1 -1
  198. package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.js +15 -3
  199. package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.js.map +1 -1
  200. package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.d.ts +2 -2
  201. package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.d.ts.map +1 -1
  202. package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.js.map +1 -1
  203. package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.d.ts +2 -2
  204. package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.js +2 -2
  205. package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.js.map +1 -1
  206. package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js +18 -20
  207. package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js.map +1 -1
  208. package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.d.ts.map +1 -1
  209. package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js +7 -1
  210. package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js.map +1 -1
  211. package/dist/esm/components/navigation/app-level/useMenuBarBehavior.d.ts.map +1 -1
  212. package/dist/esm/components/navigation/app-level/useMenuBarBehavior.js +4 -1
  213. package/dist/esm/components/navigation/app-level/useMenuBarBehavior.js.map +1 -1
  214. package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.d.ts.map +1 -1
  215. package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.js +18 -2
  216. package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.js.map +1 -1
  217. package/dist/esm/components/navigation/app-level/useSidebarBehavior.d.ts.map +1 -1
  218. package/dist/esm/components/navigation/app-level/useSidebarBehavior.js +82 -10
  219. package/dist/esm/components/navigation/app-level/useSidebarBehavior.js.map +1 -1
  220. package/dist/esm/components/navigation/app-level/useStatusBarBehavior.d.ts +2 -2
  221. package/dist/esm/components/navigation/app-level/useStatusBarBehavior.d.ts.map +1 -1
  222. package/dist/esm/components/navigation/app-level/useStatusBarBehavior.js.map +1 -1
  223. package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.d.ts.map +1 -1
  224. package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js +8 -1
  225. package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js.map +1 -1
  226. package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts +8 -2
  227. package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts.map +1 -1
  228. package/dist/esm/components/resources/ResourceCollectionToolbar.js +6 -2
  229. package/dist/esm/components/resources/ResourceCollectionToolbar.js.map +1 -1
  230. package/dist/esm/components/resources/ResourceLayout_Breadcrumb.d.ts.map +1 -1
  231. package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js +31 -16
  232. package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js.map +1 -1
  233. package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.d.ts.map +1 -1
  234. package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.js +23 -8
  235. package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.js.map +1 -1
  236. package/dist/esm/components/resources/ResourceLayout_ContainerNested.js +2 -2
  237. package/dist/esm/components/resources/ResourceLayout_ContainerNested.js.map +1 -1
  238. package/dist/esm/components/resources/ResourceLayout_Header.d.ts +13 -0
  239. package/dist/esm/components/resources/ResourceLayout_Header.d.ts.map +1 -1
  240. package/dist/esm/components/resources/ResourceLayout_Header.js +55 -28
  241. package/dist/esm/components/resources/ResourceLayout_Header.js.map +1 -1
  242. package/dist/esm/components/resources/ResourceLayout_List.d.ts.map +1 -1
  243. package/dist/esm/components/resources/ResourceLayout_List.js +41 -20
  244. package/dist/esm/components/resources/ResourceLayout_List.js.map +1 -1
  245. package/dist/esm/components/resources/ResourceLayout_List.labels.d.ts.map +1 -1
  246. package/dist/esm/components/resources/ResourceLayout_List.labels.js +1 -2
  247. package/dist/esm/components/resources/ResourceLayout_List.labels.js.map +1 -1
  248. package/dist/esm/components/resources/ResourceLayout_Read.d.ts +9 -4
  249. package/dist/esm/components/resources/ResourceLayout_Read.d.ts.map +1 -1
  250. package/dist/esm/components/resources/ResourceLayout_Read.js +30 -11
  251. package/dist/esm/components/resources/ResourceLayout_Read.js.map +1 -1
  252. package/dist/esm/components/resources/ResourceLayout_ReadSummary.d.ts.map +1 -1
  253. package/dist/esm/components/resources/ResourceLayout_ReadSummary.js +4 -2
  254. package/dist/esm/components/resources/ResourceLayout_ReadSummary.js.map +1 -1
  255. package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.d.ts.map +1 -1
  256. package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.js +6 -2
  257. package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.js.map +1 -1
  258. package/dist/esm/components/resources/ResourceLayout_Search.d.ts.map +1 -1
  259. package/dist/esm/components/resources/ResourceLayout_Search.js +30 -14
  260. package/dist/esm/components/resources/ResourceLayout_Search.js.map +1 -1
  261. package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.d.ts.map +1 -1
  262. package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js +14 -198
  263. package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js.map +1 -1
  264. package/dist/esm/components/resources/ResourceLayout_Update.d.ts +2 -2
  265. package/dist/esm/components/resources/ResourceLayout_Update.js +2 -2
  266. package/dist/esm/components/resources/ResourceLayout_Update.js.map +1 -1
  267. package/dist/esm/components/resources/ResourceListItemRenderer.d.ts.map +1 -1
  268. package/dist/esm/components/resources/ResourceListItemRenderer.js +69 -39
  269. package/dist/esm/components/resources/ResourceListItemRenderer.js.map +1 -1
  270. package/dist/esm/components/resources/ResourceOperationActionDropdown.d.ts +32 -0
  271. package/dist/esm/components/resources/ResourceOperationActionDropdown.d.ts.map +1 -0
  272. package/dist/esm/components/resources/ResourceOperationActionDropdown.js +130 -0
  273. package/dist/esm/components/resources/ResourceOperationActionDropdown.js.map +1 -0
  274. package/dist/esm/components/resources/collection-create-placement.utils.d.ts +32 -0
  275. package/dist/esm/components/resources/collection-create-placement.utils.d.ts.map +1 -0
  276. package/dist/esm/components/resources/collection-create-placement.utils.js +37 -0
  277. package/dist/esm/components/resources/collection-create-placement.utils.js.map +1 -0
  278. package/dist/esm/components/resources/embeds/RelatedResourcePreview.d.ts.map +1 -1
  279. package/dist/esm/components/resources/embeds/RelatedResourcePreview.js +5 -1
  280. package/dist/esm/components/resources/embeds/RelatedResourcePreview.js.map +1 -1
  281. package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts +8 -1
  282. package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts.map +1 -1
  283. package/dist/esm/components/resources/embeds/RelatedResourceSections.js +49 -2
  284. package/dist/esm/components/resources/embeds/RelatedResourceSections.js.map +1 -1
  285. package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts +22 -0
  286. package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts.map +1 -1
  287. package/dist/esm/components/resources/embeds/ResourceEmbeds.js +85 -2
  288. package/dist/esm/components/resources/embeds/ResourceEmbeds.js.map +1 -1
  289. package/dist/esm/components/resources/resourceLayout.utils.d.ts +14 -0
  290. package/dist/esm/components/resources/resourceLayout.utils.d.ts.map +1 -1
  291. package/dist/esm/components/resources/resourceLayout.utils.js +22 -0
  292. package/dist/esm/components/resources/resourceLayout.utils.js.map +1 -1
  293. package/dist/esm/components/resources/skeleton/ArrayField.d.ts.map +1 -1
  294. package/dist/esm/components/resources/skeleton/ArrayField.js +3 -0
  295. package/dist/esm/components/resources/skeleton/ArrayField.js.map +1 -1
  296. package/dist/esm/components/resources/skeleton/FormLayout.d.ts.map +1 -1
  297. package/dist/esm/components/resources/skeleton/FormLayout.js +33 -1
  298. package/dist/esm/components/resources/skeleton/FormLayout.js.map +1 -1
  299. package/dist/esm/components/resources/skeleton/ObjectScope.d.ts.map +1 -1
  300. package/dist/esm/components/resources/skeleton/ObjectScope.js +3 -0
  301. package/dist/esm/components/resources/skeleton/ObjectScope.js.map +1 -1
  302. package/dist/esm/components/resources/skeleton/Section.d.ts +12 -0
  303. package/dist/esm/components/resources/skeleton/Section.d.ts.map +1 -1
  304. package/dist/esm/components/resources/skeleton/Section.js +28 -2
  305. package/dist/esm/components/resources/skeleton/Section.js.map +1 -1
  306. package/dist/esm/components/resources/skeleton/SectionFieldsContext.d.ts +70 -0
  307. package/dist/esm/components/resources/skeleton/SectionFieldsContext.d.ts.map +1 -1
  308. package/dist/esm/components/resources/skeleton/SectionFieldsContext.js +157 -1
  309. package/dist/esm/components/resources/skeleton/SectionFieldsContext.js.map +1 -1
  310. package/dist/esm/components/resources/skeleton/WizardLayout.d.ts +6 -0
  311. package/dist/esm/components/resources/skeleton/WizardLayout.d.ts.map +1 -1
  312. package/dist/esm/components/resources/skeleton/WizardLayout.js +13 -2
  313. package/dist/esm/components/resources/skeleton/WizardLayout.js.map +1 -1
  314. package/dist/esm/components/resources/skeleton/WizardStep.d.ts.map +1 -1
  315. package/dist/esm/components/resources/skeleton/WizardStep.js +2 -1
  316. package/dist/esm/components/resources/skeleton/WizardStep.js.map +1 -1
  317. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.d.ts.map +1 -1
  318. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.js +61 -15
  319. package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.js.map +1 -1
  320. package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts +24 -2
  321. package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts.map +1 -1
  322. package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.js +69 -1
  323. package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.js.map +1 -1
  324. package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.d.ts.map +1 -1
  325. package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.js +18 -19
  326. package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.js.map +1 -1
  327. package/dist/esm/components/sections/ContentSectionContainer.d.ts.map +1 -1
  328. package/dist/esm/components/sections/ContentSectionContainer.js +5 -4
  329. package/dist/esm/components/sections/ContentSectionContainer.js.map +1 -1
  330. package/dist/esm/components/sections/stepper.d.ts +5 -0
  331. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  332. package/dist/esm/components/sections/stepper.js.map +1 -1
  333. package/dist/esm/components/sections/surface.d.ts.map +1 -1
  334. package/dist/esm/components/sections/surface.js +12 -3
  335. package/dist/esm/components/sections/surface.js.map +1 -1
  336. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts +43 -0
  337. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts.map +1 -0
  338. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js +129 -0
  339. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js.map +1 -0
  340. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.d.ts +3 -0
  341. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.d.ts.map +1 -0
  342. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js +34 -0
  343. package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js.map +1 -0
  344. package/dist/esm/components/settings/AppPage_AppearanceSettings.d.ts.map +1 -1
  345. package/dist/esm/components/settings/AppPage_AppearanceSettings.js +9 -11
  346. package/dist/esm/components/settings/AppPage_AppearanceSettings.js.map +1 -1
  347. package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.d.ts.map +1 -1
  348. package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.js +3 -2
  349. package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.js.map +1 -1
  350. package/dist/esm/components/settings/AppPage_BillingSettings.d.ts +4 -2
  351. package/dist/esm/components/settings/AppPage_BillingSettings.d.ts.map +1 -1
  352. package/dist/esm/components/settings/AppPage_BillingSettings.js +21 -3
  353. package/dist/esm/components/settings/AppPage_BillingSettings.js.map +1 -1
  354. package/dist/esm/components/settings/AppPage_BillingSettings.labels.d.ts.map +1 -1
  355. package/dist/esm/components/settings/AppPage_BillingSettings.labels.js +5 -10
  356. package/dist/esm/components/settings/AppPage_BillingSettings.labels.js.map +1 -1
  357. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts +58 -0
  358. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts.map +1 -1
  359. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.js +243 -40
  360. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.js.map +1 -1
  361. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.d.ts.map +1 -1
  362. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.js +67 -6
  363. package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.js.map +1 -1
  364. package/dist/esm/components/settings/AppPage_InvitationsSettings.d.ts.map +1 -1
  365. package/dist/esm/components/settings/AppPage_InvitationsSettings.js +19 -11
  366. package/dist/esm/components/settings/AppPage_InvitationsSettings.js.map +1 -1
  367. package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.d.ts.map +1 -1
  368. package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.js +4 -2
  369. package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.js.map +1 -1
  370. package/dist/esm/components/settings/SettingsHub.d.ts.map +1 -1
  371. package/dist/esm/components/settings/SettingsHub.js +3 -0
  372. package/dist/esm/components/settings/SettingsHub.js.map +1 -1
  373. package/dist/esm/components/settings/SettingsResourceOperationPanel.d.ts.map +1 -1
  374. package/dist/esm/components/settings/SettingsResourceOperationPanel.js +16 -1
  375. package/dist/esm/components/settings/SettingsResourceOperationPanel.js.map +1 -1
  376. package/dist/esm/components/settings/useOwnerProviderConnections.d.ts +59 -0
  377. package/dist/esm/components/settings/useOwnerProviderConnections.d.ts.map +1 -0
  378. package/dist/esm/components/settings/useOwnerProviderConnections.js +136 -0
  379. package/dist/esm/components/settings/useOwnerProviderConnections.js.map +1 -0
  380. package/dist/esm/components/views/chart-view/chart-view.utils.d.ts +5 -0
  381. package/dist/esm/components/views/chart-view/chart-view.utils.d.ts.map +1 -1
  382. package/dist/esm/components/views/chart-view/chart-view.utils.js +5 -0
  383. package/dist/esm/components/views/chart-view/chart-view.utils.js.map +1 -1
  384. package/dist/esm/components/views/chart-view/useResourceChartData.d.ts +50 -0
  385. package/dist/esm/components/views/chart-view/useResourceChartData.d.ts.map +1 -0
  386. package/dist/esm/components/views/chart-view/useResourceChartData.js +72 -0
  387. package/dist/esm/components/views/chart-view/useResourceChartData.js.map +1 -0
  388. package/dist/esm/components/views/composite-view/CompositeLayout.d.ts.map +1 -1
  389. package/dist/esm/components/views/composite-view/CompositeLayout.js +2 -1
  390. package/dist/esm/components/views/composite-view/CompositeLayout.js.map +1 -1
  391. package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts +86 -0
  392. package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts.map +1 -0
  393. package/dist/esm/core/app-shell/AppShellBuildingBlocks.js +187 -0
  394. package/dist/esm/core/app-shell/AppShellBuildingBlocks.js.map +1 -0
  395. package/dist/esm/core/app-shell/PortalContainerContext.d.ts +5 -2
  396. package/dist/esm/core/app-shell/PortalContainerContext.d.ts.map +1 -1
  397. package/dist/esm/core/app-shell/PortalContainerContext.js +5 -2
  398. package/dist/esm/core/app-shell/PortalContainerContext.js.map +1 -1
  399. package/dist/esm/core/app-shell/app-shell.schemas.d.ts +18 -9
  400. package/dist/esm/core/app-shell/app-shell.schemas.d.ts.map +1 -1
  401. package/dist/esm/core/app-shell/app-shell.schemas.js +1 -0
  402. package/dist/esm/core/app-shell/app-shell.schemas.js.map +1 -1
  403. package/dist/esm/core/app-shell/useAppShellLayout.d.ts +10 -0
  404. package/dist/esm/core/app-shell/useAppShellLayout.d.ts.map +1 -1
  405. package/dist/esm/core/app-shell/useAppShellLayout.js +28 -5
  406. package/dist/esm/core/app-shell/useAppShellLayout.js.map +1 -1
  407. package/dist/esm/core/app-shell/usePublicShellLayout.d.ts.map +1 -1
  408. package/dist/esm/core/app-shell/usePublicShellLayout.js +38 -0
  409. package/dist/esm/core/app-shell/usePublicShellLayout.js.map +1 -1
  410. package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts +15 -1
  411. package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts.map +1 -1
  412. package/dist/esm/core/automated-layout/automated-layout.frontend.utils.js +47 -13
  413. package/dist/esm/core/automated-layout/automated-layout.frontend.utils.js.map +1 -1
  414. package/dist/esm/core/billing/BillingContext.d.ts +25 -2
  415. package/dist/esm/core/billing/BillingContext.d.ts.map +1 -1
  416. package/dist/esm/core/billing/BillingContext.js +16 -25
  417. package/dist/esm/core/billing/BillingContext.js.map +1 -1
  418. package/dist/esm/core/billing/billing-provider-display.frontend.utils.d.ts +11 -3
  419. package/dist/esm/core/billing/billing-provider-display.frontend.utils.d.ts.map +1 -1
  420. package/dist/esm/core/billing/billing-provider-display.frontend.utils.js +14 -8
  421. package/dist/esm/core/billing/billing-provider-display.frontend.utils.js.map +1 -1
  422. package/dist/esm/core/billing/useBillingPlanChange.d.ts.map +1 -1
  423. package/dist/esm/core/billing/useBillingPlanChange.js +2 -0
  424. package/dist/esm/core/billing/useBillingPlanChange.js.map +1 -1
  425. package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.d.ts.map +1 -1
  426. package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.js +1 -0
  427. package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.js.map +1 -1
  428. package/dist/esm/core/components-registry/provider-component-registry.frontend.service.d.ts +29 -229
  429. package/dist/esm/core/components-registry/provider-component-registry.frontend.service.d.ts.map +1 -1
  430. package/dist/esm/core/components-registry/provider-component-registry.frontend.service.js +29 -327
  431. package/dist/esm/core/components-registry/provider-component-registry.frontend.service.js.map +1 -1
  432. package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.d.ts +17 -27
  433. package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.d.ts.map +1 -1
  434. package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.js +28 -48
  435. package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.js.map +1 -1
  436. package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts +21 -11
  437. package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts.map +1 -1
  438. package/dist/esm/core/config/app-configuration-frontend.schemas.js +4 -4
  439. package/dist/esm/core/config/app-configuration-frontend.schemas.js.map +1 -1
  440. package/dist/esm/core/config/app-level-components.frontend.schemas.d.ts +17 -0
  441. package/dist/esm/core/config/app-level-components.frontend.schemas.d.ts.map +1 -1
  442. package/dist/esm/core/config/app-level-components.frontend.schemas.js +17 -0
  443. package/dist/esm/core/config/app-level-components.frontend.schemas.js.map +1 -1
  444. package/dist/esm/core/config/chart-view.frontend.schemas.d.ts +10 -10
  445. package/dist/esm/core/config/engine-settings-destinations.d.ts.map +1 -1
  446. package/dist/esm/core/config/engine-settings-destinations.js +221 -6
  447. package/dist/esm/core/config/engine-settings-destinations.js.map +1 -1
  448. package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts +8 -0
  449. package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts.map +1 -1
  450. package/dist/esm/core/config/launcher-items.frontend.schemas.js +1 -0
  451. package/dist/esm/core/config/launcher-items.frontend.schemas.js.map +1 -1
  452. package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts +10 -1
  453. package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts.map +1 -1
  454. package/dist/esm/core/config/settings-hub.frontend.schemas.js +9 -0
  455. package/dist/esm/core/config/settings-hub.frontend.schemas.js.map +1 -1
  456. package/dist/esm/core/config/verify-launcher-content.d.ts.map +1 -1
  457. package/dist/esm/core/config/verify-launcher-content.js +30 -19
  458. package/dist/esm/core/config/verify-launcher-content.js.map +1 -1
  459. package/dist/esm/core/errors/ErrorContext.d.ts.map +1 -1
  460. package/dist/esm/core/errors/ErrorContext.js +9 -1
  461. package/dist/esm/core/errors/ErrorContext.js.map +1 -1
  462. package/dist/esm/core/errors/GlobalErrorHandler.d.ts.map +1 -1
  463. package/dist/esm/core/errors/GlobalErrorHandler.js +5 -4
  464. package/dist/esm/core/errors/GlobalErrorHandler.js.map +1 -1
  465. package/dist/esm/core/errors/RouterErrorBoundary.js +1 -1
  466. package/dist/esm/core/errors/RouterErrorBoundary.js.map +1 -1
  467. package/dist/esm/core/errors/errors-builder.frontend.services.d.ts +2 -2
  468. package/dist/esm/core/errors/errors-builder.frontend.services.d.ts.map +1 -1
  469. package/dist/esm/core/errors/errors-builder.frontend.services.js +4 -4
  470. package/dist/esm/core/errors/errors-builder.frontend.services.js.map +1 -1
  471. package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js +1 -1
  472. package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js.map +1 -1
  473. package/dist/esm/core/events/NotificationContext.d.ts.map +1 -1
  474. package/dist/esm/core/events/NotificationContext.js +23 -5
  475. package/dist/esm/core/events/NotificationContext.js.map +1 -1
  476. package/dist/esm/core/events/events.frontend.schemas.d.ts +110 -43
  477. package/dist/esm/core/events/events.frontend.schemas.d.ts.map +1 -1
  478. package/dist/esm/core/events/events.frontend.schemas.js +89 -15
  479. package/dist/esm/core/events/events.frontend.schemas.js.map +1 -1
  480. package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts +2 -0
  481. package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts.map +1 -1
  482. package/dist/esm/core/execution/useExecutionParticipationRMM.js +2 -1
  483. package/dist/esm/core/execution/useExecutionParticipationRMM.js.map +1 -1
  484. package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts +1 -1
  485. package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts.map +1 -1
  486. package/dist/esm/core/execution/useExecutionResourceOperationSurface.js +5 -2
  487. package/dist/esm/core/execution/useExecutionResourceOperationSurface.js.map +1 -1
  488. package/dist/esm/core/external-providers/ConsentBasedProviderSdks.d.ts +63 -0
  489. package/dist/esm/core/external-providers/ConsentBasedProviderSdks.d.ts.map +1 -0
  490. package/dist/esm/core/external-providers/ConsentBasedProviderSdks.js +131 -0
  491. package/dist/esm/core/external-providers/ConsentBasedProviderSdks.js.map +1 -0
  492. package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.d.ts +61 -0
  493. package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.d.ts.map +1 -0
  494. package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.js +178 -0
  495. package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.js.map +1 -0
  496. package/dist/esm/core/external-providers/ProviderAddressLookupHost.d.ts +52 -0
  497. package/dist/esm/core/external-providers/ProviderAddressLookupHost.d.ts.map +1 -0
  498. package/dist/esm/core/external-providers/ProviderAddressLookupHost.js +144 -0
  499. package/dist/esm/core/external-providers/ProviderAddressLookupHost.js.map +1 -0
  500. package/dist/esm/core/external-providers/ProviderFilePickerHost.d.ts +22 -1
  501. package/dist/esm/core/external-providers/ProviderFilePickerHost.d.ts.map +1 -1
  502. package/dist/esm/core/external-providers/ProviderFilePickerHost.js +23 -3
  503. package/dist/esm/core/external-providers/ProviderFilePickerHost.js.map +1 -1
  504. package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.d.ts +55 -0
  505. package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.d.ts.map +1 -0
  506. package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.js +65 -0
  507. package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.js.map +1 -0
  508. package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts +63 -0
  509. package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts.map +1 -0
  510. package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js +100 -0
  511. package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js.map +1 -0
  512. package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts +45 -7
  513. package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts.map +1 -1
  514. package/dist/esm/core/flows-actors/FlowsActorsContext.js +112 -28
  515. package/dist/esm/core/flows-actors/FlowsActorsContext.js.map +1 -1
  516. package/dist/esm/core/flows-actors/usePendingDecisions.d.ts +32 -0
  517. package/dist/esm/core/flows-actors/usePendingDecisions.d.ts.map +1 -0
  518. package/dist/esm/core/flows-actors/usePendingDecisions.js +91 -0
  519. package/dist/esm/core/flows-actors/usePendingDecisions.js.map +1 -0
  520. package/dist/esm/core/guidance/GuidanceRenderer.d.ts.map +1 -1
  521. package/dist/esm/core/guidance/GuidanceRenderer.js +3 -2
  522. package/dist/esm/core/guidance/GuidanceRenderer.js.map +1 -1
  523. package/dist/esm/core/i18n/I18nContext.d.ts +22 -8
  524. package/dist/esm/core/i18n/I18nContext.d.ts.map +1 -1
  525. package/dist/esm/core/i18n/I18nContext.js +21 -9
  526. package/dist/esm/core/i18n/I18nContext.js.map +1 -1
  527. package/dist/esm/core/i18n/component-label-resolution.utils.d.ts +5 -3
  528. package/dist/esm/core/i18n/component-label-resolution.utils.d.ts.map +1 -1
  529. package/dist/esm/core/i18n/component-label-resolution.utils.js +5 -3
  530. package/dist/esm/core/i18n/component-label-resolution.utils.js.map +1 -1
  531. package/dist/esm/core/i18n/useI18n.d.ts +2 -1
  532. package/dist/esm/core/i18n/useI18n.d.ts.map +1 -1
  533. package/dist/esm/core/i18n/useI18n.js +2 -1
  534. package/dist/esm/core/i18n/useI18n.js.map +1 -1
  535. package/dist/esm/core/loading/LoadingContext.d.ts.map +1 -1
  536. package/dist/esm/core/loading/LoadingContext.js +7 -1
  537. package/dist/esm/core/loading/LoadingContext.js.map +1 -1
  538. package/dist/esm/core/loading/LoadingGate.d.ts.map +1 -1
  539. package/dist/esm/core/loading/LoadingGate.js +19 -1
  540. package/dist/esm/core/loading/LoadingGate.js.map +1 -1
  541. package/dist/esm/core/monitoring/analytics/AnalyticsContext.d.ts +15 -2
  542. package/dist/esm/core/monitoring/analytics/AnalyticsContext.d.ts.map +1 -1
  543. package/dist/esm/core/monitoring/analytics/AnalyticsContext.js +183 -20
  544. package/dist/esm/core/monitoring/analytics/AnalyticsContext.js.map +1 -1
  545. package/dist/esm/core/monitoring/analytics/AnalyticsEventBridge.js +2 -2
  546. package/dist/esm/core/monitoring/analytics/AnalyticsEventBridge.js.map +1 -1
  547. package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.d.ts +7 -15
  548. package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.d.ts.map +1 -1
  549. package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.js +8 -26
  550. package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.js.map +1 -1
  551. package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.d.ts +12 -3
  552. package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.d.ts.map +1 -1
  553. package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.js +3 -2
  554. package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.js.map +1 -1
  555. package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.d.ts +42 -0
  556. package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.d.ts.map +1 -1
  557. package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js +89 -5
  558. package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js.map +1 -1
  559. package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.d.ts +2 -0
  560. package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.d.ts.map +1 -1
  561. package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.js +2 -0
  562. package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.js.map +1 -1
  563. package/dist/esm/core/navigation/NavigationContentAreas.d.ts +78 -0
  564. package/dist/esm/core/navigation/NavigationContentAreas.d.ts.map +1 -1
  565. package/dist/esm/core/navigation/NavigationContentAreas.js +264 -16
  566. package/dist/esm/core/navigation/NavigationContentAreas.js.map +1 -1
  567. package/dist/esm/core/navigation/NavigationContext.d.ts +8 -0
  568. package/dist/esm/core/navigation/NavigationContext.d.ts.map +1 -1
  569. package/dist/esm/core/navigation/NavigationContext.js +137 -30
  570. package/dist/esm/core/navigation/NavigationContext.js.map +1 -1
  571. package/dist/esm/core/navigation/launcher-resolution.d.ts +2 -0
  572. package/dist/esm/core/navigation/launcher-resolution.d.ts.map +1 -1
  573. package/dist/esm/core/navigation/launcher-resolution.js +1 -0
  574. package/dist/esm/core/navigation/launcher-resolution.js.map +1 -1
  575. package/dist/esm/core/navigation/navigation-cascade.d.ts +46 -0
  576. package/dist/esm/core/navigation/navigation-cascade.d.ts.map +1 -0
  577. package/dist/esm/core/navigation/navigation-cascade.js +222 -0
  578. package/dist/esm/core/navigation/navigation-cascade.js.map +1 -0
  579. package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.d.ts.map +1 -1
  580. package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.js +21 -2
  581. package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.js.map +1 -1
  582. package/dist/esm/core/navigation/navigation-controller-internals.d.ts +71 -0
  583. package/dist/esm/core/navigation/navigation-controller-internals.d.ts.map +1 -0
  584. package/dist/esm/core/navigation/navigation-controller-internals.js +84 -0
  585. package/dist/esm/core/navigation/navigation-controller-internals.js.map +1 -0
  586. package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts +86 -2
  587. package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts.map +1 -1
  588. package/dist/esm/core/navigation/navigation-policy-resolver.service.js +242 -124
  589. package/dist/esm/core/navigation/navigation-policy-resolver.service.js.map +1 -1
  590. package/dist/esm/core/navigation/navigation.schemas.d.ts +170 -8
  591. package/dist/esm/core/navigation/navigation.schemas.d.ts.map +1 -1
  592. package/dist/esm/core/navigation/navigation.schemas.js +121 -2
  593. package/dist/esm/core/navigation/navigation.schemas.js.map +1 -1
  594. package/dist/esm/core/navigation/navigation.utils.d.ts +102 -6
  595. package/dist/esm/core/navigation/navigation.utils.d.ts.map +1 -1
  596. package/dist/esm/core/navigation/navigation.utils.js +283 -34
  597. package/dist/esm/core/navigation/navigation.utils.js.map +1 -1
  598. package/dist/esm/core/navigation/useIsStackEntryActive.d.ts +0 -10
  599. package/dist/esm/core/navigation/useIsStackEntryActive.d.ts.map +0 -1
  600. package/dist/esm/core/navigation/useIsStackEntryActive.js.map +0 -1
  601. package/dist/esm/core/navigation/useNavigationController.d.ts +28 -157
  602. package/dist/esm/core/navigation/useNavigationController.d.ts.map +1 -1
  603. package/dist/esm/core/navigation/useNavigationController.js +211 -1189
  604. package/dist/esm/core/navigation/useNavigationController.js.map +1 -1
  605. package/dist/esm/core/navigation/useNavigationRouterSync.d.ts +174 -0
  606. package/dist/esm/core/navigation/useNavigationRouterSync.d.ts.map +1 -0
  607. package/dist/esm/core/navigation/useNavigationRouterSync.js +977 -0
  608. package/dist/esm/core/navigation/useNavigationRouterSync.js.map +1 -0
  609. package/dist/esm/core/navigation/useOverlayTitle.d.ts +13 -1
  610. package/dist/esm/core/navigation/useOverlayTitle.d.ts.map +1 -1
  611. package/dist/esm/core/navigation/useOverlayTitle.js +15 -10
  612. package/dist/esm/core/navigation/useOverlayTitle.js.map +1 -1
  613. package/dist/esm/core/navigation/useResponsiveZoneMigration.d.ts +43 -0
  614. package/dist/esm/core/navigation/useResponsiveZoneMigration.d.ts.map +1 -0
  615. package/dist/esm/core/navigation/useResponsiveZoneMigration.js +44 -0
  616. package/dist/esm/core/navigation/useResponsiveZoneMigration.js.map +1 -0
  617. package/dist/esm/core/navigation/zone-collapse-migration.d.ts +83 -0
  618. package/dist/esm/core/navigation/zone-collapse-migration.d.ts.map +1 -0
  619. package/dist/esm/core/navigation/zone-collapse-migration.js +116 -0
  620. package/dist/esm/core/navigation/zone-collapse-migration.js.map +1 -0
  621. package/dist/esm/core/navigation/zone-collapse.d.ts +51 -0
  622. package/dist/esm/core/navigation/zone-collapse.d.ts.map +1 -0
  623. package/dist/esm/core/navigation/zone-collapse.js +59 -0
  624. package/dist/esm/core/navigation/zone-collapse.js.map +1 -0
  625. package/dist/esm/core/navigation/zone-emphasis.d.ts +3 -0
  626. package/dist/esm/core/navigation/zone-emphasis.d.ts.map +1 -1
  627. package/dist/esm/core/navigation/zone-emphasis.js +26 -4
  628. package/dist/esm/core/navigation/zone-emphasis.js.map +1 -1
  629. package/dist/esm/core/navigation/zone-visible-entry.d.ts +22 -0
  630. package/dist/esm/core/navigation/zone-visible-entry.d.ts.map +1 -1
  631. package/dist/esm/core/navigation/zone-visible-entry.js +25 -0
  632. package/dist/esm/core/navigation/zone-visible-entry.js.map +1 -1
  633. package/dist/esm/core/requests/websockets/WebSocketContext.d.ts.map +1 -1
  634. package/dist/esm/core/requests/websockets/WebSocketContext.js +53 -18
  635. package/dist/esm/core/requests/websockets/WebSocketContext.js.map +1 -1
  636. package/dist/esm/core/requests/websockets/WebSocketEventBridge.d.ts.map +1 -1
  637. package/dist/esm/core/requests/websockets/WebSocketEventBridge.js +3 -1
  638. package/dist/esm/core/requests/websockets/WebSocketEventBridge.js.map +1 -1
  639. package/dist/esm/core/requests/websockets/useNotificationBadges.d.ts +22 -0
  640. package/dist/esm/core/requests/websockets/useNotificationBadges.d.ts.map +1 -1
  641. package/dist/esm/core/requests/websockets/useNotificationBadges.js +72 -3
  642. package/dist/esm/core/requests/websockets/useNotificationBadges.js.map +1 -1
  643. package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.d.ts +28 -0
  644. package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.d.ts.map +1 -0
  645. package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.js +86 -0
  646. package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.js.map +1 -0
  647. package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts +38 -3
  648. package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts.map +1 -1
  649. package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.js +57 -2
  650. package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.js.map +1 -1
  651. package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.d.ts.map +1 -1
  652. package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.js +4 -2
  653. package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.js.map +1 -1
  654. package/dist/esm/core/requests/wildo-http-client.frontend.service.d.ts +30 -1
  655. package/dist/esm/core/requests/wildo-http-client.frontend.service.d.ts.map +1 -1
  656. package/dist/esm/core/requests/wildo-http-client.frontend.service.js +47 -4
  657. package/dist/esm/core/requests/wildo-http-client.frontend.service.js.map +1 -1
  658. package/dist/esm/core/resources/ResourceRegistryContext.d.ts.map +1 -1
  659. package/dist/esm/core/resources/ResourceRegistryContext.js +22 -1
  660. package/dist/esm/core/resources/ResourceRegistryContext.js.map +1 -1
  661. package/dist/esm/core/resources/context-resource-identifiers.frontend.utils.js +1 -1
  662. package/dist/esm/core/resources/context-resource-identifiers.frontend.utils.js.map +1 -1
  663. package/dist/esm/core/resources/frontend-resource.utils.d.ts +22 -1
  664. package/dist/esm/core/resources/frontend-resource.utils.d.ts.map +1 -1
  665. package/dist/esm/core/resources/frontend-resource.utils.js +25 -2
  666. package/dist/esm/core/resources/frontend-resource.utils.js.map +1 -1
  667. package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts +113 -13
  668. package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts.map +1 -1
  669. package/dist/esm/core/resources/operation-semantics.frontend.utils.js +173 -20
  670. package/dist/esm/core/resources/operation-semantics.frontend.utils.js.map +1 -1
  671. package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.d.ts +11 -0
  672. package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.d.ts.map +1 -1
  673. package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.js +7 -0
  674. package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.js.map +1 -1
  675. package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.d.ts +3 -2
  676. package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.d.ts.map +1 -1
  677. package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.js +13 -5
  678. package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.js.map +1 -1
  679. package/dist/esm/core/resources/resources-repository.frontend.service.d.ts +6 -0
  680. package/dist/esm/core/resources/resources-repository.frontend.service.d.ts.map +1 -1
  681. package/dist/esm/core/resources/resources-repository.frontend.service.js +90 -1
  682. package/dist/esm/core/resources/resources-repository.frontend.service.js.map +1 -1
  683. package/dist/esm/core/resources/resources.frontend.schemas.d.ts +139 -16
  684. package/dist/esm/core/resources/resources.frontend.schemas.d.ts.map +1 -1
  685. package/dist/esm/core/resources/resources.frontend.schemas.js +110 -11
  686. package/dist/esm/core/resources/resources.frontend.schemas.js.map +1 -1
  687. package/dist/esm/core/resources/rmm/ResourceMutationManager.d.ts.map +1 -1
  688. package/dist/esm/core/resources/rmm/ResourceMutationManager.js +3 -1
  689. package/dist/esm/core/resources/rmm/ResourceMutationManager.js.map +1 -1
  690. package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.d.ts +10 -0
  691. package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.d.ts.map +1 -1
  692. package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.js +8 -0
  693. package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.js.map +1 -1
  694. package/dist/esm/core/resources/rmm/useResourceRMM.d.ts +7 -0
  695. package/dist/esm/core/resources/rmm/useResourceRMM.d.ts.map +1 -1
  696. package/dist/esm/core/resources/rmm/useResourceRMM.js +9 -2
  697. package/dist/esm/core/resources/rmm/useResourceRMM.js.map +1 -1
  698. package/dist/esm/core/resources/useOperationDirectExecution.d.ts +59 -0
  699. package/dist/esm/core/resources/useOperationDirectExecution.d.ts.map +1 -0
  700. package/dist/esm/core/resources/useOperationDirectExecution.js +278 -0
  701. package/dist/esm/core/resources/useOperationDirectExecution.js.map +1 -0
  702. package/dist/esm/core/resources/useResourceOperationActions.d.ts +1 -1
  703. package/dist/esm/core/resources/useResourceOperationActions.d.ts.map +1 -1
  704. package/dist/esm/core/resources/useResourceOperationActions.js +69 -22
  705. package/dist/esm/core/resources/useResourceOperationActions.js.map +1 -1
  706. package/dist/esm/core/resources/useResourceOperationSurface.d.ts +8 -6
  707. package/dist/esm/core/resources/useResourceOperationSurface.d.ts.map +1 -1
  708. package/dist/esm/core/resources/useResourceOperationSurface.js +3 -2
  709. package/dist/esm/core/resources/useResourceOperationSurface.js.map +1 -1
  710. package/dist/esm/core/runtime/AppRouter.d.ts.map +1 -1
  711. package/dist/esm/core/runtime/AppRouter.js +23 -2
  712. package/dist/esm/core/runtime/AppRouter.js.map +1 -1
  713. package/dist/esm/core/runtime/ApplicationContext.shared.d.ts +4 -2
  714. package/dist/esm/core/runtime/ApplicationContext.shared.d.ts.map +1 -1
  715. package/dist/esm/core/runtime/ApplicationContext.shared.js.map +1 -1
  716. package/dist/esm/core/runtime/ApplicationMainContext.d.ts +12 -2
  717. package/dist/esm/core/runtime/ApplicationMainContext.d.ts.map +1 -1
  718. package/dist/esm/core/runtime/ApplicationMainContext.js +5 -2
  719. package/dist/esm/core/runtime/ApplicationMainContext.js.map +1 -1
  720. package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts +25 -1
  721. package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts.map +1 -1
  722. package/dist/esm/core/runtime/domain-module.frontend.definitions.js +37 -1
  723. package/dist/esm/core/runtime/domain-module.frontend.definitions.js.map +1 -1
  724. package/dist/esm/core/runtime/start-application.frontend.service.d.ts +21 -2
  725. package/dist/esm/core/runtime/start-application.frontend.service.d.ts.map +1 -1
  726. package/dist/esm/core/runtime/start-application.frontend.service.js +51 -4
  727. package/dist/esm/core/runtime/start-application.frontend.service.js.map +1 -1
  728. package/dist/esm/core/security/AuthSessionContext.d.ts +11 -0
  729. package/dist/esm/core/security/AuthSessionContext.d.ts.map +1 -1
  730. package/dist/esm/core/security/AuthSessionContext.js +70 -22
  731. package/dist/esm/core/security/AuthSessionContext.js.map +1 -1
  732. package/dist/esm/core/security/StepUpAuthContext.d.ts.map +1 -1
  733. package/dist/esm/core/security/StepUpAuthContext.js +10 -2
  734. package/dist/esm/core/security/StepUpAuthContext.js.map +1 -1
  735. package/dist/esm/core/security/UserOrgsContext.d.ts.map +1 -1
  736. package/dist/esm/core/security/UserOrgsContext.js +72 -8
  737. package/dist/esm/core/security/UserOrgsContext.js.map +1 -1
  738. package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts +7 -0
  739. package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts.map +1 -1
  740. package/dist/esm/core/security/route-organization-access.frontend.utils.js +8 -2
  741. package/dist/esm/core/security/route-organization-access.frontend.utils.js.map +1 -1
  742. package/dist/esm/core/security/useGrantedConsentPurposes.d.ts +30 -0
  743. package/dist/esm/core/security/useGrantedConsentPurposes.d.ts.map +1 -0
  744. package/dist/esm/core/security/useGrantedConsentPurposes.js +38 -0
  745. package/dist/esm/core/security/useGrantedConsentPurposes.js.map +1 -0
  746. package/dist/esm/core/ui/UIContext.d.ts.map +1 -1
  747. package/dist/esm/core/ui/UIContext.js +10 -6
  748. package/dist/esm/core/ui/UIContext.js.map +1 -1
  749. package/dist/esm/core/ui/color-conversion.utils.d.ts +20 -0
  750. package/dist/esm/core/ui/color-conversion.utils.d.ts.map +1 -1
  751. package/dist/esm/core/ui/color-conversion.utils.js +39 -5
  752. package/dist/esm/core/ui/color-conversion.utils.js.map +1 -1
  753. package/dist/esm/core/ui/themes/default.theme.d.ts.map +1 -1
  754. package/dist/esm/core/ui/themes/default.theme.js +22 -2
  755. package/dist/esm/core/ui/themes/default.theme.js.map +1 -1
  756. package/dist/esm/core/ui/ui.frontend.schemas.d.ts +6 -6
  757. package/dist/esm/core/ui/ui.frontend.schemas.d.ts.map +1 -1
  758. package/dist/esm/core/ui/ui.frontend.schemas.js +3 -3
  759. package/dist/esm/core/ui/ui.frontend.schemas.js.map +1 -1
  760. package/dist/esm/index.d.ts +10 -1
  761. package/dist/esm/index.d.ts.map +1 -1
  762. package/dist/esm/index.js +19 -1
  763. package/dist/esm/index.js.map +1 -1
  764. package/dist/esm/testing/app-shell-placement-coverage.d.ts +43 -0
  765. package/dist/esm/testing/app-shell-placement-coverage.d.ts.map +1 -0
  766. package/dist/esm/testing/app-shell-placement-coverage.js +114 -0
  767. package/dist/esm/testing/app-shell-placement-coverage.js.map +1 -0
  768. package/dist/esm/testing/mock-builders.d.ts.map +1 -1
  769. package/dist/esm/testing/mock-builders.js +5 -0
  770. package/dist/esm/testing/mock-builders.js.map +1 -1
  771. package/dist/esm/testing.d.ts +1 -0
  772. package/dist/esm/testing.d.ts.map +1 -1
  773. package/dist/esm/testing.js +1 -0
  774. package/dist/esm/testing.js.map +1 -1
  775. package/package.json +9 -7
  776. package/dist/esm/core/navigation/useIsStackEntryActive.js +0 -15
  777. package/dist/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,977 @@
1
+ /**
2
+ * URL RECONCILIATION: what a browser URL means for the zone state.
3
+ *
4
+ * Six hooks, one invariant — **the URL names exactly one zone's content, and the zones around it are
5
+ * reconstructed from that**. They cover the deep link and refresh (`useRouterSync`,
6
+ * `useViewRouterSync`, `useEnginePageRouterSync`), the browser's own back and forward across
7
+ * structural zones (`useStructuralZoneBackForwardSync`), the `?pane=` hosted pane
8
+ * (`useHostedPaneRouteSync`) and the settings-hub overlay (`useSettingsHubOverlaySync`).
9
+ *
10
+ * Split out of `useNavigationController.ts` on 2026-09-25. That module held the click path and this
11
+ * one in 2,322 lines, and reasoning about either in isolation meant holding both; the seam was
12
+ * measured rather than guessed — this half used exactly THREE symbols from the other (`logDebug` and
13
+ * the two cascade functions), which is what made the split worth doing.
14
+ *
15
+ * Nothing here decides a PLACEMENT POLICY. Where content goes is `navigationPolicyResolver`'s
16
+ * answer, read through `NavigationUtils.resolveResourceTargetZone`; these hooks decide only which
17
+ * content the URL is currently naming and what has to be rebuilt around it.
18
+ */
19
+ import { useMemo, useEffect, useRef, } from 'react';
20
+ import { useLocation, useParams, } from 'react-router-dom';
21
+ import { useEventBus } from '../../core/events/useEventBus.js';
22
+ import { useNavigationState } from './useNavigationState.js';
23
+ import { useUI } from '../../core/ui/useUI.js';
24
+ import { useAppScopeSafe } from '../../core/scope/useAppScope.js';
25
+ import { ScopeUtilsService } from '../../core/scope/scope.utils.frontend.service.js';
26
+ import { extractChartRouteContextResourceIdentifiers, extractChartRouteUrlParamValues, } from '../../core/config/chart-view.frontend.schemas.js';
27
+ import { extractCompositeRouteContextResourceIdentifiers, } from '../../core/config/composite-view.schemas.js';
28
+ import { extractExecutionRouteContextResourceIdentifiers, resolveExecutionViewDefinition, } from '../../core/config/execution-view.schemas.js';
29
+ import { FrontendEvents, } from '../../core/events/events.frontend.schemas.js';
30
+ import { NavigationZone, NavigationContentType, NAVIGATION_STRUCTURAL_ZONES, } from './navigation.schemas.js';
31
+ import { NavigationTransition, NavigationZoneName, OverlayAppearance, ResourcesConfigOperationsUrlsBuilderUtils, } from '@wildo-ai/saas-models';
32
+ import { useResourceRegistry } from '../../core/resources/useResourceRegistry.js';
33
+ import { NavigationSource } from './navigation.schemas.js';
34
+ import { NavigationUtils } from './navigation.utils.js';
35
+ import { useTransactionAwareSyncRetry } from './useTransactionAwareSyncRetry.js';
36
+ import { useRouterLocationAheadOfCommit, useSynchronousBrowserLocation } from './useSynchronousBrowserLocation.js';
37
+ import { CommonRoutePaths } from '../../core/runtime/routes.frontend.definitions.js';
38
+ import { FrontendResourceUtils, frontendResourceUtils } from '../../core/resources/frontend-resource.utils.js';
39
+ import { normalizeContextResourceIdentifiersForTransport } from '../../core/resources/context-resource-identifiers.frontend.utils.js';
40
+ import { adjacentZoneUsableAtViewport } from './zone-collapse.js';
41
+ import { logDebug } from './navigation-controller-internals.js';
42
+ import { cascadeAncestorZones, cascadeSiblingListIntoPrimary } from './navigation-cascade.js';
43
+ // ================================
44
+ // Router Sync Hook (merged from RouterNavigationSync)
45
+ // ================================
46
+ /**
47
+ * Hook to sync React Router URL changes with navigation state.
48
+ *
49
+ * When a user navigates via URL (bookmark, direct link, refresh),
50
+ * this hook ensures the navigation state is updated accordingly.
51
+ *
52
+ * Uses NavigationSource to detect controller-initiated navigation:
53
+ * - If top entry has source=CONTROLLER and matches current URL, skip sync
54
+ * - Otherwise, this is an external URL change, sync it with source=URL_SYNC
55
+ *
56
+ * @param resourceType - The resource type for the current route
57
+ * @param operation - The operation configuration
58
+ * @param routePathParameters - Route path parameters with relationship info for deterministic URL selection
59
+ */
60
+ export function useRouterSync(resourceType, operation, routePathParameters) {
61
+ const location = useLocation();
62
+ const routerLocationAhead = useRouterLocationAheadOfCommit(location);
63
+ const urlParameters = useParams();
64
+ const { registry } = useResourceRegistry();
65
+ const { emit } = useEventBus();
66
+ const { getZoneState, contentAreaWidth } = useNavigationState();
67
+ const appScope = useAppScopeSafe();
68
+ const { navigationLayout: resolvedNavigationLayout, currentBreakpoint } = useUI();
69
+ const currentBrowserUrl = useMemo(() => NavigationUtils.buildBrowserUrl(location.pathname, location.search), [location.pathname, location.search]);
70
+ const liveAppScopeContextIdentifiers = useMemo(() => appScope?.buildContextResourceIdentifiers?.() ?? {}, [appScope]);
71
+ const liveAppScopeContextIdentifiersKey = useMemo(() => FrontendResourceUtils.buildContextResourceIdentifiersKey(liveAppScopeContextIdentifiers), [liveAppScopeContextIdentifiers]);
72
+ // Track the last synced path to avoid duplicate updates
73
+ const lastSyncedPath = useRef(null);
74
+ const { retryTick, scheduleRetry: scheduleTransactionRetry, clearRetry: clearTransactionRetry, } = useTransactionAwareSyncRetry(currentBrowserUrl);
75
+ // Pre-compute this resource's route patterns (memoized) so the effect can
76
+ // cheaply verify that the current URL actually belongs to this resource.
77
+ // This prevents re-populating the navigation stack when the Outlet briefly
78
+ // mounts this ResourcePageWrapper during a route transition (e.g., Home '/').
79
+ const resourceRoutePatterns = useMemo(() => {
80
+ if (!resourceType || !operation)
81
+ return [];
82
+ const resourceConfig = registry.resourceConfigurations?.[resourceType];
83
+ if (!resourceConfig)
84
+ return [];
85
+ return ResourcesConfigOperationsUrlsBuilderUtils.buildOperationFrontendRoutePaths(resourceConfig, operation, registry.allResourceFieldIdentifiers).map(rp => rp.url);
86
+ }, [resourceType, operation, registry]);
87
+ useEffect(() => {
88
+ if (!resourceType || !operation)
89
+ return;
90
+ logDebug('useRouterSync: effect fired', {
91
+ resourceType,
92
+ operationId: operation.operationIdentifier,
93
+ locationPathname: location.pathname,
94
+ lastSyncedPath: lastSyncedPath.current,
95
+ routePatternsCount: resourceRoutePatterns.length,
96
+ });
97
+ // Guard: A NavigationTransaction is active (e.g., home click, org switch, cascading).
98
+ // The Outlet briefly mounts this ResourcePageWrapper before React Router commits
99
+ // the route change (startTransition = low-priority). Skip sync to prevent
100
+ // re-populating the stack with stale content.
101
+ if (NavigationUtils.isInTransaction()) {
102
+ logDebug('useRouterSync: SKIP — navigation transaction active', { source: NavigationUtils.getTransactionSource() });
103
+ scheduleTransactionRetry();
104
+ return;
105
+ }
106
+ clearTransactionRetry();
107
+ // Guard: the router already left the URL this route committed with. The transaction above ends on
108
+ // `setTimeout(0)`, but a location transition can still be pending after it — so the committed URL here
109
+ // names the page the browser LEFT. Rebuilding from it re-pushes that page, and the always-mounted
110
+ // reconciler (reading the router) clears it again: the ping-pong measured on an organization switch.
111
+ // The effect re-runs when the committed location catches up. See `useRouterLocationAheadOfCommit`.
112
+ if (routerLocationAhead) {
113
+ logDebug('useRouterSync: SKIP — the router is ahead of the committed location', { committedUrl: currentBrowserUrl });
114
+ return;
115
+ }
116
+ // Skip if we've already synced this path
117
+ if (lastSyncedPath.current === currentBrowserUrl) {
118
+ logDebug('useRouterSync: SKIP — already synced this path', { currentBrowserUrl });
119
+ return;
120
+ }
121
+ // Guard: verify the current URL actually matches one of this resource's route patterns.
122
+ // When navigating to a non-resource route (e.g., Home '/'), the Outlet may briefly
123
+ // mount this ResourcePageWrapper before React Router unmounts it. Without this guard,
124
+ // useRouterSync would re-populate the PRIMARY stack with stale content, preventing
125
+ // the target route (Home) from ever rendering.
126
+ if (resourceRoutePatterns.length > 0) {
127
+ const isUrlRelevant = resourceRoutePatterns.some(pattern => NavigationUtils.matchUrlPattern(pattern, location.pathname));
128
+ if (!isUrlRelevant) {
129
+ logDebug('useRouterSync: SKIP — URL does not match any resource route pattern', {
130
+ pathname: location.pathname,
131
+ patterns: resourceRoutePatterns,
132
+ });
133
+ lastSyncedPath.current = currentBrowserUrl;
134
+ return;
135
+ }
136
+ }
137
+ // Get the target resource's primaryScope to filter global identifiers
138
+ // This prevents border effects from URL sync
139
+ const targetPrimaryScope = registry.resourceConfigurations?.[resourceType]?.resourcePrimaryScope;
140
+ // Build parentResourcesRequirements from route path parameters if available
141
+ const parentResourcesRequirements = routePathParameters
142
+ ? frontendResourceUtils.buildParentResourcesRequirementsFromRouteParams(routePathParameters, resourceType, registry)
143
+ : [];
144
+ // Reverse reconstruction must only trust the current top owner of the URL.
145
+ // A stale match buried elsewhere in a stack should not suppress rebuild.
146
+ const zones = resolvedNavigationLayout?.zones;
147
+ const hasSecondary = !!zones?.secondary;
148
+ const hasCompanion = !!zones?.companion;
149
+ const depth = NavigationUtils.calculateResourceRelationshipDepth(parentResourcesRequirements);
150
+ const prefersAdjacentZoneForDetail = depth === 0
151
+ && hasSecondary
152
+ && operation !== undefined
153
+ // The viewport goes in so a VIEWPORT-scoped override is reconstructed the way the click
154
+ // resolved it. `undefined` until the first measurement, which matches only the unconditional
155
+ // overrides — an unknown viewport is not a particular one.
156
+ && NavigationUtils.layoutSplitsOperationFromPrimary(resolvedNavigationLayout, operation, currentBreakpoint);
157
+ /*
158
+ * ─── The viewport decides here too, and until 2026-09-25 it did not ─────────────────────────
159
+ *
160
+ * `resolveResourceTargetZone` took no viewport, so a depth ≥ 1 resource went to SECONDARY at any
161
+ * width — and the content areas render PRIMARY and nothing else on a phone. A bookmarked or
162
+ * refreshed nested record therefore showed its PARENT (the ancestor the cascade puts in primary)
163
+ * with no error. The CLICK path was correct throughout, because the resolver applies collapse,
164
+ * which is exactly what made it invisible: the same content reached the right place when clicked
165
+ * and the wrong place when linked to.
166
+ *
167
+ * `adjacentZoneUsableAtViewport` is the resolver's own predicate, so the two paths cannot
168
+ * disagree. Note the viewport was ALREADY threaded into `prefersAdjacentZoneForDetail` just
169
+ * above — one invariant, two sites, one of them done.
170
+ */
171
+ const preferredZone = NavigationUtils.resolveResourceTargetZone(depth, {
172
+ hasSecondary,
173
+ hasCompanion,
174
+ prefersAdjacentZoneForDetail,
175
+ });
176
+ const targetZone = adjacentZoneUsableAtViewport({
177
+ zone: preferredZone,
178
+ layout: resolvedNavigationLayout,
179
+ viewport: currentBreakpoint,
180
+ contentAreaWidth,
181
+ })
182
+ ? preferredZone
183
+ : NavigationZoneName.PRIMARY;
184
+ if (targetZone !== preferredZone) {
185
+ logDebug('useRouterSync: adjacent zone is collapsed at this viewport — restoring into PRIMARY', {
186
+ preferredZone, viewport: currentBreakpoint, contentAreaWidth,
187
+ });
188
+ }
189
+ /*
190
+ * Ownership is asked per ZONE and by DESTINATION: the entry the target zone shows must address
191
+ * this URL, and a view-state query difference (`?dataMode=`) is not a different destination.
192
+ * The always-mounted reconciler refreshes the entry's `urlPath` for such a change; this hook's
193
+ * only job is to not rebuild what is already there.
194
+ */
195
+ const targetZoneOwnsUrl = NavigationUtils.zoneOwnsBrowserUrl(targetZone, currentBrowserUrl, getZoneState);
196
+ logDebug('useRouterSync: checking guards', {
197
+ currentBrowserUrl,
198
+ targetZone,
199
+ targetZoneOwnsUrl,
200
+ targetZoneTopUrlPath: NavigationUtils.getTopEntry(getZoneState(targetZone))?.urlPath,
201
+ });
202
+ if (targetZoneOwnsUrl) {
203
+ logDebug('useRouterSync: SKIP — target zone already owns current URL', { targetZone });
204
+ lastSyncedPath.current = currentBrowserUrl;
205
+ return;
206
+ }
207
+ /*
208
+ * ─── ANOTHER structural zone may already be showing this destination ────────────────────────
209
+ *
210
+ * The ownership question above is asked of the zone THIS HOOK computed, and that zone is
211
+ * derived from the URL alone — depth, plus whether the layout splits this operation out of
212
+ * primary. It cannot see where the content actually IS, so a record placed in a pane BY A CLICK
213
+ * and addressed by a bare URL is invisible to it: the hook computes PRIMARY, asks PRIMARY, is
214
+ * told no, and rebuilds the record there. Primary's top entry then changes, which makes the
215
+ * zone-dependency cleanup clear SECONDARY — so the pane the reader was using disappears and the
216
+ * record they opened in it is on the left instead.
217
+ *
218
+ * Measured on Wonder CRM (2026-09-24), and it is the defect reported as "click a linked
219
+ * resource inside the pane and it goes on the left, not on the right": a `contact` opened from
220
+ * inside a deal's pane lands in SECONDARY correctly (the pane's own `transitions.read` is
221
+ * `PUSH`, so `getStructuralSourceZone` keeps it there) and writes `/contact/:id` as the browser
222
+ * URL, because primary holds a deals LIST and is therefore URL-derivable — no hosted pane, no
223
+ * `?pane=`. That bare URL is what this hook then reconstructs from.
224
+ *
225
+ * `findStructuralRouteOwner` is the question worth asking instead — "which structural zone's
226
+ * VISIBLE entry does this URL address?" — and it already exists, scanning COMPANION → SECONDARY
227
+ * → PRIMARY by destination. If any zone owns the URL, the application is already showing what
228
+ * the URL names and there is nothing to reconstruct. A view-state-only difference
229
+ * (`searchDiffers`) is likewise not a rebuild: the always-mounted reconciler refreshes the
230
+ * entry's `urlPath` in place.
231
+ *
232
+ * This does NOT subsume the check above — that one is what lets the target zone REBUILD when it
233
+ * holds a different destination — it is the missing half: the other zones get a veto they never
234
+ * had.
235
+ */
236
+ const structuralOwner = NavigationUtils.findStructuralRouteOwner(currentBrowserUrl, getZoneState);
237
+ if (structuralOwner && structuralOwner.zone !== targetZone) {
238
+ logDebug('useRouterSync: SKIP — another structural zone already shows this destination', {
239
+ owningZone: structuralOwner.zone,
240
+ targetZone,
241
+ currentBrowserUrl,
242
+ });
243
+ lastSyncedPath.current = currentBrowserUrl;
244
+ return;
245
+ }
246
+ // Build resource context from URL params
247
+ // Pass routePathParameters for accurate FK field mapping (e.g., assignedToUserId → USERS)
248
+ const urlContextIdentifiers = frontendResourceUtils.extractResourceIdentifiersFromUrlParams(urlParameters, registry, routePathParameters);
249
+ const mergedContextIdentifiers = ScopeUtilsService.buildResourceOperationContextIdentifiers({
250
+ currentUserId: appScope?.currentUserId,
251
+ currentOrganizationId: appScope?.currentOrganizationId,
252
+ currentApplicationId: appScope?.currentApplicationId,
253
+ currentAnonymousUserId: appScope?.currentAnonymousUserId,
254
+ primaryScope: targetPrimaryScope,
255
+ liveAppScopeContextResourceIdentifiers: liveAppScopeContextIdentifiers,
256
+ explicitContextResourceIdentifiers: urlContextIdentifiers,
257
+ });
258
+ const resourceContext = frontendResourceUtils.createFrontendResourceOperationContextFromOperation({
259
+ resourceType,
260
+ operation,
261
+ contextResourceIdentifiers: mergedContextIdentifiers,
262
+ parentResourcesRequirements,
263
+ });
264
+ // Create navigation content
265
+ const content = {
266
+ contentType: NavigationContentType.RESOURCE_OPERATION,
267
+ resourceContext,
268
+ };
269
+ // Generate stack entry ID
270
+ const stackEntryId = NavigationUtils.generateStackEntryId();
271
+ // ─── Reverse Cascade: place content in the correct zone ──────────
272
+ // On page refresh / deep link, the URL-synced resource should land in the
273
+ // zone matching its relationship depth, not always PRIMARY.
274
+ // depth 0 → PRIMARY, depth 1 → SECONDARY, depth 2+ → COMPANION.
275
+ // Ancestor zones are then populated via cascadeAncestorZones.
276
+ //
277
+ logDebug('useRouterSync: EMITTING NAVIGATION_REPLACE (URL_SYNC)', {
278
+ resourceType,
279
+ operationId: operation.operationIdentifier,
280
+ currentBrowserUrl,
281
+ mergedContextIdentifiers,
282
+ depth,
283
+ targetZone,
284
+ });
285
+ // For deep resources (depth >= 1), wrap in a transaction so cascading
286
+ // events don't cause useRouterSync to re-fire mid-reconstruction.
287
+ if (depth >= 1) {
288
+ NavigationUtils.beginTransaction('url_reverse_cascade');
289
+ }
290
+ /*
291
+ * ─── Restoring a pane's record at a width where the pane is collapsed ──────────────────────
292
+ *
293
+ * It lands in PRIMARY — but it must land the way a CLICK at that width lands: the list beneath
294
+ * it, and stamped with the pane it belongs to. It used to REPLACE into primary with neither, so
295
+ * Back had nothing to return to and, with no `collapsedFromZone`, widening the window could
296
+ * never send the record to its pane: it stayed full-width beside an empty one. The stamp is what
297
+ * `zone-collapse-migration.ts` reads to take it home; the cascade runs FIRST so the record is
298
+ * pushed on top of the list rather than replacing it.
299
+ */
300
+ const collapsedIntoPrimary = targetZone !== preferredZone;
301
+ if (collapsedIntoPrimary && prefersAdjacentZoneForDetail && preferredZone === NavigationZoneName.SECONDARY) {
302
+ cascadeSiblingListIntoPrimary({
303
+ resourceType: resourceType,
304
+ contextResourceIdentifiers: mergedContextIdentifiers,
305
+ parentResourcesRequirements, registry, emit, getZoneState,
306
+ });
307
+ }
308
+ emit(collapsedIntoPrimary ? FrontendEvents.NAVIGATION_PUSH : FrontendEvents.NAVIGATION_REPLACE, {
309
+ zone: targetZone,
310
+ content,
311
+ urlPath: currentBrowserUrl,
312
+ stackEntryId,
313
+ initiator: { sourceZone: targetZone },
314
+ navigationSource: NavigationSource.URL_SYNC,
315
+ transition: NavigationTransition.REPLACE,
316
+ ...(collapsedIntoPrimary ? { collapsedFromZone: preferredZone } : {}),
317
+ });
318
+ if (prefersAdjacentZoneForDetail && targetZone === NavigationZoneName.SECONDARY) {
319
+ cascadeSiblingListIntoPrimary({
320
+ resourceType: resourceType,
321
+ contextResourceIdentifiers: mergedContextIdentifiers,
322
+ parentResourcesRequirements, registry, emit, getZoneState,
323
+ });
324
+ }
325
+ // Populate ancestor panes for depth 1+ resources
326
+ if (depth >= 1) {
327
+ // Normalize context identifiers to plain strings for cascading
328
+ const normalizedForCascade = normalizeContextResourceIdentifiersForTransport(mergedContextIdentifiers);
329
+ cascadeAncestorZones(content, targetZone, registry, normalizedForCascade, emit, null, // No URL update needed — browser already has the correct URL
330
+ getZoneState, { overwriteExisting: true });
331
+ // Transaction auto-commits via setTimeout(0)
332
+ }
333
+ lastSyncedPath.current = currentBrowserUrl;
334
+ }, [
335
+ location.pathname,
336
+ location.search,
337
+ routerLocationAhead,
338
+ urlParameters,
339
+ resourceType,
340
+ operation,
341
+ registry,
342
+ emit,
343
+ getZoneState,
344
+ appScope?.currentUserId,
345
+ appScope?.currentOrganizationId,
346
+ appScope?.currentApplicationId,
347
+ appScope?.currentAnonymousUserId,
348
+ liveAppScopeContextIdentifiersKey,
349
+ routePathParameters,
350
+ resourceRoutePatterns,
351
+ resolvedNavigationLayout,
352
+ currentBreakpoint,
353
+ currentBrowserUrl,
354
+ retryTick,
355
+ scheduleTransactionRetry,
356
+ clearTransactionRetry,
357
+ ]);
358
+ }
359
+ // ================================
360
+ // View Router Sync Hook
361
+ // ================================
362
+ /**
363
+ * Hook to sync view routes (composite, chart, custom, flows-actors) with navigation state.
364
+ *
365
+ * Unlike useRouterSync (which handles resource operations), this handles non-resource
366
+ * content types that only need a viewRef and contentType. Views are always depth 0
367
+ * (placed in PRIMARY zone), have no parent chain, and no cascading.
368
+ *
369
+ * On refresh / deep link, this hook populates the PRIMARY zone's navigation stack
370
+ * with the correct view content so that:
371
+ * - ZoneContentRenderer renders the view
372
+ * - Sidebar active state reflects the current view
373
+ * - goBack() works correctly
374
+ *
375
+ * @param viewRef - The view reference from the URL
376
+ * @param contentType - The navigation content type (COMPOSITE_VIEW, CHART_VIEW, etc.)
377
+ */
378
+ export function useViewRouterSync(viewRef, contentType) {
379
+ const location = useLocation();
380
+ const routerLocationAhead = useRouterLocationAheadOfCommit(location);
381
+ const { emit } = useEventBus();
382
+ const { getZoneState } = useNavigationState();
383
+ const { registry } = useResourceRegistry();
384
+ const { fullCustomViews, flowsActorsViews } = useUI();
385
+ const lastSyncedPath = useRef(null);
386
+ const currentUrl = NavigationUtils.buildBrowserUrl(location.pathname, location.search);
387
+ const { retryTick, scheduleRetry: scheduleTransactionRetry, clearRetry: clearTransactionRetry, } = useTransactionAwareSyncRetry(currentUrl);
388
+ useEffect(() => {
389
+ if (!viewRef)
390
+ return;
391
+ // Guard: transaction active
392
+ if (NavigationUtils.isInTransaction()) {
393
+ scheduleTransactionRetry();
394
+ return;
395
+ }
396
+ clearTransactionRetry();
397
+ // Guard: the router already left the URL this route committed with (a pending location transition).
398
+ // Rebuilding from it would restore the page the browser left. See `useRouterLocationAheadOfCommit`.
399
+ if (routerLocationAhead)
400
+ return;
401
+ // Skip if already synced
402
+ if (lastSyncedPath.current === currentUrl)
403
+ return;
404
+ // Asked about PRIMARY's half of the URL: under a composed URL the HOST is this view and the
405
+ // `pane` parameter belongs to the secondary zone's own reconciler. A view-state change
406
+ // (`?section=`) on the same view is owned too — the reconciler refreshes the stamp in place.
407
+ if (NavigationUtils.zoneOwnsBrowserUrl(NavigationZoneName.PRIMARY, currentUrl, getZoneState)) {
408
+ lastSyncedPath.current = currentUrl;
409
+ return;
410
+ }
411
+ // Deep-link sync should rebuild the same typed view payload, but ambient
412
+ // primary scope is derived live from AppScope by the view itself.
413
+ let content;
414
+ const compositeRouteContextResourceIdentifiers = contentType === NavigationContentType.COMPOSITE_VIEW
415
+ ? extractCompositeRouteContextResourceIdentifiers(new URLSearchParams(location.search))
416
+ : undefined;
417
+ const chartRouteContextResourceIdentifiers = contentType === NavigationContentType.CHART_VIEW
418
+ ? extractChartRouteContextResourceIdentifiers(new URLSearchParams(location.search))
419
+ : undefined;
420
+ const chartRouteUrlParamValues = contentType === NavigationContentType.CHART_VIEW
421
+ ? extractChartRouteUrlParamValues(new URLSearchParams(location.search))
422
+ : undefined;
423
+ const executionRouteContextResourceIdentifiers = contentType === NavigationContentType.EXECUTION_VIEW
424
+ ? extractExecutionRouteContextResourceIdentifiers(new URLSearchParams(location.search))
425
+ : undefined;
426
+ const fullCustomView = contentType === NavigationContentType.FULL_CUSTOM_VIEW
427
+ ? fullCustomViews?.find(view => view.ref === viewRef)
428
+ : undefined;
429
+ const flowsActorsView = contentType === NavigationContentType.FLOWS_ACTORS_VIEW
430
+ ? flowsActorsViews?.find(view => view.ref === viewRef)
431
+ : undefined;
432
+ const executionView = contentType === NavigationContentType.EXECUTION_VIEW
433
+ ? resolveExecutionViewDefinition({
434
+ viewRef,
435
+ registry,
436
+ })
437
+ : undefined;
438
+ switch (contentType) {
439
+ case NavigationContentType.COMPOSITE_VIEW:
440
+ content = {
441
+ contentType: NavigationContentType.COMPOSITE_VIEW,
442
+ viewRef,
443
+ contextResourceIdentifiers: compositeRouteContextResourceIdentifiers,
444
+ };
445
+ break;
446
+ case NavigationContentType.CHART_VIEW:
447
+ content = {
448
+ contentType: NavigationContentType.CHART_VIEW,
449
+ viewRef,
450
+ contextResourceIdentifiers: chartRouteContextResourceIdentifiers,
451
+ urlParamValues: chartRouteUrlParamValues,
452
+ };
453
+ break;
454
+ case NavigationContentType.FULL_CUSTOM_VIEW:
455
+ if (!fullCustomView) {
456
+ return;
457
+ }
458
+ content = {
459
+ contentType: NavigationContentType.FULL_CUSTOM_VIEW,
460
+ viewRef,
461
+ fullCustomComponentRef: fullCustomView.componentRef,
462
+ };
463
+ break;
464
+ case NavigationContentType.FLOWS_ACTORS_VIEW:
465
+ if (!flowsActorsView) {
466
+ return;
467
+ }
468
+ content = {
469
+ contentType: NavigationContentType.FLOWS_ACTORS_VIEW,
470
+ viewRef,
471
+ flowsActorsSystemRef: flowsActorsView.systemRef,
472
+ };
473
+ break;
474
+ case NavigationContentType.EXECUTION_VIEW:
475
+ if (!executionView
476
+ || executionView.isAddressable !== true) {
477
+ return;
478
+ }
479
+ content = {
480
+ contentType: NavigationContentType.EXECUTION_VIEW,
481
+ viewRef,
482
+ contextResourceIdentifiers: executionRouteContextResourceIdentifiers,
483
+ };
484
+ break;
485
+ default:
486
+ return;
487
+ }
488
+ const stackEntryId = NavigationUtils.generateStackEntryId();
489
+ logDebug('useViewRouterSync: EMITTING NAVIGATION_REPLACE (URL_SYNC)', {
490
+ viewRef,
491
+ contentType,
492
+ locationPathname: location.pathname,
493
+ locationSearch: location.search,
494
+ });
495
+ emit(FrontendEvents.NAVIGATION_REPLACE, {
496
+ zone: NavigationZoneName.PRIMARY,
497
+ content,
498
+ // The view's OWN address: under a composed URL the `pane` half belongs to the secondary
499
+ // entry, and stamping it here would make the host look like a different destination the
500
+ // moment the pane changed.
501
+ urlPath: NavigationUtils.decomposeHostedPaneBrowserUrl(currentUrl).hostUrl,
502
+ stackEntryId,
503
+ initiator: { sourceZone: NavigationZoneName.PRIMARY },
504
+ navigationSource: NavigationSource.URL_SYNC,
505
+ transition: NavigationTransition.REPLACE,
506
+ });
507
+ lastSyncedPath.current = currentUrl;
508
+ }, [viewRef, contentType, emit, getZoneState, fullCustomViews, flowsActorsViews, registry, currentUrl, routerLocationAhead, retryTick, scheduleTransactionRetry, clearTransactionRetry]);
509
+ }
510
+ /**
511
+ * Router sync for typed engine pages.
512
+ *
513
+ * Engine pages are app-level routes that should still populate the PRIMARY stack
514
+ * so launcher active-state and back-navigation remain coherent after refresh or
515
+ * direct URL entry.
516
+ */
517
+ export function useEnginePageRouterSync(pageRef) {
518
+ const location = useLocation();
519
+ const routerLocationAhead = useRouterLocationAheadOfCommit(location);
520
+ const { emit } = useEventBus();
521
+ const { getZoneState } = useNavigationState();
522
+ const lastSyncedPath = useRef(null);
523
+ const currentUrl = NavigationUtils.buildBrowserUrl(location.pathname, location.search);
524
+ const { retryTick, scheduleRetry: scheduleTransactionRetry, clearRetry: clearTransactionRetry, } = useTransactionAwareSyncRetry(currentUrl);
525
+ useEffect(() => {
526
+ if (!pageRef)
527
+ return;
528
+ if (NavigationUtils.isInTransaction()) {
529
+ scheduleTransactionRetry();
530
+ return;
531
+ }
532
+ clearTransactionRetry();
533
+ // Guard: the router already left the URL this route committed with (a pending location transition).
534
+ // Rebuilding from it would restore the page the browser left. See `useRouterLocationAheadOfCommit`.
535
+ if (routerLocationAhead)
536
+ return;
537
+ if (lastSyncedPath.current === currentUrl)
538
+ return;
539
+ // Same per-zone, destination-based ownership as the view sync above.
540
+ if (NavigationUtils.zoneOwnsBrowserUrl(NavigationZoneName.PRIMARY, currentUrl, getZoneState)) {
541
+ lastSyncedPath.current = currentUrl;
542
+ return;
543
+ }
544
+ const stackEntryId = NavigationUtils.generateStackEntryId();
545
+ emit(FrontendEvents.NAVIGATION_REPLACE, {
546
+ zone: NavigationZoneName.PRIMARY,
547
+ content: {
548
+ contentType: NavigationContentType.ENGINE_PAGE,
549
+ pageRef,
550
+ },
551
+ urlPath: NavigationUtils.decomposeHostedPaneBrowserUrl(currentUrl).hostUrl,
552
+ stackEntryId,
553
+ initiator: { sourceZone: NavigationZoneName.PRIMARY },
554
+ navigationSource: NavigationSource.URL_SYNC,
555
+ transition: NavigationTransition.REPLACE,
556
+ });
557
+ lastSyncedPath.current = currentUrl;
558
+ }, [pageRef, emit, getZoneState, currentUrl, routerLocationAhead, retryTick, scheduleTransactionRetry, clearTransactionRetry]);
559
+ }
560
+ /**
561
+ * Persistent, always-mounted reconciler that maps browser **back/forward**
562
+ * (history popstate) onto the STRUCTURAL zone stacks (PRIMARY / SECONDARY /
563
+ * COMPANION).
564
+ *
565
+ * ── Why this exists (the gap it closes) ────────────────────────────────────
566
+ * Structural-zone content is rendered from the navigation **stack state**, not
567
+ * from the router `<Outlet/>`: `ZoneContentRenderer` renders `routerChildren`
568
+ * (the Outlet, which hosts `useRouterSync` / `useViewRouterSync` /
569
+ * `useEnginePageRouterSync`) ONLY when a zone's stack is empty. In-session the
570
+ * PRIMARY stack is never empty, so the Outlet — and with it the per-route
571
+ * URL→state sync hooks — is unmounted. Controller-driven navigation (sidebar,
572
+ * links, Home) mutates the stack directly via events, so it is unaffected. But
573
+ * a browser back/forward only changes `location`; with no mounted sync hook
574
+ * observing it, the stack was never reconciled — the URL (and the
575
+ * `useLocation`-derived sidebar highlight) moved while the rendered content
576
+ * stayed on the previous entry. This is the structural-zone analogue of what
577
+ * {@link useSettingsHubOverlaySync} already does for the overlay, and it is
578
+ * mounted the same way: exactly once, at the navigation-runtime level.
579
+ *
580
+ * ── Contract ───────────────────────────────────────────────────────────────
581
+ * On every `location` change — read from the data router synchronously, so a URL the
582
+ * transition-committed location context coalesced away is still observed — (deferred while
583
+ * a navigation transaction is mid-flight, so controller-driven URL updates are not double-handled):
584
+ * 1. Settings-hub URLs (`/settings*`) are owned by {@link useSettingsHubOverlaySync}
585
+ * (overlay layer) — skip them entirely so we never clobber the structural
586
+ * content sitting beneath the hub.
587
+ * 2. If the URL addresses the DESTINATION already at the visible top of a
588
+ * structural zone → no rebuild. When it differs only in VIEW STATE
589
+ * (`?section=`), the entry's `urlPath` is refreshed in place through
590
+ * `NAVIGATION_URL_PATH_UPDATED` — same id, same content. Under a composed
591
+ * URL (`?pane=`, see `useHostedPaneRouteSync`) the host's stamp on PRIMARY
592
+ * and the pane's on SECONDARY are both refreshed.
593
+ * 3. If the URL matches an entry still sitting LOWER in a zone's backstack →
594
+ * restore it with a pure `NAVIGATION_POP` to that entry. This is the common
595
+ * back-button case; popping preserves the revealed entry's live state
596
+ * (scroll, expanded rows) instead of rebuilding it. A composed URL is
597
+ * matched against the SECONDARY backstack while PRIMARY addresses the host.
598
+ * 4. Otherwise the URL is not in any structural stack (forward to a
599
+ * previously-popped entry, or a manual URL edit without reload) → clear the
600
+ * structural zones inside a transaction so the Outlet fallback remounts and
601
+ * the existing route-mounted sync hooks reconstruct from the URL. This
602
+ * reuses the single URL→state derivation rather than duplicating it here,
603
+ * matching the documented URL-first reconstruction model.
604
+ *
605
+ * We never call `routerNavigate` here — the browser already owns the URL; this
606
+ * hook only brings zone state up to match it, so there is no URL-write loop.
607
+ */
608
+ export function useStructuralZoneBackForwardSync() {
609
+ // The router's own location, not the transition-committed one: a coalesced intermediate URL is what
610
+ // left `lastSyncedPath` behind and turned browser back into a no-op. See `useSynchronousBrowserLocation`.
611
+ const location = useSynchronousBrowserLocation();
612
+ const { emit } = useEventBus();
613
+ const { getZoneState } = useNavigationState();
614
+ const lastSyncedPath = useRef(null);
615
+ const currentUrl = NavigationUtils.buildBrowserUrl(location.pathname, location.search);
616
+ const { retryTick, scheduleRetry, clearRetry } = useTransactionAwareSyncRetry(currentUrl);
617
+ useEffect(() => {
618
+ // Defer while a controller-driven navigation transaction is committing; the
619
+ // retry tick re-runs this reconciler once the emitted entry owns the URL, so
620
+ // step 2 below no-ops instead of us fighting the controller.
621
+ if (NavigationUtils.isInTransaction()) {
622
+ scheduleRetry();
623
+ return;
624
+ }
625
+ clearRetry();
626
+ if (lastSyncedPath.current === currentUrl)
627
+ return;
628
+ // (1) Settings-hub URLs belong to the overlay reconciler — leave the
629
+ // structural stack beneath the hub untouched.
630
+ if (matchSettingsHubPath(location.pathname).isSettings) {
631
+ lastSyncedPath.current = currentUrl;
632
+ return;
633
+ }
634
+ const owner = NavigationUtils.findStructuralStackEntryOwningUrl(currentUrl, getZoneState);
635
+ // (2) Already the visible top of its zone — nothing to REBUILD. When the URL moved only in
636
+ // VIEW STATE (`?section=` on a board, `?dataMode=` on a list) the entry's stamp is refreshed in
637
+ // place, id and content untouched, so the next comparison sees the URL it will actually get.
638
+ // Under a composed URL both halves are refreshed: the host's stamp on PRIMARY, the pane's on
639
+ // SECONDARY. This is the branch that used to fall through to (4) and tear every zone down for
640
+ // a tab click.
641
+ if (owner?.isTop) {
642
+ if (owner.searchDiffers) {
643
+ const { hostUrl, paneUrl } = NavigationUtils.decomposeHostedPaneBrowserUrl(currentUrl);
644
+ const refreshes = paneUrl !== undefined
645
+ ? [
646
+ { zone: NavigationZoneName.PRIMARY, entry: NavigationUtils.getTopEntry(getZoneState(NavigationZoneName.PRIMARY)), urlPath: hostUrl },
647
+ { zone: NavigationZoneName.SECONDARY, entry: owner.entry, urlPath: paneUrl },
648
+ ]
649
+ : [{ zone: owner.zone, entry: owner.entry, urlPath: currentUrl }];
650
+ for (const refresh of refreshes) {
651
+ if (refresh.entry && refresh.entry.urlPath !== refresh.urlPath) {
652
+ logDebug('useStructuralZoneBackForwardSync: refreshing entry urlPath for a view-state change', {
653
+ zone: refresh.zone,
654
+ stackEntryId: refresh.entry.id,
655
+ from: refresh.entry.urlPath,
656
+ to: refresh.urlPath,
657
+ });
658
+ emit(FrontendEvents.NAVIGATION_URL_PATH_UPDATED, {
659
+ zone: refresh.zone,
660
+ stackEntryId: refresh.entry.id,
661
+ urlPath: refresh.urlPath,
662
+ });
663
+ }
664
+ }
665
+ }
666
+ lastSyncedPath.current = currentUrl;
667
+ return;
668
+ }
669
+ // (3) Previously-visited entry still in the backstack — restore via POP.
670
+ if (owner) {
671
+ logDebug('useStructuralZoneBackForwardSync: POP to backstack entry', {
672
+ zone: owner.zone,
673
+ toStackEntryId: owner.entry.id,
674
+ currentUrl,
675
+ });
676
+ emit(FrontendEvents.NAVIGATION_POP, {
677
+ zone: owner.zone,
678
+ toStackEntryId: owner.entry.id,
679
+ });
680
+ lastSyncedPath.current = currentUrl;
681
+ return;
682
+ }
683
+ // (4) URL is not anywhere in the structural stacks. If a stack is currently
684
+ // non-empty the Outlet (and its sync hooks) is unmounted, so clear the
685
+ // structural zones inside a transaction and let the Outlet fallback rebuild
686
+ // from the URL. When every structural stack is already empty (cold load /
687
+ // deep-link) the Outlet is mounted and owns reconstruction — do nothing.
688
+ const anyStructuralContent = NAVIGATION_STRUCTURAL_ZONES.some((zone) => getZoneState(zone).stack.length > 0);
689
+ if (anyStructuralContent) {
690
+ logDebug('useStructuralZoneBackForwardSync: clearing structural zones for URL rebuild', { currentUrl });
691
+ NavigationUtils.beginTransaction('backforward_url_rebuild');
692
+ for (const zone of NAVIGATION_STRUCTURAL_ZONES) {
693
+ emit(FrontendEvents.NAVIGATION_CLEAR_ZONE, { zone });
694
+ }
695
+ // Transaction auto-commits (setTimeout(0)); the route-mounted sync hooks skip while it is
696
+ // active, and also while the router is ahead of their committed location
697
+ // (`useRouterLocationAheadOfCommit`). They rebuild when both have cleared: the transaction
698
+ // epoch or the committed location changing re-runs their effects.
699
+ }
700
+ lastSyncedPath.current = currentUrl;
701
+ }, [currentUrl, location.pathname, emit, getZoneState, retryTick, scheduleRetry, clearRetry]);
702
+ }
703
+ /**
704
+ * Persistent, always-mounted reconciler that keeps a HOSTED PANE in step with the URL.
705
+ *
706
+ * A hosted pane is a SECONDARY resource destination opened beside a primary whose own address no
707
+ * resource URL implies — a composite view, a canvas, a chart, an engine page. The browser URL is
708
+ * the host's, carrying the pane as `?pane=` (see `HOSTED_PANE_QUERY_PARAM`), so the pane is never
709
+ * the router's route and no route element ever mounts a sync hook for it. This hook is that sync,
710
+ * mounted once at the navigation-runtime level like the two reconcilers beside it.
711
+ *
712
+ * Contract, on every `location` change (deferred while a transaction is committing; settings-hub
713
+ * URLs are left to the overlay reconciler, the structural zones beneath the hub untouched):
714
+ * 1. No `pane` in the URL and the secondary shows a hosted pane → the pane left the URL (browser
715
+ * back, the host's `goBack`) → clear SECONDARY.
716
+ * 2. The pane addresses what the secondary already shows → nothing to do (a view-state change
717
+ * was refreshed by the back/forward reconciler).
718
+ * 3. The pane addresses an entry lower in the secondary backstack → POP to it.
719
+ * 4. Otherwise resolve the pane's URL against the same route table `AppRouter` registers, build
720
+ * its resource context exactly as `useRouterSync` would from the router's params, and place
721
+ * it in SECONDARY as a SPLIT flagged `hostedPane`. Placed regardless of whether PRIMARY has
722
+ * landed yet: the dependency cleanup keeps a hosted pane beside a non-resource primary, so
723
+ * the two halves of a deep link may arrive in either order.
724
+ *
725
+ * Placed into SECONDARY even when SECONDARY is collapsed at this width. This hook read the layout
726
+ * and the breakpoint and used them only as effect dependencies, which looked like collapse handling
727
+ * and was none: a narrow reload put the pane where nothing draws it. Collapse is now enforced for
728
+ * EVERY path by `useResponsiveZoneMigration` ("a collapsed zone holds nothing"), which moves the
729
+ * pane into PRIMARY the same way a click at that width would be placed — so this hook no longer
730
+ * needs to know the width, and does not pretend to. What it must know is case 2's extension: a pane
731
+ * held in PRIMARY on the collapsed secondary's behalf is still the pane, or every later URL change
732
+ * would place it again and the migration would stack a duplicate.
733
+ *
734
+ * Never writes the URL — the browser owns it; this only brings the zone up to match.
735
+ */
736
+ export function useHostedPaneRouteSync() {
737
+ const location = useSynchronousBrowserLocation();
738
+ const { emit } = useEventBus();
739
+ const { getZoneState } = useNavigationState();
740
+ const { registry } = useResourceRegistry();
741
+ const appScope = useAppScopeSafe();
742
+ const lastSyncedPath = useRef(null);
743
+ const currentUrl = NavigationUtils.buildBrowserUrl(location.pathname, location.search);
744
+ const { retryTick, scheduleRetry, clearRetry } = useTransactionAwareSyncRetry(currentUrl);
745
+ const liveAppScopeContextIdentifiers = useMemo(() => appScope?.buildContextResourceIdentifiers?.() ?? {}, [appScope]);
746
+ useEffect(() => {
747
+ if (NavigationUtils.isInTransaction()) {
748
+ scheduleRetry();
749
+ return;
750
+ }
751
+ clearRetry();
752
+ if (lastSyncedPath.current === currentUrl)
753
+ return;
754
+ // Settings-hub URLs belong to the overlay reconciler; the structural zones beneath the hub —
755
+ // a hosted pane included — are left exactly as they are, the same exemption the back/forward
756
+ // reconciler makes. Without it, opening Settings read as "the pane left the URL".
757
+ if (matchSettingsHubPath(location.pathname).isSettings) {
758
+ lastSyncedPath.current = currentUrl;
759
+ return;
760
+ }
761
+ const { paneUrl } = NavigationUtils.decomposeHostedPaneBrowserUrl(currentUrl);
762
+ const secondaryState = getZoneState(NavigationZoneName.SECONDARY);
763
+ const secondaryTop = NavigationUtils.getTopEntry(secondaryState);
764
+ // (1) The pane left the URL.
765
+ if (paneUrl === undefined) {
766
+ if (secondaryTop?.hostedPane) {
767
+ logDebug('useHostedPaneRouteSync: pane left the URL — clearing SECONDARY', { currentUrl });
768
+ emit(FrontendEvents.NAVIGATION_CLEAR_ZONE, { zone: NavigationZoneName.SECONDARY });
769
+ }
770
+ lastSyncedPath.current = currentUrl;
771
+ return;
772
+ }
773
+ // (2) Already showing it.
774
+ if (secondaryTop?.hostedPane && NavigationUtils.urlsAddressSameDestination(secondaryTop.urlPath, paneUrl)) {
775
+ lastSyncedPath.current = currentUrl;
776
+ return;
777
+ }
778
+ const heldForCollapsedSecondary = NavigationUtils.getTopEntry(getZoneState(NavigationZoneName.PRIMARY));
779
+ if (NavigationUtils.isHeldHostedPane(heldForCollapsedSecondary)
780
+ && NavigationUtils.urlsAddressSameDestination(heldForCollapsedSecondary?.urlPath, paneUrl)) {
781
+ lastSyncedPath.current = currentUrl;
782
+ return;
783
+ }
784
+ // (3) Lower in the backstack — a browser back between two panes under one host.
785
+ const buried = [...secondaryState.stack].reverse().find((entry) => entry.hostedPane && NavigationUtils.urlsAddressSameDestination(entry.urlPath, paneUrl));
786
+ if (buried) {
787
+ logDebug('useHostedPaneRouteSync: POP to a buried pane', { toStackEntryId: buried.id, paneUrl });
788
+ emit(FrontendEvents.NAVIGATION_POP, { zone: NavigationZoneName.SECONDARY, toStackEntryId: buried.id });
789
+ lastSyncedPath.current = currentUrl;
790
+ return;
791
+ }
792
+ // (4) Rebuild the pane from its own address.
793
+ const route = NavigationUtils.resolveResourceRouteForUrl(paneUrl, registry);
794
+ if (!route) {
795
+ logDebug('useHostedPaneRouteSync: pane URL matches no addressable resource route — ignored', { paneUrl });
796
+ lastSyncedPath.current = currentUrl;
797
+ return;
798
+ }
799
+ const parentResourcesRequirements = frontendResourceUtils.buildParentResourcesRequirementsFromRouteParams(route.routePathParameters, route.resourceType, registry);
800
+ const urlContextIdentifiers = frontendResourceUtils.extractResourceIdentifiersFromUrlParams(route.urlParameters, registry, route.routePathParameters);
801
+ const targetPrimaryScope = registry.resourceConfigurations?.[route.resourceType]?.resourcePrimaryScope;
802
+ const contextResourceIdentifiers = ScopeUtilsService.buildResourceOperationContextIdentifiers({
803
+ currentUserId: appScope?.currentUserId,
804
+ currentOrganizationId: appScope?.currentOrganizationId,
805
+ currentApplicationId: appScope?.currentApplicationId,
806
+ currentAnonymousUserId: appScope?.currentAnonymousUserId,
807
+ primaryScope: targetPrimaryScope,
808
+ liveAppScopeContextResourceIdentifiers: liveAppScopeContextIdentifiers,
809
+ explicitContextResourceIdentifiers: urlContextIdentifiers,
810
+ });
811
+ const resourceContext = frontendResourceUtils.createFrontendResourceOperationContextFromOperation({
812
+ resourceType: route.resourceType,
813
+ operation: route.operation,
814
+ contextResourceIdentifiers,
815
+ parentResourcesRequirements,
816
+ });
817
+ logDebug('useHostedPaneRouteSync: EMITTING NAVIGATION_REPLACE (URL_SYNC) for the hosted pane', {
818
+ paneUrl,
819
+ resourceType: route.resourceType,
820
+ operationId: route.operation.operationIdentifier,
821
+ });
822
+ emit(FrontendEvents.NAVIGATION_REPLACE, {
823
+ zone: NavigationZoneName.SECONDARY,
824
+ content: { contentType: NavigationContentType.RESOURCE_OPERATION, resourceContext },
825
+ urlPath: paneUrl,
826
+ stackEntryId: NavigationUtils.generateStackEntryId(),
827
+ initiator: { sourceZone: NavigationZoneName.PRIMARY },
828
+ navigationSource: NavigationSource.URL_SYNC,
829
+ transition: NavigationTransition.SPLIT,
830
+ hostedPane: true,
831
+ });
832
+ lastSyncedPath.current = currentUrl;
833
+ }, [
834
+ currentUrl,
835
+ location.pathname,
836
+ emit,
837
+ getZoneState,
838
+ registry,
839
+ appScope?.currentUserId,
840
+ appScope?.currentOrganizationId,
841
+ appScope?.currentApplicationId,
842
+ appScope?.currentAnonymousUserId,
843
+ liveAppScopeContextIdentifiers,
844
+ retryTick,
845
+ scheduleRetry,
846
+ clearRetry,
847
+ ]);
848
+ }
849
+ /**
850
+ * Matches the unified Settings Hub URL family.
851
+ * `/settings` → `{ isSettings: true }`; `/settings/:sectionRef` →
852
+ * `{ isSettings: true, sectionRef }`; `/settings/:sectionRef/:subTabRef` →
853
+ * `{ isSettings: true, sectionRef, subTabRef }`.
854
+ *
855
+ * The remainder is SPLIT rather than taken whole, which it was until 2026-09-17. That mattered
856
+ * before sub-tabs were addressable: `/settings/a/b` produced the section ref `"a/b"`, which
857
+ * matches no destination, so the hub silently fell back to its default section — a deep link with
858
+ * one segment too many opened Profile and said nothing. Splitting makes the second segment mean
859
+ * what it looks like it means, and anything beyond the second is still ignored.
860
+ */
861
+ function matchSettingsHubPath(pathname) {
862
+ if (pathname === CommonRoutePaths.settings)
863
+ return { isSettings: true };
864
+ const prefix = `${CommonRoutePaths.settings}/`;
865
+ if (pathname.startsWith(prefix)) {
866
+ const [sectionRef, subTabRef] = pathname.slice(prefix.length).split('/');
867
+ return {
868
+ isSettings: true,
869
+ sectionRef: sectionRef && sectionRef.length > 0 ? sectionRef : undefined,
870
+ subTabRef: subTabRef && subTabRef.length > 0 ? subTabRef : undefined,
871
+ };
872
+ }
873
+ return { isSettings: false };
874
+ }
875
+ /**
876
+ * Persistent, idempotent reconciler that keeps the Settings Hub overlay in sync
877
+ * with the URL. The hub is overlay-rendered but URL-addressable, and the URL is
878
+ * its single source of truth.
879
+ *
880
+ * Mounted ONCE at the navigation-runtime level (NOT per-route, NOT in the
881
+ * `/settings` route element). This is deliberate: a route-mounted sync that
882
+ * pushed on mount and tore down on unmount would, under React StrictMode, have
883
+ * its unmount-teardown double-invoked and close the just-pushed overlay during
884
+ * in-session navigation — the exact "refresh works, in-session click does not"
885
+ * failure mode. A persistent reconciler reads the current URL + overlay state
886
+ * and converges to the correct state on every run, so StrictMode double-invokes
887
+ * and the `state.overlay` dependency re-running are both harmless no-ops.
888
+ *
889
+ * Contract:
890
+ * - On `/settings` / `/settings/:sectionRef`: ensure the overlay top is a
891
+ * `SETTINGS_HUB` at that section (push when absent, replace on section change,
892
+ * no-op when already correct).
893
+ * - Off the settings URL: close the hub if it is the top overlay — covers
894
+ * dismiss-driven navigation, browser back/forward, and app-level navigation
895
+ * away from settings, all through one URL-driven path.
896
+ *
897
+ * The PRIMARY surface beneath the hub is the route element's render (home as the
898
+ * `routerChildren` fallback on a cold deep-link) or the persisted PRIMARY stack
899
+ * (in-session) — see `NavigationContentAreas`'
900
+ * `ZoneContentRenderer fallback={routerChildren}`.
901
+ */
902
+ export function useSettingsHubOverlaySync() {
903
+ const location = useSynchronousBrowserLocation();
904
+ const { emit } = useEventBus();
905
+ const { state } = useNavigationState();
906
+ const { retryTick, scheduleRetry, clearRetry } = useTransactionAwareSyncRetry(location.pathname);
907
+ // Dedupes the asynchronous overlay reconciliation emit. The reconciler reacts
908
+ // to `state.overlay`, but PUSH/REPLACE/CLOSE land asynchronously (event →
909
+ // setState), so the effect can re-run — including React StrictMode's
910
+ // intentional setup/cleanup/setup double-invoke — and observe the SAME
911
+ // pre-emit overlay before the previous emit has applied, stacking a duplicate
912
+ // hub. Keying the emit on (action, path, section, observed stack length) makes
913
+ // a repeat emit against an unchanged observation a no-op; it is cleared the
914
+ // instant the overlay reaches the desired (converged / closed) state, so a
915
+ // genuinely new transition still emits.
916
+ const lastEmitRef = useRef(null);
917
+ useEffect(() => {
918
+ // Defer while a navigation transaction is mid-flight; the retry tick re-runs
919
+ // this reconciler once it commits.
920
+ if (NavigationUtils.isInTransaction()) {
921
+ scheduleRetry();
922
+ return;
923
+ }
924
+ clearRetry();
925
+ const { isSettings, sectionRef, subTabRef } = matchSettingsHubPath(location.pathname);
926
+ const overlayStack = state.overlay;
927
+ const topEntry = overlayStack.length > 0 ? overlayStack[overlayStack.length - 1] : undefined;
928
+ let topIsHub = false;
929
+ let topSectionRef;
930
+ let topSubTabRef;
931
+ if (topEntry && topEntry.content.contentType === NavigationContentType.SETTINGS_HUB) {
932
+ topIsHub = true;
933
+ topSectionRef = topEntry.content.sectionRef;
934
+ topSubTabRef = topEntry.content.subTabRef;
935
+ }
936
+ if (isSettings) {
937
+ // Already showing the hub at the requested section AND sub-tab → converged, nothing to do.
938
+ // The sub-tab participates in convergence as well as the section: without it, moving between
939
+ // two tabs of the same section leaves the reconciler believing it is already correct, so the
940
+ // URL changes and the panel does not — which is the same class of inertness the section-level
941
+ // `config`-in-deps bug produced in the hub itself.
942
+ if (topIsHub && topSectionRef === sectionRef && topSubTabRef === subTabRef) {
943
+ lastEmitRef.current = null;
944
+ return;
945
+ }
946
+ const action = topIsHub ? FrontendEvents.NAVIGATION_REPLACE : FrontendEvents.NAVIGATION_PUSH;
947
+ const emitKey = `${action}|${location.pathname}|${sectionRef ?? ''}|${subTabRef ?? ''}|${overlayStack.length}`;
948
+ if (lastEmitRef.current === emitKey)
949
+ return;
950
+ lastEmitRef.current = emitKey;
951
+ emit(action, {
952
+ zone: NavigationZone.OVERLAY,
953
+ content: { contentType: NavigationContentType.SETTINGS_HUB, sectionRef, subTabRef },
954
+ urlPath: NavigationUtils.buildBrowserUrl(location.pathname, location.search),
955
+ stackEntryId: NavigationUtils.generateStackEntryId(),
956
+ initiator: { sourceZone: NavigationZone.OVERLAY },
957
+ navigationSource: NavigationSource.URL_SYNC,
958
+ transition: NavigationTransition.OVERLAY,
959
+ appearance: OverlayAppearance.DIALOG,
960
+ ephemeral: false,
961
+ });
962
+ return;
963
+ }
964
+ // Off the settings URL: if the hub is still the top overlay, the URL departed
965
+ // (dismiss, browser back, app-level nav) → close it.
966
+ if (topIsHub) {
967
+ const emitKey = `${FrontendEvents.NAVIGATION_CLOSE}|${overlayStack.length}`;
968
+ if (lastEmitRef.current === emitKey)
969
+ return;
970
+ lastEmitRef.current = emitKey;
971
+ emit(FrontendEvents.NAVIGATION_CLOSE, { zone: NavigationZone.OVERLAY });
972
+ return;
973
+ }
974
+ lastEmitRef.current = null;
975
+ }, [location.pathname, location.search, emit, state.overlay, retryTick, scheduleRetry, clearRetry]);
976
+ }
977
+ //# sourceMappingURL=useNavigationRouterSync.js.map