@wildo-ai/saas-frontend-lib 1.1.9 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/companion-exports.d.ts +2 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/companion-exports.js +2 -1
- package/dist/esm/companion-exports.js.map +1 -1
- package/dist/esm/components/actions/action-bar.d.ts +45 -1
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +84 -0
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/actions/button.d.ts +22 -0
- package/dist/esm/components/actions/button.d.ts.map +1 -1
- package/dist/esm/components/actions/button.js +45 -0
- package/dist/esm/components/actions/button.js.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation-thread.d.ts +109 -0
- package/dist/esm/components/ai-elements/chat/conversation-thread.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/chat/conversation-thread.js +22 -0
- package/dist/esm/components/ai-elements/chat/conversation-thread.js.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval.d.ts +103 -7
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.d.ts +6 -0
- package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.d.ts +60 -1
- package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.js +26 -0
- package/dist/esm/components/ai-elements/graph/canvas.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.d.ts +39 -4
- package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.js +18 -0
- package/dist/esm/components/ai-elements/graph/node.js.map +1 -1
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.d.ts +6 -0
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.d.ts.map +1 -1
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js +29 -8
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js.map +1 -1
- package/dist/esm/components/app/AppLayout_DecisionInbox.d.ts +17 -0
- package/dist/esm/components/app/AppLayout_DecisionInbox.d.ts.map +1 -0
- package/dist/esm/components/app/AppLayout_DecisionInbox.js +24 -0
- package/dist/esm/components/app/AppLayout_DecisionInbox.js.map +1 -0
- package/dist/esm/components/app/AppLayout_MainContainer.d.ts.map +1 -1
- package/dist/esm/components/app/AppLayout_MainContainer.js +3 -0
- package/dist/esm/components/app/AppLayout_MainContainer.js.map +1 -1
- package/dist/esm/components/app/PublicLayout_LegalNotice.d.ts +18 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.d.ts.map +1 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.js +8 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.js.map +1 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.labels.d.ts +3 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.labels.d.ts.map +1 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.labels.js +38 -0
- package/dist/esm/components/app/PublicLayout_LegalNotice.labels.js.map +1 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.d.ts +15 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.d.ts.map +1 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.js +219 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.js.map +1 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.labels.d.ts +3 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.labels.d.ts.map +1 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.labels.js +49 -0
- package/dist/esm/components/auth/Auth_ChatIdentityLink.labels.js.map +1 -0
- package/dist/esm/components/auth/Auth_Invitation.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Invitation.js +3 -2
- package/dist/esm/components/auth/Auth_Invitation.js.map +1 -1
- package/dist/esm/components/auth/Auth_Invitation.labels.js +2 -2
- package/dist/esm/components/auth/Auth_Invitation.labels.js.map +1 -1
- package/dist/esm/components/auth/Auth_Main.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Main.js +40 -7
- package/dist/esm/components/auth/Auth_Main.js.map +1 -1
- package/dist/esm/components/auth/Auth_Main.labels.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Main.labels.js +9 -0
- package/dist/esm/components/auth/Auth_Main.labels.js.map +1 -1
- package/dist/esm/components/auth/Auth_OAuthConsent.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_OAuthConsent.js +3 -2
- package/dist/esm/components/auth/Auth_OAuthConsent.js.map +1 -1
- package/dist/esm/components/auth/Auth_PasswordLost.labels.js +2 -2
- package/dist/esm/components/auth/Auth_PasswordLost.labels.js.map +1 -1
- package/dist/esm/components/auth/Auth_Register.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Register.js +8 -1
- package/dist/esm/components/auth/Auth_Register.js.map +1 -1
- package/dist/esm/components/auth/Auth_Register.labels.js +2 -2
- package/dist/esm/components/auth/Auth_Register.labels.js.map +1 -1
- package/dist/esm/components/auth/StepUpAuthDialog.d.ts +1 -1
- package/dist/esm/components/auth/StepUpAuthDialog.js +3 -3
- package/dist/esm/components/auth/StepUpAuthDialog.js.map +1 -1
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.d.ts.map +1 -1
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.js +94 -6
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.js.map +1 -1
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.d.ts.map +1 -1
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.js +21 -1
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.js.map +1 -1
- package/dist/esm/components/auth/admin-config/ResourceLayoutPreset_Create_SamlWizard.d.ts.map +1 -1
- package/dist/esm/components/auth/admin-config/ResourceLayoutPreset_Create_SamlWizard.js +16 -13
- package/dist/esm/components/auth/admin-config/ResourceLayoutPreset_Create_SamlWizard.js.map +1 -1
- package/dist/esm/components/auth/admin-config/SsoConnectionSamlReadSection.js +3 -3
- package/dist/esm/components/auth/admin-config/SsoConnectionSamlReadSection.js.map +1 -1
- package/dist/esm/components/auth/enrollment/PasskeyEnrollmentMethod.d.ts.map +1 -1
- package/dist/esm/components/auth/enrollment/PasskeyEnrollmentMethod.js +1 -1
- package/dist/esm/components/auth/enrollment/PasskeyEnrollmentMethod.js.map +1 -1
- package/dist/esm/components/auth/methods/OrgSamlAuthMethod.d.ts +1 -1
- package/dist/esm/components/auth/methods/OrgSamlAuthMethod.d.ts.map +1 -1
- package/dist/esm/components/auth/methods/OrgSamlAuthMethod.js +3 -4
- package/dist/esm/components/auth/methods/OrgSamlAuthMethod.js.map +1 -1
- package/dist/esm/components/auth/pages/AuthPage_ChatIdentityLink.d.ts +11 -0
- package/dist/esm/components/auth/pages/AuthPage_ChatIdentityLink.d.ts.map +1 -0
- package/dist/esm/components/auth/pages/AuthPage_ChatIdentityLink.js +25 -0
- package/dist/esm/components/auth/pages/AuthPage_ChatIdentityLink.js.map +1 -0
- package/dist/esm/components/auth/utils/AuthPrivacyNoticeLink.d.ts +39 -0
- package/dist/esm/components/auth/utils/AuthPrivacyNoticeLink.d.ts.map +1 -0
- package/dist/esm/components/auth/utils/AuthPrivacyNoticeLink.js +45 -0
- package/dist/esm/components/auth/utils/AuthPrivacyNoticeLink.js.map +1 -0
- package/dist/esm/components/auth/utils/PasswordStrengthIndicator.js +1 -1
- package/dist/esm/components/auth/utils/PasswordStrengthIndicator.js.map +1 -1
- package/dist/esm/components/compliance/GovernedDocumentAcceptanceControl.d.ts.map +1 -1
- package/dist/esm/components/compliance/GovernedDocumentAcceptanceControl.js +2 -1
- package/dist/esm/components/compliance/GovernedDocumentAcceptanceControl.js.map +1 -1
- package/dist/esm/components/data-display/AutomaticDisplayer.d.ts.map +1 -1
- package/dist/esm/components/data-display/AutomaticDisplayer.js +21 -35
- package/dist/esm/components/data-display/AutomaticDisplayer.js.map +1 -1
- package/dist/esm/components/data-display/DisplayField.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayField.js +98 -70
- package/dist/esm/components/data-display/DisplayField.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditable.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditable.js +48 -8
- package/dist/esm/components/data-display/DisplayFieldEditable.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts +3 -1
- package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditableArray.js +30 -4
- package/dist/esm/components/data-display/DisplayFieldEditableArray.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldReadOnly.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldReadOnly.js +2 -2
- package/dist/esm/components/data-display/DisplayFieldReadOnly.js.map +1 -1
- package/dist/esm/components/data-display/DisplayValueDispatcher.d.ts +1 -1
- package/dist/esm/components/data-display/DisplayValueDispatcher.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayValueDispatcher.js +45 -94
- package/dist/esm/components/data-display/DisplayValueDispatcher.js.map +1 -1
- package/dist/esm/components/data-display/ResourceAutomaticDisplayer.d.ts.map +1 -1
- package/dist/esm/components/data-display/ResourceAutomaticDisplayer.js +14 -8
- package/dist/esm/components/data-display/ResourceAutomaticDisplayer.js.map +1 -1
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts +41 -3
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts.map +1 -1
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.js +49 -5
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.js.map +1 -1
- package/dist/esm/components/data-display/SummaryContext.d.ts +2 -2
- package/dist/esm/components/data-display/SummaryContext.js.map +1 -1
- package/dist/esm/components/data-display/automatic-displayer.utils.d.ts +22 -1
- package/dist/esm/components/data-display/automatic-displayer.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/automatic-displayer.utils.js +29 -0
- package/dist/esm/components/data-display/automatic-displayer.utils.js.map +1 -1
- package/dist/esm/components/data-display/badge.d.ts +9 -0
- package/dist/esm/components/data-display/badge.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.js.map +1 -1
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts +14 -2
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts.map +1 -1
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js +42 -12
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js.map +1 -1
- package/dist/esm/components/data-display/chromes/display-chrome-mode-resolution.d.ts +10 -0
- package/dist/esm/components/data-display/chromes/display-chrome-mode-resolution.d.ts.map +1 -0
- package/dist/esm/components/data-display/chromes/display-chrome-mode-resolution.js +18 -0
- package/dist/esm/components/data-display/chromes/display-chrome-mode-resolution.js.map +1 -0
- package/dist/esm/components/data-display/chromes/field-tile-boundaries.d.ts +38 -0
- package/dist/esm/components/data-display/chromes/field-tile-boundaries.d.ts.map +1 -0
- package/dist/esm/components/data-display/chromes/field-tile-boundaries.js +30 -0
- package/dist/esm/components/data-display/chromes/field-tile-boundaries.js.map +1 -0
- package/dist/esm/components/data-display/chromes/field-tiles.utils.d.ts +22 -0
- package/dist/esm/components/data-display/chromes/field-tiles.utils.d.ts.map +1 -0
- package/dist/esm/components/data-display/chromes/field-tiles.utils.js +52 -0
- package/dist/esm/components/data-display/chromes/field-tiles.utils.js.map +1 -0
- package/dist/esm/components/data-display/display-field-resolved-props.d.ts +4 -0
- package/dist/esm/components/data-display/display-field-resolved-props.d.ts.map +1 -1
- package/dist/esm/components/data-display/display-field-resolved-props.js.map +1 -1
- package/dist/esm/components/data-display/display-layout-template.utils.d.ts +18 -0
- package/dist/esm/components/data-display/display-layout-template.utils.d.ts.map +1 -0
- package/dist/esm/components/data-display/display-layout-template.utils.js +18 -0
- package/dist/esm/components/data-display/display-layout-template.utils.js.map +1 -0
- package/dist/esm/components/data-display/display-value-emptiness.utils.d.ts +44 -0
- package/dist/esm/components/data-display/display-value-emptiness.utils.d.ts.map +1 -0
- package/dist/esm/components/data-display/display-value-emptiness.utils.js +61 -0
- package/dist/esm/components/data-display/display-value-emptiness.utils.js.map +1 -0
- package/dist/esm/components/data-display/empty-value-mark.d.ts +31 -0
- package/dist/esm/components/data-display/empty-value-mark.d.ts.map +1 -0
- package/dist/esm/components/data-display/empty-value-mark.js +49 -0
- package/dist/esm/components/data-display/empty-value-mark.js.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts +3 -2
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts.map +1 -1
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js +4 -4
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js.map +1 -1
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts +6 -3
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts.map +1 -1
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js +22 -12
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js.map +1 -1
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js +2 -2
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js.map +1 -1
- package/dist/esm/components/data-display/reference-display-target.d.ts +98 -0
- package/dist/esm/components/data-display/reference-display-target.d.ts.map +1 -0
- package/dist/esm/components/data-display/reference-display-target.js +154 -0
- package/dist/esm/components/data-display/reference-display-target.js.map +1 -0
- package/dist/esm/components/data-display/summary-value-naming.context.d.ts +15 -0
- package/dist/esm/components/data-display/summary-value-naming.context.d.ts.map +1 -0
- package/dist/esm/components/data-display/summary-value-naming.context.js +18 -0
- package/dist/esm/components/data-display/summary-value-naming.context.js.map +1 -0
- package/dist/esm/components/data-display/tone-marker.d.ts +38 -0
- package/dist/esm/components/data-display/tone-marker.d.ts.map +1 -0
- package/dist/esm/components/data-display/tone-marker.js +56 -0
- package/dist/esm/components/data-display/tone-marker.js.map +1 -0
- package/dist/esm/components/data-display/useFileActivation.d.ts.map +1 -1
- package/dist/esm/components/data-display/useFileActivation.js +2 -9
- package/dist/esm/components/data-display/useFileActivation.js.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.js +12 -4
- package/dist/esm/components/feedback/features/feature-limit-indicator.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts +8 -0
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
- package/dist/esm/components/files/Files_UploadGrantDrop.d.ts +0 -5
- package/dist/esm/components/files/Files_UploadGrantDrop.d.ts.map +1 -1
- package/dist/esm/components/files/Files_UploadGrantDrop.js +5 -17
- package/dist/esm/components/files/Files_UploadGrantDrop.js.map +1 -1
- package/dist/esm/components/flows-actors/actor.d.ts +21 -4
- package/dist/esm/components/flows-actors/actor.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/actor.js +114 -192
- package/dist/esm/components/flows-actors/actor.js.map +1 -1
- package/dist/esm/components/flows-actors/actor.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/actor.labels.js +5 -10
- package/dist/esm/components/flows-actors/actor.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/agent-config.labels.js +1 -1
- package/dist/esm/components/flows-actors/agent-config.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/approval-modification-refusal.utils.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/approval-modification-refusal.utils.js +1 -0
- package/dist/esm/components/flows-actors/approval-modification-refusal.utils.js.map +1 -1
- package/dist/esm/components/flows-actors/approval.d.ts +26 -16
- package/dist/esm/components/flows-actors/approval.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/approval.js +208 -70
- package/dist/esm/components/flows-actors/approval.js.map +1 -1
- package/dist/esm/components/flows-actors/approval.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/approval.labels.js +67 -22
- package/dist/esm/components/flows-actors/approval.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/artifact-browser.labels.js +1 -1
- package/dist/esm/components/flows-actors/artifact-browser.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/execution-plan.d.ts +19 -7
- package/dist/esm/components/flows-actors/execution-plan.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/execution-plan.js +55 -41
- package/dist/esm/components/flows-actors/execution-plan.js.map +1 -1
- package/dist/esm/components/flows-actors/execution-plan.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/execution-plan.labels.js +25 -8
- package/dist/esm/components/flows-actors/execution-plan.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/execution-usage.d.ts +69 -0
- package/dist/esm/components/flows-actors/execution-usage.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/execution-usage.js +189 -0
- package/dist/esm/components/flows-actors/execution-usage.js.map +1 -0
- package/dist/esm/components/flows-actors/execution-usage.labels.d.ts +3 -0
- package/dist/esm/components/flows-actors/execution-usage.labels.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/execution-usage.labels.js +27 -0
- package/dist/esm/components/flows-actors/execution-usage.labels.js.map +1 -0
- package/dist/esm/components/flows-actors/flow-execution.d.ts +23 -6
- package/dist/esm/components/flows-actors/flow-execution.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flow-execution.js +56 -208
- package/dist/esm/components/flows-actors/flow-execution.js.map +1 -1
- package/dist/esm/components/flows-actors/flow-execution.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flow-execution.labels.js +3 -10
- package/dist/esm/components/flows-actors/flow-execution.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/flow-node-badges.d.ts +54 -21
- package/dist/esm/components/flows-actors/flow-node-badges.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flow-node-badges.js +80 -6
- package/dist/esm/components/flows-actors/flow-node-badges.js.map +1 -1
- package/dist/esm/components/flows-actors/flow-node.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flow-node.labels.js +0 -8
- package/dist/esm/components/flows-actors/flow-node.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/flow-step-visuals.d.ts +31 -0
- package/dist/esm/components/flows-actors/flow-step-visuals.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/flow-step-visuals.js +98 -0
- package/dist/esm/components/flows-actors/flow-step-visuals.js.map +1 -0
- package/dist/esm/components/flows-actors/flows-actors-graph-runtime.d.ts +18 -19
- package/dist/esm/components/flows-actors/flows-actors-graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flows-actors-graph-runtime.js +18 -19
- package/dist/esm/components/flows-actors/flows-actors-graph-runtime.js.map +1 -1
- package/dist/esm/components/flows-actors/flows-actors-graph.lazy.d.ts +27 -42
- package/dist/esm/components/flows-actors/flows-actors-graph.lazy.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flows-actors-graph.lazy.js +28 -43
- package/dist/esm/components/flows-actors/flows-actors-graph.lazy.js.map +1 -1
- package/dist/esm/components/flows-actors/flows-actors-ui.utils.d.ts +15 -10
- package/dist/esm/components/flows-actors/flows-actors-ui.utils.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/flows-actors-ui.utils.js +16 -42
- package/dist/esm/components/flows-actors/flows-actors-ui.utils.js.map +1 -1
- package/dist/esm/components/flows-actors/graph-viewer.d.ts +112 -0
- package/dist/esm/components/flows-actors/graph-viewer.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/graph-viewer.js +431 -0
- package/dist/esm/components/flows-actors/graph-viewer.js.map +1 -0
- package/dist/esm/components/flows-actors/graph-viewer.labels.d.ts +3 -0
- package/dist/esm/components/flows-actors/graph-viewer.labels.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/graph-viewer.labels.js +67 -0
- package/dist/esm/components/flows-actors/graph-viewer.labels.js.map +1 -0
- package/dist/esm/components/flows-actors/graph-viewer.models.d.ts +16 -0
- package/dist/esm/components/flows-actors/graph-viewer.models.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/graph-viewer.models.js +18 -0
- package/dist/esm/components/flows-actors/graph-viewer.models.js.map +1 -0
- package/dist/esm/components/flows-actors/human-decision-form.d.ts +57 -0
- package/dist/esm/components/flows-actors/human-decision-form.d.ts.map +1 -0
- package/dist/esm/components/flows-actors/human-decision-form.js +128 -0
- package/dist/esm/components/flows-actors/human-decision-form.js.map +1 -0
- package/dist/esm/components/flows-actors/system-catalog.d.ts +6 -1
- package/dist/esm/components/flows-actors/system-catalog.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/system-catalog.js +22 -20
- package/dist/esm/components/flows-actors/system-catalog.js.map +1 -1
- package/dist/esm/components/flows-actors/system-catalog.labels.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/system-catalog.labels.js +3 -2
- package/dist/esm/components/flows-actors/system-catalog.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/task-detail.d.ts +17 -3
- package/dist/esm/components/flows-actors/task-detail.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/task-detail.js +32 -25
- package/dist/esm/components/flows-actors/task-detail.js.map +1 -1
- package/dist/esm/components/flows-actors/task-memory.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/task-memory.js +3 -2
- package/dist/esm/components/flows-actors/task-memory.js.map +1 -1
- package/dist/esm/components/form/Form.d.ts +2 -0
- package/dist/esm/components/form/Form.d.ts.map +1 -1
- package/dist/esm/components/form/Form.js +4 -0
- package/dist/esm/components/form/Form.js.map +1 -1
- package/dist/esm/components/form/automated/AutomatedArrayField.d.ts +16 -1
- package/dist/esm/components/form/automated/AutomatedArrayField.d.ts.map +1 -1
- package/dist/esm/components/form/automated/AutomatedArrayField.js +101 -21
- package/dist/esm/components/form/automated/AutomatedArrayField.js.map +1 -1
- package/dist/esm/components/form/automated/AutomatedForm.d.ts +19 -2
- package/dist/esm/components/form/automated/AutomatedForm.d.ts.map +1 -1
- package/dist/esm/components/form/automated/AutomatedForm.js +40 -6
- package/dist/esm/components/form/automated/AutomatedForm.js.map +1 -1
- package/dist/esm/components/form/automated/AutosaveContext.d.ts +22 -1
- package/dist/esm/components/form/automated/AutosaveContext.d.ts.map +1 -1
- package/dist/esm/components/form/automated/AutosaveContext.js +53 -0
- package/dist/esm/components/form/automated/AutosaveContext.js.map +1 -1
- package/dist/esm/components/form/automated/FormField.d.ts +1 -1
- package/dist/esm/components/form/automated/FormField.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormField.js +127 -53
- package/dist/esm/components/form/automated/FormField.js.map +1 -1
- package/dist/esm/components/form/automated/FormFieldComposite.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormFieldComposite.js +12 -10
- package/dist/esm/components/form/automated/FormFieldComposite.js.map +1 -1
- package/dist/esm/components/form/automated/FormFieldRecord.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormFieldRecord.js +16 -7
- package/dist/esm/components/form/automated/FormFieldRecord.js.map +1 -1
- package/dist/esm/components/form/automated/FormTemplateContext.d.ts +27 -0
- package/dist/esm/components/form/automated/FormTemplateContext.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormTemplateContext.js +0 -48
- package/dist/esm/components/form/automated/FormTemplateContext.js.map +1 -1
- package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts +4 -3
- package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts.map +1 -1
- package/dist/esm/components/form/automated/ResourceAutomatedForm.js +616 -149
- package/dist/esm/components/form/automated/ResourceAutomatedForm.js.map +1 -1
- package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts +105 -5
- package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts.map +1 -1
- package/dist/esm/components/form/automated/automated-form-submit.utils.js +225 -6
- package/dist/esm/components/form/automated/automated-form-submit.utils.js.map +1 -1
- package/dist/esm/components/form/automated/bulk-field-clear-context.d.ts +59 -0
- package/dist/esm/components/form/automated/bulk-field-clear-context.d.ts.map +1 -0
- package/dist/esm/components/form/automated/bulk-field-clear-context.js +77 -0
- package/dist/esm/components/form/automated/bulk-field-clear-context.js.map +1 -0
- package/dist/esm/components/form/automated/generated-relationship-field.hooks.d.ts +1 -1
- package/dist/esm/components/form/automated/unplaced-request-fields.context.d.ts +19 -0
- package/dist/esm/components/form/automated/unplaced-request-fields.context.d.ts.map +1 -0
- package/dist/esm/components/form/automated/unplaced-request-fields.context.js +13 -0
- package/dist/esm/components/form/automated/unplaced-request-fields.context.js.map +1 -0
- package/dist/esm/components/form/automated/useArrayItemAutosaveField.d.ts +7 -0
- package/dist/esm/components/form/automated/useArrayItemAutosaveField.d.ts.map +1 -1
- package/dist/esm/components/form/automated/useArrayItemAutosaveField.js +10 -2
- package/dist/esm/components/form/automated/useArrayItemAutosaveField.js.map +1 -1
- package/dist/esm/components/form/automated/useReferenceRecordLabels.d.ts +16 -0
- package/dist/esm/components/form/automated/useReferenceRecordLabels.d.ts.map +1 -0
- package/dist/esm/components/form/automated/useReferenceRecordLabels.js +66 -0
- package/dist/esm/components/form/automated/useReferenceRecordLabels.js.map +1 -0
- package/dist/esm/components/form/automated/useRequestFieldOffer.d.ts +18 -0
- package/dist/esm/components/form/automated/useRequestFieldOffer.d.ts.map +1 -0
- package/dist/esm/components/form/automated/useRequestFieldOffer.js +107 -0
- package/dist/esm/components/form/automated/useRequestFieldOffer.js.map +1 -0
- package/dist/esm/components/form/chromes/FormFieldChrome.d.ts +7 -1
- package/dist/esm/components/form/chromes/FormFieldChrome.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/FormFieldChrome.js +6 -3
- package/dist/esm/components/form/chromes/FormFieldChrome.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts +11 -0
- package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.d.ts +21 -0
- package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts +9 -0
- package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts +9 -0
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts +1 -0
- package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts +10 -0
- package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.d.ts +14 -10
- package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.js +14 -6
- package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.js +7 -3
- package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +1 -1
- package/dist/esm/components/form/controls/string/chips-input.d.ts +65 -0
- package/dist/esm/components/form/controls/string/chips-input.d.ts.map +1 -0
- package/dist/esm/components/form/controls/string/chips-input.js +9 -0
- package/dist/esm/components/form/controls/string/chips-input.js.map +1 -0
- package/dist/esm/components/form/fields/form-field-address.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-address.js +7 -5
- package/dist/esm/components/form/fields/form-field-address.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-address.labels.js +1 -1
- package/dist/esm/components/form/fields/form-field-address.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-bigdecimal.js +2 -2
- package/dist/esm/components/form/fields/form-field-bigdecimal.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-boolean.js +2 -2
- package/dist/esm/components/form/fields/form-field-boolean.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-code.labels.js +1 -1
- package/dist/esm/components/form/fields/form-field-code.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-date.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-date.js +16 -11
- package/dist/esm/components/form/fields/form-field-date.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-datetime.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-datetime.js +10 -5
- package/dist/esm/components/form/fields/form-field-datetime.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-duration.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-duration.js +5 -7
- package/dist/esm/components/form/fields/form-field-duration.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-duration.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-duration.labels.js +8 -2
- package/dist/esm/components/form/fields/form-field-duration.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-enum.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-enum.js +31 -31
- package/dist/esm/components/form/fields/form-field-enum.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.js +13 -12
- package/dist/esm/components/form/fields/form-field-file.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.labels.js +6 -6
- package/dist/esm/components/form/fields/form-field-file.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-money.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-money.js +5 -4
- package/dist/esm/components/form/fields/form-field-money.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-money.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-money.labels.js +8 -2
- package/dist/esm/components/form/fields/form-field-money.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-number.js +2 -2
- package/dist/esm/components/form/fields/form-field-number.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-bigdecimal.js +2 -2
- package/dist/esm/components/form/fields/form-field-range-bigdecimal.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-date.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-date.js +7 -2
- package/dist/esm/components/form/fields/form-field-range-date.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-datetime.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-datetime.js +5 -2
- package/dist/esm/components/form/fields/form-field-range-datetime.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-money.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-money.js +6 -19
- package/dist/esm/components/form/fields/form-field-range-money.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-money.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-money.labels.js +8 -2
- package/dist/esm/components/form/fields/form-field-range-money.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-number.js +2 -2
- package/dist/esm/components/form/fields/form-field-range-number.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-range-time.js +2 -2
- package/dist/esm/components/form/fields/form-field-range-time.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-resource-reference.d.ts +56 -0
- package/dist/esm/components/form/fields/form-field-resource-reference.d.ts.map +1 -0
- package/dist/esm/components/form/fields/form-field-resource-reference.js +51 -0
- package/dist/esm/components/form/fields/form-field-resource-reference.js.map +1 -0
- package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts +36 -6
- package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-string-organization-role.js +30 -11
- package/dist/esm/components/form/fields/form-field-string-organization-role.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-string.d.ts +5 -0
- package/dist/esm/components/form/fields/form-field-string.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-string.js +9 -7
- package/dist/esm/components/form/fields/form-field-string.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-time.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-time.js +6 -3
- package/dist/esm/components/form/fields/form-field-time.js.map +1 -1
- package/dist/esm/components/form/fields/themed-native-select.d.ts +29 -0
- package/dist/esm/components/form/fields/themed-native-select.d.ts.map +1 -0
- package/dist/esm/components/form/fields/themed-native-select.js +36 -0
- package/dist/esm/components/form/fields/themed-native-select.js.map +1 -0
- package/dist/esm/components/form/form-context.d.ts +11 -0
- package/dist/esm/components/form/form-context.d.ts.map +1 -1
- package/dist/esm/components/form/form-context.js +11 -0
- package/dist/esm/components/form/form-context.js.map +1 -1
- package/dist/esm/components/form/form-context.utils.d.ts +2 -0
- package/dist/esm/components/form/form-context.utils.d.ts.map +1 -1
- package/dist/esm/components/form/form-context.utils.js +6 -2
- package/dist/esm/components/form/form-context.utils.js.map +1 -1
- package/dist/esm/components/form/validation-errors/FormErrorSummary.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/FormErrorSummary.js +17 -15
- package/dist/esm/components/form/validation-errors/FormErrorSummary.js.map +1 -1
- package/dist/esm/components/form/validation-errors/field-reveal.d.ts +41 -0
- package/dist/esm/components/form/validation-errors/field-reveal.d.ts.map +1 -0
- package/dist/esm/components/form/validation-errors/field-reveal.js +108 -0
- package/dist/esm/components/form/validation-errors/field-reveal.js.map +1 -0
- package/dist/esm/components/form/validation-errors/form-level-error-recheck.d.ts +3 -0
- package/dist/esm/components/form/validation-errors/form-level-error-recheck.d.ts.map +1 -0
- package/dist/esm/components/form/validation-errors/form-level-error-recheck.js +37 -0
- package/dist/esm/components/form/validation-errors/form-level-error-recheck.js.map +1 -0
- package/dist/esm/components/form/validation-errors/getFieldError.d.ts +6 -0
- package/dist/esm/components/form/validation-errors/getFieldError.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/getFieldError.js +9 -2
- package/dist/esm/components/form/validation-errors/getFieldError.js.map +1 -1
- package/dist/esm/components/form/validation-errors/scroll-to-first-error.utils.d.ts +8 -1
- package/dist/esm/components/form/validation-errors/scroll-to-first-error.utils.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/scroll-to-first-error.utils.js +46 -3
- package/dist/esm/components/form/validation-errors/scroll-to-first-error.utils.js.map +1 -1
- package/dist/esm/components/form/validation-errors/useServerErrorInjection.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/useServerErrorInjection.js +8 -3
- package/dist/esm/components/form/validation-errors/useServerErrorInjection.js.map +1 -1
- package/dist/esm/components/form/validation-errors/validate-fields-and-show-errors.d.ts +32 -0
- package/dist/esm/components/form/validation-errors/validate-fields-and-show-errors.d.ts.map +1 -0
- package/dist/esm/components/form/validation-errors/validate-fields-and-show-errors.js +60 -0
- package/dist/esm/components/form/validation-errors/validate-fields-and-show-errors.js.map +1 -0
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.d.ts +10 -0
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.js +12 -3
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.js.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_QuickActionButton.d.ts +7 -0
- package/dist/esm/components/navigation/app-level/ApplicationLevel_QuickActionButton.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_QuickActionButton.js.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_UtilityPanel.d.ts +6 -0
- package/dist/esm/components/navigation/app-level/ApplicationLevel_UtilityPanel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_UtilityPanel.js.map +1 -1
- package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js +11 -28
- package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js.map +1 -1
- package/dist/esm/components/navigation/app-level/engine-launcher-entries.d.ts +46 -0
- package/dist/esm/components/navigation/app-level/engine-launcher-entries.d.ts.map +1 -0
- package/dist/esm/components/navigation/app-level/engine-launcher-entries.js +165 -0
- package/dist/esm/components/navigation/app-level/engine-launcher-entries.js.map +1 -0
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js +8 -3
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.js +41 -20
- package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useNavigationBehaviors.d.ts +1 -2
- package/dist/esm/components/navigation/app-level/useNavigationBehaviors.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useNavigationBehaviors.js +1 -15
- package/dist/esm/components/navigation/app-level/useNavigationBehaviors.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useOwnOrganizationSearch.d.ts +32 -0
- package/dist/esm/components/navigation/app-level/useOwnOrganizationSearch.d.ts.map +1 -0
- package/dist/esm/components/navigation/app-level/useOwnOrganizationSearch.js +91 -0
- package/dist/esm/components/navigation/app-level/useOwnOrganizationSearch.js.map +1 -0
- package/dist/esm/components/navigation/app-level/useQuickSwitcherBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useQuickSwitcherBehavior.js +3 -1
- package/dist/esm/components/navigation/app-level/useQuickSwitcherBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.d.ts +18 -1
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.js +66 -9
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useUtilityPanelBehavior.d.ts +15 -10
- package/dist/esm/components/navigation/app-level/useUtilityPanelBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useUtilityPanelBehavior.js +89 -12
- package/dist/esm/components/navigation/app-level/useUtilityPanelBehavior.js.map +1 -1
- package/dist/esm/components/progression/ProgressionMilestoneTracker.labels.js +2 -2
- package/dist/esm/components/progression/ProgressionMilestoneTracker.labels.js.map +1 -1
- package/dist/esm/components/resources/CollectionSelectAllCheckbox.d.ts +39 -0
- package/dist/esm/components/resources/CollectionSelectAllCheckbox.d.ts.map +1 -0
- package/dist/esm/components/resources/CollectionSelectAllCheckbox.js +21 -0
- package/dist/esm/components/resources/CollectionSelectAllCheckbox.js.map +1 -0
- package/dist/esm/components/resources/CollectionSelectionControls.d.ts +4 -3
- package/dist/esm/components/resources/CollectionSelectionControls.d.ts.map +1 -1
- package/dist/esm/components/resources/CollectionSelectionControls.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionBody_Table.d.ts +7 -2
- package/dist/esm/components/resources/ResourceCollectionBody_Table.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionBody_Table.js +38 -14
- package/dist/esm/components/resources/ResourceCollectionBody_Table.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionFilterPresets.d.ts +4 -4
- package/dist/esm/components/resources/ResourceCollectionFilterPresets.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionFilterPresets.js +20 -13
- package/dist/esm/components/resources/ResourceCollectionFilterPresets.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.d.ts +4 -3
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js +40 -6
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts +65 -23
- package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionToolbar.js +73 -10
- package/dist/esm/components/resources/ResourceCollectionToolbar.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Action.labels.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Action.labels.js +5 -0
- package/dist/esm/components/resources/ResourceLayout_Action.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.d.ts +18 -0
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js +57 -48
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_CollectionActions.d.ts +1 -1
- package/dist/esm/components/resources/ResourceLayout_CollectionActions.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_CollectionActions.js +1 -1
- package/dist/esm/components/resources/ResourceLayout_CollectionActions.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerNested.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerNested.js +7 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerNested.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Create.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Create.js +3 -4
- package/dist/esm/components/resources/ResourceLayout_Create.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Create.labels.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Create.labels.js +10 -0
- package/dist/esm/components/resources/ResourceLayout_Create.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_DangerZone.d.ts +5 -3
- package/dist/esm/components/resources/ResourceLayout_DangerZone.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_DangerZone.js +4 -3
- package/dist/esm/components/resources/ResourceLayout_DangerZone.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_FilterChips.d.ts +8 -1
- package/dist/esm/components/resources/ResourceLayout_FilterChips.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_FilterChips.js +83 -11
- package/dist/esm/components/resources/ResourceLayout_FilterChips.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Filters.labels.js +1 -1
- package/dist/esm/components/resources/ResourceLayout_Filters.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_FiltersControl.d.ts +5 -8
- package/dist/esm/components/resources/ResourceLayout_FiltersControl.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_FiltersControl.js +68 -19
- package/dist/esm/components/resources/ResourceLayout_FiltersControl.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Header.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Header.js +150 -44
- package/dist/esm/components/resources/ResourceLayout_Header.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_InsertedViews.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_InsertedViews.js +62 -40
- package/dist/esm/components/resources/ResourceLayout_InsertedViews.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.js +68 -70
- package/dist/esm/components/resources/ResourceLayout_List.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.labels.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.labels.js +4 -10
- package/dist/esm/components/resources/ResourceLayout_List.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.d.ts +8 -9
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.js +67 -25
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.labels.js +8 -8
- package/dist/esm/components/resources/ResourceLayout_OperationBulk.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.d.ts +8 -2
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.js +12 -7
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.labels.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.labels.js +11 -6
- package/dist/esm/components/resources/ResourceLayout_OperationsItems.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Read.d.ts +2 -0
- package/dist/esm/components/resources/ResourceLayout_Read.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Read.js +23 -5
- package/dist/esm/components/resources/ResourceLayout_Read.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ReadSummary.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ReadSummary.js +5 -3
- package/dist/esm/components/resources/ResourceLayout_ReadSummary.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.js +18 -7
- package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.d.ts +56 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.d.ts.map +1 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.js +184 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.js.map +1 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.labels.d.ts +3 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.labels.d.ts.map +1 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.labels.js +106 -0
- package/dist/esm/components/resources/ResourceLayout_RecordSharing.labels.js.map +1 -0
- package/dist/esm/components/resources/ResourceLayout_Search.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Search.js +55 -42
- package/dist/esm/components/resources/ResourceLayout_Search.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Search.labels.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Search.labels.js +0 -6
- package/dist/esm/components/resources/ResourceLayout_Search.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.d.ts +8 -0
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js +2 -3
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SortControl.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SortControl.js +3 -2
- package/dist/esm/components/resources/ResourceLayout_SortControl.js.map +1 -1
- package/dist/esm/components/resources/ResourceListItemRenderer.d.ts +29 -5
- package/dist/esm/components/resources/ResourceListItemRenderer.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceListItemRenderer.js +123 -41
- package/dist/esm/components/resources/ResourceListItemRenderer.js.map +1 -1
- package/dist/esm/components/resources/ResourceViewModeToggle.d.ts +6 -1
- package/dist/esm/components/resources/ResourceViewModeToggle.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceViewModeToggle.js +9 -7
- package/dist/esm/components/resources/ResourceViewModeToggle.js.map +1 -1
- package/dist/esm/components/resources/collection-card-layout.utils.d.ts +37 -15
- package/dist/esm/components/resources/collection-card-layout.utils.d.ts.map +1 -1
- package/dist/esm/components/resources/collection-card-layout.utils.js +37 -15
- package/dist/esm/components/resources/collection-card-layout.utils.js.map +1 -1
- package/dist/esm/components/resources/collection-selection-bar-density.d.ts +113 -0
- package/dist/esm/components/resources/collection-selection-bar-density.d.ts.map +1 -0
- package/dist/esm/components/resources/collection-selection-bar-density.js +175 -0
- package/dist/esm/components/resources/collection-selection-bar-density.js.map +1 -0
- package/dist/esm/components/resources/embeds/EmbeddedResourceDescent.d.ts +2 -1
- package/dist/esm/components/resources/embeds/EmbeddedResourceDescent.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/EmbeddedResourceDescent.js.map +1 -1
- package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/RelatedResourceSections.js +14 -2
- package/dist/esm/components/resources/embeds/RelatedResourceSections.js.map +1 -1
- package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts +61 -1
- package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/ResourceEmbeds.js +151 -15
- package/dist/esm/components/resources/embeds/ResourceEmbeds.js.map +1 -1
- package/dist/esm/components/resources/embeds/child-operation-addressability.utils.d.ts +11 -0
- package/dist/esm/components/resources/embeds/child-operation-addressability.utils.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/child-operation-addressability.utils.js +13 -0
- package/dist/esm/components/resources/embeds/child-operation-addressability.utils.js.map +1 -1
- package/dist/esm/components/resources/embeds/useEmbeddedResourceContext.d.ts +24 -1
- package/dist/esm/components/resources/embeds/useEmbeddedResourceContext.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/useEmbeddedResourceContext.js +47 -3
- package/dist/esm/components/resources/embeds/useEmbeddedResourceContext.js.map +1 -1
- package/dist/esm/components/resources/resource-filter-field-type.frontend.schemas.d.ts +35 -0
- package/dist/esm/components/resources/resource-filter-field-type.frontend.schemas.d.ts.map +1 -0
- package/dist/esm/components/resources/resource-filter-field-type.frontend.schemas.js +36 -0
- package/dist/esm/components/resources/resource-filter-field-type.frontend.schemas.js.map +1 -0
- package/dist/esm/components/resources/resource-header-geometry.d.ts +19 -0
- package/dist/esm/components/resources/resource-header-geometry.d.ts.map +1 -0
- package/dist/esm/components/resources/resource-header-geometry.js +19 -0
- package/dist/esm/components/resources/resource-header-geometry.js.map +1 -0
- package/dist/esm/components/resources/resourceLayout.utils.d.ts +28 -2
- package/dist/esm/components/resources/resourceLayout.utils.d.ts.map +1 -1
- package/dist/esm/components/resources/resourceLayout.utils.js +45 -12
- package/dist/esm/components/resources/resourceLayout.utils.js.map +1 -1
- package/dist/esm/components/resources/skeleton/ArrayField.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/ArrayField.js +10 -0
- package/dist/esm/components/resources/skeleton/ArrayField.js.map +1 -1
- package/dist/esm/components/resources/skeleton/DisplayLayout.d.ts +20 -4
- package/dist/esm/components/resources/skeleton/DisplayLayout.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/DisplayLayout.js +19 -2
- package/dist/esm/components/resources/skeleton/DisplayLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/FieldTiles.d.ts +48 -0
- package/dist/esm/components/resources/skeleton/FieldTiles.d.ts.map +1 -0
- package/dist/esm/components/resources/skeleton/FieldTiles.js +51 -0
- package/dist/esm/components/resources/skeleton/FieldTiles.js.map +1 -0
- package/dist/esm/components/resources/skeleton/FormLayout.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/FormLayout.js +2 -1
- package/dist/esm/components/resources/skeleton/FormLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/Group.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/Group.js +5 -2
- package/dist/esm/components/resources/skeleton/Group.js.map +1 -1
- package/dist/esm/components/resources/skeleton/ResourceHeaderTitle.d.ts +77 -14
- package/dist/esm/components/resources/skeleton/ResourceHeaderTitle.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/ResourceHeaderTitle.js +98 -25
- package/dist/esm/components/resources/skeleton/ResourceHeaderTitle.js.map +1 -1
- package/dist/esm/components/resources/skeleton/Section.d.ts +7 -0
- package/dist/esm/components/resources/skeleton/Section.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/Section.js +9 -3
- package/dist/esm/components/resources/skeleton/Section.js.map +1 -1
- package/dist/esm/components/resources/skeleton/SummaryLayout.d.ts +3 -3
- package/dist/esm/components/resources/skeleton/SummaryLayout.js +3 -3
- package/dist/esm/components/resources/skeleton/SummaryLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayout.d.ts +7 -5
- package/dist/esm/components/resources/skeleton/WizardLayout.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayout.js +176 -65
- package/dist/esm/components/resources/skeleton/WizardLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayoutContext.d.ts +9 -1
- package/dist/esm/components/resources/skeleton/WizardLayoutContext.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayoutContext.js +7 -0
- package/dist/esm/components/resources/skeleton/WizardLayoutContext.js.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardStep.d.ts +1 -1
- package/dist/esm/components/resources/skeleton/WizardStep.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardStep.js +9 -5
- package/dist/esm/components/resources/skeleton/WizardStep.js.map +1 -1
- package/dist/esm/components/resources/skeleton/section-consolidation.utils.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/section-consolidation.utils.js +31 -2
- package/dist/esm/components/resources/skeleton/section-consolidation.utils.js.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.d.ts.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.js +176 -61
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.js.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.d.ts.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.js +14 -7
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.js.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.labels.d.ts.map +1 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.labels.js +18 -1
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldEditPreset_ResourceReference_Default.labels.js.map +1 -1
- package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts +8 -0
- package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts.map +1 -1
- package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.js +3 -0
- package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.js.map +1 -1
- package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.d.ts.map +1 -1
- package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.js +48 -17
- package/dist/esm/components/resources-fields/resource-reference/useResourceSearch.js.map +1 -1
- package/dist/esm/components/sections/ContentSectionContainer.d.ts.map +1 -1
- package/dist/esm/components/sections/ContentSectionContainer.js +226 -74
- package/dist/esm/components/sections/ContentSectionContainer.js.map +1 -1
- package/dist/esm/components/sections/ContentSectionContainer.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/ContentSectionContainer.labels.js +2 -3
- package/dist/esm/components/sections/ContentSectionContainer.labels.js.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts +2 -2
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/section-grouping.shared.d.ts +19 -0
- package/dist/esm/components/sections/section-grouping.shared.d.ts.map +1 -1
- package/dist/esm/components/sections/section-grouping.shared.js +24 -0
- package/dist/esm/components/sections/section-grouping.shared.js.map +1 -1
- package/dist/esm/components/sections/section-legend-voice.context.d.ts +19 -0
- package/dist/esm/components/sections/section-legend-voice.context.d.ts.map +1 -0
- package/dist/esm/components/sections/section-legend-voice.context.js +21 -0
- package/dist/esm/components/sections/section-legend-voice.context.js.map +1 -0
- package/dist/esm/components/sections/section-legend-voice.d.ts +41 -0
- package/dist/esm/components/sections/section-legend-voice.d.ts.map +1 -0
- package/dist/esm/components/sections/section-legend-voice.js +67 -0
- package/dist/esm/components/sections/section-legend-voice.js.map +1 -0
- package/dist/esm/components/sections/stepper.d.ts +14 -0
- package/dist/esm/components/sections/stepper.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.js.map +1 -1
- package/dist/esm/components/sections/surface.d.ts.map +1 -1
- package/dist/esm/components/sections/surface.js +10 -2
- package/dist/esm/components/sections/surface.js.map +1 -1
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.d.ts +39 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.js +187 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.js.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.labels.d.ts +3 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.labels.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.labels.js +34 -0
- package/dist/esm/components/settings/AppPage_AgentWorkEvaluationExportSettings.labels.js.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts +1 -1
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js +1 -1
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js.map +1 -1
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js +8 -8
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.d.ts +43 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.js +142 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.js.map +1 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.labels.d.ts +3 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.labels.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.labels.js +62 -0
- package/dist/esm/components/settings/AppPage_AutonomousAgentsSettings.labels.js.map +1 -0
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts +25 -8
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.js +275 -71
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.js.map +1 -1
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.js +91 -14
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.d.ts +13 -8
- package/dist/esm/components/settings/AppPage_InvitationsSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.js +95 -23
- package/dist/esm/components/settings/AppPage_InvitationsSettings.js.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.js +25 -2
- package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.d.ts +67 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.js +177 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.js.map +1 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.labels.d.ts +3 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.labels.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.labels.js +45 -0
- package/dist/esm/components/settings/AppPage_ModelCostBreakdownSettings.labels.js.map +1 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.d.ts +35 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.js +137 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.js.map +1 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.labels.d.ts +3 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.labels.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.labels.js +38 -0
- package/dist/esm/components/settings/AppPage_RepresentativeActivitySettings.labels.js.map +1 -0
- package/dist/esm/components/settings/SettingsHub.d.ts +3 -3
- package/dist/esm/components/settings/SettingsHub.d.ts.map +1 -1
- package/dist/esm/components/settings/SettingsHub.js +98 -48
- package/dist/esm/components/settings/SettingsHub.js.map +1 -1
- package/dist/esm/components/settings/SettingsHub.labels.d.ts.map +1 -1
- package/dist/esm/components/settings/SettingsHub.labels.js +2 -0
- package/dist/esm/components/settings/SettingsHub.labels.js.map +1 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.d.ts.map +1 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.js +21 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.js.map +1 -1
- package/dist/esm/components/settings/useOwnerProviderConnections.d.ts +24 -5
- package/dist/esm/components/settings/useOwnerProviderConnections.d.ts.map +1 -1
- package/dist/esm/components/settings/useOwnerProviderConnections.js +67 -9
- package/dist/esm/components/settings/useOwnerProviderConnections.js.map +1 -1
- package/dist/esm/components/views/chart-view/ChartView.js +3 -3
- package/dist/esm/components/views/chart-view/ChartView.js.map +1 -1
- package/dist/esm/components/views/chart-view/chart-export.utils.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/chart-export.utils.js +2 -9
- package/dist/esm/components/views/chart-view/chart-export.utils.js.map +1 -1
- package/dist/esm/components/views/chart-view/enum-color-bridge.d.ts +1 -0
- package/dist/esm/components/views/chart-view/enum-color-bridge.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/enum-color-bridge.js +10 -1
- package/dist/esm/components/views/chart-view/enum-color-bridge.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builder-utils.d.ts +8 -6
- package/dist/esm/components/views/chart-view/option-builder/builder-utils.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builder-utils.js +10 -8
- package/dist/esm/components/views/chart-view/option-builder/builder-utils.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/bar-family.builder.js +2 -2
- package/dist/esm/components/views/chart-view/option-builder/builders/bar-family.builder.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/composed.builder.js +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/composed.builder.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/line-family.builder.js +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/line-family.builder.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/scatter-family.builder.js +1 -1
- package/dist/esm/components/views/chart-view/option-builder/builders/scatter-family.builder.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/chart-type-builder.interface.d.ts +6 -0
- package/dist/esm/components/views/chart-view/option-builder/chart-type-builder.interface.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/chart-type-builder.interface.js.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/echarts-option-builder.d.ts +3 -1
- package/dist/esm/components/views/chart-view/option-builder/echarts-option-builder.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/option-builder/echarts-option-builder.js +4 -1
- package/dist/esm/components/views/chart-view/option-builder/echarts-option-builder.js.map +1 -1
- package/dist/esm/components/views/composite-view/CompositeLayout.d.ts +0 -1
- package/dist/esm/components/views/composite-view/CompositeLayout.d.ts.map +1 -1
- package/dist/esm/components/views/composite-view/CompositeLayout.js.map +1 -1
- package/dist/esm/components/views/composite-view/useCompositeResourceOperationContextBuilder.d.ts.map +1 -1
- package/dist/esm/components/views/composite-view/useCompositeResourceOperationContextBuilder.js +24 -1
- package/dist/esm/components/views/composite-view/useCompositeResourceOperationContextBuilder.js.map +1 -1
- package/dist/esm/components/views/flows-actors-view/AgentReplyReportAction.d.ts +29 -0
- package/dist/esm/components/views/flows-actors-view/AgentReplyReportAction.d.ts.map +1 -0
- package/dist/esm/components/views/flows-actors-view/AgentReplyReportAction.js +104 -0
- package/dist/esm/components/views/flows-actors-view/AgentReplyReportAction.js.map +1 -0
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.d.ts +16 -5
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.d.ts.map +1 -1
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.js +219 -230
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.js.map +1 -1
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.labels.d.ts +5 -0
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.labels.d.ts.map +1 -1
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.labels.js +15 -13
- package/dist/esm/components/views/flows-actors-view/FlowsActorsView.labels.js.map +1 -1
- package/dist/esm/components/views/flows-actors-view/held-conversation-selection.d.ts +13 -0
- package/dist/esm/components/views/flows-actors-view/held-conversation-selection.d.ts.map +1 -0
- package/dist/esm/components/views/flows-actors-view/held-conversation-selection.js +44 -0
- package/dist/esm/components/views/flows-actors-view/held-conversation-selection.js.map +1 -0
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts.map +1 -1
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.js +6 -2
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.js.map +1 -1
- package/dist/esm/core/app-shell/app-shell.schemas.d.ts +64 -9
- package/dist/esm/core/app-shell/app-shell.schemas.d.ts.map +1 -1
- package/dist/esm/core/app-shell/app-shell.schemas.js.map +1 -1
- package/dist/esm/core/app-shell/hosted-components.utils.d.ts +11 -1
- package/dist/esm/core/app-shell/hosted-components.utils.d.ts.map +1 -1
- package/dist/esm/core/app-shell/hosted-components.utils.js +25 -0
- package/dist/esm/core/app-shell/hosted-components.utils.js.map +1 -1
- package/dist/esm/core/app-shell/shell-layout.d.ts +138 -0
- package/dist/esm/core/app-shell/shell-layout.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-layout.js +143 -0
- package/dist/esm/core/app-shell/shell-layout.js.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-layout-stylesheet.d.ts +13 -0
- package/dist/esm/core/app-shell/shell-motion/shell-layout-stylesheet.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-layout-stylesheet.js +49 -0
- package/dist/esm/core/app-shell/shell-motion/shell-layout-stylesheet.js.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-origins.d.ts +95 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-origins.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-origins.js +316 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-origins.js.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-vocabulary.d.ts +217 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-vocabulary.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-vocabulary.js +197 -0
- package/dist/esm/core/app-shell/shell-motion/shell-motion-vocabulary.js.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-view-transition.d.ts +46 -0
- package/dist/esm/core/app-shell/shell-motion/shell-view-transition.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/shell-view-transition.js +139 -0
- package/dist/esm/core/app-shell/shell-motion/shell-view-transition.js.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/use-shell-motion.d.ts +108 -0
- package/dist/esm/core/app-shell/shell-motion/use-shell-motion.d.ts.map +1 -0
- package/dist/esm/core/app-shell/shell-motion/use-shell-motion.js +423 -0
- package/dist/esm/core/app-shell/shell-motion/use-shell-motion.js.map +1 -0
- package/dist/esm/core/app-shell/useAppShellLayout.d.ts.map +1 -1
- package/dist/esm/core/app-shell/useAppShellLayout.js +6 -1
- package/dist/esm/core/app-shell/useAppShellLayout.js.map +1 -1
- package/dist/esm/core/app-shell/usePublicShellLayout.d.ts.map +1 -1
- package/dist/esm/core/app-shell/usePublicShellLayout.js +11 -4
- package/dist/esm/core/app-shell/usePublicShellLayout.js.map +1 -1
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts +18 -1
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.js +26 -4
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.js.map +1 -1
- package/dist/esm/core/automated-layout/composite-value-defaults.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/automated-layout/composite-value-defaults.frontend.utils.js +3 -22
- package/dist/esm/core/automated-layout/composite-value-defaults.frontend.utils.js.map +1 -1
- package/dist/esm/core/automated-layout/default-layout-generator.frontend.utils.d.ts +19 -3
- package/dist/esm/core/automated-layout/default-layout-generator.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/automated-layout/default-layout-generator.frontend.utils.js +100 -13
- package/dist/esm/core/automated-layout/default-layout-generator.frontend.utils.js.map +1 -1
- package/dist/esm/core/automated-layout/summary-value-naming.utils.d.ts +67 -0
- package/dist/esm/core/automated-layout/summary-value-naming.utils.d.ts.map +1 -0
- package/dist/esm/core/automated-layout/summary-value-naming.utils.js +100 -0
- package/dist/esm/core/automated-layout/summary-value-naming.utils.js.map +1 -0
- package/dist/esm/core/billing/BillingContext.d.ts +0 -17
- package/dist/esm/core/billing/BillingContext.d.ts.map +1 -1
- package/dist/esm/core/billing/BillingContext.js +6 -1
- package/dist/esm/core/billing/BillingContext.js.map +1 -1
- package/dist/esm/core/branding/OrganizationBrandingPublisher.d.ts +2 -0
- package/dist/esm/core/branding/OrganizationBrandingPublisher.d.ts.map +1 -0
- package/dist/esm/core/branding/OrganizationBrandingPublisher.js +78 -0
- package/dist/esm/core/branding/OrganizationBrandingPublisher.js.map +1 -0
- package/dist/esm/core/branding/useBrandIdentity.d.ts +21 -0
- package/dist/esm/core/branding/useBrandIdentity.d.ts.map +1 -1
- package/dist/esm/core/branding/useBrandIdentity.js +31 -5
- package/dist/esm/core/branding/useBrandIdentity.js.map +1 -1
- package/dist/esm/core/branding/useBrandPresentation.d.ts +5 -0
- package/dist/esm/core/branding/useBrandPresentation.d.ts.map +1 -1
- package/dist/esm/core/branding/useBrandPresentation.js +1 -0
- package/dist/esm/core/branding/useBrandPresentation.js.map +1 -1
- package/dist/esm/core/branding/useDisplayableImageUrl.d.ts +4 -0
- package/dist/esm/core/branding/useDisplayableImageUrl.d.ts.map +1 -0
- package/dist/esm/core/branding/useDisplayableImageUrl.js +66 -0
- package/dist/esm/core/branding/useDisplayableImageUrl.js.map +1 -0
- package/dist/esm/core/branding/useOrganizationDocumentTitle.d.ts +2 -0
- package/dist/esm/core/branding/useOrganizationDocumentTitle.d.ts.map +1 -0
- package/dist/esm/core/branding/useOrganizationDocumentTitle.js +23 -0
- package/dist/esm/core/branding/useOrganizationDocumentTitle.js.map +1 -0
- package/dist/esm/core/commons/save-blob-as-file.frontend.utils.d.ts +16 -0
- package/dist/esm/core/commons/save-blob-as-file.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/commons/save-blob-as-file.frontend.utils.js +35 -0
- package/dist/esm/core/commons/save-blob-as-file.frontend.utils.js.map +1 -0
- package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.d.ts.map +1 -1
- package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.js +8 -0
- package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.js.map +1 -1
- package/dist/esm/core/components-registry/component-resolver.frontend.helper.d.ts.map +1 -1
- package/dist/esm/core/components-registry/component-resolver.frontend.helper.js +34 -5
- package/dist/esm/core/components-registry/component-resolver.frontend.helper.js.map +1 -1
- package/dist/esm/core/components-registry/register-framework-layouts.d.ts.map +1 -1
- package/dist/esm/core/components-registry/register-framework-layouts.js +4 -0
- package/dist/esm/core/components-registry/register-framework-layouts.js.map +1 -1
- package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts +36 -0
- package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/app-configuration-frontend.schemas.js +29 -2
- package/dist/esm/core/config/app-configuration-frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/app-level-components.frontend.schemas.d.ts +10 -16
- package/dist/esm/core/config/app-level-components.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/app-level-components.frontend.schemas.js +10 -16
- package/dist/esm/core/config/app-level-components.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/chart-view.frontend.schemas.d.ts +12 -8
- package/dist/esm/core/config/chart-view.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/chart-view.frontend.schemas.js +10 -0
- package/dist/esm/core/config/chart-view.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/composite-view.schemas.d.ts +2 -2
- package/dist/esm/core/config/config-merge-utilities.d.ts +31 -3
- package/dist/esm/core/config/config-merge-utilities.d.ts.map +1 -1
- package/dist/esm/core/config/config-merge-utilities.js +61 -7
- package/dist/esm/core/config/config-merge-utilities.js.map +1 -1
- package/dist/esm/core/config/decision-inbox-capability.frontend.utils.d.ts +83 -0
- package/dist/esm/core/config/decision-inbox-capability.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/config/decision-inbox-capability.frontend.utils.js +100 -0
- package/dist/esm/core/config/decision-inbox-capability.frontend.utils.js.map +1 -0
- package/dist/esm/core/config/directory-provisioning-capabilities.frontend.utils.d.ts +69 -0
- package/dist/esm/core/config/directory-provisioning-capabilities.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/config/directory-provisioning-capabilities.frontend.utils.js +65 -0
- package/dist/esm/core/config/directory-provisioning-capabilities.frontend.utils.js.map +1 -0
- package/dist/esm/core/config/engine-settings-destinations.d.ts +13 -1
- package/dist/esm/core/config/engine-settings-destinations.d.ts.map +1 -1
- package/dist/esm/core/config/engine-settings-destinations.js +588 -155
- package/dist/esm/core/config/engine-settings-destinations.js.map +1 -1
- package/dist/esm/core/config/execution-view.schemas.d.ts +17 -3
- package/dist/esm/core/config/execution-view.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/execution-view.schemas.js +1 -1
- package/dist/esm/core/config/execution-view.schemas.js.map +1 -1
- package/dist/esm/core/config/flows-actors-view.schemas.d.ts +12 -2
- package/dist/esm/core/config/flows-actors-view.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/flows-actors-view.schemas.js +13 -1
- package/dist/esm/core/config/flows-actors-view.schemas.js.map +1 -1
- package/dist/esm/core/config/inserted-view-launcher.schemas.d.ts +12 -11
- package/dist/esm/core/config/inserted-view-launcher.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/inserted-view-launcher.schemas.js +14 -13
- package/dist/esm/core/config/inserted-view-launcher.schemas.js.map +1 -1
- package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts +77 -27
- package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/launcher-items.frontend.schemas.js +18 -13
- package/dist/esm/core/config/launcher-items.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/relationship-side-capabilities.frontend.utils.d.ts +79 -0
- package/dist/esm/core/config/relationship-side-capabilities.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/config/relationship-side-capabilities.frontend.utils.js +95 -0
- package/dist/esm/core/config/relationship-side-capabilities.frontend.utils.js.map +1 -0
- package/dist/esm/core/config/settings-hub-gating.frontend.utils.d.ts +19 -7
- package/dist/esm/core/config/settings-hub-gating.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/config/settings-hub-gating.frontend.utils.js +45 -10
- package/dist/esm/core/config/settings-hub-gating.frontend.utils.js.map +1 -1
- package/dist/esm/core/config/settings-hub-presentation.frontend.utils.d.ts +2 -2
- package/dist/esm/core/config/settings-hub-presentation.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/config/settings-hub-presentation.frontend.utils.js +38 -5
- package/dist/esm/core/config/settings-hub-presentation.frontend.utils.js.map +1 -1
- package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts +94 -10
- package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/settings-hub.frontend.schemas.js +40 -3
- package/dist/esm/core/config/settings-hub.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/useSettingsHubConfig.d.ts.map +1 -1
- package/dist/esm/core/config/useSettingsHubConfig.js +4 -1
- package/dist/esm/core/config/useSettingsHubConfig.js.map +1 -1
- package/dist/esm/core/config/useVisibleSettingsHubConfig.d.ts +2 -2
- package/dist/esm/core/config/useVisibleSettingsHubConfig.d.ts.map +1 -1
- package/dist/esm/core/config/useVisibleSettingsHubConfig.js +7 -8
- package/dist/esm/core/config/useVisibleSettingsHubConfig.js.map +1 -1
- package/dist/esm/core/config/verify-launcher-content.d.ts +16 -2
- package/dist/esm/core/config/verify-launcher-content.d.ts.map +1 -1
- package/dist/esm/core/config/verify-launcher-content.js +64 -4
- package/dist/esm/core/config/verify-launcher-content.js.map +1 -1
- package/dist/esm/core/config/verify-settings-hub-content.d.ts +4 -0
- package/dist/esm/core/config/verify-settings-hub-content.d.ts.map +1 -1
- package/dist/esm/core/config/verify-settings-hub-content.js +34 -0
- package/dist/esm/core/config/verify-settings-hub-content.js.map +1 -1
- package/dist/esm/core/enums/common-enum-registry.d.ts +16 -23
- package/dist/esm/core/enums/common-enum-registry.d.ts.map +1 -1
- package/dist/esm/core/enums/common-enum-registry.js +26 -29
- package/dist/esm/core/enums/common-enum-registry.js.map +1 -1
- package/dist/esm/core/errors/GlobalErrorHandler.d.ts.map +1 -1
- package/dist/esm/core/errors/GlobalErrorHandler.js +71 -9
- package/dist/esm/core/errors/GlobalErrorHandler.js.map +1 -1
- package/dist/esm/core/errors/error-management.frontend.service.d.ts +0 -4
- package/dist/esm/core/errors/error-management.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/errors/error-management.frontend.service.js +5 -8
- package/dist/esm/core/errors/error-management.frontend.service.js.map +1 -1
- package/dist/esm/core/errors/errors.frontend.schemas.d.ts +21 -10
- package/dist/esm/core/errors/errors.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/errors/errors.frontend.schemas.js.map +1 -1
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.d.ts +35 -0
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js +44 -5
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js.map +1 -1
- package/dist/esm/core/events/EventBusContext.js.map +1 -1
- package/dist/esm/core/events/NotificationContext.d.ts +13 -1
- package/dist/esm/core/events/NotificationContext.d.ts.map +1 -1
- package/dist/esm/core/events/NotificationContext.js +89 -22
- package/dist/esm/core/events/NotificationContext.js.map +1 -1
- package/dist/esm/core/events/events.frontend.schemas.d.ts +68 -4
- package/dist/esm/core/events/events.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/events/events.frontend.schemas.js +67 -3
- package/dist/esm/core/events/events.frontend.schemas.js.map +1 -1
- package/dist/esm/core/events/useNotificationPreferenceKinds.d.ts +9 -0
- package/dist/esm/core/events/useNotificationPreferenceKinds.d.ts.map +1 -0
- package/dist/esm/core/events/useNotificationPreferenceKinds.js +50 -0
- package/dist/esm/core/events/useNotificationPreferenceKinds.js.map +1 -0
- package/dist/esm/core/execution/useExecution.js +1 -1
- package/dist/esm/core/execution/useExecution.js.map +1 -1
- package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts.map +1 -1
- package/dist/esm/core/execution/useExecutionParticipationRMM.js +4 -0
- package/dist/esm/core/execution/useExecutionParticipationRMM.js.map +1 -1
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts.map +1 -1
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.js +3 -3
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.js.map +1 -1
- package/dist/esm/core/external-providers/chat-sign-in-completion.frontend.d.ts +52 -0
- package/dist/esm/core/external-providers/chat-sign-in-completion.frontend.d.ts.map +1 -0
- package/dist/esm/core/external-providers/chat-sign-in-completion.frontend.js +88 -0
- package/dist/esm/core/external-providers/chat-sign-in-completion.frontend.js.map +1 -0
- package/dist/esm/core/external-providers/frontend-provider-registry.frontend.service.d.ts +20 -2
- package/dist/esm/core/external-providers/frontend-provider-registry.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/external-providers/frontend-provider-registry.frontend.service.js +18 -1
- package/dist/esm/core/external-providers/frontend-provider-registry.frontend.service.js.map +1 -1
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts +7 -5
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts.map +1 -1
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js +9 -6
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js.map +1 -1
- package/dist/esm/core/features/FeaturesContext.d.ts +9 -1
- package/dist/esm/core/features/FeaturesContext.d.ts.map +1 -1
- package/dist/esm/core/features/FeaturesContext.js +38 -12
- package/dist/esm/core/features/FeaturesContext.js.map +1 -1
- package/dist/esm/core/features/useOperationFeatureAvailability.d.ts.map +1 -1
- package/dist/esm/core/features/useOperationFeatureAvailability.js +4 -0
- package/dist/esm/core/features/useOperationFeatureAvailability.js.map +1 -1
- package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts +90 -33
- package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts.map +1 -1
- package/dist/esm/core/flows-actors/FlowsActorsContext.js +153 -100
- package/dist/esm/core/flows-actors/FlowsActorsContext.js.map +1 -1
- package/dist/esm/core/flows-actors/conversation-history.model.d.ts +41 -0
- package/dist/esm/core/flows-actors/conversation-history.model.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/conversation-history.model.js +65 -0
- package/dist/esm/core/flows-actors/conversation-history.model.js.map +1 -0
- package/dist/esm/core/flows-actors/conversation-thread.model.d.ts +144 -0
- package/dist/esm/core/flows-actors/conversation-thread.model.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/conversation-thread.model.js +315 -0
- package/dist/esm/core/flows-actors/conversation-thread.model.js.map +1 -0
- package/dist/esm/core/flows-actors/execution-usages-batch.frontend.utils.d.ts +29 -0
- package/dist/esm/core/flows-actors/execution-usages-batch.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/execution-usages-batch.frontend.utils.js +67 -0
- package/dist/esm/core/flows-actors/execution-usages-batch.frontend.utils.js.map +1 -0
- package/dist/esm/core/flows-actors/graph-view.layout.d.ts +77 -0
- package/dist/esm/core/flows-actors/graph-view.layout.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/graph-view.layout.js +169 -0
- package/dist/esm/core/flows-actors/graph-view.layout.js.map +1 -0
- package/dist/esm/core/flows-actors/graph-view.model.d.ts +245 -0
- package/dist/esm/core/flows-actors/graph-view.model.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/graph-view.model.js +414 -0
- package/dist/esm/core/flows-actors/graph-view.model.js.map +1 -0
- package/dist/esm/core/flows-actors/model-cost-money.frontend.utils.d.ts +12 -0
- package/dist/esm/core/flows-actors/model-cost-money.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/model-cost-money.frontend.utils.js +20 -0
- package/dist/esm/core/flows-actors/model-cost-money.frontend.utils.js.map +1 -0
- package/dist/esm/core/flows-actors/usePendingDecisions.d.ts +36 -11
- package/dist/esm/core/flows-actors/usePendingDecisions.d.ts.map +1 -1
- package/dist/esm/core/flows-actors/usePendingDecisions.js +114 -29
- package/dist/esm/core/flows-actors/usePendingDecisions.js.map +1 -1
- package/dist/esm/core/guidance/GuidanceContext.d.ts.map +1 -1
- package/dist/esm/core/guidance/GuidanceContext.js +1 -2
- package/dist/esm/core/guidance/GuidanceContext.js.map +1 -1
- package/dist/esm/core/guidance/renderers/GuidanceChecklist.labels.js +2 -2
- package/dist/esm/core/guidance/renderers/GuidanceChecklist.labels.js.map +1 -1
- package/dist/esm/core/hotkey/DefaultHotkeyHandler.d.ts +3 -9
- package/dist/esm/core/hotkey/DefaultHotkeyHandler.d.ts.map +1 -1
- package/dist/esm/core/hotkey/DefaultHotkeyHandler.js +3 -15
- package/dist/esm/core/hotkey/DefaultHotkeyHandler.js.map +1 -1
- package/dist/esm/core/hotkey/merge-hotkey-emit-shortcuts.d.ts +2 -2
- package/dist/esm/core/hotkey/merge-hotkey-emit-shortcuts.js +2 -2
- package/dist/esm/core/hotkey/merge-hotkey-emit-shortcuts.js.map +1 -1
- package/dist/esm/core/i18n/I18nContext.d.ts +52 -3
- package/dist/esm/core/i18n/I18nContext.d.ts.map +1 -1
- package/dist/esm/core/i18n/I18nContext.js +80 -7
- package/dist/esm/core/i18n/I18nContext.js.map +1 -1
- package/dist/esm/core/i18n/regional-preference-resolution.frontend.utils.d.ts +82 -1
- package/dist/esm/core/i18n/regional-preference-resolution.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/i18n/regional-preference-resolution.frontend.utils.js +121 -6
- package/dist/esm/core/i18n/regional-preference-resolution.frontend.utils.js.map +1 -1
- package/dist/esm/core/i18n/useI18n.d.ts +3 -1
- package/dist/esm/core/i18n/useI18n.d.ts.map +1 -1
- package/dist/esm/core/i18n/useI18n.js +3 -1
- package/dist/esm/core/i18n/useI18n.js.map +1 -1
- package/dist/esm/core/icons/IconRegistryBridge.d.ts +38 -4
- package/dist/esm/core/icons/IconRegistryBridge.d.ts.map +1 -1
- package/dist/esm/core/icons/IconRegistryBridge.js +103 -63
- package/dist/esm/core/icons/IconRegistryBridge.js.map +1 -1
- package/dist/esm/core/icons/IconRegistryContext.d.ts.map +1 -1
- package/dist/esm/core/icons/IconRegistryContext.js +41 -0
- package/dist/esm/core/icons/IconRegistryContext.js.map +1 -1
- package/dist/esm/core/icons/icon-registry.frontend.schemas.d.ts +44 -0
- package/dist/esm/core/icons/icon-registry.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/icons/icon-registry.frontend.schemas.js +46 -0
- package/dist/esm/core/icons/icon-registry.frontend.schemas.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js +2 -2
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js.map +1 -1
- package/dist/esm/core/navigation/NavigationContentAreas.d.ts +64 -20
- package/dist/esm/core/navigation/NavigationContentAreas.d.ts.map +1 -1
- package/dist/esm/core/navigation/NavigationContentAreas.js +82 -51
- package/dist/esm/core/navigation/NavigationContentAreas.js.map +1 -1
- package/dist/esm/core/navigation/NavigationContext.d.ts.map +1 -1
- package/dist/esm/core/navigation/NavigationContext.js +130 -23
- package/dist/esm/core/navigation/NavigationContext.js.map +1 -1
- package/dist/esm/core/navigation/NavigationRequestBridge.d.ts +4 -0
- package/dist/esm/core/navigation/NavigationRequestBridge.d.ts.map +1 -1
- package/dist/esm/core/navigation/NavigationRequestBridge.js +17 -1
- package/dist/esm/core/navigation/NavigationRequestBridge.js.map +1 -1
- package/dist/esm/core/navigation/ZoneChromeContext.d.ts +80 -0
- package/dist/esm/core/navigation/ZoneChromeContext.d.ts.map +1 -0
- package/dist/esm/core/navigation/ZoneChromeContext.js +130 -0
- package/dist/esm/core/navigation/ZoneChromeContext.js.map +1 -0
- package/dist/esm/core/navigation/launcher-resolution.d.ts +102 -2
- package/dist/esm/core/navigation/launcher-resolution.d.ts.map +1 -1
- package/dist/esm/core/navigation/launcher-resolution.js +194 -9
- package/dist/esm/core/navigation/launcher-resolution.js.map +1 -1
- package/dist/esm/core/navigation/launcher-runtime-availability.d.ts +35 -5
- package/dist/esm/core/navigation/launcher-runtime-availability.d.ts.map +1 -1
- package/dist/esm/core/navigation/launcher-runtime-availability.js +147 -18
- package/dist/esm/core/navigation/launcher-runtime-availability.js.map +1 -1
- package/dist/esm/core/navigation/navigation-cascade.d.ts +44 -14
- package/dist/esm/core/navigation/navigation-cascade.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation-cascade.js +87 -19
- package/dist/esm/core/navigation/navigation-cascade.js.map +1 -1
- package/dist/esm/core/navigation/navigation-commit.d.ts +45 -0
- package/dist/esm/core/navigation/navigation-commit.d.ts.map +1 -0
- package/dist/esm/core/navigation/navigation-commit.js +68 -0
- package/dist/esm/core/navigation/navigation-commit.js.map +1 -0
- package/dist/esm/core/navigation/navigation-controller-internals.d.ts +54 -3
- package/dist/esm/core/navigation/navigation-controller-internals.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation-controller-internals.js +91 -3
- package/dist/esm/core/navigation/navigation-controller-internals.js.map +1 -1
- package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts +3 -3
- package/dist/esm/core/navigation/navigation-policy-resolver.service.js +3 -3
- package/dist/esm/core/navigation/navigation-policy-resolver.service.js.map +1 -1
- package/dist/esm/core/navigation/navigation.utils.d.ts +95 -22
- package/dist/esm/core/navigation/navigation.utils.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation.utils.js +190 -63
- package/dist/esm/core/navigation/navigation.utils.js.map +1 -1
- package/dist/esm/core/navigation/sidebar-resource-browser-operation.d.ts +8 -0
- package/dist/esm/core/navigation/sidebar-resource-browser-operation.d.ts.map +1 -0
- package/dist/esm/core/navigation/sidebar-resource-browser-operation.js +27 -0
- package/dist/esm/core/navigation/sidebar-resource-browser-operation.js.map +1 -0
- package/dist/esm/core/navigation/useCurrentOrganizationHoldsUnrevokedScimToken.d.ts +64 -0
- package/dist/esm/core/navigation/useCurrentOrganizationHoldsUnrevokedScimToken.d.ts.map +1 -0
- package/dist/esm/core/navigation/useCurrentOrganizationHoldsUnrevokedScimToken.js +212 -0
- package/dist/esm/core/navigation/useCurrentOrganizationHoldsUnrevokedScimToken.js.map +1 -0
- package/dist/esm/core/navigation/useLauncherResolutionContext.d.ts +1 -1
- package/dist/esm/core/navigation/useLauncherResolutionContext.d.ts.map +1 -1
- package/dist/esm/core/navigation/useLauncherResolutionContext.js +17 -2
- package/dist/esm/core/navigation/useLauncherResolutionContext.js.map +1 -1
- package/dist/esm/core/navigation/useNavigationController.d.ts +1 -0
- package/dist/esm/core/navigation/useNavigationController.d.ts.map +1 -1
- package/dist/esm/core/navigation/useNavigationController.js +51 -67
- package/dist/esm/core/navigation/useNavigationController.js.map +1 -1
- package/dist/esm/core/navigation/useNavigationRouterSync.d.ts.map +1 -1
- package/dist/esm/core/navigation/useNavigationRouterSync.js +17 -1
- package/dist/esm/core/navigation/useNavigationRouterSync.js.map +1 -1
- package/dist/esm/core/navigation/useZoneEntryOrganizationHold.d.ts +17 -0
- package/dist/esm/core/navigation/useZoneEntryOrganizationHold.d.ts.map +1 -0
- package/dist/esm/core/navigation/useZoneEntryOrganizationHold.js +32 -0
- package/dist/esm/core/navigation/useZoneEntryOrganizationHold.js.map +1 -0
- package/dist/esm/core/navigation/zone-collapse.d.ts +2 -1
- package/dist/esm/core/navigation/zone-collapse.d.ts.map +1 -1
- package/dist/esm/core/navigation/zone-collapse.js +2 -1
- package/dist/esm/core/navigation/zone-collapse.js.map +1 -1
- package/dist/esm/core/navigation/zone-entry-organization.d.ts +34 -0
- package/dist/esm/core/navigation/zone-entry-organization.d.ts.map +1 -0
- package/dist/esm/core/navigation/zone-entry-organization.js +77 -0
- package/dist/esm/core/navigation/zone-entry-organization.js.map +1 -0
- package/dist/esm/core/requests/auth-refresh-resilience.frontend.d.ts +15 -0
- package/dist/esm/core/requests/auth-refresh-resilience.frontend.d.ts.map +1 -1
- package/dist/esm/core/requests/auth-refresh-resilience.frontend.js +24 -0
- package/dist/esm/core/requests/auth-refresh-resilience.frontend.js.map +1 -1
- package/dist/esm/core/requests/automatic-resend-safety.frontend.d.ts +74 -0
- package/dist/esm/core/requests/automatic-resend-safety.frontend.d.ts.map +1 -0
- package/dist/esm/core/requests/automatic-resend-safety.frontend.js +52 -0
- package/dist/esm/core/requests/automatic-resend-safety.frontend.js.map +1 -0
- package/dist/esm/core/requests/websockets/WebSocketContext.d.ts.map +1 -1
- package/dist/esm/core/requests/websockets/WebSocketContext.js +31 -0
- package/dist/esm/core/requests/websockets/WebSocketContext.js.map +1 -1
- package/dist/esm/core/requests/websockets/WebSocketEventBridge.d.ts.map +1 -1
- package/dist/esm/core/requests/websockets/WebSocketEventBridge.js +2 -0
- package/dist/esm/core/requests/websockets/WebSocketEventBridge.js.map +1 -1
- package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts +162 -98
- package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.js +283 -157
- package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.js.map +1 -1
- package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.d.ts +9 -13
- package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.js +45 -97
- package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.js.map +1 -1
- package/dist/esm/core/requests/wildo-http-client.frontend.service.d.ts +25 -5
- package/dist/esm/core/requests/wildo-http-client.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/requests/wildo-http-client.frontend.service.js +56 -11
- package/dist/esm/core/requests/wildo-http-client.frontend.service.js.map +1 -1
- package/dist/esm/core/resources/ScopedResourceRegistryProvider.d.ts.map +1 -1
- package/dist/esm/core/resources/ScopedResourceRegistryProvider.js +1 -2
- package/dist/esm/core/resources/ScopedResourceRegistryProvider.js.map +1 -1
- package/dist/esm/core/resources/calendar-date-fields.frontend.utils.d.ts +14 -0
- package/dist/esm/core/resources/calendar-date-fields.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/calendar-date-fields.frontend.utils.js +29 -0
- package/dist/esm/core/resources/calendar-date-fields.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/caller-identity-record.frontend.utils.d.ts +23 -0
- package/dist/esm/core/resources/caller-identity-record.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/caller-identity-record.frontend.utils.js +26 -0
- package/dist/esm/core/resources/caller-identity-record.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/collection-export-url.frontend.utils.d.ts +1 -1
- package/dist/esm/core/resources/collection-export-url.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/collection-export-url.frontend.utils.js +34 -16
- package/dist/esm/core/resources/collection-export-url.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/collection-filter-presets.frontend.utils.d.ts +54 -11
- package/dist/esm/core/resources/collection-filter-presets.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/collection-filter-presets.frontend.utils.js +131 -63
- package/dist/esm/core/resources/collection-filter-presets.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/date-filter-window.frontend.utils.d.ts +58 -0
- package/dist/esm/core/resources/date-filter-window.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/date-filter-window.frontend.utils.js +70 -0
- package/dist/esm/core/resources/date-filter-window.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/frontend-resource.utils.d.ts +146 -7
- package/dist/esm/core/resources/frontend-resource.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/frontend-resource.utils.js +194 -22
- package/dist/esm/core/resources/frontend-resource.utils.js.map +1 -1
- package/dist/esm/core/resources/hooks/useOperationEnabled.d.ts +18 -4
- package/dist/esm/core/resources/hooks/useOperationEnabled.d.ts.map +1 -1
- package/dist/esm/core/resources/hooks/useOperationEnabled.js +26 -6
- package/dist/esm/core/resources/hooks/useOperationEnabled.js.map +1 -1
- package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts +95 -2
- package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/operation-semantics.frontend.utils.js +126 -13
- package/dist/esm/core/resources/operation-semantics.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/read-through-organization-unit.frontend.utils.d.ts +45 -0
- package/dist/esm/core/resources/read-through-organization-unit.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/read-through-organization-unit.frontend.utils.js +46 -0
- package/dist/esm/core/resources/read-through-organization-unit.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/referenced-record-scope.frontend.utils.d.ts +46 -0
- package/dist/esm/core/resources/referenced-record-scope.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/referenced-record-scope.frontend.utils.js +86 -0
- package/dist/esm/core/resources/referenced-record-scope.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/relationship-quick-create.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/relationship-quick-create.frontend.utils.js +5 -1
- package/dist/esm/core/resources/relationship-quick-create.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/resource-addressability.frontend.utils.d.ts +28 -1
- package/dist/esm/core/resources/resource-addressability.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/resource-addressability.frontend.utils.js +43 -3
- package/dist/esm/core/resources/resource-addressability.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/resource-discriminators.frontend.utils.d.ts +26 -0
- package/dist/esm/core/resources/resource-discriminators.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/resource-discriminators.frontend.utils.js +37 -0
- package/dist/esm/core/resources/resource-discriminators.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/resources-repository.frontend.service.d.ts +40 -8
- package/dist/esm/core/resources/resources-repository.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/resources/resources-repository.frontend.service.js +333 -73
- package/dist/esm/core/resources/resources-repository.frontend.service.js.map +1 -1
- package/dist/esm/core/resources/resources.frontend.schemas.d.ts +175 -65
- package/dist/esm/core/resources/resources.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/resources/resources.frontend.schemas.js +245 -75
- package/dist/esm/core/resources/resources.frontend.schemas.js.map +1 -1
- package/dist/esm/core/resources/rmm/HttpTransportAdapter.d.ts +9 -1
- package/dist/esm/core/resources/rmm/HttpTransportAdapter.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/HttpTransportAdapter.js +57 -22
- package/dist/esm/core/resources/rmm/HttpTransportAdapter.js.map +1 -1
- package/dist/esm/core/resources/rmm/RMMRegistry.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/RMMRegistry.js +1 -0
- package/dist/esm/core/resources/rmm/RMMRegistry.js.map +1 -1
- package/dist/esm/core/resources/rmm/ResourceMutationManager.d.ts +3 -0
- package/dist/esm/core/resources/rmm/ResourceMutationManager.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/ResourceMutationManager.js +94 -35
- package/dist/esm/core/resources/rmm/ResourceMutationManager.js.map +1 -1
- package/dist/esm/core/resources/rmm/types.d.ts +58 -6
- package/dist/esm/core/resources/rmm/types.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/types.js +17 -0
- package/dist/esm/core/resources/rmm/types.js.map +1 -1
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.d.ts +43 -6
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.js +49 -6
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.js.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceMutationManager.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceMutationManager.js +2 -0
- package/dist/esm/core/resources/rmm/useResourceMutationManager.js.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceRMM.d.ts +2 -0
- package/dist/esm/core/resources/rmm/useResourceRMM.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceRMM.js +10 -3
- package/dist/esm/core/resources/rmm/useResourceRMM.js.map +1 -1
- package/dist/esm/core/resources/temporal-day-groups.frontend.utils.d.ts +22 -0
- package/dist/esm/core/resources/temporal-day-groups.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/temporal-day-groups.frontend.utils.js +31 -0
- package/dist/esm/core/resources/temporal-day-groups.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/ui-behavior-presentation.frontend.utils.d.ts +36 -0
- package/dist/esm/core/resources/ui-behavior-presentation.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/resources/ui-behavior-presentation.frontend.utils.js +88 -0
- package/dist/esm/core/resources/ui-behavior-presentation.frontend.utils.js.map +1 -0
- package/dist/esm/core/resources/useBulkJobProgress.d.ts +6 -0
- package/dist/esm/core/resources/useBulkJobProgress.d.ts.map +1 -1
- package/dist/esm/core/resources/useBulkJobProgress.js +1 -0
- package/dist/esm/core/resources/useBulkJobProgress.js.map +1 -1
- package/dist/esm/core/resources/useCollectionFilterPresetScope.d.ts +14 -0
- package/dist/esm/core/resources/useCollectionFilterPresetScope.d.ts.map +1 -0
- package/dist/esm/core/resources/useCollectionFilterPresetScope.js +29 -0
- package/dist/esm/core/resources/useCollectionFilterPresetScope.js.map +1 -0
- package/dist/esm/core/resources/useHostlessResourceNavigation.d.ts +7 -6
- package/dist/esm/core/resources/useHostlessResourceNavigation.d.ts.map +1 -1
- package/dist/esm/core/resources/useHostlessResourceNavigation.js +35 -21
- package/dist/esm/core/resources/useHostlessResourceNavigation.js.map +1 -1
- package/dist/esm/core/resources/useOperationDirectExecution.d.ts.map +1 -1
- package/dist/esm/core/resources/useOperationDirectExecution.js +25 -10
- package/dist/esm/core/resources/useOperationDirectExecution.js.map +1 -1
- package/dist/esm/core/resources/useRecordSharing.d.ts +58 -0
- package/dist/esm/core/resources/useRecordSharing.d.ts.map +1 -0
- package/dist/esm/core/resources/useRecordSharing.js +220 -0
- package/dist/esm/core/resources/useRecordSharing.js.map +1 -0
- package/dist/esm/core/resources/useResourceLabels.d.ts +4 -1
- package/dist/esm/core/resources/useResourceLabels.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceLabels.js +31 -32
- package/dist/esm/core/resources/useResourceLabels.js.map +1 -1
- package/dist/esm/core/resources/useResourceOperationActions.d.ts +23 -4
- package/dist/esm/core/resources/useResourceOperationActions.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceOperationActions.js +219 -51
- package/dist/esm/core/resources/useResourceOperationActions.js.map +1 -1
- package/dist/esm/core/resources/useResourceOperationOutcomeEmitter.d.ts +10 -1
- package/dist/esm/core/resources/useResourceOperationOutcomeEmitter.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceOperationOutcomeEmitter.js +7 -2
- package/dist/esm/core/resources/useResourceOperationOutcomeEmitter.js.map +1 -1
- package/dist/esm/core/resources/useResourceOperationSurface.d.ts +5 -5
- package/dist/esm/core/resources/useResourceOperationSurface.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceOperationSurface.js +5 -4
- package/dist/esm/core/resources/useResourceOperationSurface.js.map +1 -1
- package/dist/esm/core/resources/useResourceSelection.d.ts +6 -0
- package/dist/esm/core/resources/useResourceSelection.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceSelection.js.map +1 -1
- package/dist/esm/core/resources/utils/operation-enabled-condition.frontend.utils.d.ts +47 -0
- package/dist/esm/core/resources/utils/operation-enabled-condition.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/utils/operation-enabled-condition.frontend.utils.js +117 -4
- package/dist/esm/core/resources/utils/operation-enabled-condition.frontend.utils.js.map +1 -1
- package/dist/esm/core/runtime/AppRouter.d.ts.map +1 -1
- package/dist/esm/core/runtime/AppRouter.js +5 -2
- package/dist/esm/core/runtime/AppRouter.js.map +1 -1
- package/dist/esm/core/runtime/ApplicationMainContext.d.ts +10 -1
- package/dist/esm/core/runtime/ApplicationMainContext.d.ts.map +1 -1
- package/dist/esm/core/runtime/ApplicationMainContext.js +17 -2
- package/dist/esm/core/runtime/ApplicationMainContext.js.map +1 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts +5 -0
- package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts.map +1 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.js +4 -2
- package/dist/esm/core/runtime/domain-module.frontend.definitions.js.map +1 -1
- package/dist/esm/core/runtime/routes.frontend.definitions.d.ts +19 -3
- package/dist/esm/core/runtime/routes.frontend.definitions.d.ts.map +1 -1
- package/dist/esm/core/runtime/routes.frontend.definitions.js +23 -7
- package/dist/esm/core/runtime/routes.frontend.definitions.js.map +1 -1
- package/dist/esm/core/runtime/start-application.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/runtime/start-application.frontend.service.js +3 -1
- package/dist/esm/core/runtime/start-application.frontend.service.js.map +1 -1
- package/dist/esm/core/scope/AppScopeContext.d.ts +7 -2
- package/dist/esm/core/scope/AppScopeContext.d.ts.map +1 -1
- package/dist/esm/core/scope/AppScopeContext.js +56 -10
- package/dist/esm/core/scope/AppScopeContext.js.map +1 -1
- package/dist/esm/core/security/ApplicationRoleTablesContext.d.ts +23 -0
- package/dist/esm/core/security/ApplicationRoleTablesContext.d.ts.map +1 -0
- package/dist/esm/core/security/ApplicationRoleTablesContext.js +27 -0
- package/dist/esm/core/security/ApplicationRoleTablesContext.js.map +1 -0
- package/dist/esm/core/security/AuthSessionContext.d.ts +26 -8
- package/dist/esm/core/security/AuthSessionContext.d.ts.map +1 -1
- package/dist/esm/core/security/AuthSessionContext.js +81 -17
- package/dist/esm/core/security/AuthSessionContext.js.map +1 -1
- package/dist/esm/core/security/RouteOrganizationDecisionContext.d.ts +13 -0
- package/dist/esm/core/security/RouteOrganizationDecisionContext.d.ts.map +1 -0
- package/dist/esm/core/security/RouteOrganizationDecisionContext.js +12 -0
- package/dist/esm/core/security/RouteOrganizationDecisionContext.js.map +1 -0
- package/dist/esm/core/security/StepUpAuthContext.js +5 -5
- package/dist/esm/core/security/StepUpAuthContext.js.map +1 -1
- package/dist/esm/core/security/UserOrgsContext.d.ts +13 -0
- package/dist/esm/core/security/UserOrgsContext.d.ts.map +1 -1
- package/dist/esm/core/security/UserOrgsContext.js +272 -103
- package/dist/esm/core/security/UserOrgsContext.js.map +1 -1
- package/dist/esm/core/security/auth-redirect.frontend.utils.d.ts +1 -0
- package/dist/esm/core/security/auth-redirect.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/security/auth-redirect.frontend.utils.js +3 -2
- package/dist/esm/core/security/auth-redirect.frontend.utils.js.map +1 -1
- package/dist/esm/core/security/effective-permissions.frontend.utils.d.ts +43 -0
- package/dist/esm/core/security/effective-permissions.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/security/effective-permissions.frontend.utils.js +73 -0
- package/dist/esm/core/security/effective-permissions.frontend.utils.js.map +1 -0
- package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts +175 -5
- package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/security/route-organization-access.frontend.utils.js +147 -6
- package/dist/esm/core/security/route-organization-access.frontend.utils.js.map +1 -1
- package/dist/esm/core/security/security.frontend.schemas.d.ts +17 -5
- package/dist/esm/core/security/security.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/security/security.frontend.schemas.js +0 -5
- package/dist/esm/core/security/security.frontend.schemas.js.map +1 -1
- package/dist/esm/core/security/useApplicationRoleTables.d.ts +3 -0
- package/dist/esm/core/security/useApplicationRoleTables.d.ts.map +1 -0
- package/dist/esm/core/security/useApplicationRoleTables.js +11 -0
- package/dist/esm/core/security/useApplicationRoleTables.js.map +1 -0
- package/dist/esm/core/security/useRouteOrganizationAccess.d.ts +9 -0
- package/dist/esm/core/security/useRouteOrganizationAccess.d.ts.map +1 -1
- package/dist/esm/core/security/useRouteOrganizationAccess.js +31 -10
- package/dist/esm/core/security/useRouteOrganizationAccess.js.map +1 -1
- package/dist/esm/core/security/useRouteOrganizationFollow.d.ts +24 -0
- package/dist/esm/core/security/useRouteOrganizationFollow.d.ts.map +1 -0
- package/dist/esm/core/security/useRouteOrganizationFollow.js +76 -0
- package/dist/esm/core/security/useRouteOrganizationFollow.js.map +1 -0
- package/dist/esm/core/ui/UIContext.d.ts +25 -2
- package/dist/esm/core/ui/UIContext.d.ts.map +1 -1
- package/dist/esm/core/ui/UIContext.js +49 -37
- package/dist/esm/core/ui/UIContext.js.map +1 -1
- package/dist/esm/core/ui/design-token.utils.d.ts +0 -11
- package/dist/esm/core/ui/design-token.utils.d.ts.map +1 -1
- package/dist/esm/core/ui/design-token.utils.js +51 -83
- package/dist/esm/core/ui/design-token.utils.js.map +1 -1
- package/dist/esm/core/ui/themes/default.theme.d.ts.map +1 -1
- package/dist/esm/core/ui/themes/default.theme.js +151 -59
- package/dist/esm/core/ui/themes/default.theme.js.map +1 -1
- package/dist/esm/core/ui/themes/focus-indicator.d.ts +221 -0
- package/dist/esm/core/ui/themes/focus-indicator.d.ts.map +1 -0
- package/dist/esm/core/ui/themes/focus-indicator.js +229 -0
- package/dist/esm/core/ui/themes/focus-indicator.js.map +1 -0
- package/dist/esm/core/ui/ui.frontend.schemas.d.ts +7 -0
- package/dist/esm/core/ui/ui.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/ui/useThemePreferenceControl.d.ts.map +1 -1
- package/dist/esm/core/ui/useThemePreferenceControl.js +1 -2
- package/dist/esm/core/ui/useThemePreferenceControl.js.map +1 -1
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +45 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tailwind/index.d.ts.map +1 -1
- package/dist/esm/tailwind/index.js +3 -0
- package/dist/esm/tailwind/index.js.map +1 -1
- package/dist/esm/testing/app-shell-placement-coverage.d.ts.map +1 -1
- package/dist/esm/testing/app-shell-placement-coverage.js +6 -2
- package/dist/esm/testing/app-shell-placement-coverage.js.map +1 -1
- package/dist/esm/testing/mock-builders.d.ts +13 -1
- package/dist/esm/testing/mock-builders.d.ts.map +1 -1
- package/dist/esm/testing/mock-builders.js +35 -1
- package/dist/esm/testing/mock-builders.js.map +1 -1
- package/dist/esm/testing/rmm-helpers.d.ts +5 -3
- package/dist/esm/testing/rmm-helpers.d.ts.map +1 -1
- package/dist/esm/testing/rmm-helpers.js +3 -0
- package/dist/esm/testing/rmm-helpers.js.map +1 -1
- package/dist/esm/testing/test-providers.d.ts.map +1 -1
- package/dist/esm/testing/test-providers.js +3 -0
- package/dist/esm/testing/test-providers.js.map +1 -1
- package/package.json +7 -6
- package/dist/esm/components/flows-actors/flow-node.d.ts +0 -28
- package/dist/esm/components/flows-actors/flow-node.d.ts.map +0 -1
- package/dist/esm/components/flows-actors/flow-node.js +0 -115
- package/dist/esm/components/flows-actors/flow-node.js.map +0 -1
- package/dist/esm/components/resources/CollectionSelectionHeaderRail.d.ts +0 -30
- package/dist/esm/components/resources/CollectionSelectionHeaderRail.d.ts.map +0 -1
- package/dist/esm/components/resources/CollectionSelectionHeaderRail.js +0 -17
- package/dist/esm/components/resources/CollectionSelectionHeaderRail.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* What every layer of the navigation controller needs and no one layer owns: the debug channel, the one
|
|
3
|
+
* function that writes the browser URL, and the resolver inputs a resource operation states about itself
|
|
4
|
+
* (read by the click and by a reload alike, so the two cannot answer differently — #2130).
|
|
4
5
|
*
|
|
5
6
|
* Extracted 2026-09-25 when `useNavigationController.ts` was split — 2,322 lines holding click
|
|
6
7
|
* resolution, URL reconciliation, the ancestor cascade, clean breaks, dismiss and the emit bridge in
|
|
@@ -16,7 +17,10 @@
|
|
|
16
17
|
* router-sync logs — a split is not the moment to change what a diagnostic switch covers.
|
|
17
18
|
*/
|
|
18
19
|
import type { useNavigate } from 'react-router-dom';
|
|
19
|
-
import { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';
|
|
20
|
+
import { NavigationZoneName, ResourceOperationFrontendSurface, type NavigationLayout } from '@wildo-ai/saas-models';
|
|
21
|
+
import { ViewportBreakpoint } from '@wildo-ai/zod-decorators';
|
|
22
|
+
import type { FrontendResourcesRegistry } from '../../core/resources/resources.frontend.schemas';
|
|
23
|
+
import type { NavigationContent, NavigationResolutionContext } from './navigation.schemas';
|
|
20
24
|
export declare const logDebug: (message: string, context?: Record<string, unknown>) => void;
|
|
21
25
|
/**
|
|
22
26
|
* Update the browser URL via React Router's navigate function, so React Router's
|
|
@@ -68,4 +72,51 @@ export declare function resourceOperationOwnsBrowserUrl(operation: {
|
|
|
68
72
|
};
|
|
69
73
|
} | undefined): boolean;
|
|
70
74
|
export declare function updateBrowserUrl(routerNavigate: ReturnType<typeof useNavigate>, urlPath: string, replace?: boolean): void;
|
|
75
|
+
/**
|
|
76
|
+
* The resolver inputs a navigation's CONTENT decides on its own: which operation, what it means, which resource,
|
|
77
|
+
* the surface it declares, its own navigation overrides and its action presentation.
|
|
78
|
+
*
|
|
79
|
+
* One derivation, read by the click (`navigate`) and by a reload (`restoredEntryIsPersistent`), so a pane restored
|
|
80
|
+
* from the URL is resolved from exactly what placed it (#2130). Content that is not a resource operation states
|
|
81
|
+
* none of them, and is resolved as a LIST.
|
|
82
|
+
*/
|
|
83
|
+
export type OperationResolutionInputs = Pick<NavigationResolutionContext, 'operation' | 'effectiveOperation' | 'resourceType' | 'operationSurface' | 'operationOverrides' | 'actionPresentationTransition' | 'actionPresentationIsAuthored'>;
|
|
84
|
+
export declare function deriveOperationResolutionInputs(content: NavigationContent): OperationResolutionInputs;
|
|
85
|
+
/**
|
|
86
|
+
* Whether an entry RESTORED from the URL stands for a `persistent` split, and so must carry `persistent` (#2130).
|
|
87
|
+
*
|
|
88
|
+
* A click resolves `persistent` from the transition chain, and the entry carries it; the zone-dependency cleanup
|
|
89
|
+
* then keeps the pane when the page beneath it changes (`NavigationStackEntry.persistent`). A reload rebuilt the pane
|
|
90
|
+
* from the URL by relationship depth and never asked, so the pane came back without it and the next unrelated
|
|
91
|
+
* primary navigation closed it — `NAVIGATION_LAYOUT_TRIPLE` (APP_EMAIL, APP_ERP, KIT_WIDESCREEN) ships exactly this.
|
|
92
|
+
*
|
|
93
|
+
* So it asks the resolver the question the click asked: the restored content, opened from the zone below the pane it
|
|
94
|
+
* belongs to (`paneZone`), with those zones occupied and the pane free, at the current viewport. It is persistent
|
|
95
|
+
* when the resolver says so AND places it where the reload did (`placedZone`) — a pane collapsed into PRIMARY at this
|
|
96
|
+
* width is placed there by a click too, and carries the flag the same way.
|
|
97
|
+
*
|
|
98
|
+
* RECOMPUTED rather than carried in the URL: everything persistence depends on is recoverable — the layout, the
|
|
99
|
+
* operation's own overrides and action presentation, the viewport — and a URL flag would be a second record of a
|
|
100
|
+
* fact the configuration already holds, one that survives the configuration changing.
|
|
101
|
+
*
|
|
102
|
+
* That includes the RELATIONSHIP's transition (`display.inParentNavigation.transition`, where a relationship declares
|
|
103
|
+
* a companion pane as `{ transition: SPLIT, persistent: true }`). A click passes it only when the pane was opened from the parent's relationship
|
|
104
|
+
* section, and no URL says which control opened a pane. But a reload rebuilds the chain THROUGH that relationship:
|
|
105
|
+
* the ancestor cascade puts the pane's nearest parent in the zone below, found by the same relationship. So the pane
|
|
106
|
+
* is resolved as opened from that parent's section, which is the chain the reload rebuilds. It is resolved for the
|
|
107
|
+
* viewport the way the section resolves it (`resolveViewportDiscriminated`, desktop when unmeasured). A pane opened
|
|
108
|
+
* some other way (a row of a list in the zone below) is restored as if opened through the relationship; the URL
|
|
109
|
+
* cannot tell the two apart.
|
|
110
|
+
*/
|
|
111
|
+
export declare function restoredEntryIsPersistent(params: {
|
|
112
|
+
content: NavigationContent;
|
|
113
|
+
/** The zone the content belongs to — where a click from the zone below would open it. */
|
|
114
|
+
paneZone: NavigationZoneName;
|
|
115
|
+
/** The zone the reload actually placed it in (PRIMARY when the pane is collapsed at this width). */
|
|
116
|
+
placedZone: NavigationZoneName;
|
|
117
|
+
layout: NavigationLayout | undefined;
|
|
118
|
+
registry: FrontendResourcesRegistry;
|
|
119
|
+
viewport: ViewportBreakpoint;
|
|
120
|
+
contentAreaWidth?: number;
|
|
121
|
+
}): boolean;
|
|
71
122
|
//# sourceMappingURL=navigation-controller-internals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-controller-internals.d.ts","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-controller-internals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"navigation-controller-internals.d.ts","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-controller-internals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAEL,kBAAkB,EAClB,gCAAgC,EAChC,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQ9D,OAAO,KAAK,EAAoC,yBAAyB,EAAE,MAAM,+DAA+D,CAAC;AAEjJ,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAK3F,eAAO,MAAM,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAoD,CAAC;AAGpI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE;IAAE,uBAAuB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,gCAAgC,CAAA;KAAE,CAAA;CAAE,GAAG,SAAS,GAClG,OAAO,CAIT;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,EAC9C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAe,GACvB,IAAI,CAUN;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,2BAA2B,EAC3B,WAAW,GAAG,oBAAoB,GAAG,cAAc,GAAG,kBAAkB,GAAG,oBAAoB,GAC7F,8BAA8B,GAAG,8BAA8B,CAClE,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,iBAAiB,GAAG,yBAAyB,CAgBrG;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oGAAoG;IACpG,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAmBV"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* What every layer of the navigation controller needs and no one layer owns: the debug channel, the one
|
|
3
|
+
* function that writes the browser URL, and the resolver inputs a resource operation states about itself
|
|
4
|
+
* (read by the click and by a reload alike, so the two cannot answer differently — #2130).
|
|
4
5
|
*
|
|
5
6
|
* Extracted 2026-09-25 when `useNavigationController.ts` was split — 2,322 lines holding click
|
|
6
7
|
* resolution, URL reconciliation, the ancestor cascade, clean breaks, dismiss and the emit bridge in
|
|
@@ -15,8 +16,11 @@
|
|
|
15
16
|
* own name would be finer-grained and would silently stop every existing toggle from reaching the
|
|
16
17
|
* router-sync logs — a split is not the moment to change what a diagnostic switch covers.
|
|
17
18
|
*/
|
|
18
|
-
import { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';
|
|
19
|
+
import { CoreResourceOperation, NavigationZoneName, ResourceOperationFrontendSurface, } from '@wildo-ai/saas-models';
|
|
20
|
+
import { ViewportBreakpoint } from '@wildo-ai/zod-decorators';
|
|
19
21
|
import { LoggerFrontendService } from '../../core/monitoring/logger.frontend.service.js';
|
|
22
|
+
import { resolveActionPresentationTransition, resolveEffectiveCoreOperationFromOperation, resolveResourceOperationActionPresentation, } from '../../core/resources/operation-semantics.frontend.utils.js';
|
|
23
|
+
import { navigationPolicyResolver, resolveViewportDiscriminated } from './navigation-policy-resolver.service.js';
|
|
20
24
|
import { NavigationUtils } from './navigation.utils.js';
|
|
21
25
|
const logger = LoggerFrontendService.getLogger();
|
|
22
26
|
export const logDebug = logger.debugByType('useNavigationController');
|
|
@@ -81,4 +85,88 @@ export function updateBrowserUrl(routerNavigate, urlPath, replace = false) {
|
|
|
81
85
|
}
|
|
82
86
|
routerNavigate(urlPath, { replace });
|
|
83
87
|
}
|
|
88
|
+
export function deriveOperationResolutionInputs(content) {
|
|
89
|
+
if (!NavigationUtils.isResourceOperationContent(content)) {
|
|
90
|
+
return { operation: CoreResourceOperation.LIST, effectiveOperation: CoreResourceOperation.LIST, actionPresentationIsAuthored: false };
|
|
91
|
+
}
|
|
92
|
+
const operation = content.resourceContext.operation;
|
|
93
|
+
return {
|
|
94
|
+
operation: operation?.operationIdentifier ?? CoreResourceOperation.LIST,
|
|
95
|
+
effectiveOperation: resolveEffectiveCoreOperationFromOperation(operation),
|
|
96
|
+
resourceType: content.resourceContext.resourceType,
|
|
97
|
+
operationSurface: operation?.operationFrontendConfig?.surface,
|
|
98
|
+
operationOverrides: operation?.operationFrontendConfig?.navigationOverrides,
|
|
99
|
+
// The action-presentation ALIAS is read off the operation, never threaded in by a caller: navigation is reached
|
|
100
|
+
// from several action surfaces, and a parameter would have to be passed correctly by every one of them.
|
|
101
|
+
actionPresentationTransition: resolveActionPresentationTransition(resolveResourceOperationActionPresentation(operation)),
|
|
102
|
+
actionPresentationIsAuthored: operation?.operationFrontendConfig?.actionPresentation !== undefined,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** The zone a split INTO `paneZone` was clicked from: the pane opens beside the zone below it. */
|
|
106
|
+
const ZONE_BELOW = {
|
|
107
|
+
[NavigationZoneName.SECONDARY]: NavigationZoneName.PRIMARY,
|
|
108
|
+
[NavigationZoneName.COMPANION]: NavigationZoneName.SECONDARY,
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Whether an entry RESTORED from the URL stands for a `persistent` split, and so must carry `persistent` (#2130).
|
|
112
|
+
*
|
|
113
|
+
* A click resolves `persistent` from the transition chain, and the entry carries it; the zone-dependency cleanup
|
|
114
|
+
* then keeps the pane when the page beneath it changes (`NavigationStackEntry.persistent`). A reload rebuilt the pane
|
|
115
|
+
* from the URL by relationship depth and never asked, so the pane came back without it and the next unrelated
|
|
116
|
+
* primary navigation closed it — `NAVIGATION_LAYOUT_TRIPLE` (APP_EMAIL, APP_ERP, KIT_WIDESCREEN) ships exactly this.
|
|
117
|
+
*
|
|
118
|
+
* So it asks the resolver the question the click asked: the restored content, opened from the zone below the pane it
|
|
119
|
+
* belongs to (`paneZone`), with those zones occupied and the pane free, at the current viewport. It is persistent
|
|
120
|
+
* when the resolver says so AND places it where the reload did (`placedZone`) — a pane collapsed into PRIMARY at this
|
|
121
|
+
* width is placed there by a click too, and carries the flag the same way.
|
|
122
|
+
*
|
|
123
|
+
* RECOMPUTED rather than carried in the URL: everything persistence depends on is recoverable — the layout, the
|
|
124
|
+
* operation's own overrides and action presentation, the viewport — and a URL flag would be a second record of a
|
|
125
|
+
* fact the configuration already holds, one that survives the configuration changing.
|
|
126
|
+
*
|
|
127
|
+
* That includes the RELATIONSHIP's transition (`display.inParentNavigation.transition`, where a relationship declares
|
|
128
|
+
* a companion pane as `{ transition: SPLIT, persistent: true }`). A click passes it only when the pane was opened from the parent's relationship
|
|
129
|
+
* section, and no URL says which control opened a pane. But a reload rebuilds the chain THROUGH that relationship:
|
|
130
|
+
* the ancestor cascade puts the pane's nearest parent in the zone below, found by the same relationship. So the pane
|
|
131
|
+
* is resolved as opened from that parent's section, which is the chain the reload rebuilds. It is resolved for the
|
|
132
|
+
* viewport the way the section resolves it (`resolveViewportDiscriminated`, desktop when unmeasured). A pane opened
|
|
133
|
+
* some other way (a row of a list in the zone below) is restored as if opened through the relationship; the URL
|
|
134
|
+
* cannot tell the two apart.
|
|
135
|
+
*/
|
|
136
|
+
export function restoredEntryIsPersistent(params) {
|
|
137
|
+
const clickSource = ZONE_BELOW[params.paneZone];
|
|
138
|
+
if (!params.layout || !clickSource)
|
|
139
|
+
return false;
|
|
140
|
+
const relationshipTransition = NavigationUtils.isResourceOperationContent(params.content)
|
|
141
|
+
? resolveRelationshipTransitionFromNearestParent(params.content.resourceContext, params.registry, params.viewport)
|
|
142
|
+
: undefined;
|
|
143
|
+
const zoneOccupancy = { [NavigationZoneName.PRIMARY]: true };
|
|
144
|
+
if (clickSource === NavigationZoneName.SECONDARY)
|
|
145
|
+
zoneOccupancy[NavigationZoneName.SECONDARY] = true;
|
|
146
|
+
const resolution = navigationPolicyResolver.resolve({
|
|
147
|
+
...deriveOperationResolutionInputs(params.content),
|
|
148
|
+
relationshipTransition,
|
|
149
|
+
sourceZone: clickSource,
|
|
150
|
+
focusedZone: clickSource,
|
|
151
|
+
viewport: params.viewport,
|
|
152
|
+
contentAreaWidth: params.contentAreaWidth,
|
|
153
|
+
zoneOccupancy,
|
|
154
|
+
zoneDepth: {},
|
|
155
|
+
}, params.layout);
|
|
156
|
+
return resolution.persistent === true && resolution.targetZone === params.placedZone;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The transition the relationship between a restored record and its NEAREST parent declares
|
|
160
|
+
* (`display.inParentNavigation.transition`), resolved for the viewport as the parent's relationship section resolves
|
|
161
|
+
* it. `undefined` when the record has no parent requirement or the relationship declares none. A primary-scope
|
|
162
|
+
* parent (the organization, the user) is skipped: the cascade places no zone for it, so nothing was opened from it.
|
|
163
|
+
*/
|
|
164
|
+
function resolveRelationshipTransitionFromNearestParent(resourceContext, registry, viewport) {
|
|
165
|
+
const requirements = (resourceContext.parentResourcesRequirements ?? []).filter((requirement) => !requirement.isPrimaryScope);
|
|
166
|
+
const nearest = requirements[requirements.length - 1];
|
|
167
|
+
if (!nearest)
|
|
168
|
+
return undefined;
|
|
169
|
+
const relationship = NavigationUtils.findRelationshipBetween(nearest.resourceType, resourceContext.resourceType, registry, nearest.foreignKeyField);
|
|
170
|
+
return resolveViewportDiscriminated(relationship?.display?.inParentNavigation?.transition, viewport ?? ViewportBreakpoint.DESKTOP);
|
|
171
|
+
}
|
|
84
172
|
//# sourceMappingURL=navigation-controller-internals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-controller-internals.js","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-controller-internals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAiE,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;AACpI,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,+BAA+B,CAC7C,SAAmG;IAEnG,MAAM,OAAO,GAAG,SAAS,EAAE,uBAAuB,EAAE,OAAO,CAAC;IAC5D,OAAO,OAAO,KAAK,gCAAgC,CAAC,QAAQ;WACvD,OAAO,KAAK,gCAAgC,CAAC,QAAQ,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,cAA8C,EAC9C,OAAe,EACf,UAAmB,KAAK;IAExB,gFAAgF;IAChF,gFAAgF;IAChF,6EAA6E;IAC7E,2EAA2E;IAC3E,6BAA6B;IAC7B,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,CAAC;QACvC,eAAe,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC;IACD,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/**\n * The two things every layer of the navigation controller needs, and neither of which belongs to any\n * one of them: the debug channel, and the one function that writes the browser URL.\n *\n * Extracted 2026-09-25 when `useNavigationController.ts` was split — 2,322 lines holding click\n * resolution, URL reconciliation, the ancestor cascade, clean breaks, dismiss and the emit bridge in\n * one module. Measured across the seam, the ROUTER-SYNC half used exactly THREE symbols from the\n * controller half (`logDebug` and the two cascade functions), which is what made the split cheap\n * enough to be worth doing at all.\n *\n * ## The debug type name is DELIBERATELY still `useNavigationController`\n *\n * `logger.debugByType` keys on this string, and it is what an operator or a test types to turn the\n * channel on (`setDebugTypeLogging('useNavigationController', true)`). Giving each split module its\n * own name would be finer-grained and would silently stop every existing toggle from reaching the\n * router-sync logs — a split is not the moment to change what a diagnostic switch covers.\n */\n\nimport type { useNavigate } from 'react-router-dom';\n\nimport { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';\n\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\nimport { NavigationUtils } from './navigation.utils';\n\nconst logger = LoggerFrontendService.getLogger();\n\nexport const logDebug: (message: string, context?: Record<string, unknown>) => void = logger.debugByType('useNavigationController');\nlogger.setDebugTypeLogging('useNavigationController', false);\n\n/**\n * Update the browser URL via React Router's navigate function, so React Router's\n * `useLocation` hook updates. Everything derived from `useLocation` depends on\n * this: deep-link shareability, back-button state, and the sidebar's\n * most-specific-active highlight (`useSidebarBehavior` reads `useLocation`).\n *\n * ORDERING (why the transaction): the URL→state reconstruction hooks\n * (`useRouterSync`, `useViewRouterSync`, `useEnginePageRouterSync`,\n * `useSettingsHubOverlaySync`) observe `location` changes and rebuild zone state\n * from the URL — UNLESS the target zone already owns the URL, OR a navigation\n * transaction is active. A controller-driven navigation emits the zone-state\n * entry (event bus → `setState`) and THEN changes the URL; if the URL change is\n * observed before that state has committed, those hooks would re-derive stale\n * content (the race the old code papered over). We therefore open (or extend) a\n * navigation transaction so they skip during the commit window and re-validate\n * via their transaction-aware retry once state has committed — by then the\n * emitted entry owns the URL, so they no-op. This mirrors\n * `navigatePathWithFreshStart` / `emitFreshStartNavigationCleanup`, which already\n * pair `beginTransaction` with a synchronous `routerNavigate`.\n *\n * NOT PAINT-GATED (why not requestAnimationFrame): rAF callbacks are throttled to\n * ~0fps in occluded / backgrounded / throttled tabs, so a deferred\n * `routerNavigate` could be stranded indefinitely — zone content (event bus →\n * state) swaps instantly while the URL, sidebar highlight, and back-button state\n * lag until the tab is refocused (reproduced live: composite-view content visible\n * while `location.pathname` stayed stale for 8+ seconds, converging only on tab\n * activation). The transaction guard fills the ordering role rAF was standing in\n * for, without the paint dependency.\n */\n/**\n * Only a resource operation DECLARED `ADDRESSABLE` owns a browser URL.\n *\n * The URL builders are surface-blind — `resolveResourceUrl` happily produces a\n * pattern URL for any URL-bearing variant, including EMBEDDED (notAddressable)\n * ones — but `AppRouter` registers routes for ADDRESSABLE operations only, so\n * writing such a URL to the browser strands refresh / deep-link on the router\n * 404 (seen live 2026-08-19: a breadcrumb click on the EMBEDDED organizations\n * READ rewrote the URL to `/organizations/:id`, a route that does not exist).\n * EMBEDDED content navigates as pure zone/overlay content instead.\n *\n * An `undefined` surface (synthetic/legacy operation objects that never passed\n * through the registry's Step-2.5 posture resolution) keeps the historical\n * URL-writing behavior — only an EXPLICIT non-addressable declaration opts out.\n */\nexport function resourceOperationOwnsBrowserUrl(\n operation: { operationFrontendConfig?: { surface?: ResourceOperationFrontendSurface } } | undefined,\n): boolean {\n const surface = operation?.operationFrontendConfig?.surface;\n return surface !== ResourceOperationFrontendSurface.EMBEDDED\n && surface !== ResourceOperationFrontendSurface.API_ONLY;\n}\n\nexport function updateBrowserUrl(\n routerNavigate: ReturnType<typeof useNavigate>,\n urlPath: string,\n replace: boolean = false\n): void {\n // Preserve an in-flight transaction's source label (e.g. 'app_level_navigation'\n // opened by the APP_LEVEL clean break in navigate()) — only open a fresh window\n // when none is active (zone-level drill, goBack, non-app-level cascade). The\n // transaction auto-commits on setTimeout(0), after React has committed the\n // preceding zone-state emit.\n if (!NavigationUtils.isInTransaction()) {\n NavigationUtils.beginTransaction('controller_url_update');\n }\n routerNavigate(urlPath, { replace });\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"navigation-controller-internals.js","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-controller-internals.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What every layer of the navigation controller needs and no one layer owns: the debug channel, the one\n * function that writes the browser URL, and the resolver inputs a resource operation states about itself\n * (read by the click and by a reload alike, so the two cannot answer differently — #2130).\n *\n * Extracted 2026-09-25 when `useNavigationController.ts` was split — 2,322 lines holding click\n * resolution, URL reconciliation, the ancestor cascade, clean breaks, dismiss and the emit bridge in\n * one module. Measured across the seam, the ROUTER-SYNC half used exactly THREE symbols from the\n * controller half (`logDebug` and the two cascade functions), which is what made the split cheap\n * enough to be worth doing at all.\n *\n * ## The debug type name is DELIBERATELY still `useNavigationController`\n *\n * `logger.debugByType` keys on this string, and it is what an operator or a test types to turn the\n * channel on (`setDebugTypeLogging('useNavigationController', true)`). Giving each split module its\n * own name would be finer-grained and would silently stop every existing toggle from reaching the\n * router-sync logs — a split is not the moment to change what a diagnostic switch covers.\n */\n\nimport type { useNavigate } from 'react-router-dom';\n\nimport {\n CoreResourceOperation,\n NavigationZoneName,\n ResourceOperationFrontendSurface,\n type NavigationLayout,\n type TransitionConfig,\n} from '@wildo-ai/saas-models';\nimport { ViewportBreakpoint } from '@wildo-ai/zod-decorators';\n\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\nimport {\n resolveActionPresentationTransition,\n resolveEffectiveCoreOperationFromOperation,\n resolveResourceOperationActionPresentation,\n} from '~wildo-frontend-lib/core/resources/operation-semantics.frontend.utils';\nimport type { FrontendResourceOperationContext, FrontendResourcesRegistry } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport { navigationPolicyResolver, resolveViewportDiscriminated } from './navigation-policy-resolver.service';\nimport type { NavigationContent, NavigationResolutionContext } from './navigation.schemas';\nimport { NavigationUtils } from './navigation.utils';\n\nconst logger = LoggerFrontendService.getLogger();\n\nexport const logDebug: (message: string, context?: Record<string, unknown>) => void = logger.debugByType('useNavigationController');\nlogger.setDebugTypeLogging('useNavigationController', false);\n\n/**\n * Update the browser URL via React Router's navigate function, so React Router's\n * `useLocation` hook updates. Everything derived from `useLocation` depends on\n * this: deep-link shareability, back-button state, and the sidebar's\n * most-specific-active highlight (`useSidebarBehavior` reads `useLocation`).\n *\n * ORDERING (why the transaction): the URL→state reconstruction hooks\n * (`useRouterSync`, `useViewRouterSync`, `useEnginePageRouterSync`,\n * `useSettingsHubOverlaySync`) observe `location` changes and rebuild zone state\n * from the URL — UNLESS the target zone already owns the URL, OR a navigation\n * transaction is active. A controller-driven navigation emits the zone-state\n * entry (event bus → `setState`) and THEN changes the URL; if the URL change is\n * observed before that state has committed, those hooks would re-derive stale\n * content (the race the old code papered over). We therefore open (or extend) a\n * navigation transaction so they skip during the commit window and re-validate\n * via their transaction-aware retry once state has committed — by then the\n * emitted entry owns the URL, so they no-op. This mirrors\n * `navigatePathWithFreshStart` / `emitFreshStartNavigationCleanup`, which already\n * pair `beginTransaction` with a synchronous `routerNavigate`.\n *\n * NOT PAINT-GATED (why not requestAnimationFrame): rAF callbacks are throttled to\n * ~0fps in occluded / backgrounded / throttled tabs, so a deferred\n * `routerNavigate` could be stranded indefinitely — zone content (event bus →\n * state) swaps instantly while the URL, sidebar highlight, and back-button state\n * lag until the tab is refocused (reproduced live: composite-view content visible\n * while `location.pathname` stayed stale for 8+ seconds, converging only on tab\n * activation). The transaction guard fills the ordering role rAF was standing in\n * for, without the paint dependency.\n */\n/**\n * Only a resource operation DECLARED `ADDRESSABLE` owns a browser URL.\n *\n * The URL builders are surface-blind — `resolveResourceUrl` happily produces a\n * pattern URL for any URL-bearing variant, including EMBEDDED (notAddressable)\n * ones — but `AppRouter` registers routes for ADDRESSABLE operations only, so\n * writing such a URL to the browser strands refresh / deep-link on the router\n * 404 (seen live 2026-08-19: a breadcrumb click on the EMBEDDED organizations\n * READ rewrote the URL to `/organizations/:id`, a route that does not exist).\n * EMBEDDED content navigates as pure zone/overlay content instead.\n *\n * An `undefined` surface (synthetic/legacy operation objects that never passed\n * through the registry's Step-2.5 posture resolution) keeps the historical\n * URL-writing behavior — only an EXPLICIT non-addressable declaration opts out.\n */\nexport function resourceOperationOwnsBrowserUrl(\n operation: { operationFrontendConfig?: { surface?: ResourceOperationFrontendSurface } } | undefined,\n): boolean {\n const surface = operation?.operationFrontendConfig?.surface;\n return surface !== ResourceOperationFrontendSurface.EMBEDDED\n && surface !== ResourceOperationFrontendSurface.API_ONLY;\n}\n\nexport function updateBrowserUrl(\n routerNavigate: ReturnType<typeof useNavigate>,\n urlPath: string,\n replace: boolean = false\n): void {\n // Preserve an in-flight transaction's source label (e.g. 'app_level_navigation'\n // opened by the APP_LEVEL clean break in navigate()) — only open a fresh window\n // when none is active (zone-level drill, goBack, non-app-level cascade). The\n // transaction auto-commits on setTimeout(0), after React has committed the\n // preceding zone-state emit.\n if (!NavigationUtils.isInTransaction()) {\n NavigationUtils.beginTransaction('controller_url_update');\n }\n routerNavigate(urlPath, { replace });\n}\n\n/**\n * The resolver inputs a navigation's CONTENT decides on its own: which operation, what it means, which resource,\n * the surface it declares, its own navigation overrides and its action presentation.\n *\n * One derivation, read by the click (`navigate`) and by a reload (`restoredEntryIsPersistent`), so a pane restored\n * from the URL is resolved from exactly what placed it (#2130). Content that is not a resource operation states\n * none of them, and is resolved as a LIST.\n */\nexport type OperationResolutionInputs = Pick<\n NavigationResolutionContext,\n 'operation' | 'effectiveOperation' | 'resourceType' | 'operationSurface' | 'operationOverrides'\n | 'actionPresentationTransition' | 'actionPresentationIsAuthored'\n>;\n\nexport function deriveOperationResolutionInputs(content: NavigationContent): OperationResolutionInputs {\n if (!NavigationUtils.isResourceOperationContent(content)) {\n return { operation: CoreResourceOperation.LIST, effectiveOperation: CoreResourceOperation.LIST, actionPresentationIsAuthored: false };\n }\n const operation = content.resourceContext.operation;\n return {\n operation: operation?.operationIdentifier ?? CoreResourceOperation.LIST,\n effectiveOperation: resolveEffectiveCoreOperationFromOperation(operation),\n resourceType: content.resourceContext.resourceType,\n operationSurface: operation?.operationFrontendConfig?.surface,\n operationOverrides: operation?.operationFrontendConfig?.navigationOverrides as NavigationResolutionContext['operationOverrides'],\n // The action-presentation ALIAS is read off the operation, never threaded in by a caller: navigation is reached\n // from several action surfaces, and a parameter would have to be passed correctly by every one of them.\n actionPresentationTransition: resolveActionPresentationTransition(resolveResourceOperationActionPresentation(operation)),\n actionPresentationIsAuthored: operation?.operationFrontendConfig?.actionPresentation !== undefined,\n };\n}\n\n/** The zone a split INTO `paneZone` was clicked from: the pane opens beside the zone below it. */\nconst ZONE_BELOW: Partial<Record<NavigationZoneName, NavigationZoneName>> = {\n [NavigationZoneName.SECONDARY]: NavigationZoneName.PRIMARY,\n [NavigationZoneName.COMPANION]: NavigationZoneName.SECONDARY,\n};\n\n/**\n * Whether an entry RESTORED from the URL stands for a `persistent` split, and so must carry `persistent` (#2130).\n *\n * A click resolves `persistent` from the transition chain, and the entry carries it; the zone-dependency cleanup\n * then keeps the pane when the page beneath it changes (`NavigationStackEntry.persistent`). A reload rebuilt the pane\n * from the URL by relationship depth and never asked, so the pane came back without it and the next unrelated\n * primary navigation closed it — `NAVIGATION_LAYOUT_TRIPLE` (APP_EMAIL, APP_ERP, KIT_WIDESCREEN) ships exactly this.\n *\n * So it asks the resolver the question the click asked: the restored content, opened from the zone below the pane it\n * belongs to (`paneZone`), with those zones occupied and the pane free, at the current viewport. It is persistent\n * when the resolver says so AND places it where the reload did (`placedZone`) — a pane collapsed into PRIMARY at this\n * width is placed there by a click too, and carries the flag the same way.\n *\n * RECOMPUTED rather than carried in the URL: everything persistence depends on is recoverable — the layout, the\n * operation's own overrides and action presentation, the viewport — and a URL flag would be a second record of a\n * fact the configuration already holds, one that survives the configuration changing.\n *\n * That includes the RELATIONSHIP's transition (`display.inParentNavigation.transition`, where a relationship declares\n * a companion pane as `{ transition: SPLIT, persistent: true }`). A click passes it only when the pane was opened from the parent's relationship\n * section, and no URL says which control opened a pane. But a reload rebuilds the chain THROUGH that relationship:\n * the ancestor cascade puts the pane's nearest parent in the zone below, found by the same relationship. So the pane\n * is resolved as opened from that parent's section, which is the chain the reload rebuilds. It is resolved for the\n * viewport the way the section resolves it (`resolveViewportDiscriminated`, desktop when unmeasured). A pane opened\n * some other way (a row of a list in the zone below) is restored as if opened through the relationship; the URL\n * cannot tell the two apart.\n */\nexport function restoredEntryIsPersistent(params: {\n content: NavigationContent;\n /** The zone the content belongs to — where a click from the zone below would open it. */\n paneZone: NavigationZoneName;\n /** The zone the reload actually placed it in (PRIMARY when the pane is collapsed at this width). */\n placedZone: NavigationZoneName;\n layout: NavigationLayout | undefined;\n registry: FrontendResourcesRegistry;\n viewport: ViewportBreakpoint;\n contentAreaWidth?: number;\n}): boolean {\n const clickSource = ZONE_BELOW[params.paneZone];\n if (!params.layout || !clickSource) return false;\n const relationshipTransition = NavigationUtils.isResourceOperationContent(params.content)\n ? resolveRelationshipTransitionFromNearestParent(params.content.resourceContext, params.registry, params.viewport)\n : undefined;\n const zoneOccupancy: Partial<Record<NavigationZoneName, boolean>> = { [NavigationZoneName.PRIMARY]: true };\n if (clickSource === NavigationZoneName.SECONDARY) zoneOccupancy[NavigationZoneName.SECONDARY] = true;\n const resolution = navigationPolicyResolver.resolve({\n ...deriveOperationResolutionInputs(params.content),\n relationshipTransition,\n sourceZone: clickSource,\n focusedZone: clickSource,\n viewport: params.viewport,\n contentAreaWidth: params.contentAreaWidth,\n zoneOccupancy,\n zoneDepth: {},\n }, params.layout);\n return resolution.persistent === true && resolution.targetZone === params.placedZone;\n}\n\n/**\n * The transition the relationship between a restored record and its NEAREST parent declares\n * (`display.inParentNavigation.transition`), resolved for the viewport as the parent's relationship section resolves\n * it. `undefined` when the record has no parent requirement or the relationship declares none. A primary-scope\n * parent (the organization, the user) is skipped: the cascade places no zone for it, so nothing was opened from it.\n */\nfunction resolveRelationshipTransitionFromNearestParent(\n resourceContext: FrontendResourceOperationContext,\n registry: FrontendResourcesRegistry,\n viewport: ViewportBreakpoint | undefined,\n): TransitionConfig | undefined {\n const requirements = (resourceContext.parentResourcesRequirements ?? []).filter((requirement) => !requirement.isPrimaryScope);\n const nearest = requirements[requirements.length - 1];\n if (!nearest) return undefined;\n const relationship = NavigationUtils.findRelationshipBetween(nearest.resourceType, resourceContext.resourceType, registry, nearest.foreignKeyField);\n return resolveViewportDiscriminated(relationship?.display?.inParentNavigation?.transition, viewport ?? ViewportBreakpoint.DESKTOP);\n}\n"]}
|
|
@@ -38,9 +38,9 @@ import { type NavigationResolutionContext, type NavigationResolutionResult } fro
|
|
|
38
38
|
*
|
|
39
39
|
* ## An UNDECLARED collapse defaults to PUSH, and that is a decision
|
|
40
40
|
*
|
|
41
|
-
* `NavigationContentAreas`
|
|
42
|
-
* companion are not shown at all. So on a phone a zone with no `responsiveCollapse` is not
|
|
43
|
-
* alone": content routed there is placed into a zone that does not render, and the user sees
|
|
41
|
+
* `NavigationContentAreas` draws only the primary column below the mobile breakpoint — secondary and
|
|
42
|
+
* companion are collapsed and not shown at all. So on a phone a zone with no `responsiveCollapse` is not
|
|
43
|
+
* "left alone": content routed there is placed into a zone that does not render, and the user sees
|
|
44
44
|
* nothing happen. That is what an undeclared collapse meant before #411, for every application, and
|
|
45
45
|
* it is not a behaviour anyone would choose deliberately.
|
|
46
46
|
*
|
|
@@ -51,9 +51,9 @@ const VIEWPORT_FALLBACK_ORDER = {
|
|
|
51
51
|
*
|
|
52
52
|
* ## An UNDECLARED collapse defaults to PUSH, and that is a decision
|
|
53
53
|
*
|
|
54
|
-
* `NavigationContentAreas`
|
|
55
|
-
* companion are not shown at all. So on a phone a zone with no `responsiveCollapse` is not
|
|
56
|
-
* alone": content routed there is placed into a zone that does not render, and the user sees
|
|
54
|
+
* `NavigationContentAreas` draws only the primary column below the mobile breakpoint — secondary and
|
|
55
|
+
* companion are collapsed and not shown at all. So on a phone a zone with no `responsiveCollapse` is not
|
|
56
|
+
* "left alone": content routed there is placed into a zone that does not render, and the user sees
|
|
57
57
|
* nothing happen. That is what an undeclared collapse meant before #411, for every application, and
|
|
58
58
|
* it is not a behaviour anyone would choose deliberately.
|
|
59
59
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-policy-resolver.service.js","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-policy-resolver.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,IAAI,WAAW,EACpC,sBAAsB,IAAI,YAAY,GAOvC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,6BAA6B,EAC7B,0BAA0B,GAG3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,mEAAmE;AACnE,4CAA4C;AAC5C,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,uBAAuB,GAAqD;IAChF,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC;IACpH,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAC9F,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;CAC3D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAIvC;IACC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,sBAAsB,CAAC,IAAI,CAAC;IAClD,OAAO,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC;AAChG,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAA2C,EAC3C,QAA4B;IAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAU,CAAC;IAE7E,MAAM,MAAM,GAAG,KAA+C,CAAC;IAC/D,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,EAAE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAI,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAa,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAGD,mEAAmE;AACnE,+BAA+B;AAC/B,mEAAmE;AAEnE,MAAM,6BAA6B,GAAG,oBAAoB,CAAC,IAAI,CAAC;AA+BhE,mEAAmE;AACnE,6BAA6B;AAC7B,mEAAmE;AAEnE,MAAM,OAAO,wBAAwB;IAEnC;;;;;;OAMG;IACH,OAAO,CAAC,OAAoC,EAAE,MAAwB;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAEpD;;;;;;WAMG;QACH,MAAM,WAAW,GAAoC,EAAE,CAAC;QAExD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACzF,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;QACtC,IAAI,aAAa,CAAC,UAAU;YAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEzE;;;;;;;;;;;;;;;;;;;;;WAqBG;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,KAAK,6BAA6B,CAAC,gCAAgC;eAC5G,aAAa,CAAC,UAAU,KAAK,6BAA6B,CAAC,uCAAuC;YACrG,CAAC,CAAC,oBAAoB,CAAC,OAAO;YAC9B,CAAC,CAAC,cAAc,CAAC;QAEnB,kFAAkF;QAClF,sEAAsE;QACtE,4EAA4E;QAC5E,sEAAsE;QACtE,uEAAuE;QACvE,oEAAoE;QACpE,0EAA0E;QAC1E,8EAA8E;QAC9E,oEAAoE;QACpE,wEAAwE;QACxE,mEAAmE;QACnE,2CAA2C;QAC3C,EAAE;QACF,0FAA0F;QAC1F,EAAE;QACF,4EAA4E;QAC5E,8EAA8E;QAC9E,yEAAyE;QACzE,gFAAgF;QAChF,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,sCAAsC;QACtC,EAAE;QACF,+EAA+E;QAC/E,4EAA4E;QAC5E,qEAAqE;QACrE,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,2FAA2F;QAC3F,8FAA8F;QAC9F,gGAAgG;QAChG,2FAA2F;QAC3F,gGAAgG;QAChG,0FAA0F;QAC1F,EAAE;QACF,2FAA2F;QAC3F,kFAAkF;QAClF,6FAA6F;QAC7F,kFAAkF;QAClF,oFAAoF;QACpF,IACE,OAAO,CAAC,gBAAgB,KAAK,gCAAgC,CAAC,QAAQ;eACnE,UAAU,KAAK,cAAc,CAAC,OAAO;eACrC,CAAC,CACF,aAAa,KAAK,oBAAoB,CAAC,KAAK;mBACzC,OAAO,CAAC,aAAa,EAAE,CAAC,UAAgC,CAAC,KAAK,IAAI,CACtE;YACD,8FAA8F;YAC9F,8FAA8F;YAC9F,0FAA0F;YAC1F,EAAE;YACF,6FAA6F;YAC7F,8FAA8F;YAC9F,6FAA6F;YAC7F,+FAA+F;YAC/F,2FAA2F;YAC3F,gFAAgF;eAC7E,aAAa,KAAK,oBAAoB,CAAC,OAAO,EACjD,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,2BAA2B,CAAC,CAAC;YAC5E,OAAO;gBACL,UAAU,EAAE,cAAc,CAAC,OAAO;gBAClC,UAAU,EAAE,oBAAoB,CAAC,OAAO;gBACxC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;gBAChF,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,SAAS,IAAI,SAAS;gBACjC,UAAU,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE;aACnG,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3E;;;;;;;;;;;;;;;;;;;;;;WAsBG;QACH,MAAM,mBAAmB,GAAG,YAAY,KAAK,sBAAsB,CAAC,OAAO;YACzE,CAAC,CAAC,cAAc,CAAC,OAAO;YACxB,CAAC,CAAC,YAAY,KAAK,sBAAsB,CAAC,IAAI;gBAC5C,CAAC,CAAC,kBAAkB,CAAC,OAAO;gBAC5B,CAAC,CAAC,UAAU,CAAC;QACjB,MAAM,mBAAmB,GAAG,YAAY,KAAK,sBAAsB,CAAC,OAAO;YACzE,CAAC,CAAC,oBAAoB,CAAC,OAAO;YAC9B,CAAC,CAAC,YAAY,KAAK,sBAAsB,CAAC,IAAI;gBAC5C,CAAC,CAAC,oBAAoB,CAAC,IAAI;gBAC3B,CAAC,CAAC,aAAa,CAAC;QACpB,IAAI,YAAY,KAAK,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACpD,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,2BAA2B,CAAC,CAAC;QAC9E,CAAC;aAAM,IAAI,YAAY,KAAK,sBAAsB,CAAC,IAAI,EAAE,CAAC;YACxD,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,wBAAwB,CAAC,CAAC;QAC3E,CAAC;QAED;;;;;;;;;;;;;;;;WAgBG;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,IAAI,MAAM,CAAC,QAAQ,CAAC;QACrE,MAAM,WAAW,GAAG,mBAAmB,KAAK,cAAc,CAAC,OAAO;YAChE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAyC,CAAC,CAAC;QACjE,MAAM,mBAAmB,GAAG,YAAY,KAAK,SAAS;eACjD,WAAW,KAAK,SAAS;eACzB,mBAAmB,KAAK,oBAAoB,CAAC,IAAI;eACjD,WAAW,IAAI,YAAY,CAAC;QAEjC,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC3F,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACjG,IAAI,mBAAmB;YAAE,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,kCAAkC,CAAC,CAAC;QAE5G,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC;QAE7C;;;WAGG;QACH,MAAM,eAAe,GAAG,eAAe,KAAK,oBAAoB,CAAC,OAAO;YACtE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACtC,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,eAAe;YAC3B,UAAU;YACV,eAAe;YACf,SAAS;YACT,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAE,UAAiC,CAAC,CAAC,CAAC,SAAS;YAC7E,SAAS,EAAE,SAAS,IAAI,SAAS;YACjC;;;;eAIG;YACH,UAAU,EAAE,UAAU,IAAI,eAAe,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACvF,UAAU,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE;SACnG,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,uBAAuB,CACrB,OAAoC,EACpC,MAAwB,EACxB,QAAoC;QAEpC,OAAO;YACL,UAAU,EAAE,cAAc,CAAC,OAAO;YAClC,UAAU,EAAE,oBAAoB,CAAC,OAAO;YACxC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;YAChF,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACrD,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE;gBACV,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,gBAAgB;gBACtD,kBAAkB,EAAE,QAAQ,CAAC,UAAU,CAAC,kBAAkB;gBAC1D,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,6BAA6B,CAAC,2BAA2B,CAAC;aAC7G;SACF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,wCAAwC;IACxC,iEAAiE;IAEzD,iBAAiB,CACvB,OAAoC,EACpC,MAAwB;QAExB;;;;;;;;;;;;;;;;;;;WAmBG;QAEH,8DAA8D;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,cAAc;YAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,0BAA0B,CAAC,kBAAkB,EAAE,CAAC;QAE7G,8CAA8C;QAC9C,EAAE;QACF,0FAA0F;QAC1F,gGAAgG;QAChG,+FAA+F;QAC/F,4FAA4F;QAC5F,2CAA2C;QAC3C,EAAE;QACF,2FAA2F;QAC3F,6FAA6F;QAC7F,iBAAiB;QACjB,IAAI,OAAO,CAAC,4BAA4B,KAAK,IAAI,IAAI,OAAO,CAAC,4BAA4B,KAAK,SAAS,EAAE,CAAC;YACxG,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,4BAA4B;gBAC5C,MAAM,EAAE,0BAA0B,CAAC,4BAA4B;aAChE,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAE,0BAA0B,CAAC,YAAY,EAAE,CAAC;QACrG,CAAC;QAED,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,gBAAgB;YAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,0BAA0B,CAAC,iBAAiB,EAAE,CAAC;QAEhH,gDAAgD;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjG,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO;oBACL,MAAM,EAAE,gBAAgB;oBACxB,MAAM,EAAE,iBAAiB,CAAC,mBAAmB;wBAC3C,CAAC,CAAC,0BAA0B,CAAC,2BAA2B;wBACxD,CAAC,CAAC,0BAA0B,CAAC,kBAAkB;iBAClD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,EAAE;QACF,8FAA8F;QAC9F,gGAAgG;QAChG,6FAA6F;QAC7F,0DAA0D;QAC1D,EAAE;QACF,6FAA6F;QAC7F,yDAAyD;QACzD,IAAI,OAAO,CAAC,4BAA4B,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,4BAA4B;gBAC5C,MAAM,EAAE,0BAA0B,CAAC,2BAA2B;aAC/D,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,MAAM,EAAE,0BAA0B,CAAC,iBAAiB,EAAE,CAAC;IACzG,CAAC;IAED;;;OAGG;IACK,uBAAuB,CAC7B,OAAoC;QAEpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM;YAAE,OAAO,SAAS,CAAC;QAE1D,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,OAAO,QAAQ,CAAC,UAAU,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,eAAe,CACrB,QAAqC,EACrC,OAAoC;QAEpC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAC3B,OAAoC,EACpC,MAAwB;QAExB,IAAI,OAAO,CAAC,QAAQ,KAAK,kBAAkB,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAEtE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAsE,CAAC,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE,WAAW;YAAE,OAAO,SAAS,CAAC;QAElD,OAAO,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED;;;;OAIG;IACK,0BAA0B,CAChC,WAA4B,EAC5B,OAAoC;QAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB;eAC3C,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAkC,CAAC;gBAC3F,CAAC,CAAC,OAAO,CAAC,SAAkC;gBAC5C,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACK,oBAAoB,CAC1B,OAAoC,EACpC,MAAwB;QAExB,IAAI,OAAO,CAAC,UAAU,KAAK,2BAA2B,EAAE,CAAC;YACvD,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;QACnF,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;YACpD,MAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtF,OAAO,QAAQ,KAAK,SAAS;gBAC3B,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE;gBAC1D,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAgC,CAAC,CAAC;QAC1E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;IAC9E,CAAC;IAED,iEAAiE;IACjE,yBAAyB;IACzB,iEAAiE;IAEjE;;;;;;;;;OASG;IACK,gBAAgB,CACtB,UAAgC,EAChC,OAAoC,EACpC,MAAwB,EACxB,UAAmB;QAEnB,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,oBAAoB,CAAC,IAAI,CAAC;YAC/B,KAAK,oBAAoB,CAAC,OAAO,CAAC;YAClC,KAAK,oBAAoB,CAAC,OAAO;gBAC/B,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YAEzD,KAAK,oBAAoB,CAAC,KAAK;gBAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAE9D,KAAK,oBAAoB,CAAC,OAAO;gBAC/B,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YAE1C,KAAK,oBAAoB,CAAC,OAAO;gBAC/B,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAE9C;gBACE,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,uBAAuB,CAAC,OAAoC;QAClE,IAAI,OAAO,CAAC,UAAU,KAAK,2BAA2B,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3F,OAAO,kBAAkB,CAAC,OAAO,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CACxB,OAAoC,EACpC,MAAwB,EACxB,UAAmB;QAEnB,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS;gBAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE;gBACjH,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,6BAA6B,CAAC,uCAAuC,EAAE,CAAC;QAC1H,CAAC;QAED,mFAAmF;QACnF,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,6BAA6B,CAAC,sBAAsB,EAAE,CAAC;YAClH,CAAC;YACD,qCAAqC;YACrC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrF,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,6BAA6B,CAAC,sBAAsB,EAAE,CAAC;YAClH,CAAC;YACD,iEAAiE;YACjE,OAAO;gBACL,IAAI,EAAE,kBAAkB,CAAC,SAAS;gBAClC,UAAU,EAAE,6BAA6B,CAAC,4BAA4B;aACvE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QACzH,CAAC;QAED,mDAAmD;QACnD,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,6BAA6B,CAAC,gCAAgC,EAAE,CAAC;IACtH,CAAC;IAED;;;;;;;;OAQG;IACK,eAAe,CACrB,OAAoC,EACpC,IAAwB;QAExB,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI;YAC3C,CAAC,CAAC,6BAA6B,CAAC,4BAA4B;YAC5D,CAAC,CAAC,6BAA6B,CAAC,sBAAsB,CAAC;IAC3D,CAAC;IAED,iEAAiE;IACjE,wBAAwB;IACxB,iEAAiE;IAEjE;;;OAGG;IACK,gBAAgB,CACtB,UAAgC,EAChC,OAAoC,EACpC,MAAwB;QAExB;;;;;WAKG;QACH,IAAI,UAAU,KAAK,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACjF,OAAO,4BAA4B,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAC1C,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,UAAU,KAAK,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,4BAA4B,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC7G,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACK,sBAAsB,CAC5B,OAAoC;QAEpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM;YAAE,OAAO,SAAS,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACtF,OAAO,QAAQ,CAAC,eAAe,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6DAA6D;IACrD,mBAAmB,CACzB,OAAoC,EACpC,MAAwB;QAExB,IAAI,OAAO,CAAC,UAAU,KAAK,2BAA2B,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC;;;;;;;;;;;eAWG;YACH,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAgC,CAAC,EAAE,UAAU,CAAC;IAC5E,CAAC;IAED,iEAAiE;IACjE,4BAA4B;IAC5B,iEAAiE;IAEjE;;;;;;;;;;;OAWG;IACK,mBAAmB,CACzB,UAA0B,EAC1B,OAAoC,EACpC,MAAwB;QAExB;;;;;WAKG;QACH,IAAI,UAAU,KAAK,cAAc,CAAC,OAAO,IAAI,UAAU,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACvF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,uBAAuB,CAAC;YAC7B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAgC,CAAC;YAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAC;IACL,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,wBAAwB,EAAE,CAAC","sourcesContent":["/**\n * Navigation Policy Resolver — v3 zone-first, operation-driven resolution.\n *\n * Given a source context (zone, appLevel, or overlay), an operation, and the\n * navigation layout config, determines:\n * - Which transition verb to apply (push, replace, split, overlay, inplace, promote)\n * - Which zone the content lands in (derived from the transition verb)\n * - What visual appearance to use (dialog/sheet/drawer for overlay, panel/drawer for split)\n * - Whether the target zone is responsively collapsed at the current viewport, and — since #411 —\n * APPLYING that collapse (push into primary, or overlay) rather than merely reporting it\n * - Whether the push would exceed `maxDepth`, escalating it to an overlay if so\n *\n * Resolution chain (first match wins):\n * 1. Per-resource operation override (highest priority)\n * 2. Per-relationship transition\n * 3. Global viewport override\n * 4. Source context transitions[operation]\n * 5. Framework hardcoded fallback\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport {\n CoreResourceOperation,\n NavigationTransition,\n NavigationZoneName,\n ResponsiveCollapseMode,\n ResourceOperationFrontendSurface,\n OverlayAppearance,\n getTransitionVerb,\n isEphemeralTransition as isEphemeral,\n isPersistentTransition as isPersistent,\n type NavigationLayout,\n type TransitionConfig,\n type ZoneTransitions,\n type ZoneAppearance,\n type ZoneConfig,\n type ViewportDiscriminated,\n} from '@wildo-ai/saas-models';\nimport type { NavigationOperationOverride } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport { ViewportBreakpoint } from '@wildo-ai/zod-decorators';\nimport {\n NavigationZone,\n APP_LEVEL_NAVIGATION_SOURCE,\n NavigationPlacementAdjustment,\n NavigationTransitionSource,\n type NavigationResolutionContext,\n type NavigationResolutionResult,\n} from './navigation.schemas';\nimport { zoneIsCollapsedAtViewport } from './zone-collapse';\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport-Discriminated Resolution Utility\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Viewport priority order — when no exact match exists for the current\n * viewport, fall back to the next more general breakpoint, then to desktop.\n */\nconst VIEWPORT_FALLBACK_ORDER: Record<ViewportBreakpoint, ViewportBreakpoint[]> = {\n [ViewportBreakpoint.MOBILE]: [ViewportBreakpoint.MOBILE, ViewportBreakpoint.VERT_TABLET, ViewportBreakpoint.DESKTOP],\n [ViewportBreakpoint.VERT_TABLET]: [ViewportBreakpoint.VERT_TABLET, ViewportBreakpoint.DESKTOP],\n [ViewportBreakpoint.DESKTOP]: [ViewportBreakpoint.DESKTOP],\n};\n\n/**\n * WHICH collapse a structural zone is under at this viewport, or `undefined` for none.\n *\n * Exported rather than private to the resolver because THREE parties need the answer and none may\n * re-derive it: the resolver places a CLICK's content, `useResponsiveZoneMigration` moves content\n * ALREADY sitting in a zone the viewport has just taken away, and a test pins both. The predicate\n * half (`zoneIsCollapsedAtViewport`) was extracted for exactly this reason on 2026-09-25; this is\n * the mode half, and leaving it private would let the migration disagree with the placement about\n * whether a collapsed pane becomes a page or a sheet — the two halves of one declaration, answered\n * by two functions.\n *\n * Callers own the zone-identity guard, because it is a question about WHICH zone rather than about\n * the viewport.\n *\n * ## An UNDECLARED collapse defaults to PUSH, and that is a decision\n *\n * `NavigationContentAreas` renders a single zone below the mobile breakpoint — secondary and\n * companion are not shown at all. So on a phone a zone with no `responsiveCollapse` is not \"left\n * alone\": content routed there is placed into a zone that does not render, and the user sees\n * nothing happen. That is what an undeclared collapse meant before #411, for every application, and\n * it is not a behaviour anyone would choose deliberately.\n *\n * PUSH rather than OVERLAY because it is the conservative half of the vocabulary: the content\n * appears in primary in context, and BACK pops to what was there before — no dismissal affordance\n * to get wrong, and no modality over a phone-sized viewport. An application that wants the sheet\n * declares `OVERLAY` and gets it.\n *\n * The alternative — return `undefined` and let the content vanish — was rejected because it is the\n * silent degradation #411 exists to remove, and because \"the zone declared nothing\" is not a reason\n * to lose a user's navigation.\n *\n * A viewport-discriminated declaration naming no mode for THIS breakpoint is a gap in the\n * declaration, not a statement that the zone renders — it still would not — so it takes the same\n * default.\n */\nexport function resolveZoneCollapseMode(params: {\n zoneConfig: ZoneConfig | undefined;\n viewport: ViewportBreakpoint | undefined;\n contentAreaWidth?: number;\n}): ResponsiveCollapseMode | undefined {\n if (!zoneIsCollapsedAtViewport(params)) return undefined;\n const declared = params.zoneConfig?.responsiveCollapse;\n if (!declared) return ResponsiveCollapseMode.PUSH;\n return resolveViewportDiscriminated(declared, params.viewport) ?? ResponsiveCollapseMode.PUSH;\n}\n\n/**\n * Resolve a `ViewportDiscriminated<T>` value for the current viewport.\n *\n * If the value is a plain `T`, it applies at all viewports. If it's a\n * viewport-keyed partial record, resolves by trying the current viewport\n * first, then falling back through larger breakpoints.\n *\n * Returns `undefined` when no match is found (caller applies defaults).\n */\nexport function resolveViewportDiscriminated<T>(\n value: ViewportDiscriminated<T> | undefined,\n viewport: ViewportBreakpoint,\n): T | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'object' || !isViewportRecord(value)) return value as T;\n\n const record = value as Partial<Record<ViewportBreakpoint, T>>;\n const fallbacks = VIEWPORT_FALLBACK_ORDER[viewport] ?? [viewport];\n for (const bp of fallbacks) {\n if (bp in record) return record[bp];\n }\n return undefined;\n}\n\n/**\n * Type guard: distinguishes a viewport-keyed record from a plain enum value.\n * Viewport breakpoints are strings like '<md', '<lg', '>=lg'. If any key\n * matches a known breakpoint, the value is a viewport record.\n */\nfunction isViewportRecord<T>(value: unknown): value is Partial<Record<ViewportBreakpoint, T>> {\n if (typeof value !== 'object' || value === null) return false;\n const keys = Object.keys(value);\n const breakpoints = new Set(Object.values(ViewportBreakpoint) as string[]);\n return keys.length > 0 && keys.some(k => breakpoints.has(k));\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Default Fallback Transitions\n// ════════════════════════════════════════════════════════════════\n\nconst FRAMEWORK_FALLBACK_TRANSITION = NavigationTransition.PUSH;\n\n/**\n * What {@link NavigationPolicyResolver.resolveTransition} answers: the config AND which tier\n * produced it.\n *\n * The tier is carried rather than logged because the resolver is a pure function whose whole output\n * is this result — a log line would be visible only while somebody is watching, and a test cannot\n * read one. See {@link NavigationTransitionSource} for why the tier could not be inferred from the\n * verb: seven steps, and every one of them can answer `PUSH`.\n */\ninterface ResolvedTransition {\n config: TransitionConfig;\n source: NavigationTransitionSource;\n}\n\n/**\n * What {@link NavigationPolicyResolver.deriveTargetZone} answers: the zone AND, for a SPLIT, which\n * of its three mutually exclusive outcomes occurred.\n *\n * `SPLIT` is the one verb whose result depends on runtime STATE rather than on the declaration —\n * it opens a free pane, replaces an occupied one, or escalates to an overlay when the layout\n * declares no adjacent zone at all. Those are three different things wearing one name, which is\n * precisely why the EMBEDDED coercion below has to read `zoneOccupancy` instead of the verb.\n */\ninterface DerivedTargetZone {\n zone: NavigationZone;\n adjustment?: NavigationPlacementAdjustment;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Policy Resolver\n// ════════════════════════════════════════════════════════════════\n\nexport class NavigationPolicyResolver {\n\n /**\n * Resolve a navigation event to a concrete result.\n *\n * @param context - Input signals: source zone, operation, viewport, overrides, etc.\n * @param layout - The app's NavigationLayout configuration.\n * @returns What the controller should do: target zone, transition, appearance, collapse state.\n */\n resolve(context: NavigationResolutionContext, layout: NavigationLayout): NavigationResolutionResult {\n const resolved = this.resolveTransition(context, layout);\n const resolvedTransition = resolved.config;\n const transitionVerb = getTransitionVerb(resolvedTransition);\n const ephemeral = isEphemeral(resolvedTransition);\n const persistent = isPersistent(resolvedTransition);\n\n /*\n * ─── PROVENANCE ─────────────────────────────────────────────────────────────────────────────\n *\n * Accumulated as the placement is decided, in application order, so the array reads as the story\n * of how the authored verb became the final one. Nothing branches on it — see\n * `NavigationResolutionProvenance`.\n */\n const adjustments: NavigationPlacementAdjustment[] = [];\n\n const derivedTarget = this.deriveTargetZone(transitionVerb, context, layout, persistent);\n const targetZone = derivedTarget.zone;\n if (derivedTarget.adjustment) adjustments.push(derivedTarget.adjustment);\n\n /*\n * ─── AN ESCALATION REWRITES THE VERB. All four of them. ─────────────────────────────────────\n *\n * A SPLIT that found no adjacent zone lands in the OVERLAY layer, and until 2026-09-25 it kept\n * its SPLIT verb on the way there. The result was an incoherent triple — measured against Wonder\n * Todos' real layout, which declares a SPLIT override and only `zones.primary`:\n *\n * { targetZone: 'overlay', transition: 'split', appearance: 'panel' }\n *\n * `panel` is a `SplitAppearance` handed to the overlay layer, and it reached the overlay\n * container, which has no case for it. Worse, `overlayBehavior` is gated on\n * `finalTransition === OVERLAY` further down, so an operation's authored `modal` /\n * `closeOnOutsideClick` / `showBackdrop` were SILENTLY DROPPED for exactly the content that ends\n * up in a dialog by accident — the one placement where a create form most needs them.\n *\n * The other three escalations already did this: the EMBEDDED coercion returns an explicit\n * `transition: OVERLAY`, responsive collapse rewrites `collapsedTransition`, and the depth\n * ceiling rewrites `finalTransition`. This was the fourth site of one invariant — the shape\n * `.claude/rules/invariant-call-site-enumeration.md` exists for — and it was the site nobody\n * enumerated, including the pass that ADDED the adjustment naming this very branch and asserted\n * only `targetZone` and `adjustments` on it.\n */\n const escalatedVerb = derivedTarget.adjustment === NavigationPlacementAdjustment.SPLIT_ESCALATED_NO_ADJACENT_ZONE\n || derivedTarget.adjustment === NavigationPlacementAdjustment.PERSISTENT_SPLIT_ESCALATED_NO_COMPANION\n ? NavigationTransition.OVERLAY\n : transitionVerb;\n\n // ─── Surface coercion: EMBEDDED never TAKES OVER a structural zone ─────────────\n // `ResourceOperationFrontendSurface.EMBEDDED` is contractually a view\n // \"rendered within a host — overlay/drill-in when standalone\". A STRUCTURAL\n // zone is not a host; it is an addressable surface that already holds\n // something a reader is reading. The transition chain is keyed by core\n // semantics only (an app cannot author \"embedded READ → overlay\" in\n // `transitions`), so when the chain resolves EMBEDDED content onto one we\n // escalate to OVERLAY here — the same escalation posture `resolveSplitTarget`\n // already uses when no adjacent zone exists. Explicit pane outcomes\n // (SPLIT → secondary/companion) and overlay outcomes are hosts and pass\n // through untouched, as does every non-resource content navigation\n // (`operationSurface` is undefined there).\n //\n // ── The zone test was `=== PRIMARY` until 2026-09-11, and that was the whole of #627. ──\n //\n // PUSH and REPLACE both target `getStructuralSourceZone`, i.e. THE ZONE THE\n // REFERENCE WAS CLICKED IN — so whether an EMBEDDED read opened as an overlay\n // or silently replaced the surface beneath it depended on which pane the\n // reference happened to be rendered in. Measured on the workbench's Build plan,\n // which is a hosted pane in SECONDARY: clicking a task reference fetched the\n // aspect row and every one of its split edges, then REPLACED the document the\n // reader was reading with it. Nothing threw, nothing logged, and the page the\n // reader had been on was simply gone.\n //\n // PRIMARY was never the special case. \"Not a host\" is true of every structural\n // zone, and the argument the original comment makes for PRIMARY — it is the\n // addressable surface, not a host — is the same argument for a pane.\n //\n // ── And a SPLIT is a host only when it actually OPENS a pane. ──\n //\n // The exemption below reads `zoneOccupancy`, not the verb, and the difference is the whole\n // defect. `resolveSplitTarget` answers SECONDARY in two situations that mean opposite things:\n // when secondary is FREE it opens a pane beside the source, which is the drill-in host the enum\n // allows — and when both panes are taken it falls through to \"push into secondary (replace\n // existing content)\", which is its own comment's wording for taking a surface over. A verb test\n // cannot tell those apart, so exempting SPLIT wholesale re-opened the hole one line down.\n //\n // Measured on the workbench, which declares ONE pane: the artifact list holds PRIMARY, the\n // document holds SECONDARY, and a reference clicked inside that document resolved\n // `{surface: embedded, verb: split, targetZone: secondary}` — secondary occupied by the very\n // document the reader was reading, replaced by the aspect. Occupancy is the input\n // `resolveSplitTarget` already decides on, so reading it here cannot drift from it.\n if (\n context.operationSurface === ResourceOperationFrontendSurface.EMBEDDED\n && targetZone !== NavigationZone.OVERLAY\n && !(\n escalatedVerb === NavigationTransition.SPLIT\n && context.zoneOccupancy?.[targetZone as NavigationZoneName] !== true\n )\n // …EXCEPT for INPLACE, which takes over nothing either — it is the one transition that places\n // no content in a zone at all, and `deriveTargetZone` only reports a zone for it because \"the\n // source zone\" is the closest thing that function can say about an element-level outcome.\n //\n // Without this exemption the coercion silently rewrote every EMBEDDED inline transition into\n // an overlay BEFORE the controller could hand it to the element host — so the inline-edit kit\n // would have gone on not editing inline, one layer further down than the defect it replaced,\n // and the surface most likely to author `inplace` (a row's EMBEDDED update) is exactly the one\n // it would have hit. Found by driving the real controller; a resolver-level test would not\n // have shown it, because at the resolver an overlay is a perfectly good answer.\n && escalatedVerb !== NavigationTransition.INPLACE\n ) {\n adjustments.push(NavigationPlacementAdjustment.EMBEDDED_COERCED_TO_OVERLAY);\n return {\n targetZone: NavigationZone.OVERLAY,\n transition: NavigationTransition.OVERLAY,\n appearance: this.deriveAppearance(NavigationTransition.OVERLAY, context, layout),\n collapsed: false,\n ephemeral: ephemeral || undefined,\n provenance: { transitionSource: resolved.source, authoredTransition: transitionVerb, adjustments },\n };\n }\n\n const collapseMode = this.resolveCollapseMode(targetZone, context, layout);\n\n /*\n * ─── RESPONSIVE COLLAPSE IS APPLIED HERE, not merely reported ───────────────────────────────\n *\n * Until 2026-09-08 (#411) `collapsed` was computed, returned, and read by nobody: the controller\n * logged it, and `NavigationContentAreas` hid the secondary and companion zones unconditionally\n * on mobile. So content routed to a collapsed zone went into a zone that would not render, and\n * the declared choice between `PUSH` and `OVERLAY` had no effect whatsoever.\n *\n * Collapse is a PLACEMENT decision, which is what this resolver answers, so it belongs here\n * rather than in the controller. Applying it downstream would mean two places deciding where\n * content lands, and the second would have to re-derive the first's inputs.\n *\n * PUSH -> the content joins PRIMARY's stack. The user sees it in context, and back pops\n * to primary's previous content — the enum's own contract.\n * OVERLAY -> the content opens over primary as a sheet/dialog. Dismiss returns underneath.\n *\n * The appearance is derived AFTER the retarget, from the transition the content actually gets:\n * deriving it from the pre-collapse verb would give an overlay a SPLIT appearance\n * (`panel`/`drawer`), which the overlay container cannot render.\n *\n * `collapsed` stays in the result as INFORMATION — it is what lets a reader (and a test) tell a\n * PUSH that was authored from a PUSH that is a collapsed SPLIT, which otherwise look identical.\n */\n const collapsedTargetZone = collapseMode === ResponsiveCollapseMode.OVERLAY\n ? NavigationZone.OVERLAY\n : collapseMode === ResponsiveCollapseMode.PUSH\n ? NavigationZoneName.PRIMARY\n : targetZone;\n const collapsedTransition = collapseMode === ResponsiveCollapseMode.OVERLAY\n ? NavigationTransition.OVERLAY\n : collapseMode === ResponsiveCollapseMode.PUSH\n ? NavigationTransition.PUSH\n : escalatedVerb;\n if (collapseMode === ResponsiveCollapseMode.OVERLAY) {\n adjustments.push(NavigationPlacementAdjustment.RESPONSIVE_COLLAPSE_OVERLAY);\n } else if (collapseMode === ResponsiveCollapseMode.PUSH) {\n adjustments.push(NavigationPlacementAdjustment.RESPONSIVE_COLLAPSE_PUSH);\n }\n\n /*\n * ─── maxDepth: a push past the ceiling becomes an overlay ───────────────────────────────────\n *\n * `NavigationLayout.maxDepth` documents itself as \"when a zone's stack depth reaches `maxDepth`,\n * the next `push` opens an overlay instead\" and, until 2026-09-08 (#411), NOTHING read it — the\n * field and its per-relationship override were declared, validated and inert, so an application\n * that set it got unbounded stacks and no error.\n *\n * It is applied AFTER the collapse above, and the order is load-bearing in both directions: a\n * collapsed SPLIT becomes a push into PRIMARY, which must then answer to PRIMARY's ceiling\n * rather than to the ceiling of the zone it was authored for; and an authored push that is\n * already escalated to an overlay cannot then be collapsed, because an overlay is not a\n * structural zone and has no `responsiveCollapse`.\n *\n * \"Reaches\" is `>=`, taken from the declaration verbatim: at `maxDepth: 3` the third entry is\n * the last one pushed, and the fourth navigation opens an overlay.\n */\n const depthCeiling = context.relationshipMaxDepth ?? layout.maxDepth;\n const targetDepth = collapsedTargetZone === NavigationZone.OVERLAY\n ? undefined\n : context.zoneDepth[collapsedTargetZone as NavigationZoneName];\n const exceedsDepthCeiling = depthCeiling !== undefined\n && targetDepth !== undefined\n && collapsedTransition === NavigationTransition.PUSH\n && targetDepth >= depthCeiling;\n\n const finalTargetZone = exceedsDepthCeiling ? NavigationZone.OVERLAY : collapsedTargetZone;\n const finalTransition = exceedsDepthCeiling ? NavigationTransition.OVERLAY : collapsedTransition;\n if (exceedsDepthCeiling) adjustments.push(NavigationPlacementAdjustment.DEPTH_CEILING_ESCALATED_TO_OVERLAY);\n\n const appearance = this.deriveAppearance(finalTransition, context, layout);\n const collapsed = collapseMode !== undefined;\n\n /*\n * Overlay behaviour rides with the appearance because it is answered by the same declaration and\n * is meaningless without it — only an OVERLAY has a page behind to block, dismiss on, or dim.\n */\n const overlayBehavior = finalTransition === NavigationTransition.OVERLAY\n ? this.resolveOverlayBehavior(context)\n : undefined;\n return {\n targetZone: finalTargetZone,\n transition: finalTransition,\n appearance,\n overlayBehavior,\n collapsed,\n collapsedFromZone: collapsed ? (targetZone as NavigationZoneName) : undefined,\n ephemeral: ephemeral || undefined,\n /*\n * Reported so the entry can carry it. `persistent` chose the COMPANION zone and nothing more\n * until 2026-09-25, while its contract promised the pane would survive the source zone\n * changing — see `NavigationStackEntry.persistent`.\n */\n persistent: persistent && finalTargetZone !== NavigationZone.OVERLAY ? true : undefined,\n provenance: { transitionSource: resolved.source, authoredTransition: transitionVerb, adjustments },\n };\n }\n\n /**\n * The overlay an `INPLACE` transition becomes when the surface has no element-level host.\n *\n * A DOOR on the resolver rather than a re-resolution in the controller, because the controller's\n * way of asking — injecting a synthetic `operationOverrides: [{ transition: OVERLAY }]` — had to\n * lie twice to get an answer: it reported the outcome as an authored override, and it discarded\n * the operation's REAL override along with the `appearance` and `overlayBehavior` on it. Here the\n * context is untouched, so both are read exactly as they would be for any other overlay.\n *\n * The tier that answered `INPLACE` is preserved. What the degradation adds is an adjustment.\n */\n degradeInPlaceToOverlay(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n original: NavigationResolutionResult,\n ): NavigationResolutionResult {\n return {\n targetZone: NavigationZone.OVERLAY,\n transition: NavigationTransition.OVERLAY,\n appearance: this.deriveAppearance(NavigationTransition.OVERLAY, context, layout),\n overlayBehavior: this.resolveOverlayBehavior(context),\n collapsed: false,\n ephemeral: original.ephemeral,\n provenance: {\n transitionSource: original.provenance.transitionSource,\n authoredTransition: original.provenance.authoredTransition,\n adjustments: [...original.provenance.adjustments, NavigationPlacementAdjustment.INPLACE_DEGRADED_TO_OVERLAY],\n },\n };\n }\n\n // ──────────────────────────────────────────────────────────────\n // Step 0–5: Transition Resolution Chain\n // ──────────────────────────────────────────────────────────────\n\n private resolveTransition(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ResolvedTransition {\n /*\n * ## Coverage: steps 1, 1.5 and 2 run in unit tests only — accepted deliberately, 2026-09-08 (#467)\n *\n * Three of this chain's seven steps are authored by NEITHER dogfood application: per-operation\n * navigation overrides (step 1), authored action presentations (step 1.5) and per-relationship\n * transitions (step 2). The resolver reads all three; nothing in either application declares\n * them, so they have never executed outside their own unit tests.\n *\n * Nothing is wrong. The gap is that no application has yet had a reason to declare them, and\n * buying the proof would mean authoring a declaration in order to test it — which proves the\n * harness more than the product. Weighed and accepted; the project's usual bar for a shipped\n * subsystem is knowingly not met for these three.\n *\n * **What would change the answer:** an application authoring any one of the three. That author\n * is the first party to execute the step, and should read a surprise there as expected.\n *\n * Do NOT narrow the chain to the steps something uses today — that was the third option and it\n * was not chosen. The ordering below is load-bearing and its reasoning is written out at each\n * step; a shorter chain would lose it.\n */\n\n // Step 1 — Per-resource operation override (highest priority)\n const overrideResult = this.checkOperationOverrides(context);\n if (overrideResult) return { config: overrideResult, source: NavigationTransitionSource.OPERATION_OVERRIDE };\n\n // Step 1.5 — An AUTHORED action presentation.\n //\n // Ranked here, immediately below `navigationOverrides` and above every app-level default,\n // because both are authored ON THIS OPERATION and the override is the more specific of the two:\n // it names the zone, the appearance and the viewport, so an author who wrote one meant it. The\n // presentation axis says only what KIND of chrome the action wants, which is exactly why it\n // yields to the instrument that says more.\n //\n // A relationship- or zone-level transition, by contrast, is a default for a WHOLE CLASS of\n // navigations, and an operation that has declared its own presentation is not asking for the\n // class default.\n if (context.actionPresentationIsAuthored === true && context.actionPresentationTransition !== undefined) {\n return {\n config: context.actionPresentationTransition,\n source: NavigationTransitionSource.AUTHORED_ACTION_PRESENTATION,\n };\n }\n\n // Step 2 — Per-relationship transition\n if (context.relationshipTransition !== undefined) {\n return { config: context.relationshipTransition, source: NavigationTransitionSource.RELATIONSHIP };\n }\n\n // Step 3 — Global viewport override\n const viewportOverride = this.checkViewportOverride(context, layout);\n if (viewportOverride) return { config: viewportOverride, source: NavigationTransitionSource.VIEWPORT_OVERRIDE };\n\n // Step 4 — Source config transitions[operation]\n const sourceTransitions = this.getSourceTransitions(context, layout);\n if (sourceTransitions.transitions) {\n const transitionConfig = this.getTransitionBySemanticKey(sourceTransitions.transitions, context);\n if (transitionConfig) {\n return {\n config: transitionConfig,\n source: sourceTransitions.borrowedFromPrimary\n ? NavigationTransitionSource.OVERLAY_FALLBACK_TO_PRIMARY\n : NavigationTransitionSource.SOURCE_TRANSITIONS,\n };\n }\n }\n\n // Step 4.5 — A DERIVED action presentation.\n //\n // Below every authored configuration and above the framework fallback ONLY. The derivation is\n // the framework's guess about an operation nobody configured, so it may improve the default and\n // must never override a decision an app already made — an app whose zone `transitions` route\n // this operation somewhere keeps that routing, unchanged.\n //\n // In practice this is the step that turns \"a custom action with two fields\" from a full page\n // into an overlay, which is the whole point of the axis.\n if (context.actionPresentationTransition !== undefined) {\n return {\n config: context.actionPresentationTransition,\n source: NavigationTransitionSource.DERIVED_ACTION_PRESENTATION,\n };\n }\n\n // Step 5 — Framework fallback\n return { config: FRAMEWORK_FALLBACK_TRANSITION, source: NavigationTransitionSource.FRAMEWORK_DEFAULT };\n }\n\n /**\n * Step 1: Check per-resource operation overrides.\n * First-match wins. Matches on fromZone + viewport discriminators.\n */\n private checkOperationOverrides(\n context: NavigationResolutionContext,\n ): TransitionConfig | undefined {\n if (!context.operationOverrides?.length) return undefined;\n\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context)) {\n return override.transition;\n }\n }\n return undefined;\n }\n\n /**\n * Match an override against the current context.\n * Both `fromZone` and `viewport` must match when specified.\n */\n private overrideMatches(\n override: NavigationOperationOverride,\n context: NavigationResolutionContext,\n ): boolean {\n if (override.fromZone !== undefined && override.fromZone !== context.sourceZone) {\n return false;\n }\n if (override.viewport !== undefined && override.viewport !== context.viewport) {\n return false;\n }\n return true;\n }\n\n /**\n * Step 3: Check global viewport override.\n * Reads `layout[viewport].transitions[operation]`.\n */\n private checkViewportOverride(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): TransitionConfig | undefined {\n if (context.viewport === ViewportBreakpoint.DESKTOP) return undefined;\n\n const viewportBlock = layout[context.viewport as ViewportBreakpoint.MOBILE | ViewportBreakpoint.VERT_TABLET];\n if (!viewportBlock?.transitions) return undefined;\n\n return this.getTransitionBySemanticKey(viewportBlock.transitions, context);\n }\n\n /**\n * Transition maps are keyed by core semantics, not arbitrary operation ids.\n * Custom addressable operations therefore resolve through their effective core\n * semantic while literal core operations still match directly.\n */\n private getTransitionBySemanticKey(\n transitions: ZoneTransitions,\n context: NavigationResolutionContext,\n ): TransitionConfig | undefined {\n const transitionKey = context.effectiveOperation\n ?? (Object.values(CoreResourceOperation).includes(context.operation as CoreResourceOperation)\n ? context.operation as CoreResourceOperation\n : undefined);\n\n if (!transitionKey) {\n return undefined;\n }\n\n return transitions[transitionKey];\n }\n\n /**\n * Step 4: Get the transition map from the appropriate source config.\n *\n * ## An OVERLAY source falls back to the zone it is LANDING IN\n *\n * `fromOverlay` is the app's statement about leaving an overlay, and it wins. What it does NOT\n * mean is that an app which declared nothing there has declared nothing at all: an overlay is not\n * a structural zone, so `getStructuralSourceZone` already answers PRIMARY for it — a structural\n * navigation out of an overlay IS a primary navigation. Reading a different map for the VERB than\n * for the ZONE is how the two came to disagree.\n *\n * Measured on the workbench, 2026-09-25. Its layout declares `zones.primary.transitions.read =\n * SPLIT` and no `fromOverlay` at all. Clicking an aspect popup's `family` backlink — an\n * ADDRESSABLE artifact — found no overlay map, fell through to the framework fallback `PUSH`, and\n * landed in PRIMARY: the artifact took the WHOLE PAGE, replacing the artifact list it should have\n * opened beside. The application had said what a READ does on the page; the resolver did not ask.\n *\n * Wonder CRM is the control and is untouched: it declares `fromOverlay.read = PUSH` deliberately\n * (\"ADDRESSABLE targets legitimately leave the overlay and become the page\"), that map answers,\n * and the fallback never runs. The fallback also covers the gap INSIDE a declared map — one that\n * names READ says nothing about LIST, and that gap used to take the framework default too.\n *\n * APP_LEVEL is deliberately NOT given the same fallback. A menubar click is a layout RESET with\n * its own meaning, and an app that declares no `appLevel` map has not thereby asked for primary's\n * drill-in verbs — it has asked for the framework default, which is what it gets.\n */\n private getSourceTransitions(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): { transitions: ZoneTransitions | undefined; borrowedFromPrimary: boolean } {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE) {\n return { transitions: layout.appLevel?.transitions, borrowedFromPrimary: false };\n }\n if (context.sourceZone === 'overlay') {\n const fromOverlay = layout.fromOverlay?.transitions;\n const declared = fromOverlay && this.getTransitionBySemanticKey(fromOverlay, context);\n return declared !== undefined\n ? { transitions: fromOverlay, borrowedFromPrimary: false }\n : { transitions: layout.zones.primary?.transitions, borrowedFromPrimary: true };\n }\n const zoneConfig = layout.zones[context.sourceZone as NavigationZoneName];\n return { transitions: zoneConfig?.transitions, borrowedFromPrimary: false };\n }\n\n // ──────────────────────────────────────────────────────────────\n // Target Zone Derivation\n // ──────────────────────────────────────────────────────────────\n\n /**\n * Derive the target zone from the resolved transition verb.\n *\n * - push/replace → same zone (primary for appLevel/overlay sources)\n * - split → first available adjacent zone (secondary, then companion)\n * - split(persistent) → companion specifically\n * - overlay → OVERLAY\n * - inplace → same zone (no stack change)\n * - promote → primary\n */\n private deriveTargetZone(\n transition: NavigationTransition,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n persistent: boolean,\n ): DerivedTargetZone {\n switch (transition) {\n case NavigationTransition.PUSH:\n case NavigationTransition.REPLACE:\n case NavigationTransition.INPLACE:\n return { zone: this.getStructuralSourceZone(context) };\n\n case NavigationTransition.SPLIT:\n return this.resolveSplitTarget(context, layout, persistent);\n\n case NavigationTransition.OVERLAY:\n return { zone: NavigationZone.OVERLAY };\n\n case NavigationTransition.PROMOTE:\n return { zone: NavigationZoneName.PRIMARY };\n\n default:\n return { zone: NavigationZoneName.PRIMARY };\n }\n }\n\n /**\n * For push/replace/inplace: return the source zone as a structural zone.\n * AppLevel and overlay sources map to primary.\n */\n private getStructuralSourceZone(context: NavigationResolutionContext): NavigationZone {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE || context.sourceZone === 'overlay') {\n return NavigationZoneName.PRIMARY;\n }\n return context.sourceZone;\n }\n\n /**\n * Resolve the target zone for a SPLIT transition.\n * Persistent splits always target companion. Non-persistent splits\n * target the first available adjacent zone.\n * Falls back to overlay if no adjacent zone is declared in config.\n */\n private resolveSplitTarget(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n persistent: boolean,\n ): DerivedTargetZone {\n if (persistent) {\n return layout.zones.companion\n ? { zone: NavigationZoneName.COMPANION, adjustment: this.splitOutcomeFor(context, NavigationZoneName.COMPANION) }\n : { zone: NavigationZone.OVERLAY, adjustment: NavigationPlacementAdjustment.PERSISTENT_SPLIT_ESCALATED_NO_COMPANION };\n }\n\n // Prefer secondary if declared, otherwise companion, otherwise escalate to overlay\n if (layout.zones.secondary) {\n if (!context.zoneOccupancy?.[NavigationZoneName.SECONDARY]) {\n return { zone: NavigationZoneName.SECONDARY, adjustment: NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE };\n }\n // Secondary occupied — try companion\n if (layout.zones.companion && !context.zoneOccupancy?.[NavigationZoneName.COMPANION]) {\n return { zone: NavigationZoneName.COMPANION, adjustment: NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE };\n }\n // Both occupied — push into secondary (replace existing content)\n return {\n zone: NavigationZoneName.SECONDARY,\n adjustment: NavigationPlacementAdjustment.SPLIT_REPLACED_OCCUPIED_PANE,\n };\n }\n\n if (layout.zones.companion) {\n return { zone: NavigationZoneName.COMPANION, adjustment: this.splitOutcomeFor(context, NavigationZoneName.COMPANION) };\n }\n\n // No adjacent zones declared — escalate to overlay\n return { zone: NavigationZone.OVERLAY, adjustment: NavigationPlacementAdjustment.SPLIT_ESCALATED_NO_ADJACENT_ZONE };\n }\n\n /**\n * Did a split into `zone` OPEN a pane or REPLACE what was in one?\n *\n * The same question `resolveSplitTarget`'s secondary branch answers inline by construction — it\n * only reaches companion when secondary is taken — but the two branches that target companion\n * DIRECTLY (a persistent split, and a layout declaring companion without secondary) choose the\n * zone before asking, so they ask here. Reading `zoneOccupancy` is what keeps both answers derived\n * from one input rather than from two nearly-identical inline conditions.\n */\n private splitOutcomeFor(\n context: NavigationResolutionContext,\n zone: NavigationZoneName,\n ): NavigationPlacementAdjustment {\n return context.zoneOccupancy?.[zone] === true\n ? NavigationPlacementAdjustment.SPLIT_REPLACED_OCCUPIED_PANE\n : NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE;\n }\n\n // ──────────────────────────────────────────────────────────────\n // Appearance Derivation\n // ──────────────────────────────────────────────────────────────\n\n /**\n * Derive visual appearance from zone config, resolved for the current viewport.\n * Only overlay and split transitions have meaningful appearance.\n */\n private deriveAppearance(\n transition: NavigationTransition,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): OverlayAppearance | undefined {\n /*\n * OVERLAY only. A SPLIT used to derive a `SplitAppearance` here and nothing ever read it — see\n * the removal note in `navigation.shared.schemas.ts`. How a PANE renders is `SplitConfig`'s\n * geometry (`orientation`, `ratio`, the zone's width bounds), which the content areas read\n * directly from the layout rather than off a resolution.\n */\n if (transition !== NavigationTransition.OVERLAY) {\n return undefined;\n }\n\n // Check operation override appearance first\n if (context.operationOverrides?.length) {\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context) && override.appearance !== undefined) {\n return resolveViewportDiscriminated(override.appearance, context.viewport) as\n OverlayAppearance | undefined;\n }\n }\n }\n\n // Read from source zone's appearance config\n const zoneAppearance = this.getSourceAppearance(context, layout);\n if (transition === NavigationTransition.OVERLAY) {\n return resolveViewportDiscriminated(zoneAppearance?.overlay, context.viewport) ?? OverlayAppearance.DIALOG;\n }\n return undefined;\n }\n\n /**\n * The overlay behaviour declared by a matching per-operation override, if any.\n *\n * First match wins, exactly as the transition and appearance do — one override describes one\n * situation, so reading a different override's behaviour than its transition would let a single\n * declaration be split across two answers.\n */\n private resolveOverlayBehavior(\n context: NavigationResolutionContext,\n ): NavigationResolutionResult['overlayBehavior'] {\n if (!context.operationOverrides?.length) return undefined;\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context) && override.overlayBehavior !== undefined) {\n return override.overlayBehavior;\n }\n }\n return undefined;\n }\n\n /** Get the appearance config from the appropriate source. */\n private getSourceAppearance(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ZoneAppearance | undefined {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE) {\n return layout.appLevel?.appearance;\n }\n if (context.sourceZone === 'overlay') {\n /*\n * PRIMARY's appearance, for the same reason its TRANSITIONS are read in `getSourceTransitions`:\n * a structural navigation out of an overlay lands in PRIMARY, so PRIMARY's declaration is the\n * one that describes it. `FromOverlayConfig` declares no appearance of its own, and returning\n * `undefined` here sent every such navigation to the framework default instead of to the\n * layout's — the same \"skip what the app declared\" shape the transition lookup had.\n *\n * This read `undefined` with the comment \"overlays within overlays shouldn't happen\", and that\n * is no longer true in either half: an overlay opened FROM an overlay now stacks (it is how a\n * reader walks an aspect graph popup to popup and walks back out), and a SPLIT out of an\n * overlay is exactly the case this function was skipping.\n */\n return layout.zones.primary?.appearance;\n }\n return layout.zones[context.sourceZone as NavigationZoneName]?.appearance;\n }\n\n // ──────────────────────────────────────────────────────────────\n // Responsive Collapse Check\n // ──────────────────────────────────────────────────────────────\n\n /**\n * WHICH collapse the target zone is under at this viewport, or `undefined` for none.\n *\n * Only secondary and companion zones can collapse. Primary never collapses — it is the zone\n * collapsed content moves INTO. Overlay is not a structural zone and cannot collapse either.\n *\n * This returned a BOOLEAN until 2026-09-08 (#411), and the boolean is why the whole mechanism was\n * inert: `PUSH` and `OVERLAY` are the entire content of the declaration, and a flag that says\n * \"collapsed\" without saying which cannot place anything. The consumer would have had to re-read\n * `layout.zones[…].responsiveCollapse` and re-resolve the breakpoint itself — a second copy of\n * this decision, free to disagree with the first.\n */\n private resolveCollapseMode(\n targetZone: NavigationZone,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ResponsiveCollapseMode | undefined {\n /*\n * The zone-identity guard stays HERE and the viewport decision lives in `resolveZoneCollapseMode`,\n * because they are different questions: primary never collapses (it is the zone collapsed content\n * moves INTO) and overlay is not a structural zone — neither fact depends on how wide the window\n * is. Everything that does is shared with the migration hook, which must not re-derive it.\n */\n if (targetZone === NavigationZone.OVERLAY || targetZone === NavigationZoneName.PRIMARY) {\n return undefined;\n }\n return resolveZoneCollapseMode({\n zoneConfig: layout.zones[targetZone as NavigationZoneName],\n viewport: context.viewport,\n contentAreaWidth: context.contentAreaWidth,\n });\n }\n}\n\n/** Singleton instance for use across the frontend. */\nexport const navigationPolicyResolver = new NavigationPolicyResolver();\n"]}
|
|
1
|
+
{"version":3,"file":"navigation-policy-resolver.service.js","sourceRoot":"","sources":["../../../../../src/core/navigation/navigation-policy-resolver.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Navigation Policy Resolver — v3 zone-first, operation-driven resolution.\n *\n * Given a source context (zone, appLevel, or overlay), an operation, and the\n * navigation layout config, determines:\n * - Which transition verb to apply (push, replace, split, overlay, inplace, promote)\n * - Which zone the content lands in (derived from the transition verb)\n * - What visual appearance to use (dialog/sheet/drawer for overlay, panel/drawer for split)\n * - Whether the target zone is responsively collapsed at the current viewport, and — since #411 —\n * APPLYING that collapse (push into primary, or overlay) rather than merely reporting it\n * - Whether the push would exceed `maxDepth`, escalating it to an overlay if so\n *\n * Resolution chain (first match wins):\n * 1. Per-resource operation override (highest priority)\n * 2. Per-relationship transition\n * 3. Global viewport override\n * 4. Source context transitions[operation]\n * 5. Framework hardcoded fallback\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport {\n CoreResourceOperation,\n NavigationTransition,\n NavigationZoneName,\n ResponsiveCollapseMode,\n ResourceOperationFrontendSurface,\n OverlayAppearance,\n getTransitionVerb,\n isEphemeralTransition as isEphemeral,\n isPersistentTransition as isPersistent,\n type NavigationLayout,\n type TransitionConfig,\n type ZoneTransitions,\n type ZoneAppearance,\n type ZoneConfig,\n type ViewportDiscriminated,\n} from '@wildo-ai/saas-models';\nimport type { NavigationOperationOverride } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport { ViewportBreakpoint } from '@wildo-ai/zod-decorators';\nimport {\n NavigationZone,\n APP_LEVEL_NAVIGATION_SOURCE,\n NavigationPlacementAdjustment,\n NavigationTransitionSource,\n type NavigationResolutionContext,\n type NavigationResolutionResult,\n} from './navigation.schemas';\nimport { zoneIsCollapsedAtViewport } from './zone-collapse';\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport-Discriminated Resolution Utility\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Viewport priority order — when no exact match exists for the current\n * viewport, fall back to the next more general breakpoint, then to desktop.\n */\nconst VIEWPORT_FALLBACK_ORDER: Record<ViewportBreakpoint, ViewportBreakpoint[]> = {\n [ViewportBreakpoint.MOBILE]: [ViewportBreakpoint.MOBILE, ViewportBreakpoint.VERT_TABLET, ViewportBreakpoint.DESKTOP],\n [ViewportBreakpoint.VERT_TABLET]: [ViewportBreakpoint.VERT_TABLET, ViewportBreakpoint.DESKTOP],\n [ViewportBreakpoint.DESKTOP]: [ViewportBreakpoint.DESKTOP],\n};\n\n/**\n * WHICH collapse a structural zone is under at this viewport, or `undefined` for none.\n *\n * Exported rather than private to the resolver because THREE parties need the answer and none may\n * re-derive it: the resolver places a CLICK's content, `useResponsiveZoneMigration` moves content\n * ALREADY sitting in a zone the viewport has just taken away, and a test pins both. The predicate\n * half (`zoneIsCollapsedAtViewport`) was extracted for exactly this reason on 2026-09-25; this is\n * the mode half, and leaving it private would let the migration disagree with the placement about\n * whether a collapsed pane becomes a page or a sheet — the two halves of one declaration, answered\n * by two functions.\n *\n * Callers own the zone-identity guard, because it is a question about WHICH zone rather than about\n * the viewport.\n *\n * ## An UNDECLARED collapse defaults to PUSH, and that is a decision\n *\n * `NavigationContentAreas` draws only the primary column below the mobile breakpoint — secondary and\n * companion are collapsed and not shown at all. So on a phone a zone with no `responsiveCollapse` is not\n * \"left alone\": content routed there is placed into a zone that does not render, and the user sees\n * nothing happen. That is what an undeclared collapse meant before #411, for every application, and\n * it is not a behaviour anyone would choose deliberately.\n *\n * PUSH rather than OVERLAY because it is the conservative half of the vocabulary: the content\n * appears in primary in context, and BACK pops to what was there before — no dismissal affordance\n * to get wrong, and no modality over a phone-sized viewport. An application that wants the sheet\n * declares `OVERLAY` and gets it.\n *\n * The alternative — return `undefined` and let the content vanish — was rejected because it is the\n * silent degradation #411 exists to remove, and because \"the zone declared nothing\" is not a reason\n * to lose a user's navigation.\n *\n * A viewport-discriminated declaration naming no mode for THIS breakpoint is a gap in the\n * declaration, not a statement that the zone renders — it still would not — so it takes the same\n * default.\n */\nexport function resolveZoneCollapseMode(params: {\n zoneConfig: ZoneConfig | undefined;\n viewport: ViewportBreakpoint | undefined;\n contentAreaWidth?: number;\n}): ResponsiveCollapseMode | undefined {\n if (!zoneIsCollapsedAtViewport(params)) return undefined;\n const declared = params.zoneConfig?.responsiveCollapse;\n if (!declared) return ResponsiveCollapseMode.PUSH;\n return resolveViewportDiscriminated(declared, params.viewport) ?? ResponsiveCollapseMode.PUSH;\n}\n\n/**\n * Resolve a `ViewportDiscriminated<T>` value for the current viewport.\n *\n * If the value is a plain `T`, it applies at all viewports. If it's a\n * viewport-keyed partial record, resolves by trying the current viewport\n * first, then falling back through larger breakpoints.\n *\n * Returns `undefined` when no match is found (caller applies defaults).\n */\nexport function resolveViewportDiscriminated<T>(\n value: ViewportDiscriminated<T> | undefined,\n viewport: ViewportBreakpoint,\n): T | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'object' || !isViewportRecord(value)) return value as T;\n\n const record = value as Partial<Record<ViewportBreakpoint, T>>;\n const fallbacks = VIEWPORT_FALLBACK_ORDER[viewport] ?? [viewport];\n for (const bp of fallbacks) {\n if (bp in record) return record[bp];\n }\n return undefined;\n}\n\n/**\n * Type guard: distinguishes a viewport-keyed record from a plain enum value.\n * Viewport breakpoints are strings like '<md', '<lg', '>=lg'. If any key\n * matches a known breakpoint, the value is a viewport record.\n */\nfunction isViewportRecord<T>(value: unknown): value is Partial<Record<ViewportBreakpoint, T>> {\n if (typeof value !== 'object' || value === null) return false;\n const keys = Object.keys(value);\n const breakpoints = new Set(Object.values(ViewportBreakpoint) as string[]);\n return keys.length > 0 && keys.some(k => breakpoints.has(k));\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Default Fallback Transitions\n// ════════════════════════════════════════════════════════════════\n\nconst FRAMEWORK_FALLBACK_TRANSITION = NavigationTransition.PUSH;\n\n/**\n * What {@link NavigationPolicyResolver.resolveTransition} answers: the config AND which tier\n * produced it.\n *\n * The tier is carried rather than logged because the resolver is a pure function whose whole output\n * is this result — a log line would be visible only while somebody is watching, and a test cannot\n * read one. See {@link NavigationTransitionSource} for why the tier could not be inferred from the\n * verb: seven steps, and every one of them can answer `PUSH`.\n */\ninterface ResolvedTransition {\n config: TransitionConfig;\n source: NavigationTransitionSource;\n}\n\n/**\n * What {@link NavigationPolicyResolver.deriveTargetZone} answers: the zone AND, for a SPLIT, which\n * of its three mutually exclusive outcomes occurred.\n *\n * `SPLIT` is the one verb whose result depends on runtime STATE rather than on the declaration —\n * it opens a free pane, replaces an occupied one, or escalates to an overlay when the layout\n * declares no adjacent zone at all. Those are three different things wearing one name, which is\n * precisely why the EMBEDDED coercion below has to read `zoneOccupancy` instead of the verb.\n */\ninterface DerivedTargetZone {\n zone: NavigationZone;\n adjustment?: NavigationPlacementAdjustment;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Policy Resolver\n// ════════════════════════════════════════════════════════════════\n\nexport class NavigationPolicyResolver {\n\n /**\n * Resolve a navigation event to a concrete result.\n *\n * @param context - Input signals: source zone, operation, viewport, overrides, etc.\n * @param layout - The app's NavigationLayout configuration.\n * @returns What the controller should do: target zone, transition, appearance, collapse state.\n */\n resolve(context: NavigationResolutionContext, layout: NavigationLayout): NavigationResolutionResult {\n const resolved = this.resolveTransition(context, layout);\n const resolvedTransition = resolved.config;\n const transitionVerb = getTransitionVerb(resolvedTransition);\n const ephemeral = isEphemeral(resolvedTransition);\n const persistent = isPersistent(resolvedTransition);\n\n /*\n * ─── PROVENANCE ─────────────────────────────────────────────────────────────────────────────\n *\n * Accumulated as the placement is decided, in application order, so the array reads as the story\n * of how the authored verb became the final one. Nothing branches on it — see\n * `NavigationResolutionProvenance`.\n */\n const adjustments: NavigationPlacementAdjustment[] = [];\n\n const derivedTarget = this.deriveTargetZone(transitionVerb, context, layout, persistent);\n const targetZone = derivedTarget.zone;\n if (derivedTarget.adjustment) adjustments.push(derivedTarget.adjustment);\n\n /*\n * ─── AN ESCALATION REWRITES THE VERB. All four of them. ─────────────────────────────────────\n *\n * A SPLIT that found no adjacent zone lands in the OVERLAY layer, and until 2026-09-25 it kept\n * its SPLIT verb on the way there. The result was an incoherent triple — measured against Wonder\n * Todos' real layout, which declares a SPLIT override and only `zones.primary`:\n *\n * { targetZone: 'overlay', transition: 'split', appearance: 'panel' }\n *\n * `panel` is a `SplitAppearance` handed to the overlay layer, and it reached the overlay\n * container, which has no case for it. Worse, `overlayBehavior` is gated on\n * `finalTransition === OVERLAY` further down, so an operation's authored `modal` /\n * `closeOnOutsideClick` / `showBackdrop` were SILENTLY DROPPED for exactly the content that ends\n * up in a dialog by accident — the one placement where a create form most needs them.\n *\n * The other three escalations already did this: the EMBEDDED coercion returns an explicit\n * `transition: OVERLAY`, responsive collapse rewrites `collapsedTransition`, and the depth\n * ceiling rewrites `finalTransition`. This was the fourth site of one invariant — the shape\n * `.claude/rules/invariant-call-site-enumeration.md` exists for — and it was the site nobody\n * enumerated, including the pass that ADDED the adjustment naming this very branch and asserted\n * only `targetZone` and `adjustments` on it.\n */\n const escalatedVerb = derivedTarget.adjustment === NavigationPlacementAdjustment.SPLIT_ESCALATED_NO_ADJACENT_ZONE\n || derivedTarget.adjustment === NavigationPlacementAdjustment.PERSISTENT_SPLIT_ESCALATED_NO_COMPANION\n ? NavigationTransition.OVERLAY\n : transitionVerb;\n\n // ─── Surface coercion: EMBEDDED never TAKES OVER a structural zone ─────────────\n // `ResourceOperationFrontendSurface.EMBEDDED` is contractually a view\n // \"rendered within a host — overlay/drill-in when standalone\". A STRUCTURAL\n // zone is not a host; it is an addressable surface that already holds\n // something a reader is reading. The transition chain is keyed by core\n // semantics only (an app cannot author \"embedded READ → overlay\" in\n // `transitions`), so when the chain resolves EMBEDDED content onto one we\n // escalate to OVERLAY here — the same escalation posture `resolveSplitTarget`\n // already uses when no adjacent zone exists. Explicit pane outcomes\n // (SPLIT → secondary/companion) and overlay outcomes are hosts and pass\n // through untouched, as does every non-resource content navigation\n // (`operationSurface` is undefined there).\n //\n // ── The zone test was `=== PRIMARY` until 2026-09-11, and that was the whole of #627. ──\n //\n // PUSH and REPLACE both target `getStructuralSourceZone`, i.e. THE ZONE THE\n // REFERENCE WAS CLICKED IN — so whether an EMBEDDED read opened as an overlay\n // or silently replaced the surface beneath it depended on which pane the\n // reference happened to be rendered in. Measured on the workbench's Build plan,\n // which is a hosted pane in SECONDARY: clicking a task reference fetched the\n // aspect row and every one of its split edges, then REPLACED the document the\n // reader was reading with it. Nothing threw, nothing logged, and the page the\n // reader had been on was simply gone.\n //\n // PRIMARY was never the special case. \"Not a host\" is true of every structural\n // zone, and the argument the original comment makes for PRIMARY — it is the\n // addressable surface, not a host — is the same argument for a pane.\n //\n // ── And a SPLIT is a host only when it actually OPENS a pane. ──\n //\n // The exemption below reads `zoneOccupancy`, not the verb, and the difference is the whole\n // defect. `resolveSplitTarget` answers SECONDARY in two situations that mean opposite things:\n // when secondary is FREE it opens a pane beside the source, which is the drill-in host the enum\n // allows — and when both panes are taken it falls through to \"push into secondary (replace\n // existing content)\", which is its own comment's wording for taking a surface over. A verb test\n // cannot tell those apart, so exempting SPLIT wholesale re-opened the hole one line down.\n //\n // Measured on the workbench, which declares ONE pane: the artifact list holds PRIMARY, the\n // document holds SECONDARY, and a reference clicked inside that document resolved\n // `{surface: embedded, verb: split, targetZone: secondary}` — secondary occupied by the very\n // document the reader was reading, replaced by the aspect. Occupancy is the input\n // `resolveSplitTarget` already decides on, so reading it here cannot drift from it.\n if (\n context.operationSurface === ResourceOperationFrontendSurface.EMBEDDED\n && targetZone !== NavigationZone.OVERLAY\n && !(\n escalatedVerb === NavigationTransition.SPLIT\n && context.zoneOccupancy?.[targetZone as NavigationZoneName] !== true\n )\n // …EXCEPT for INPLACE, which takes over nothing either — it is the one transition that places\n // no content in a zone at all, and `deriveTargetZone` only reports a zone for it because \"the\n // source zone\" is the closest thing that function can say about an element-level outcome.\n //\n // Without this exemption the coercion silently rewrote every EMBEDDED inline transition into\n // an overlay BEFORE the controller could hand it to the element host — so the inline-edit kit\n // would have gone on not editing inline, one layer further down than the defect it replaced,\n // and the surface most likely to author `inplace` (a row's EMBEDDED update) is exactly the one\n // it would have hit. Found by driving the real controller; a resolver-level test would not\n // have shown it, because at the resolver an overlay is a perfectly good answer.\n && escalatedVerb !== NavigationTransition.INPLACE\n ) {\n adjustments.push(NavigationPlacementAdjustment.EMBEDDED_COERCED_TO_OVERLAY);\n return {\n targetZone: NavigationZone.OVERLAY,\n transition: NavigationTransition.OVERLAY,\n appearance: this.deriveAppearance(NavigationTransition.OVERLAY, context, layout),\n collapsed: false,\n ephemeral: ephemeral || undefined,\n provenance: { transitionSource: resolved.source, authoredTransition: transitionVerb, adjustments },\n };\n }\n\n const collapseMode = this.resolveCollapseMode(targetZone, context, layout);\n\n /*\n * ─── RESPONSIVE COLLAPSE IS APPLIED HERE, not merely reported ───────────────────────────────\n *\n * Until 2026-09-08 (#411) `collapsed` was computed, returned, and read by nobody: the controller\n * logged it, and `NavigationContentAreas` hid the secondary and companion zones unconditionally\n * on mobile. So content routed to a collapsed zone went into a zone that would not render, and\n * the declared choice between `PUSH` and `OVERLAY` had no effect whatsoever.\n *\n * Collapse is a PLACEMENT decision, which is what this resolver answers, so it belongs here\n * rather than in the controller. Applying it downstream would mean two places deciding where\n * content lands, and the second would have to re-derive the first's inputs.\n *\n * PUSH -> the content joins PRIMARY's stack. The user sees it in context, and back pops\n * to primary's previous content — the enum's own contract.\n * OVERLAY -> the content opens over primary as a sheet/dialog. Dismiss returns underneath.\n *\n * The appearance is derived AFTER the retarget, from the transition the content actually gets:\n * deriving it from the pre-collapse verb would give an overlay a SPLIT appearance\n * (`panel`/`drawer`), which the overlay container cannot render.\n *\n * `collapsed` stays in the result as INFORMATION — it is what lets a reader (and a test) tell a\n * PUSH that was authored from a PUSH that is a collapsed SPLIT, which otherwise look identical.\n */\n const collapsedTargetZone = collapseMode === ResponsiveCollapseMode.OVERLAY\n ? NavigationZone.OVERLAY\n : collapseMode === ResponsiveCollapseMode.PUSH\n ? NavigationZoneName.PRIMARY\n : targetZone;\n const collapsedTransition = collapseMode === ResponsiveCollapseMode.OVERLAY\n ? NavigationTransition.OVERLAY\n : collapseMode === ResponsiveCollapseMode.PUSH\n ? NavigationTransition.PUSH\n : escalatedVerb;\n if (collapseMode === ResponsiveCollapseMode.OVERLAY) {\n adjustments.push(NavigationPlacementAdjustment.RESPONSIVE_COLLAPSE_OVERLAY);\n } else if (collapseMode === ResponsiveCollapseMode.PUSH) {\n adjustments.push(NavigationPlacementAdjustment.RESPONSIVE_COLLAPSE_PUSH);\n }\n\n /*\n * ─── maxDepth: a push past the ceiling becomes an overlay ───────────────────────────────────\n *\n * `NavigationLayout.maxDepth` documents itself as \"when a zone's stack depth reaches `maxDepth`,\n * the next `push` opens an overlay instead\" and, until 2026-09-08 (#411), NOTHING read it — the\n * field and its per-relationship override were declared, validated and inert, so an application\n * that set it got unbounded stacks and no error.\n *\n * It is applied AFTER the collapse above, and the order is load-bearing in both directions: a\n * collapsed SPLIT becomes a push into PRIMARY, which must then answer to PRIMARY's ceiling\n * rather than to the ceiling of the zone it was authored for; and an authored push that is\n * already escalated to an overlay cannot then be collapsed, because an overlay is not a\n * structural zone and has no `responsiveCollapse`.\n *\n * \"Reaches\" is `>=`, taken from the declaration verbatim: at `maxDepth: 3` the third entry is\n * the last one pushed, and the fourth navigation opens an overlay.\n */\n const depthCeiling = context.relationshipMaxDepth ?? layout.maxDepth;\n const targetDepth = collapsedTargetZone === NavigationZone.OVERLAY\n ? undefined\n : context.zoneDepth[collapsedTargetZone as NavigationZoneName];\n const exceedsDepthCeiling = depthCeiling !== undefined\n && targetDepth !== undefined\n && collapsedTransition === NavigationTransition.PUSH\n && targetDepth >= depthCeiling;\n\n const finalTargetZone = exceedsDepthCeiling ? NavigationZone.OVERLAY : collapsedTargetZone;\n const finalTransition = exceedsDepthCeiling ? NavigationTransition.OVERLAY : collapsedTransition;\n if (exceedsDepthCeiling) adjustments.push(NavigationPlacementAdjustment.DEPTH_CEILING_ESCALATED_TO_OVERLAY);\n\n const appearance = this.deriveAppearance(finalTransition, context, layout);\n const collapsed = collapseMode !== undefined;\n\n /*\n * Overlay behaviour rides with the appearance because it is answered by the same declaration and\n * is meaningless without it — only an OVERLAY has a page behind to block, dismiss on, or dim.\n */\n const overlayBehavior = finalTransition === NavigationTransition.OVERLAY\n ? this.resolveOverlayBehavior(context)\n : undefined;\n return {\n targetZone: finalTargetZone,\n transition: finalTransition,\n appearance,\n overlayBehavior,\n collapsed,\n collapsedFromZone: collapsed ? (targetZone as NavigationZoneName) : undefined,\n ephemeral: ephemeral || undefined,\n /*\n * Reported so the entry can carry it. `persistent` chose the COMPANION zone and nothing more\n * until 2026-09-25, while its contract promised the pane would survive the source zone\n * changing — see `NavigationStackEntry.persistent`.\n */\n persistent: persistent && finalTargetZone !== NavigationZone.OVERLAY ? true : undefined,\n provenance: { transitionSource: resolved.source, authoredTransition: transitionVerb, adjustments },\n };\n }\n\n /**\n * The overlay an `INPLACE` transition becomes when the surface has no element-level host.\n *\n * A DOOR on the resolver rather than a re-resolution in the controller, because the controller's\n * way of asking — injecting a synthetic `operationOverrides: [{ transition: OVERLAY }]` — had to\n * lie twice to get an answer: it reported the outcome as an authored override, and it discarded\n * the operation's REAL override along with the `appearance` and `overlayBehavior` on it. Here the\n * context is untouched, so both are read exactly as they would be for any other overlay.\n *\n * The tier that answered `INPLACE` is preserved. What the degradation adds is an adjustment.\n */\n degradeInPlaceToOverlay(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n original: NavigationResolutionResult,\n ): NavigationResolutionResult {\n return {\n targetZone: NavigationZone.OVERLAY,\n transition: NavigationTransition.OVERLAY,\n appearance: this.deriveAppearance(NavigationTransition.OVERLAY, context, layout),\n overlayBehavior: this.resolveOverlayBehavior(context),\n collapsed: false,\n ephemeral: original.ephemeral,\n provenance: {\n transitionSource: original.provenance.transitionSource,\n authoredTransition: original.provenance.authoredTransition,\n adjustments: [...original.provenance.adjustments, NavigationPlacementAdjustment.INPLACE_DEGRADED_TO_OVERLAY],\n },\n };\n }\n\n // ──────────────────────────────────────────────────────────────\n // Step 0–5: Transition Resolution Chain\n // ──────────────────────────────────────────────────────────────\n\n private resolveTransition(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ResolvedTransition {\n /*\n * ## Coverage: steps 1, 1.5 and 2 run in unit tests only — accepted deliberately, 2026-09-08 (#467)\n *\n * Three of this chain's seven steps are authored by NEITHER dogfood application: per-operation\n * navigation overrides (step 1), authored action presentations (step 1.5) and per-relationship\n * transitions (step 2). The resolver reads all three; nothing in either application declares\n * them, so they have never executed outside their own unit tests.\n *\n * Nothing is wrong. The gap is that no application has yet had a reason to declare them, and\n * buying the proof would mean authoring a declaration in order to test it — which proves the\n * harness more than the product. Weighed and accepted; the project's usual bar for a shipped\n * subsystem is knowingly not met for these three.\n *\n * **What would change the answer:** an application authoring any one of the three. That author\n * is the first party to execute the step, and should read a surprise there as expected.\n *\n * Do NOT narrow the chain to the steps something uses today — that was the third option and it\n * was not chosen. The ordering below is load-bearing and its reasoning is written out at each\n * step; a shorter chain would lose it.\n */\n\n // Step 1 — Per-resource operation override (highest priority)\n const overrideResult = this.checkOperationOverrides(context);\n if (overrideResult) return { config: overrideResult, source: NavigationTransitionSource.OPERATION_OVERRIDE };\n\n // Step 1.5 — An AUTHORED action presentation.\n //\n // Ranked here, immediately below `navigationOverrides` and above every app-level default,\n // because both are authored ON THIS OPERATION and the override is the more specific of the two:\n // it names the zone, the appearance and the viewport, so an author who wrote one meant it. The\n // presentation axis says only what KIND of chrome the action wants, which is exactly why it\n // yields to the instrument that says more.\n //\n // A relationship- or zone-level transition, by contrast, is a default for a WHOLE CLASS of\n // navigations, and an operation that has declared its own presentation is not asking for the\n // class default.\n if (context.actionPresentationIsAuthored === true && context.actionPresentationTransition !== undefined) {\n return {\n config: context.actionPresentationTransition,\n source: NavigationTransitionSource.AUTHORED_ACTION_PRESENTATION,\n };\n }\n\n // Step 2 — Per-relationship transition\n if (context.relationshipTransition !== undefined) {\n return { config: context.relationshipTransition, source: NavigationTransitionSource.RELATIONSHIP };\n }\n\n // Step 3 — Global viewport override\n const viewportOverride = this.checkViewportOverride(context, layout);\n if (viewportOverride) return { config: viewportOverride, source: NavigationTransitionSource.VIEWPORT_OVERRIDE };\n\n // Step 4 — Source config transitions[operation]\n const sourceTransitions = this.getSourceTransitions(context, layout);\n if (sourceTransitions.transitions) {\n const transitionConfig = this.getTransitionBySemanticKey(sourceTransitions.transitions, context);\n if (transitionConfig) {\n return {\n config: transitionConfig,\n source: sourceTransitions.borrowedFromPrimary\n ? NavigationTransitionSource.OVERLAY_FALLBACK_TO_PRIMARY\n : NavigationTransitionSource.SOURCE_TRANSITIONS,\n };\n }\n }\n\n // Step 4.5 — A DERIVED action presentation.\n //\n // Below every authored configuration and above the framework fallback ONLY. The derivation is\n // the framework's guess about an operation nobody configured, so it may improve the default and\n // must never override a decision an app already made — an app whose zone `transitions` route\n // this operation somewhere keeps that routing, unchanged.\n //\n // In practice this is the step that turns \"a custom action with two fields\" from a full page\n // into an overlay, which is the whole point of the axis.\n if (context.actionPresentationTransition !== undefined) {\n return {\n config: context.actionPresentationTransition,\n source: NavigationTransitionSource.DERIVED_ACTION_PRESENTATION,\n };\n }\n\n // Step 5 — Framework fallback\n return { config: FRAMEWORK_FALLBACK_TRANSITION, source: NavigationTransitionSource.FRAMEWORK_DEFAULT };\n }\n\n /**\n * Step 1: Check per-resource operation overrides.\n * First-match wins. Matches on fromZone + viewport discriminators.\n */\n private checkOperationOverrides(\n context: NavigationResolutionContext,\n ): TransitionConfig | undefined {\n if (!context.operationOverrides?.length) return undefined;\n\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context)) {\n return override.transition;\n }\n }\n return undefined;\n }\n\n /**\n * Match an override against the current context.\n * Both `fromZone` and `viewport` must match when specified.\n */\n private overrideMatches(\n override: NavigationOperationOverride,\n context: NavigationResolutionContext,\n ): boolean {\n if (override.fromZone !== undefined && override.fromZone !== context.sourceZone) {\n return false;\n }\n if (override.viewport !== undefined && override.viewport !== context.viewport) {\n return false;\n }\n return true;\n }\n\n /**\n * Step 3: Check global viewport override.\n * Reads `layout[viewport].transitions[operation]`.\n */\n private checkViewportOverride(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): TransitionConfig | undefined {\n if (context.viewport === ViewportBreakpoint.DESKTOP) return undefined;\n\n const viewportBlock = layout[context.viewport as ViewportBreakpoint.MOBILE | ViewportBreakpoint.VERT_TABLET];\n if (!viewportBlock?.transitions) return undefined;\n\n return this.getTransitionBySemanticKey(viewportBlock.transitions, context);\n }\n\n /**\n * Transition maps are keyed by core semantics, not arbitrary operation ids.\n * Custom addressable operations therefore resolve through their effective core\n * semantic while literal core operations still match directly.\n */\n private getTransitionBySemanticKey(\n transitions: ZoneTransitions,\n context: NavigationResolutionContext,\n ): TransitionConfig | undefined {\n const transitionKey = context.effectiveOperation\n ?? (Object.values(CoreResourceOperation).includes(context.operation as CoreResourceOperation)\n ? context.operation as CoreResourceOperation\n : undefined);\n\n if (!transitionKey) {\n return undefined;\n }\n\n return transitions[transitionKey];\n }\n\n /**\n * Step 4: Get the transition map from the appropriate source config.\n *\n * ## An OVERLAY source falls back to the zone it is LANDING IN\n *\n * `fromOverlay` is the app's statement about leaving an overlay, and it wins. What it does NOT\n * mean is that an app which declared nothing there has declared nothing at all: an overlay is not\n * a structural zone, so `getStructuralSourceZone` already answers PRIMARY for it — a structural\n * navigation out of an overlay IS a primary navigation. Reading a different map for the VERB than\n * for the ZONE is how the two came to disagree.\n *\n * Measured on the workbench, 2026-09-25. Its layout declares `zones.primary.transitions.read =\n * SPLIT` and no `fromOverlay` at all. Clicking an aspect popup's `family` backlink — an\n * ADDRESSABLE artifact — found no overlay map, fell through to the framework fallback `PUSH`, and\n * landed in PRIMARY: the artifact took the WHOLE PAGE, replacing the artifact list it should have\n * opened beside. The application had said what a READ does on the page; the resolver did not ask.\n *\n * Wonder CRM is the control and is untouched: it declares `fromOverlay.read = PUSH` deliberately\n * (\"ADDRESSABLE targets legitimately leave the overlay and become the page\"), that map answers,\n * and the fallback never runs. The fallback also covers the gap INSIDE a declared map — one that\n * names READ says nothing about LIST, and that gap used to take the framework default too.\n *\n * APP_LEVEL is deliberately NOT given the same fallback. A menubar click is a layout RESET with\n * its own meaning, and an app that declares no `appLevel` map has not thereby asked for primary's\n * drill-in verbs — it has asked for the framework default, which is what it gets.\n */\n private getSourceTransitions(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): { transitions: ZoneTransitions | undefined; borrowedFromPrimary: boolean } {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE) {\n return { transitions: layout.appLevel?.transitions, borrowedFromPrimary: false };\n }\n if (context.sourceZone === 'overlay') {\n const fromOverlay = layout.fromOverlay?.transitions;\n const declared = fromOverlay && this.getTransitionBySemanticKey(fromOverlay, context);\n return declared !== undefined\n ? { transitions: fromOverlay, borrowedFromPrimary: false }\n : { transitions: layout.zones.primary?.transitions, borrowedFromPrimary: true };\n }\n const zoneConfig = layout.zones[context.sourceZone as NavigationZoneName];\n return { transitions: zoneConfig?.transitions, borrowedFromPrimary: false };\n }\n\n // ──────────────────────────────────────────────────────────────\n // Target Zone Derivation\n // ──────────────────────────────────────────────────────────────\n\n /**\n * Derive the target zone from the resolved transition verb.\n *\n * - push/replace → same zone (primary for appLevel/overlay sources)\n * - split → first available adjacent zone (secondary, then companion)\n * - split(persistent) → companion specifically\n * - overlay → OVERLAY\n * - inplace → same zone (no stack change)\n * - promote → primary\n */\n private deriveTargetZone(\n transition: NavigationTransition,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n persistent: boolean,\n ): DerivedTargetZone {\n switch (transition) {\n case NavigationTransition.PUSH:\n case NavigationTransition.REPLACE:\n case NavigationTransition.INPLACE:\n return { zone: this.getStructuralSourceZone(context) };\n\n case NavigationTransition.SPLIT:\n return this.resolveSplitTarget(context, layout, persistent);\n\n case NavigationTransition.OVERLAY:\n return { zone: NavigationZone.OVERLAY };\n\n case NavigationTransition.PROMOTE:\n return { zone: NavigationZoneName.PRIMARY };\n\n default:\n return { zone: NavigationZoneName.PRIMARY };\n }\n }\n\n /**\n * For push/replace/inplace: return the source zone as a structural zone.\n * AppLevel and overlay sources map to primary.\n */\n private getStructuralSourceZone(context: NavigationResolutionContext): NavigationZone {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE || context.sourceZone === 'overlay') {\n return NavigationZoneName.PRIMARY;\n }\n return context.sourceZone;\n }\n\n /**\n * Resolve the target zone for a SPLIT transition.\n * Persistent splits always target companion. Non-persistent splits\n * target the first available adjacent zone.\n * Falls back to overlay if no adjacent zone is declared in config.\n */\n private resolveSplitTarget(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n persistent: boolean,\n ): DerivedTargetZone {\n if (persistent) {\n return layout.zones.companion\n ? { zone: NavigationZoneName.COMPANION, adjustment: this.splitOutcomeFor(context, NavigationZoneName.COMPANION) }\n : { zone: NavigationZone.OVERLAY, adjustment: NavigationPlacementAdjustment.PERSISTENT_SPLIT_ESCALATED_NO_COMPANION };\n }\n\n // Prefer secondary if declared, otherwise companion, otherwise escalate to overlay\n if (layout.zones.secondary) {\n if (!context.zoneOccupancy?.[NavigationZoneName.SECONDARY]) {\n return { zone: NavigationZoneName.SECONDARY, adjustment: NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE };\n }\n // Secondary occupied — try companion\n if (layout.zones.companion && !context.zoneOccupancy?.[NavigationZoneName.COMPANION]) {\n return { zone: NavigationZoneName.COMPANION, adjustment: NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE };\n }\n // Both occupied — push into secondary (replace existing content)\n return {\n zone: NavigationZoneName.SECONDARY,\n adjustment: NavigationPlacementAdjustment.SPLIT_REPLACED_OCCUPIED_PANE,\n };\n }\n\n if (layout.zones.companion) {\n return { zone: NavigationZoneName.COMPANION, adjustment: this.splitOutcomeFor(context, NavigationZoneName.COMPANION) };\n }\n\n // No adjacent zones declared — escalate to overlay\n return { zone: NavigationZone.OVERLAY, adjustment: NavigationPlacementAdjustment.SPLIT_ESCALATED_NO_ADJACENT_ZONE };\n }\n\n /**\n * Did a split into `zone` OPEN a pane or REPLACE what was in one?\n *\n * The same question `resolveSplitTarget`'s secondary branch answers inline by construction — it\n * only reaches companion when secondary is taken — but the two branches that target companion\n * DIRECTLY (a persistent split, and a layout declaring companion without secondary) choose the\n * zone before asking, so they ask here. Reading `zoneOccupancy` is what keeps both answers derived\n * from one input rather than from two nearly-identical inline conditions.\n */\n private splitOutcomeFor(\n context: NavigationResolutionContext,\n zone: NavigationZoneName,\n ): NavigationPlacementAdjustment {\n return context.zoneOccupancy?.[zone] === true\n ? NavigationPlacementAdjustment.SPLIT_REPLACED_OCCUPIED_PANE\n : NavigationPlacementAdjustment.SPLIT_OPENED_FREE_PANE;\n }\n\n // ──────────────────────────────────────────────────────────────\n // Appearance Derivation\n // ──────────────────────────────────────────────────────────────\n\n /**\n * Derive visual appearance from zone config, resolved for the current viewport.\n * Only overlay and split transitions have meaningful appearance.\n */\n private deriveAppearance(\n transition: NavigationTransition,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): OverlayAppearance | undefined {\n /*\n * OVERLAY only. A SPLIT used to derive a `SplitAppearance` here and nothing ever read it — see\n * the removal note in `navigation.shared.schemas.ts`. How a PANE renders is `SplitConfig`'s\n * geometry (`orientation`, `ratio`, the zone's width bounds), which the content areas read\n * directly from the layout rather than off a resolution.\n */\n if (transition !== NavigationTransition.OVERLAY) {\n return undefined;\n }\n\n // Check operation override appearance first\n if (context.operationOverrides?.length) {\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context) && override.appearance !== undefined) {\n return resolveViewportDiscriminated(override.appearance, context.viewport) as\n OverlayAppearance | undefined;\n }\n }\n }\n\n // Read from source zone's appearance config\n const zoneAppearance = this.getSourceAppearance(context, layout);\n if (transition === NavigationTransition.OVERLAY) {\n return resolveViewportDiscriminated(zoneAppearance?.overlay, context.viewport) ?? OverlayAppearance.DIALOG;\n }\n return undefined;\n }\n\n /**\n * The overlay behaviour declared by a matching per-operation override, if any.\n *\n * First match wins, exactly as the transition and appearance do — one override describes one\n * situation, so reading a different override's behaviour than its transition would let a single\n * declaration be split across two answers.\n */\n private resolveOverlayBehavior(\n context: NavigationResolutionContext,\n ): NavigationResolutionResult['overlayBehavior'] {\n if (!context.operationOverrides?.length) return undefined;\n for (const override of context.operationOverrides) {\n if (this.overrideMatches(override, context) && override.overlayBehavior !== undefined) {\n return override.overlayBehavior;\n }\n }\n return undefined;\n }\n\n /** Get the appearance config from the appropriate source. */\n private getSourceAppearance(\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ZoneAppearance | undefined {\n if (context.sourceZone === APP_LEVEL_NAVIGATION_SOURCE) {\n return layout.appLevel?.appearance;\n }\n if (context.sourceZone === 'overlay') {\n /*\n * PRIMARY's appearance, for the same reason its TRANSITIONS are read in `getSourceTransitions`:\n * a structural navigation out of an overlay lands in PRIMARY, so PRIMARY's declaration is the\n * one that describes it. `FromOverlayConfig` declares no appearance of its own, and returning\n * `undefined` here sent every such navigation to the framework default instead of to the\n * layout's — the same \"skip what the app declared\" shape the transition lookup had.\n *\n * This read `undefined` with the comment \"overlays within overlays shouldn't happen\", and that\n * is no longer true in either half: an overlay opened FROM an overlay now stacks (it is how a\n * reader walks an aspect graph popup to popup and walks back out), and a SPLIT out of an\n * overlay is exactly the case this function was skipping.\n */\n return layout.zones.primary?.appearance;\n }\n return layout.zones[context.sourceZone as NavigationZoneName]?.appearance;\n }\n\n // ──────────────────────────────────────────────────────────────\n // Responsive Collapse Check\n // ──────────────────────────────────────────────────────────────\n\n /**\n * WHICH collapse the target zone is under at this viewport, or `undefined` for none.\n *\n * Only secondary and companion zones can collapse. Primary never collapses — it is the zone\n * collapsed content moves INTO. Overlay is not a structural zone and cannot collapse either.\n *\n * This returned a BOOLEAN until 2026-09-08 (#411), and the boolean is why the whole mechanism was\n * inert: `PUSH` and `OVERLAY` are the entire content of the declaration, and a flag that says\n * \"collapsed\" without saying which cannot place anything. The consumer would have had to re-read\n * `layout.zones[…].responsiveCollapse` and re-resolve the breakpoint itself — a second copy of\n * this decision, free to disagree with the first.\n */\n private resolveCollapseMode(\n targetZone: NavigationZone,\n context: NavigationResolutionContext,\n layout: NavigationLayout,\n ): ResponsiveCollapseMode | undefined {\n /*\n * The zone-identity guard stays HERE and the viewport decision lives in `resolveZoneCollapseMode`,\n * because they are different questions: primary never collapses (it is the zone collapsed content\n * moves INTO) and overlay is not a structural zone — neither fact depends on how wide the window\n * is. Everything that does is shared with the migration hook, which must not re-derive it.\n */\n if (targetZone === NavigationZone.OVERLAY || targetZone === NavigationZoneName.PRIMARY) {\n return undefined;\n }\n return resolveZoneCollapseMode({\n zoneConfig: layout.zones[targetZone as NavigationZoneName],\n viewport: context.viewport,\n contentAreaWidth: context.contentAreaWidth,\n });\n }\n}\n\n/** Singleton instance for use across the frontend. */\nexport const navigationPolicyResolver = new NavigationPolicyResolver();\n"]}
|