@wildo-ai/saas-frontend-lib 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/actions/action-bar.d.ts +15 -0
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +15 -0
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.d.ts +97 -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/app/AppLayout_AuthenticatedRoute.d.ts.map +1 -1
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js +8 -3
- package/dist/esm/components/app/AppLayout_AuthenticatedRoute.js.map +1 -1
- package/dist/esm/components/auth/Auth_EnrollmentRequired.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_EnrollmentRequired.js +5 -1
- package/dist/esm/components/auth/Auth_EnrollmentRequired.js.map +1 -1
- package/dist/esm/components/auth/Auth_Main.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Main.js +1 -4
- package/dist/esm/components/auth/Auth_Main.js.map +1 -1
- package/dist/esm/components/auth/Auth_Register.d.ts.map +1 -1
- package/dist/esm/components/auth/Auth_Register.js +1 -3
- package/dist/esm/components/auth/Auth_Register.js.map +1 -1
- package/dist/esm/components/auth/StepUpAuthDialog.d.ts +7 -0
- package/dist/esm/components/auth/StepUpAuthDialog.d.ts.map +1 -1
- package/dist/esm/components/auth/StepUpAuthDialog.js +13 -7
- 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 +32 -33
- 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 +18 -20
- package/dist/esm/components/auth/admin-config/AppPage_SecuritySettings.labels.js.map +1 -1
- package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.d.ts.map +1 -1
- package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.js +2 -3
- package/dist/esm/components/auth/methods/ExternalOAuth2AuthMethod.js.map +1 -1
- package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.d.ts +13 -16
- package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.d.ts.map +1 -1
- package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.js +18 -15
- package/dist/esm/components/auth/utils/oauth-provider-display-label.frontend.utils.js.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.js +2 -2
- package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.js +2 -2
- package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts +33 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.js +34 -5
- package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.js +2 -2
- package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts +2 -0
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.js +1 -0
- package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
- package/dist/esm/components/data-display/DisplayField.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayField.js +15 -1
- package/dist/esm/components/data-display/DisplayField.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldArray.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldArray.js +11 -0
- package/dist/esm/components/data-display/DisplayFieldArray.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditable.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditable.js +2 -2
- package/dist/esm/components/data-display/DisplayFieldEditable.js.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts +12 -2
- package/dist/esm/components/data-display/DisplayFieldEditableArray.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldEditableArray.js +3 -2
- 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/DisplayFieldReadOnlyArraySection.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.js +8 -2
- package/dist/esm/components/data-display/DisplayFieldReadOnlyArraySection.js.map +1 -1
- package/dist/esm/components/data-display/DisplayValueDispatcher.d.ts.map +1 -1
- package/dist/esm/components/data-display/DisplayValueDispatcher.js +18 -4
- 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 +61 -3
- package/dist/esm/components/data-display/ResourceAutomaticDisplayer.js.map +1 -1
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts +7 -5
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.d.ts.map +1 -1
- package/dist/esm/components/data-display/ResourceSummaryDisplayer.js.map +1 -1
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts +11 -1
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.d.ts.map +1 -1
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js +36 -11
- package/dist/esm/components/data-display/chromes/DisplayFieldChrome.js.map +1 -1
- package/dist/esm/components/data-display/display-field-resolved-props.d.ts +6 -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/external-data-provenance/DisplayFieldProvenanceNote.d.ts +23 -0
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.d.ts.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js +35 -0
- package/dist/esm/components/data-display/external-data-provenance/DisplayFieldProvenanceNote.js.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts +47 -0
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.d.ts.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js +124 -0
- package/dist/esm/components/data-display/external-data-provenance/external-data-provenance.frontend.js.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.d.ts +8 -0
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.d.ts.map +1 -0
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js +46 -0
- package/dist/esm/components/data-display/external-data-provenance/useExternalDataFieldProvenance.js.map +1 -0
- package/dist/esm/components/feedback/resource-empty-state.d.ts +21 -8
- package/dist/esm/components/feedback/resource-empty-state.d.ts.map +1 -1
- package/dist/esm/components/feedback/resource-empty-state.js +56 -26
- package/dist/esm/components/feedback/resource-empty-state.js.map +1 -1
- package/dist/esm/components/flows-actors/approval.d.ts +29 -7
- package/dist/esm/components/flows-actors/approval.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/approval.js +231 -101
- 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 +57 -0
- package/dist/esm/components/flows-actors/approval.labels.js.map +1 -1
- package/dist/esm/components/flows-actors/system-catalog.d.ts.map +1 -1
- package/dist/esm/components/flows-actors/system-catalog.js +4 -4
- 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 +0 -5
- package/dist/esm/components/flows-actors/system-catalog.labels.js.map +1 -1
- package/dist/esm/components/form/Form.d.ts +2 -2
- package/dist/esm/components/form/Form.js +2 -2
- package/dist/esm/components/form/Form.js.map +1 -1
- package/dist/esm/components/form/automated/AutomatedArrayField.d.ts +28 -3
- package/dist/esm/components/form/automated/AutomatedArrayField.d.ts.map +1 -1
- package/dist/esm/components/form/automated/AutomatedArrayField.js +43 -14
- package/dist/esm/components/form/automated/AutomatedArrayField.js.map +1 -1
- package/dist/esm/components/form/automated/FormField.d.ts +3 -0
- package/dist/esm/components/form/automated/FormField.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormField.js +60 -21
- package/dist/esm/components/form/automated/FormField.js.map +1 -1
- package/dist/esm/components/form/automated/FormFieldArray.d.ts +6 -3
- package/dist/esm/components/form/automated/FormFieldArray.d.ts.map +1 -1
- package/dist/esm/components/form/automated/FormFieldArray.js +3 -2
- package/dist/esm/components/form/automated/FormFieldArray.js.map +1 -1
- package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts +5 -4
- package/dist/esm/components/form/automated/ResourceAutomatedForm.d.ts.map +1 -1
- package/dist/esm/components/form/automated/ResourceAutomatedForm.js +148 -55
- package/dist/esm/components/form/automated/ResourceAutomatedForm.js.map +1 -1
- package/dist/esm/components/form/automated/ResourceFormActionsContext.d.ts +30 -0
- package/dist/esm/components/form/automated/ResourceFormActionsContext.d.ts.map +1 -1
- package/dist/esm/components/form/automated/ResourceFormActionsContext.js +30 -1
- package/dist/esm/components/form/automated/ResourceFormActionsContext.js.map +1 -1
- package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.d.ts +79 -0
- package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.d.ts.map +1 -0
- package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.js +203 -0
- package/dist/esm/components/form/automated/TemplatePlacedFieldsContext.js.map +1 -0
- package/dist/esm/components/form/automated/automated-form-submit.utils.d.ts +12 -0
- 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 +11 -0
- package/dist/esm/components/form/automated/automated-form-submit.utils.js.map +1 -1
- package/dist/esm/components/form/chromes/FormFieldChrome.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/FormFieldChrome.js +2 -2
- package/dist/esm/components/form/chromes/FormFieldChrome.js.map +1 -1
- package/dist/esm/components/form/combobox.d.ts +7 -0
- package/dist/esm/components/form/combobox.d.ts.map +1 -1
- package/dist/esm/components/form/combobox.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 +13 -0
- package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-address.d.ts +58 -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 +34 -6
- package/dist/esm/components/form/fields/form-field-address.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-address.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-address.labels.js +60 -1
- package/dist/esm/components/form/fields/form-field-address.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.d.ts +0 -12
- package/dist/esm/components/form/fields/form-field-file.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.js +34 -13
- package/dist/esm/components/form/fields/form-field-file.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-file.labels.js +46 -0
- package/dist/esm/components/form/fields/form-field-file.labels.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts +73 -0
- package/dist/esm/components/form/fields/form-field-string-organization-role.d.ts.map +1 -0
- package/dist/esm/components/form/fields/form-field-string-organization-role.js +64 -0
- package/dist/esm/components/form/fields/form-field-string-organization-role.js.map +1 -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 +8 -1
- package/dist/esm/components/form/fields/form-field-string.js.map +1 -1
- package/dist/esm/components/form/fields/form-field-string.labels.d.ts.map +1 -1
- package/dist/esm/components/form/fields/form-field-string.labels.js +4 -0
- package/dist/esm/components/form/fields/form-field-string.labels.js.map +1 -1
- package/dist/esm/components/form/validation-errors/FormErrorSummary.js +1 -1
- package/dist/esm/components/form/validation-errors/FormErrorSummary.js.map +1 -1
- package/dist/esm/components/form/validation-errors/resolver-error-nesting.d.ts +31 -0
- package/dist/esm/components/form/validation-errors/resolver-error-nesting.d.ts.map +1 -0
- package/dist/esm/components/form/validation-errors/resolver-error-nesting.js +81 -0
- package/dist/esm/components/form/validation-errors/resolver-error-nesting.js.map +1 -0
- package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts +14 -1
- package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts.map +1 -1
- package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js +14 -0
- package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js.map +1 -1
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.d.ts +22 -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 +1 -22
- package/dist/esm/components/form/validation-errors/zod-issue-resolver.js.map +1 -1
- package/dist/esm/components/layout/resizable.d.ts +11 -0
- package/dist/esm/components/layout/resizable.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.js.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.d.ts +11 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.js +15 -3
- package/dist/esm/components/navigation/app-level/ApplicationLevel_NavigationBack.js.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.d.ts +2 -2
- package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/ApplicationLevel_StatusBar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.d.ts +2 -2
- package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.js +2 -2
- package/dist/esm/components/navigation/app-level/HostedComponentInteractionsProvider.js.map +1 -1
- package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js +18 -20
- package/dist/esm/components/navigation/app-level/SidebarResourceBrowser.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js +7 -1
- package/dist/esm/components/navigation/app-level/useCommandMenuBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useMenuBarBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useMenuBarBehavior.js +4 -1
- package/dist/esm/components/navigation/app-level/useMenuBarBehavior.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 +18 -2
- package/dist/esm/components/navigation/app-level/useMenuUserOrgBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.js +82 -10
- package/dist/esm/components/navigation/app-level/useSidebarBehavior.js.map +1 -1
- package/dist/esm/components/navigation/app-level/useStatusBarBehavior.d.ts +2 -2
- package/dist/esm/components/navigation/app-level/useStatusBarBehavior.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/useStatusBarBehavior.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js +8 -1
- package/dist/esm/components/resources/ResourceCollectionQuickFilterTabs.js.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts +8 -2
- package/dist/esm/components/resources/ResourceCollectionToolbar.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceCollectionToolbar.js +6 -2
- package/dist/esm/components/resources/ResourceCollectionToolbar.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js +31 -16
- package/dist/esm/components/resources/ResourceLayout_Breadcrumb.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.js +23 -8
- package/dist/esm/components/resources/ResourceLayout_ContainerDialogs.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_ContainerNested.js +2 -2
- package/dist/esm/components/resources/ResourceLayout_ContainerNested.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Header.d.ts +13 -0
- package/dist/esm/components/resources/ResourceLayout_Header.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Header.js +55 -28
- package/dist/esm/components/resources/ResourceLayout_Header.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_List.js +41 -20
- 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 +1 -2
- package/dist/esm/components/resources/ResourceLayout_List.labels.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Read.d.ts +9 -4
- package/dist/esm/components/resources/ResourceLayout_Read.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Read.js +30 -11
- 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 +4 -2
- 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 +6 -2
- package/dist/esm/components/resources/ResourceLayout_ReadSummary_TableRow.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Search.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Search.js +30 -14
- package/dist/esm/components/resources/ResourceLayout_Search.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js +14 -198
- package/dist/esm/components/resources/ResourceLayout_SemanticOperationFallback.js.map +1 -1
- package/dist/esm/components/resources/ResourceLayout_Update.d.ts +2 -2
- package/dist/esm/components/resources/ResourceLayout_Update.js +2 -2
- package/dist/esm/components/resources/ResourceLayout_Update.js.map +1 -1
- package/dist/esm/components/resources/ResourceListItemRenderer.d.ts.map +1 -1
- package/dist/esm/components/resources/ResourceListItemRenderer.js +69 -39
- package/dist/esm/components/resources/ResourceListItemRenderer.js.map +1 -1
- package/dist/esm/components/resources/ResourceOperationActionDropdown.d.ts +32 -0
- package/dist/esm/components/resources/ResourceOperationActionDropdown.d.ts.map +1 -0
- package/dist/esm/components/resources/ResourceOperationActionDropdown.js +130 -0
- package/dist/esm/components/resources/ResourceOperationActionDropdown.js.map +1 -0
- package/dist/esm/components/resources/collection-create-placement.utils.d.ts +32 -0
- package/dist/esm/components/resources/collection-create-placement.utils.d.ts.map +1 -0
- package/dist/esm/components/resources/collection-create-placement.utils.js +37 -0
- package/dist/esm/components/resources/collection-create-placement.utils.js.map +1 -0
- package/dist/esm/components/resources/embeds/RelatedResourcePreview.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/RelatedResourcePreview.js +5 -1
- package/dist/esm/components/resources/embeds/RelatedResourcePreview.js.map +1 -1
- package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts +8 -1
- package/dist/esm/components/resources/embeds/RelatedResourceSections.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/RelatedResourceSections.js +49 -2
- package/dist/esm/components/resources/embeds/RelatedResourceSections.js.map +1 -1
- package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts +22 -0
- package/dist/esm/components/resources/embeds/ResourceEmbeds.d.ts.map +1 -1
- package/dist/esm/components/resources/embeds/ResourceEmbeds.js +85 -2
- package/dist/esm/components/resources/embeds/ResourceEmbeds.js.map +1 -1
- package/dist/esm/components/resources/resourceLayout.utils.d.ts +14 -0
- package/dist/esm/components/resources/resourceLayout.utils.d.ts.map +1 -1
- package/dist/esm/components/resources/resourceLayout.utils.js +22 -0
- 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 +3 -0
- package/dist/esm/components/resources/skeleton/ArrayField.js.map +1 -1
- package/dist/esm/components/resources/skeleton/FormLayout.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/FormLayout.js +33 -1
- package/dist/esm/components/resources/skeleton/FormLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/ObjectScope.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/ObjectScope.js +3 -0
- package/dist/esm/components/resources/skeleton/ObjectScope.js.map +1 -1
- package/dist/esm/components/resources/skeleton/Section.d.ts +12 -0
- package/dist/esm/components/resources/skeleton/Section.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/Section.js +28 -2
- package/dist/esm/components/resources/skeleton/Section.js.map +1 -1
- package/dist/esm/components/resources/skeleton/SectionFieldsContext.d.ts +70 -0
- package/dist/esm/components/resources/skeleton/SectionFieldsContext.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/SectionFieldsContext.js +157 -1
- package/dist/esm/components/resources/skeleton/SectionFieldsContext.js.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayout.d.ts +6 -0
- package/dist/esm/components/resources/skeleton/WizardLayout.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardLayout.js +13 -2
- package/dist/esm/components/resources/skeleton/WizardLayout.js.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardStep.d.ts.map +1 -1
- package/dist/esm/components/resources/skeleton/WizardStep.js +2 -1
- package/dist/esm/components/resources/skeleton/WizardStep.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 +61 -15
- package/dist/esm/components/resources-fields/_presets/resource-reference/ResourceFieldDisplayPreset_ResourceReference_Default.js.map +1 -1
- package/dist/esm/components/resources-fields/resource-reference/resource-reference.shared.utils.d.ts +24 -2
- 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 +69 -1
- 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 +18 -19
- 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 +5 -4
- package/dist/esm/components/sections/ContentSectionContainer.js.map +1 -1
- package/dist/esm/components/sections/stepper.d.ts +5 -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 +12 -3
- package/dist/esm/components/sections/surface.js.map +1 -1
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts +43 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js +129 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.js.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.d.ts +3 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.d.ts.map +1 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js +34 -0
- package/dist/esm/components/settings/AppPage_AgentWorkOverrideRateSettings.labels.js.map +1 -0
- package/dist/esm/components/settings/AppPage_AppearanceSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_AppearanceSettings.js +9 -11
- package/dist/esm/components/settings/AppPage_AppearanceSettings.js.map +1 -1
- package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.js +3 -2
- package/dist/esm/components/settings/AppPage_AppearanceSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_BillingSettings.d.ts +4 -2
- package/dist/esm/components/settings/AppPage_BillingSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_BillingSettings.js +21 -3
- package/dist/esm/components/settings/AppPage_BillingSettings.js.map +1 -1
- package/dist/esm/components/settings/AppPage_BillingSettings.labels.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_BillingSettings.labels.js +5 -10
- package/dist/esm/components/settings/AppPage_BillingSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts +58 -0
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.js +243 -40
- 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 +67 -6
- package/dist/esm/components/settings/AppPage_ConnectedAccountsSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.d.ts.map +1 -1
- package/dist/esm/components/settings/AppPage_InvitationsSettings.js +19 -11
- 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 +4 -2
- package/dist/esm/components/settings/AppPage_InvitationsSettings.labels.js.map +1 -1
- package/dist/esm/components/settings/SettingsHub.d.ts.map +1 -1
- package/dist/esm/components/settings/SettingsHub.js +3 -0
- package/dist/esm/components/settings/SettingsHub.js.map +1 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.d.ts.map +1 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.js +16 -1
- package/dist/esm/components/settings/SettingsResourceOperationPanel.js.map +1 -1
- package/dist/esm/components/settings/useOwnerProviderConnections.d.ts +59 -0
- package/dist/esm/components/settings/useOwnerProviderConnections.d.ts.map +1 -0
- package/dist/esm/components/settings/useOwnerProviderConnections.js +136 -0
- package/dist/esm/components/settings/useOwnerProviderConnections.js.map +1 -0
- package/dist/esm/components/views/chart-view/chart-view.utils.d.ts +5 -0
- package/dist/esm/components/views/chart-view/chart-view.utils.d.ts.map +1 -1
- package/dist/esm/components/views/chart-view/chart-view.utils.js +5 -0
- package/dist/esm/components/views/chart-view/chart-view.utils.js.map +1 -1
- package/dist/esm/components/views/chart-view/useResourceChartData.d.ts +50 -0
- package/dist/esm/components/views/chart-view/useResourceChartData.d.ts.map +1 -0
- package/dist/esm/components/views/chart-view/useResourceChartData.js +72 -0
- package/dist/esm/components/views/chart-view/useResourceChartData.js.map +1 -0
- package/dist/esm/components/views/composite-view/CompositeLayout.d.ts.map +1 -1
- package/dist/esm/components/views/composite-view/CompositeLayout.js +2 -1
- package/dist/esm/components/views/composite-view/CompositeLayout.js.map +1 -1
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts +86 -0
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.d.ts.map +1 -0
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.js +187 -0
- package/dist/esm/core/app-shell/AppShellBuildingBlocks.js.map +1 -0
- package/dist/esm/core/app-shell/PortalContainerContext.d.ts +5 -2
- package/dist/esm/core/app-shell/PortalContainerContext.d.ts.map +1 -1
- package/dist/esm/core/app-shell/PortalContainerContext.js +5 -2
- package/dist/esm/core/app-shell/PortalContainerContext.js.map +1 -1
- package/dist/esm/core/app-shell/app-shell.schemas.d.ts +18 -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 +1 -0
- package/dist/esm/core/app-shell/app-shell.schemas.js.map +1 -1
- package/dist/esm/core/app-shell/useAppShellLayout.d.ts +10 -0
- package/dist/esm/core/app-shell/useAppShellLayout.d.ts.map +1 -1
- package/dist/esm/core/app-shell/useAppShellLayout.js +28 -5
- 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 +38 -0
- package/dist/esm/core/app-shell/usePublicShellLayout.js.map +1 -1
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.d.ts +15 -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 +47 -13
- package/dist/esm/core/automated-layout/automated-layout.frontend.utils.js.map +1 -1
- package/dist/esm/core/billing/BillingContext.d.ts +25 -2
- package/dist/esm/core/billing/BillingContext.d.ts.map +1 -1
- package/dist/esm/core/billing/BillingContext.js +16 -25
- package/dist/esm/core/billing/BillingContext.js.map +1 -1
- package/dist/esm/core/billing/billing-provider-display.frontend.utils.d.ts +11 -3
- package/dist/esm/core/billing/billing-provider-display.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/billing/billing-provider-display.frontend.utils.js +14 -8
- package/dist/esm/core/billing/billing-provider-display.frontend.utils.js.map +1 -1
- package/dist/esm/core/billing/useBillingPlanChange.d.ts.map +1 -1
- package/dist/esm/core/billing/useBillingPlanChange.js +2 -0
- package/dist/esm/core/billing/useBillingPlanChange.js.map +1 -1
- 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 +1 -0
- package/dist/esm/core/components-registry/assert-registry-completeness.frontend.helper.js.map +1 -1
- package/dist/esm/core/components-registry/provider-component-registry.frontend.service.d.ts +29 -229
- package/dist/esm/core/components-registry/provider-component-registry.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/components-registry/provider-component-registry.frontend.service.js +29 -327
- package/dist/esm/core/components-registry/provider-component-registry.frontend.service.js.map +1 -1
- package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.d.ts +17 -27
- package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.d.ts.map +1 -1
- package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.js +28 -48
- package/dist/esm/core/components-registry/useProviderComponent.frontend.hooks.js.map +1 -1
- package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts +21 -11
- package/dist/esm/core/config/app-configuration-frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/app-configuration-frontend.schemas.js +4 -4
- 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 +17 -0
- 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 +17 -0
- 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 +10 -10
- package/dist/esm/core/config/engine-settings-destinations.d.ts.map +1 -1
- package/dist/esm/core/config/engine-settings-destinations.js +221 -6
- package/dist/esm/core/config/engine-settings-destinations.js.map +1 -1
- package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts +8 -0
- package/dist/esm/core/config/launcher-items.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/launcher-items.frontend.schemas.js +1 -0
- package/dist/esm/core/config/launcher-items.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts +10 -1
- package/dist/esm/core/config/settings-hub.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/config/settings-hub.frontend.schemas.js +9 -0
- package/dist/esm/core/config/settings-hub.frontend.schemas.js.map +1 -1
- package/dist/esm/core/config/verify-launcher-content.d.ts.map +1 -1
- package/dist/esm/core/config/verify-launcher-content.js +30 -19
- package/dist/esm/core/config/verify-launcher-content.js.map +1 -1
- package/dist/esm/core/errors/ErrorContext.d.ts.map +1 -1
- package/dist/esm/core/errors/ErrorContext.js +9 -1
- package/dist/esm/core/errors/ErrorContext.js.map +1 -1
- package/dist/esm/core/errors/GlobalErrorHandler.d.ts.map +1 -1
- package/dist/esm/core/errors/GlobalErrorHandler.js +5 -4
- package/dist/esm/core/errors/GlobalErrorHandler.js.map +1 -1
- package/dist/esm/core/errors/RouterErrorBoundary.js +1 -1
- package/dist/esm/core/errors/RouterErrorBoundary.js.map +1 -1
- package/dist/esm/core/errors/errors-builder.frontend.services.d.ts +2 -2
- package/dist/esm/core/errors/errors-builder.frontend.services.d.ts.map +1 -1
- package/dist/esm/core/errors/errors-builder.frontend.services.js +4 -4
- package/dist/esm/core/errors/errors-builder.frontend.services.js.map +1 -1
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js +1 -1
- package/dist/esm/core/errors/user-facing-error-message.frontend.utils.js.map +1 -1
- package/dist/esm/core/events/NotificationContext.d.ts.map +1 -1
- package/dist/esm/core/events/NotificationContext.js +23 -5
- package/dist/esm/core/events/NotificationContext.js.map +1 -1
- package/dist/esm/core/events/events.frontend.schemas.d.ts +110 -43
- package/dist/esm/core/events/events.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/events/events.frontend.schemas.js +89 -15
- package/dist/esm/core/events/events.frontend.schemas.js.map +1 -1
- package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts +2 -0
- package/dist/esm/core/execution/useExecutionParticipationRMM.d.ts.map +1 -1
- package/dist/esm/core/execution/useExecutionParticipationRMM.js +2 -1
- package/dist/esm/core/execution/useExecutionParticipationRMM.js.map +1 -1
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts +1 -1
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.d.ts.map +1 -1
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.js +5 -2
- package/dist/esm/core/execution/useExecutionResourceOperationSurface.js.map +1 -1
- package/dist/esm/core/external-providers/ConsentBasedProviderSdks.d.ts +63 -0
- package/dist/esm/core/external-providers/ConsentBasedProviderSdks.d.ts.map +1 -0
- package/dist/esm/core/external-providers/ConsentBasedProviderSdks.js +131 -0
- package/dist/esm/core/external-providers/ConsentBasedProviderSdks.js.map +1 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.d.ts +61 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.d.ts.map +1 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.js +178 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupCombobox.js.map +1 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupHost.d.ts +52 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupHost.d.ts.map +1 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupHost.js +144 -0
- package/dist/esm/core/external-providers/ProviderAddressLookupHost.js.map +1 -0
- package/dist/esm/core/external-providers/ProviderFilePickerHost.d.ts +22 -1
- package/dist/esm/core/external-providers/ProviderFilePickerHost.d.ts.map +1 -1
- package/dist/esm/core/external-providers/ProviderFilePickerHost.js +23 -3
- package/dist/esm/core/external-providers/ProviderFilePickerHost.js.map +1 -1
- package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.d.ts +55 -0
- package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.d.ts.map +1 -0
- package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.js +65 -0
- package/dist/esm/core/external-providers/provider-address-lookup-selection.frontend.utils.js.map +1 -0
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts +63 -0
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.d.ts.map +1 -0
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js +100 -0
- package/dist/esm/core/external-providers/provider-scope-reauthorization-offers.frontend.js.map +1 -0
- package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts +45 -7
- package/dist/esm/core/flows-actors/FlowsActorsContext.d.ts.map +1 -1
- package/dist/esm/core/flows-actors/FlowsActorsContext.js +112 -28
- package/dist/esm/core/flows-actors/FlowsActorsContext.js.map +1 -1
- package/dist/esm/core/flows-actors/usePendingDecisions.d.ts +32 -0
- package/dist/esm/core/flows-actors/usePendingDecisions.d.ts.map +1 -0
- package/dist/esm/core/flows-actors/usePendingDecisions.js +91 -0
- package/dist/esm/core/flows-actors/usePendingDecisions.js.map +1 -0
- package/dist/esm/core/guidance/GuidanceRenderer.d.ts.map +1 -1
- package/dist/esm/core/guidance/GuidanceRenderer.js +3 -2
- package/dist/esm/core/guidance/GuidanceRenderer.js.map +1 -1
- package/dist/esm/core/i18n/I18nContext.d.ts +22 -8
- package/dist/esm/core/i18n/I18nContext.d.ts.map +1 -1
- package/dist/esm/core/i18n/I18nContext.js +21 -9
- package/dist/esm/core/i18n/I18nContext.js.map +1 -1
- package/dist/esm/core/i18n/component-label-resolution.utils.d.ts +5 -3
- package/dist/esm/core/i18n/component-label-resolution.utils.d.ts.map +1 -1
- package/dist/esm/core/i18n/component-label-resolution.utils.js +5 -3
- package/dist/esm/core/i18n/component-label-resolution.utils.js.map +1 -1
- package/dist/esm/core/i18n/useI18n.d.ts +2 -1
- package/dist/esm/core/i18n/useI18n.d.ts.map +1 -1
- package/dist/esm/core/i18n/useI18n.js +2 -1
- package/dist/esm/core/i18n/useI18n.js.map +1 -1
- package/dist/esm/core/loading/LoadingContext.d.ts.map +1 -1
- package/dist/esm/core/loading/LoadingContext.js +7 -1
- package/dist/esm/core/loading/LoadingContext.js.map +1 -1
- package/dist/esm/core/loading/LoadingGate.d.ts.map +1 -1
- package/dist/esm/core/loading/LoadingGate.js +19 -1
- package/dist/esm/core/loading/LoadingGate.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/AnalyticsContext.d.ts +15 -2
- package/dist/esm/core/monitoring/analytics/AnalyticsContext.d.ts.map +1 -1
- package/dist/esm/core/monitoring/analytics/AnalyticsContext.js +183 -20
- package/dist/esm/core/monitoring/analytics/AnalyticsContext.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/AnalyticsEventBridge.js +2 -2
- package/dist/esm/core/monitoring/analytics/AnalyticsEventBridge.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.d.ts +7 -15
- package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.js +8 -26
- package/dist/esm/core/monitoring/analytics/analytics-provider-registry.frontend.service.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.d.ts +12 -3
- package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.d.ts.map +1 -1
- package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.js +3 -2
- package/dist/esm/core/monitoring/analytics/analytics-provider.frontend.interface.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.d.ts +42 -0
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.d.ts.map +1 -1
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js +89 -5
- package/dist/esm/core/monitoring/analytics/providers/backend-proxy-analytics.provider.js.map +1 -1
- package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.d.ts +2 -0
- package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.d.ts.map +1 -1
- package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.js +2 -0
- package/dist/esm/core/monitoring/analytics/providers/console-analytics.provider.js.map +1 -1
- package/dist/esm/core/navigation/NavigationContentAreas.d.ts +78 -0
- package/dist/esm/core/navigation/NavigationContentAreas.d.ts.map +1 -1
- package/dist/esm/core/navigation/NavigationContentAreas.js +264 -16
- package/dist/esm/core/navigation/NavigationContentAreas.js.map +1 -1
- package/dist/esm/core/navigation/NavigationContext.d.ts +8 -0
- package/dist/esm/core/navigation/NavigationContext.d.ts.map +1 -1
- package/dist/esm/core/navigation/NavigationContext.js +137 -30
- package/dist/esm/core/navigation/NavigationContext.js.map +1 -1
- package/dist/esm/core/navigation/launcher-resolution.d.ts +2 -0
- package/dist/esm/core/navigation/launcher-resolution.d.ts.map +1 -1
- package/dist/esm/core/navigation/launcher-resolution.js +1 -0
- package/dist/esm/core/navigation/launcher-resolution.js.map +1 -1
- package/dist/esm/core/navigation/navigation-cascade.d.ts +46 -0
- package/dist/esm/core/navigation/navigation-cascade.d.ts.map +1 -0
- package/dist/esm/core/navigation/navigation-cascade.js +222 -0
- package/dist/esm/core/navigation/navigation-cascade.js.map +1 -0
- package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.js +21 -2
- package/dist/esm/core/navigation/navigation-clean-break.frontend.utils.js.map +1 -1
- package/dist/esm/core/navigation/navigation-controller-internals.d.ts +71 -0
- package/dist/esm/core/navigation/navigation-controller-internals.d.ts.map +1 -0
- package/dist/esm/core/navigation/navigation-controller-internals.js +84 -0
- package/dist/esm/core/navigation/navigation-controller-internals.js.map +1 -0
- package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts +86 -2
- package/dist/esm/core/navigation/navigation-policy-resolver.service.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation-policy-resolver.service.js +242 -124
- package/dist/esm/core/navigation/navigation-policy-resolver.service.js.map +1 -1
- package/dist/esm/core/navigation/navigation.schemas.d.ts +170 -8
- package/dist/esm/core/navigation/navigation.schemas.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation.schemas.js +121 -2
- package/dist/esm/core/navigation/navigation.schemas.js.map +1 -1
- package/dist/esm/core/navigation/navigation.utils.d.ts +102 -6
- package/dist/esm/core/navigation/navigation.utils.d.ts.map +1 -1
- package/dist/esm/core/navigation/navigation.utils.js +283 -34
- package/dist/esm/core/navigation/navigation.utils.js.map +1 -1
- package/dist/esm/core/navigation/useIsStackEntryActive.d.ts +0 -10
- package/dist/esm/core/navigation/useIsStackEntryActive.d.ts.map +0 -1
- package/dist/esm/core/navigation/useIsStackEntryActive.js.map +0 -1
- package/dist/esm/core/navigation/useNavigationController.d.ts +28 -157
- package/dist/esm/core/navigation/useNavigationController.d.ts.map +1 -1
- package/dist/esm/core/navigation/useNavigationController.js +211 -1189
- package/dist/esm/core/navigation/useNavigationController.js.map +1 -1
- package/dist/esm/core/navigation/useNavigationRouterSync.d.ts +174 -0
- package/dist/esm/core/navigation/useNavigationRouterSync.d.ts.map +1 -0
- package/dist/esm/core/navigation/useNavigationRouterSync.js +977 -0
- package/dist/esm/core/navigation/useNavigationRouterSync.js.map +1 -0
- package/dist/esm/core/navigation/useOverlayTitle.d.ts +13 -1
- package/dist/esm/core/navigation/useOverlayTitle.d.ts.map +1 -1
- package/dist/esm/core/navigation/useOverlayTitle.js +15 -10
- package/dist/esm/core/navigation/useOverlayTitle.js.map +1 -1
- package/dist/esm/core/navigation/useResponsiveZoneMigration.d.ts +43 -0
- package/dist/esm/core/navigation/useResponsiveZoneMigration.d.ts.map +1 -0
- package/dist/esm/core/navigation/useResponsiveZoneMigration.js +44 -0
- package/dist/esm/core/navigation/useResponsiveZoneMigration.js.map +1 -0
- package/dist/esm/core/navigation/zone-collapse-migration.d.ts +83 -0
- package/dist/esm/core/navigation/zone-collapse-migration.d.ts.map +1 -0
- package/dist/esm/core/navigation/zone-collapse-migration.js +116 -0
- package/dist/esm/core/navigation/zone-collapse-migration.js.map +1 -0
- package/dist/esm/core/navigation/zone-collapse.d.ts +51 -0
- package/dist/esm/core/navigation/zone-collapse.d.ts.map +1 -0
- package/dist/esm/core/navigation/zone-collapse.js +59 -0
- package/dist/esm/core/navigation/zone-collapse.js.map +1 -0
- package/dist/esm/core/navigation/zone-emphasis.d.ts +3 -0
- package/dist/esm/core/navigation/zone-emphasis.d.ts.map +1 -1
- package/dist/esm/core/navigation/zone-emphasis.js +26 -4
- package/dist/esm/core/navigation/zone-emphasis.js.map +1 -1
- package/dist/esm/core/navigation/zone-visible-entry.d.ts +22 -0
- package/dist/esm/core/navigation/zone-visible-entry.d.ts.map +1 -1
- package/dist/esm/core/navigation/zone-visible-entry.js +25 -0
- package/dist/esm/core/navigation/zone-visible-entry.js.map +1 -1
- package/dist/esm/core/requests/websockets/WebSocketContext.d.ts.map +1 -1
- package/dist/esm/core/requests/websockets/WebSocketContext.js +53 -18
- 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 +3 -1
- package/dist/esm/core/requests/websockets/WebSocketEventBridge.js.map +1 -1
- package/dist/esm/core/requests/websockets/useNotificationBadges.d.ts +22 -0
- package/dist/esm/core/requests/websockets/useNotificationBadges.d.ts.map +1 -1
- package/dist/esm/core/requests/websockets/useNotificationBadges.js +72 -3
- package/dist/esm/core/requests/websockets/useNotificationBadges.js.map +1 -1
- package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.d.ts +28 -0
- package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.d.ts.map +1 -0
- package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.js +86 -0
- package/dist/esm/core/requests/websockets/usePublishNotificationBadgeCount.js.map +1 -0
- package/dist/esm/core/requests/wildo-http-client-manual-calls.frontend.service.d.ts +38 -3
- 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 +57 -2
- 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.map +1 -1
- package/dist/esm/core/requests/wildo-http-client-resources.frontend.service.js +4 -2
- 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 +30 -1
- 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 +47 -4
- package/dist/esm/core/requests/wildo-http-client.frontend.service.js.map +1 -1
- package/dist/esm/core/resources/ResourceRegistryContext.d.ts.map +1 -1
- package/dist/esm/core/resources/ResourceRegistryContext.js +22 -1
- package/dist/esm/core/resources/ResourceRegistryContext.js.map +1 -1
- package/dist/esm/core/resources/context-resource-identifiers.frontend.utils.js +1 -1
- package/dist/esm/core/resources/context-resource-identifiers.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/frontend-resource.utils.d.ts +22 -1
- package/dist/esm/core/resources/frontend-resource.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/frontend-resource.utils.js +25 -2
- package/dist/esm/core/resources/frontend-resource.utils.js.map +1 -1
- package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts +113 -13
- package/dist/esm/core/resources/operation-semantics.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/operation-semantics.frontend.utils.js +173 -20
- package/dist/esm/core/resources/operation-semantics.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.d.ts +11 -0
- package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.js +7 -0
- package/dist/esm/core/resources/relationship-surface-runtime.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.d.ts +3 -2
- package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.d.ts.map +1 -1
- package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.js +13 -5
- package/dist/esm/core/resources/resource-label-field-paths.frontend.utils.js.map +1 -1
- package/dist/esm/core/resources/resources-repository.frontend.service.d.ts +6 -0
- package/dist/esm/core/resources/resources-repository.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/resources/resources-repository.frontend.service.js +90 -1
- package/dist/esm/core/resources/resources-repository.frontend.service.js.map +1 -1
- package/dist/esm/core/resources/resources.frontend.schemas.d.ts +139 -16
- package/dist/esm/core/resources/resources.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/resources/resources.frontend.schemas.js +110 -11
- package/dist/esm/core/resources/resources.frontend.schemas.js.map +1 -1
- package/dist/esm/core/resources/rmm/ResourceMutationManager.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/ResourceMutationManager.js +3 -1
- package/dist/esm/core/resources/rmm/ResourceMutationManager.js.map +1 -1
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.d.ts +10 -0
- 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 +8 -0
- package/dist/esm/core/resources/rmm/update-like-mutation-fallback.frontend.js.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceRMM.d.ts +7 -0
- package/dist/esm/core/resources/rmm/useResourceRMM.d.ts.map +1 -1
- package/dist/esm/core/resources/rmm/useResourceRMM.js +9 -2
- package/dist/esm/core/resources/rmm/useResourceRMM.js.map +1 -1
- package/dist/esm/core/resources/useOperationDirectExecution.d.ts +59 -0
- package/dist/esm/core/resources/useOperationDirectExecution.d.ts.map +1 -0
- package/dist/esm/core/resources/useOperationDirectExecution.js +278 -0
- package/dist/esm/core/resources/useOperationDirectExecution.js.map +1 -0
- package/dist/esm/core/resources/useResourceOperationActions.d.ts +1 -1
- package/dist/esm/core/resources/useResourceOperationActions.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceOperationActions.js +69 -22
- package/dist/esm/core/resources/useResourceOperationActions.js.map +1 -1
- package/dist/esm/core/resources/useResourceOperationSurface.d.ts +8 -6
- package/dist/esm/core/resources/useResourceOperationSurface.d.ts.map +1 -1
- package/dist/esm/core/resources/useResourceOperationSurface.js +3 -2
- package/dist/esm/core/resources/useResourceOperationSurface.js.map +1 -1
- package/dist/esm/core/runtime/AppRouter.d.ts.map +1 -1
- package/dist/esm/core/runtime/AppRouter.js +23 -2
- package/dist/esm/core/runtime/AppRouter.js.map +1 -1
- package/dist/esm/core/runtime/ApplicationContext.shared.d.ts +4 -2
- package/dist/esm/core/runtime/ApplicationContext.shared.d.ts.map +1 -1
- package/dist/esm/core/runtime/ApplicationContext.shared.js.map +1 -1
- package/dist/esm/core/runtime/ApplicationMainContext.d.ts +12 -2
- package/dist/esm/core/runtime/ApplicationMainContext.d.ts.map +1 -1
- package/dist/esm/core/runtime/ApplicationMainContext.js +5 -2
- package/dist/esm/core/runtime/ApplicationMainContext.js.map +1 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts +25 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.d.ts.map +1 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.js +37 -1
- package/dist/esm/core/runtime/domain-module.frontend.definitions.js.map +1 -1
- package/dist/esm/core/runtime/start-application.frontend.service.d.ts +21 -2
- package/dist/esm/core/runtime/start-application.frontend.service.d.ts.map +1 -1
- package/dist/esm/core/runtime/start-application.frontend.service.js +51 -4
- package/dist/esm/core/runtime/start-application.frontend.service.js.map +1 -1
- package/dist/esm/core/security/AuthSessionContext.d.ts +11 -0
- package/dist/esm/core/security/AuthSessionContext.d.ts.map +1 -1
- package/dist/esm/core/security/AuthSessionContext.js +70 -22
- package/dist/esm/core/security/AuthSessionContext.js.map +1 -1
- package/dist/esm/core/security/StepUpAuthContext.d.ts.map +1 -1
- package/dist/esm/core/security/StepUpAuthContext.js +10 -2
- package/dist/esm/core/security/StepUpAuthContext.js.map +1 -1
- package/dist/esm/core/security/UserOrgsContext.d.ts.map +1 -1
- package/dist/esm/core/security/UserOrgsContext.js +72 -8
- package/dist/esm/core/security/UserOrgsContext.js.map +1 -1
- package/dist/esm/core/security/route-organization-access.frontend.utils.d.ts +7 -0
- 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 +8 -2
- package/dist/esm/core/security/route-organization-access.frontend.utils.js.map +1 -1
- package/dist/esm/core/security/useGrantedConsentPurposes.d.ts +30 -0
- package/dist/esm/core/security/useGrantedConsentPurposes.d.ts.map +1 -0
- package/dist/esm/core/security/useGrantedConsentPurposes.js +38 -0
- package/dist/esm/core/security/useGrantedConsentPurposes.js.map +1 -0
- package/dist/esm/core/ui/UIContext.d.ts.map +1 -1
- package/dist/esm/core/ui/UIContext.js +10 -6
- package/dist/esm/core/ui/UIContext.js.map +1 -1
- package/dist/esm/core/ui/color-conversion.utils.d.ts +20 -0
- package/dist/esm/core/ui/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/core/ui/color-conversion.utils.js +39 -5
- package/dist/esm/core/ui/color-conversion.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 +22 -2
- package/dist/esm/core/ui/themes/default.theme.js.map +1 -1
- package/dist/esm/core/ui/ui.frontend.schemas.d.ts +6 -6
- package/dist/esm/core/ui/ui.frontend.schemas.d.ts.map +1 -1
- package/dist/esm/core/ui/ui.frontend.schemas.js +3 -3
- package/dist/esm/core/ui/ui.frontend.schemas.js.map +1 -1
- package/dist/esm/index.d.ts +10 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +19 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/testing/app-shell-placement-coverage.d.ts +43 -0
- package/dist/esm/testing/app-shell-placement-coverage.d.ts.map +1 -0
- package/dist/esm/testing/app-shell-placement-coverage.js +114 -0
- package/dist/esm/testing/app-shell-placement-coverage.js.map +1 -0
- package/dist/esm/testing/mock-builders.d.ts.map +1 -1
- package/dist/esm/testing/mock-builders.js +5 -0
- package/dist/esm/testing/mock-builders.js.map +1 -1
- package/dist/esm/testing.d.ts +1 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +1 -0
- package/dist/esm/testing.js.map +1 -1
- package/package.json +9 -7
- package/dist/esm/core/navigation/useIsStackEntryActive.js +0 -15
- package/dist/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a resolver's flat, path-keyed field errors become react-hook-form's nested `FieldErrors`, and how
|
|
3
|
+
* they are reported through the browser's native validation when a form asks for it.
|
|
4
|
+
*
|
|
5
|
+
* Ported from `@hookform/resolvers` 5.9.1 (`src/toNestErrors.ts`, `src/validateFieldsNatively.ts`, MIT,
|
|
6
|
+
* © Bluebill1049 and contributors). The logic is unchanged, and `resolver-error-nesting.test.ts` holds it
|
|
7
|
+
* equal to the installed upstream on every case both versions agree on.
|
|
8
|
+
*
|
|
9
|
+
* ## Why this is a copy and not an import (#2029)
|
|
10
|
+
*
|
|
11
|
+
* `zodIssueResolver` used to import these two helpers from `@hookform/resolvers`, deliberately, so that the
|
|
12
|
+
* nesting rules stayed upstream's rather than being re-derived. The cost of that import turned out to fall
|
|
13
|
+
* somewhere else. `@hookform/resolvers` declares twenty-four OPTIONAL peers, one per validation library it
|
|
14
|
+
* supports (ajv, joi, typebox, yup, valibot, …). pnpm resolves an optional peer from whatever the importing
|
|
15
|
+
* application happens to have along the dependency path, and the resolved set becomes part of this
|
|
16
|
+
* package's injected snapshot identity. So every application that consumed `saas-frontend-lib` from two
|
|
17
|
+
* workspace packages with different contexts got two copies of it: Wonder CRM through `ajv` (6.15.0 under
|
|
18
|
+
* the Docusaurus-carrying technical-doc package, 8.20.0 under the companion), a scratch application through
|
|
19
|
+
* `joi` and `@sinclair/typebox`. Supplying the peers one by one would chase an open set. The engine uses
|
|
20
|
+
* about twenty-five lines of the package, so it owns them instead, and the package stays only as a
|
|
21
|
+
* devDependency so the parity test can compare against it.
|
|
22
|
+
*/
|
|
23
|
+
import { get, set } from 'react-hook-form';
|
|
24
|
+
const setCustomValidity = (ref, fieldPath, errors) => {
|
|
25
|
+
if (ref && 'reportValidity' in ref) {
|
|
26
|
+
const error = get(errors, fieldPath);
|
|
27
|
+
ref.setCustomValidity((error && error.message) || '');
|
|
28
|
+
ref.reportValidity();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
/** Reports each field's error through the browser's native constraint validation (web only). */
|
|
32
|
+
export const validateFieldsNatively = (errors, options) => {
|
|
33
|
+
for (const fieldPath in options.fields) {
|
|
34
|
+
const field = options.fields[fieldPath];
|
|
35
|
+
if (field && field.ref && 'reportValidity' in field.ref) {
|
|
36
|
+
setCustomValidity(field.ref, fieldPath, errors);
|
|
37
|
+
}
|
|
38
|
+
else if (field && field.refs) {
|
|
39
|
+
field.refs.forEach((ref) => setCustomValidity(ref, fieldPath, errors));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Nests a flat `{ 'a.b.0.c': error }` map into react-hook-form's `FieldErrors` shape. An error on a field
|
|
45
|
+
* array's own path is recorded as that array's `root` error, and each error carries its field's `ref`.
|
|
46
|
+
*/
|
|
47
|
+
export const toNestErrors = (errors, options) => {
|
|
48
|
+
if (options.shouldUseNativeValidation)
|
|
49
|
+
validateFieldsNatively(errors, options);
|
|
50
|
+
const fieldErrors = {};
|
|
51
|
+
for (const path in errors) {
|
|
52
|
+
const field = get(options.fields, path);
|
|
53
|
+
// Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and store the actual DOM elements in
|
|
54
|
+
// `refs`, matching react-hook-form's own `validateField` behavior for built-in validation.
|
|
55
|
+
const error = Object.assign(errors[path] || {}, {
|
|
56
|
+
ref: field && field.refs ? field.refs[0] : field && field.ref,
|
|
57
|
+
});
|
|
58
|
+
if (isNameInFieldArray(options.names || Object.keys(errors), path)) {
|
|
59
|
+
const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));
|
|
60
|
+
set(fieldArrayErrors, 'root', error);
|
|
61
|
+
set(fieldErrors, path, fieldArrayErrors);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
set(fieldErrors, path, error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return fieldErrors;
|
|
68
|
+
};
|
|
69
|
+
const isNameInFieldArray = (names, name) => {
|
|
70
|
+
const path = escapeForRegex(name);
|
|
71
|
+
return names.some((candidate) => escapeBrackets(candidate).match(`^${path}\\.\\d+`));
|
|
72
|
+
};
|
|
73
|
+
/** Removes brackets to match react-hook-form's `set` method behavior. */
|
|
74
|
+
function escapeBrackets(input) {
|
|
75
|
+
return input.replace(/\[(\d+)]/g, '.$1').replace(/[[\]]/g, '');
|
|
76
|
+
}
|
|
77
|
+
/** Removes brackets, then escapes regex metacharacters, so a field name can be embedded in a pattern. */
|
|
78
|
+
function escapeForRegex(input) {
|
|
79
|
+
return escapeBrackets(input).replace(/[.*+?^${}()|\\]/g, '\\$&');
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=resolver-error-nesting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-error-nesting.js","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/resolver-error-nesting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,GAAG,EAAE,GAAG,EAA2H,MAAM,iBAAiB,CAAC;AAEpK,MAAM,iBAAiB,GAAG,CAAC,GAAQ,EAAE,SAAiB,EAAE,MAAmB,EAAQ,EAAE;IACnF,IAAI,GAAG,IAAI,gBAAgB,IAAI,GAAG,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAA2B,CAAC;QAC/D,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAmC,MAAmB,EAAE,OAAsC,EAAQ,EAAE;IAC5I,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACxD,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAqB,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmC,MAAmB,EAAE,OAAsC,EAA6B,EAAE;IACvJ,IAAI,OAAO,CAAC,yBAAyB;QAAE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,EAA+B,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAA4B,CAAC;QACnE,yGAAyG;QACzG,2FAA2F;QAC3F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAC9C,GAAG,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG;SAC9D,CAAC,CAAC;QAEH,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;YACnE,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACrC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAAE,IAAuB,EAAW,EAAE;IAC1F,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,yEAAyE;AACzE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,yGAAyG;AACzG,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC","sourcesContent":["/**\n * How a resolver's flat, path-keyed field errors become react-hook-form's nested `FieldErrors`, and how\n * they are reported through the browser's native validation when a form asks for it.\n *\n * Ported from `@hookform/resolvers` 5.9.1 (`src/toNestErrors.ts`, `src/validateFieldsNatively.ts`, MIT,\n * © Bluebill1049 and contributors). The logic is unchanged, and `resolver-error-nesting.test.ts` holds it\n * equal to the installed upstream on every case both versions agree on.\n *\n * ## Why this is a copy and not an import (#2029)\n *\n * `zodIssueResolver` used to import these two helpers from `@hookform/resolvers`, deliberately, so that the\n * nesting rules stayed upstream's rather than being re-derived. The cost of that import turned out to fall\n * somewhere else. `@hookform/resolvers` declares twenty-four OPTIONAL peers, one per validation library it\n * supports (ajv, joi, typebox, yup, valibot, …). pnpm resolves an optional peer from whatever the importing\n * application happens to have along the dependency path, and the resolved set becomes part of this\n * package's injected snapshot identity. So every application that consumed `saas-frontend-lib` from two\n * workspace packages with different contexts got two copies of it: Wonder CRM through `ajv` (6.15.0 under\n * the Docusaurus-carrying technical-doc package, 8.20.0 under the companion), a scratch application through\n * `joi` and `@sinclair/typebox`. Supplying the peers one by one would chase an open set. The engine uses\n * about twenty-five lines of the package, so it owns them instead, and the package stays only as a\n * devDependency so the parity test can compare against it.\n */\nimport { get, set, type Field, type FieldError, type FieldErrors, type FieldValues, type InternalFieldName, type Ref, type ResolverOptions } from 'react-hook-form';\n\nconst setCustomValidity = (ref: Ref, fieldPath: string, errors: FieldErrors): void => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n ref.reportValidity();\n }\n};\n\n/** Reports each field's error through the browser's native constraint validation (web only). */\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(errors: FieldErrors, options: ResolverOptions<TFieldValues>): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) => setCustomValidity(ref, fieldPath, errors));\n }\n }\n};\n\n/**\n * Nests a flat `{ 'a.b.0.c': error }` map into react-hook-form's `FieldErrors` shape. An error on a field\n * array's own path is recorded as that array's `root` error, and each error carries its field's `ref`.\n */\nexport const toNestErrors = <TFieldValues extends FieldValues>(errors: FieldErrors, options: ResolverOptions<TFieldValues>): FieldErrors<TFieldValues> => {\n if (options.shouldUseNativeValidation) validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and store the actual DOM elements in\n // `refs`, matching react-hook-form's own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));\n set(fieldArrayErrors, 'root', error);\n set(fieldErrors, path, fieldArrayErrors);\n } else {\n set(fieldErrors, path, error);\n }\n }\n\n return fieldErrors;\n};\n\nconst isNameInFieldArray = (names: InternalFieldName[], name: InternalFieldName): boolean => {\n const path = escapeForRegex(name);\n return names.some((candidate) => escapeBrackets(candidate).match(`^${path}\\\\.\\\\d+`));\n};\n\n/** Removes brackets to match react-hook-form's `set` method behavior. */\nfunction escapeBrackets(input: string): string {\n return input.replace(/\\[(\\d+)]/g, '.$1').replace(/[[\\]]/g, '');\n}\n\n/** Removes brackets, then escapes regex metacharacters, so a field name can be embedded in a pattern. */\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\n"]}
|
package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.d.ts
CHANGED
|
@@ -11,13 +11,26 @@
|
|
|
11
11
|
* error body's `details`; the top-level `code` is deliberately not used, because on this error object
|
|
12
12
|
* `code` is axios's own transport code (`ERR_BAD_REQUEST`), a different vocabulary.
|
|
13
13
|
* - `errorHttpStatus` — the status, for the notification layer's status-shaped defaults.
|
|
14
|
+
* - `errorGuidanceKey` / `errorGuidanceParams` — the backend's user guidance, as the LABEL it names
|
|
15
|
+
* (`errors_guidance.<key>.explanation`) and the values that label interpolates. The most specific words
|
|
16
|
+
* a refusal has: without them a form showed its generic category ("refused as invalid") while the
|
|
17
|
+
* server had said exactly why, e.g. "The secret was not changed: OPENAI_API_KEY values start with sk-."
|
|
14
18
|
*
|
|
15
|
-
* The server's `details.message`
|
|
19
|
+
* The server's `details.message` and the guidance's own `explanation` string are never carried: both
|
|
20
|
+
* are English prose, and display reads labels.
|
|
16
21
|
*/
|
|
17
22
|
export interface ResourceErrorNotificationContext {
|
|
18
23
|
errorCustomMessageReference?: string;
|
|
19
24
|
errorRefusalCode?: string;
|
|
20
25
|
errorHttpStatus?: number;
|
|
26
|
+
errorGuidanceKey?: string;
|
|
27
|
+
errorGuidanceParams?: Record<string, string | number>;
|
|
21
28
|
}
|
|
22
29
|
export declare function describeResourceErrorForNotification(error: unknown): ResourceErrorNotificationContext;
|
|
30
|
+
/**
|
|
31
|
+
* The guidance half on its own, for producers that pick fields rather than spreading the whole context
|
|
32
|
+
* (`ResourceMutationManager`, `useResourceOperationActions`). Read through `readDisplayableErrorFacts`,
|
|
33
|
+
* which knows every shape a caught error arrives in.
|
|
34
|
+
*/
|
|
35
|
+
export declare function describeErrorGuidance(error: unknown): Pick<ResourceErrorNotificationContext, 'errorGuidanceKey' | 'errorGuidanceParams'>;
|
|
23
36
|
//# sourceMappingURL=resource-error-notification-context.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-error-notification-context.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/resource-error-notification-context.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-error-notification-context.utils.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/resource-error-notification-context.utils.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,gCAAgC;IAC/C,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACvD;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,gCAAgC,CASrG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,gCAAgC,EAAE,kBAAkB,GAAG,qBAAqB,CAAC,CAKxI"}
|
package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readDisplayableErrorFacts } from '../../../core/errors/user-facing-error-message.frontend.utils.js';
|
|
1
2
|
export function describeResourceErrorForNotification(error) {
|
|
2
3
|
const candidate = (error ?? {});
|
|
3
4
|
const context = (candidate.context ?? {});
|
|
@@ -5,6 +6,19 @@ export function describeResourceErrorForNotification(error) {
|
|
|
5
6
|
...(typeof candidate.customMessageReference === 'string' ? { errorCustomMessageReference: candidate.customMessageReference } : {}),
|
|
6
7
|
...(typeof context.code === 'string' && context.code.length > 0 ? { errorRefusalCode: context.code } : {}),
|
|
7
8
|
...(typeof candidate.httpStatus === 'number' ? { errorHttpStatus: candidate.httpStatus } : {}),
|
|
9
|
+
...describeErrorGuidance(error),
|
|
8
10
|
};
|
|
9
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The guidance half on its own, for producers that pick fields rather than spreading the whole context
|
|
14
|
+
* (`ResourceMutationManager`, `useResourceOperationActions`). Read through `readDisplayableErrorFacts`,
|
|
15
|
+
* which knows every shape a caught error arrives in.
|
|
16
|
+
*/
|
|
17
|
+
export function describeErrorGuidance(error) {
|
|
18
|
+
const guidance = readDisplayableErrorFacts(error).userGuidance;
|
|
19
|
+
const key = typeof guidance?.guidanceKey === 'string' && guidance.guidanceKey.length > 0 ? guidance.guidanceKey : undefined;
|
|
20
|
+
if (!key)
|
|
21
|
+
return {};
|
|
22
|
+
return { errorGuidanceKey: key, ...(guidance?.params ? { errorGuidanceParams: guidance.params } : {}) };
|
|
23
|
+
}
|
|
10
24
|
//# sourceMappingURL=resource-error-notification-context.utils.js.map
|
package/dist/esm/components/form/validation-errors/resource-error-notification-context.utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-error-notification-context.utils.js","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/resource-error-notification-context.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-error-notification-context.utils.js","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/resource-error-notification-context.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAC;AA+BrH,MAAM,UAAU,oCAAoC,CAAC,KAAc;IACjE,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE,CAAkF,CAAC;IACjH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAuB,CAAC;IAChE,OAAO;QACL,GAAG,CAAC,OAAO,SAAS,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,2BAA2B,EAAE,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClI,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,GAAG,CAAC,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,qBAAqB,CAAC,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAO,QAAQ,EAAE,WAAW,KAAK,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5H,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1G,CAAC","sourcesContent":["import { readDisplayableErrorFacts } from '~wildo-frontend-lib/core/errors/user-facing-error-message.frontend.utils';\n\n/**\n * What a resource form hands the notification layer about a failed request — ONE place (#1048).\n *\n * `ResourceAutomatedForm` built this context by hand at four error sites, and they had already drifted:\n * one carried the HTTP status and three did not. Adding the refusal code at four hand-built sites would\n * have been the same invariant applied at some of its call sites, so every site spreads this instead.\n *\n * - `errorCustomMessageReference` — the backend's generic reference (`validation`, `conflict`, …).\n * - `errorRefusalCode` — the DECLARED refusal the backend returned in `details.code`\n * (e.g. `SECRET_SLUG_NOT_DECLARED`). It is read from `error.context`, where the HTTP client keeps the\n * error body's `details`; the top-level `code` is deliberately not used, because on this error object\n * `code` is axios's own transport code (`ERR_BAD_REQUEST`), a different vocabulary.\n * - `errorHttpStatus` — the status, for the notification layer's status-shaped defaults.\n * - `errorGuidanceKey` / `errorGuidanceParams` — the backend's user guidance, as the LABEL it names\n * (`errors_guidance.<key>.explanation`) and the values that label interpolates. The most specific words\n * a refusal has: without them a form showed its generic category (\"refused as invalid\") while the\n * server had said exactly why, e.g. \"The secret was not changed: OPENAI_API_KEY values start with sk-.\"\n *\n * The server's `details.message` and the guidance's own `explanation` string are never carried: both\n * are English prose, and display reads labels.\n */\nexport interface ResourceErrorNotificationContext {\n errorCustomMessageReference?: string;\n errorRefusalCode?: string;\n errorHttpStatus?: number;\n errorGuidanceKey?: string;\n errorGuidanceParams?: Record<string, string | number>;\n}\n\nexport function describeResourceErrorForNotification(error: unknown): ResourceErrorNotificationContext {\n const candidate = (error ?? {}) as { customMessageReference?: unknown; httpStatus?: unknown; context?: unknown };\n const context = (candidate.context ?? {}) as { code?: unknown };\n return {\n ...(typeof candidate.customMessageReference === 'string' ? { errorCustomMessageReference: candidate.customMessageReference } : {}),\n ...(typeof context.code === 'string' && context.code.length > 0 ? { errorRefusalCode: context.code } : {}),\n ...(typeof candidate.httpStatus === 'number' ? { errorHttpStatus: candidate.httpStatus } : {}),\n ...describeErrorGuidance(error),\n };\n}\n\n/**\n * The guidance half on its own, for producers that pick fields rather than spreading the whole context\n * (`ResourceMutationManager`, `useResourceOperationActions`). Read through `readDisplayableErrorFacts`,\n * which knows every shape a caught error arrives in.\n */\nexport function describeErrorGuidance(error: unknown): Pick<ResourceErrorNotificationContext, 'errorGuidanceKey' | 'errorGuidanceParams'> {\n const guidance = readDisplayableErrorFacts(error).userGuidance;\n const key = typeof guidance?.guidanceKey === 'string' && guidance.guidanceKey.length > 0 ? guidance.guidanceKey : undefined;\n if (!key) return {};\n return { errorGuidanceKey: key, ...(guidance?.params ? { errorGuidanceParams: guidance.params } : {}) };\n}\n"]}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The form resolver that keeps a Zod issue's CODE and PARAMS on the field error (issue #995).
|
|
3
|
+
*
|
|
4
|
+
* `standardSchemaResolver` records every issue as `{ message, type: '' }`, so the only thing a field
|
|
5
|
+
* error carried was the schema's own prose — "Invalid phone number", "City is required", "Too small:
|
|
6
|
+
* expected string to have >=1 characters" — in the language the SCHEMA was written in, whatever the
|
|
7
|
+
* reader's locale. `getFieldError` translates through `errors_validation.<code>.msg`, which needs the
|
|
8
|
+
* code; with `type: ''` that catalog was unreachable for every schema issue and the English went
|
|
9
|
+
* straight to the screen (`display-text-comes-from-i18n.md`).
|
|
10
|
+
*
|
|
11
|
+
* Zod 4's Standard Schema `validate` returns Zod's OWN issues — `code`, `path`, `message`, plus the
|
|
12
|
+
* per-code fields (`minimum`, `origin`, `format`, `params`, …) — so nothing is lost until the resolver
|
|
13
|
+
* drops it. This resolver is the standard one with that one difference: `type` is the issue code and
|
|
14
|
+
* the issue's other fields ride along as `params`, exactly the parameters the `errors_validation`
|
|
15
|
+
* catalog is planned with (`LabellingPolicy[ERRORS_VALIDATION]`). Everything else — nesting by path,
|
|
16
|
+
* `criteriaMode: 'all'`, native validation, `raw` values — is the standard resolver's. The nesting and
|
|
17
|
+
* native-validation helpers are upstream's code, ported into `resolver-error-nesting.ts` and held equal to
|
|
18
|
+
* `@hookform/resolvers` by its parity test; that file says why importing them cost more than copying (#2029).
|
|
19
|
+
*
|
|
20
|
+
* A Standard Schema that is NOT Zod (no `code` on its issues) degrades to exactly what the standard
|
|
21
|
+
* resolver produced: `type: ''` and the message.
|
|
22
|
+
*/
|
|
1
23
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
24
|
import type { FieldError, FieldValues, Resolver } from 'react-hook-form';
|
|
3
25
|
/** The field error this resolver records: the standard one plus the issue's translatable parameters. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-issue-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/zod-issue-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zod-issue-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/zod-issue-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGzE,wGAAwG;AACxG,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,qHAAqH;IACrH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID,6GAA6G;AAC7G,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMjF;AAqBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,MAAM,EACzE,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,EACvC,eAAe,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,CAe1C"}
|
|
@@ -1,26 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The form resolver that keeps a Zod issue's CODE and PARAMS on the field error (issue #995).
|
|
3
|
-
*
|
|
4
|
-
* `standardSchemaResolver` records every issue as `{ message, type: '' }`, so the only thing a field
|
|
5
|
-
* error carried was the schema's own prose — "Invalid phone number", "City is required", "Too small:
|
|
6
|
-
* expected string to have >=1 characters" — in the language the SCHEMA was written in, whatever the
|
|
7
|
-
* reader's locale. `getFieldError` translates through `errors_validation.<code>.msg`, which needs the
|
|
8
|
-
* code; with `type: ''` that catalog was unreachable for every schema issue and the English went
|
|
9
|
-
* straight to the screen (`display-text-comes-from-i18n.md`).
|
|
10
|
-
*
|
|
11
|
-
* Zod 4's Standard Schema `validate` returns Zod's OWN issues — `code`, `path`, `message`, plus the
|
|
12
|
-
* per-code fields (`minimum`, `origin`, `format`, `params`, …) — so nothing is lost until the resolver
|
|
13
|
-
* drops it. This resolver is the standard one with that one difference: `type` is the issue code and
|
|
14
|
-
* the issue's other fields ride along as `params`, exactly the parameters the `errors_validation`
|
|
15
|
-
* catalog is planned with (`LabellingPolicy[ERRORS_VALIDATION]`). Everything else — nesting by path,
|
|
16
|
-
* `criteriaMode: 'all'`, native validation, `raw` values — is the standard resolver's, taken from
|
|
17
|
-
* `@hookform/resolvers`' own exports rather than re-derived.
|
|
18
|
-
*
|
|
19
|
-
* A Standard Schema that is NOT Zod (no `code` on its issues) degrades to exactly what the standard
|
|
20
|
-
* resolver produced: `type: ''` and the message.
|
|
21
|
-
*/
|
|
22
|
-
import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';
|
|
23
1
|
import { getDotPath } from '@standard-schema/utils';
|
|
2
|
+
import { toNestErrors, validateFieldsNatively } from './resolver-error-nesting.js';
|
|
24
3
|
const NON_PARAM_ISSUE_KEYS = new Set(['code', 'message', 'path', 'input']);
|
|
25
4
|
/** The issue's fields other than its code, message, path and the raw input (which is never display text). */
|
|
26
5
|
export function zodIssueParams(issue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-issue-resolver.js","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/zod-issue-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zod-issue-resolver.js","sourceRoot":"","sources":["../../../../../../src/components/form/validation-errors/zod-issue-resolver.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAQhF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3E,6GAA6G;AAC7G,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAyC,EAAE,wBAAiC;IACpG,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,SAAS,GAAI,KAA4B,CAAC,IAAI,CAAC;QACrD,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QACD,IAAI,wBAAwB,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAuC,EACvC,kBAAqC,EAAE;IAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QACzC,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,YAAY,OAAO;YAAE,MAAM,GAAG,MAAM,MAAM,CAAC;QAErD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC;YACrH,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,uGAAuG;QACvG,MAAM,MAAM,GAAI,MAAiD,CAAC,KAAK,CAAC;QAExE,IAAI,OAAO,CAAC,yBAAyB;YAAE,sBAAsB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3E,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1F,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The form resolver that keeps a Zod issue's CODE and PARAMS on the field error (issue #995).\n *\n * `standardSchemaResolver` records every issue as `{ message, type: '' }`, so the only thing a field\n * error carried was the schema's own prose — \"Invalid phone number\", \"City is required\", \"Too small:\n * expected string to have >=1 characters\" — in the language the SCHEMA was written in, whatever the\n * reader's locale. `getFieldError` translates through `errors_validation.<code>.msg`, which needs the\n * code; with `type: ''` that catalog was unreachable for every schema issue and the English went\n * straight to the screen (`display-text-comes-from-i18n.md`).\n *\n * Zod 4's Standard Schema `validate` returns Zod's OWN issues — `code`, `path`, `message`, plus the\n * per-code fields (`minimum`, `origin`, `format`, `params`, …) — so nothing is lost until the resolver\n * drops it. This resolver is the standard one with that one difference: `type` is the issue code and\n * the issue's other fields ride along as `params`, exactly the parameters the `errors_validation`\n * catalog is planned with (`LabellingPolicy[ERRORS_VALIDATION]`). Everything else — nesting by path,\n * `criteriaMode: 'all'`, native validation, `raw` values — is the standard resolver's. The nesting and\n * native-validation helpers are upstream's code, ported into `resolver-error-nesting.ts` and held equal to\n * `@hookform/resolvers` by its parity test; that file says why importing them cost more than copying (#2029).\n *\n * A Standard Schema that is NOT Zod (no `code` on its issues) degrades to exactly what the standard\n * resolver produced: `type: ''` and the message.\n */\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport type { FieldError, FieldValues, Resolver } from 'react-hook-form';\nimport { toNestErrors, validateFieldsNatively } from './resolver-error-nesting';\n\n/** The field error this resolver records: the standard one plus the issue's translatable parameters. */\nexport interface ZodIssueFieldError extends FieldError {\n /** The issue's fields other than `code`, `message` and `path` — what `errors_validation.<code>.msg` interpolates. */\n params?: Record<string, unknown>;\n}\n\nconst NON_PARAM_ISSUE_KEYS = new Set(['code', 'message', 'path', 'input']);\n\n/** The issue's fields other than its code, message, path and the raw input (which is never display text). */\nexport function zodIssueParams(issue: object): Record<string, unknown> | undefined {\n const params: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(issue)) {\n if (!NON_PARAM_ISSUE_KEYS.has(key)) params[key] = value;\n }\n return Object.keys(params).length > 0 ? params : undefined;\n}\n\nfunction parseErrorSchema(issues: readonly StandardSchemaV1.Issue[], validateAllFieldCriteria: boolean): Record<string, ZodIssueFieldError> {\n const errors: Record<string, ZodIssueFieldError> = {};\n for (const issue of issues) {\n const path = getDotPath(issue);\n if (!path) continue;\n const issueCode = (issue as { code?: unknown }).code;\n const code = typeof issueCode === 'string' ? issueCode : '';\n if (!errors[path]) {\n const params = zodIssueParams(issue);\n errors[path] = { message: issue.message, type: code, ...(params ? { params } : {}) };\n }\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n errors[path].types = { ...types, [code || Object.keys(types).length]: issue.message };\n }\n }\n return errors;\n}\n\n/**\n * Creates a react-hook-form resolver for a Zod 4 (Standard Schema) schema that keeps each issue's\n * code as the field error's `type` and its fields as `params`. Drop-in for `standardSchemaResolver`.\n */\nexport function zodIssueResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _context, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) result = await result;\n\n if (result.issues) {\n const errors = parseErrorSchema(result.issues, !options.shouldUseNativeValidation && options.criteriaMode === 'all');\n return { values: {}, errors: toNestErrors(errors, options) };\n }\n // Not narrowed by the `issues` check above under this compiler: a success result is the only one left.\n const parsed = (result as StandardSchemaV1.SuccessResult<Output>).value;\n\n if (options.shouldUseNativeValidation) validateFieldsNatively({}, options);\n return { values: resolverOptions.raw ? Object.assign({}, values) : parsed, errors: {} };\n };\n}\n"]}
|
|
@@ -31,6 +31,17 @@ export type ResizablePanelProps = {
|
|
|
31
31
|
tagName?: keyof HTMLElementTagNameMap;
|
|
32
32
|
};
|
|
33
33
|
export type ResizableHandleProps = {
|
|
34
|
+
/**
|
|
35
|
+
* The divider's accessible name.
|
|
36
|
+
*
|
|
37
|
+
* `react-resizable-panels` gives the handle `role="separator"` with `aria-valuemin`/`max`/`now`
|
|
38
|
+
* and arrow-key operation, and no NAME — so a screen reader announced an anonymous separator that
|
|
39
|
+
* happened to be focusable and adjustable, with nothing saying what adjusting it did. It is
|
|
40
|
+
* declared here because the prop type, not the preset, was what refused it: the preset already
|
|
41
|
+
* spreads `...props` onto the primitive, so the attribute always reached the DOM once it could be
|
|
42
|
+
* written.
|
|
43
|
+
*/
|
|
44
|
+
'aria-label'?: string;
|
|
34
45
|
className?: string;
|
|
35
46
|
style?: React.CSSProperties;
|
|
36
47
|
children?: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizable.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/resizable.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resizable.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/resizable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizable.js","sourceRoot":"","sources":["../../../../../src/components/layout/resizable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iFAAiF,CAAA;AACjI,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"resizable.js","sourceRoot":"","sources":["../../../../../src/components/layout/resizable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iFAAiF,CAAA;AACjI,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAgE5F,mBAAmB;AAEnB,MAAM,OAAO,GAAG,+BAA+B,CAC7C,qBAAqB,CAAC,+BAA+B,EACrD,qBAAqB,EACrB,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CAAA;AAED,mBAAmB;AAEnB,MAAM,UAAU,mBAAmB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAmD;IACjI,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,OAAK,KAAK,GAAI,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA8C;IACvH,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,KAAK,OAAK,KAAK,GAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA+C;IACzH,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,MAAM,OAAK,KAAK,GAAI,CAAA;AAChC,CAAC","sourcesContent":["import React from 'react'\nimport { createCompoundComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport { DisplayDirection } from '@wildo-ai/zod-decorators'\nimport { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\n\n// --- Contract ---\nexport type ResizablePanelGroupProps = {\n className?: string\n style?: React.CSSProperties\n children?: React.ReactNode\n autoSaveId?: string\n direction: DisplayDirection\n onLayout?: (layout: number[]) => void\n storage?: { getItem(name: string): string | null; setItem(name: string, value: string): void }\n tagName?: keyof HTMLElementTagNameMap\n}\n\nexport type ResizablePanelProps = {\n className?: string\n style?: React.CSSProperties\n children?: React.ReactNode\n collapsedSize?: number\n collapsible?: boolean\n defaultSize?: number\n id?: string\n maxSize?: number\n minSize?: number\n onCollapse?: () => void\n onExpand?: () => void\n onResize?: (size: number, prevSize: number | undefined) => void\n order?: number\n tagName?: keyof HTMLElementTagNameMap\n}\n\nexport type ResizableHandleProps = {\n /**\n * The divider's accessible name.\n *\n * `react-resizable-panels` gives the handle `role=\"separator\"` with `aria-valuemin`/`max`/`now`\n * and arrow-key operation, and no NAME — so a screen reader announced an anonymous separator that\n * happened to be focusable and adjustable, with nothing saying what adjusting it did. It is\n * declared here because the prop type, not the preset, was what refused it: the preset already\n * spreads `...props` onto the primitive, so the attribute always reached the DOM once it could be\n * written.\n */\n 'aria-label'?: string\n className?: string\n style?: React.CSSProperties\n children?: React.ReactNode\n disabled?: boolean\n hitAreaMargins?: { coarse: number; fine: number }\n onDragging?: (isDragging: boolean) => void\n tabIndex?: number\n tagName?: keyof HTMLElementTagNameMap\n withHandle?: boolean\n}\n\n// --- Compound type ---\n\nexport interface ResizablePanelGroupCompound {\n (props: ResizablePanelGroupProps): React.JSX.Element\n Panel: React.FC<ResizablePanelProps>\n Handle: React.FC<ResizableHandleProps>\n}\n\n// --- Resolver ---\n\nconst resolve = createCompoundComponentResolver<ResizablePanelGroupCompound>(\n FrontendComponentType.LOW_LEVEL_RESIZABLE_PANEL_GROUP,\n 'ResizablePanelGroup',\n ['Panel', 'Handle']\n)\n\n// --- Wrappers ---\n\nexport function ResizablePanelGroup({ preset = CorePresetNames.DEFAULT, ...props }: ResizablePanelGroupProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C {...props} />\n}\n\nexport function ResizablePanel({ preset = CorePresetNames.DEFAULT, ...props }: ResizablePanelProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Panel {...props} />\n}\n\nexport function ResizableHandle({ preset = CorePresetNames.DEFAULT, ...props }: ResizableHandleProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Handle {...props} />\n}\n"]}
|
|
@@ -31,7 +31,17 @@ export interface ApplicationLevelProps_NavigationBack extends BaseApplicationLev
|
|
|
31
31
|
*/
|
|
32
32
|
host?: NavigationBackHost;
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Which zone the back control acts on.
|
|
36
|
+
*
|
|
37
|
+
* A surface header names its own zone. The SHELL's control cannot, so it acts on the zone the reader
|
|
38
|
+
* last worked in — unless that zone holds nothing, in which case PRIMARY. Nothing reset the focused
|
|
39
|
+
* zone when its pane closed, so after closing a detail pane with its own control the header's arrow
|
|
40
|
+
* stayed enabled (an adjacent zone "closes on back") and clicking it did nothing: `goBack` on an
|
|
41
|
+
* empty zone returns at once. The focus itself is left alone on purpose — a reader may genuinely
|
|
42
|
+
* work in an empty `EMPTY_STATE` pane — so the question is answered here, where it is asked.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveApplicationLevelNavigationBackZone(navigationZone: NavigationZone | undefined, focusedZone: NavigationZoneName, focusedZoneHoldsContent?: boolean): NavigationZone;
|
|
35
45
|
/**
|
|
36
46
|
* Back-affordance OWNERSHIP GATE — the one place the policy is applied.
|
|
37
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationLevel_NavigationBack.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_NavigationBack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AACtH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAC;AAGxH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EACL,kBAAkB,EAGnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEtG;;;;;GAKG;AACH,oBAAY,kBAAkB;IAC5B,4EAA4E;IAC5E,KAAK,UAAU;IACf,4EAA4E;IAC5E,OAAO,YAAY;CACpB;AAGD,MAAM,WAAW,oCAAqC,SAAQ,yBAAyB;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C,kBAAkB,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED,wBAAgB,yCAAyC,CACvD,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,WAAW,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ApplicationLevel_NavigationBack.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_NavigationBack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AACtH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAC;AAGxH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EACL,kBAAkB,EAGnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEtG;;;;;GAKG;AACH,oBAAY,kBAAkB;IAC5B,4EAA4E;IAC5E,KAAK,UAAU;IACf,4EAA4E;IAC5E,OAAO,YAAY;CACpB;AAGD,MAAM,WAAW,oCAAqC,SAAQ,yBAAyB;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C,kBAAkB,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yCAAyC,CACvD,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,WAAW,EAAE,kBAAkB,EAC/B,uBAAuB,GAAE,OAAc,GACtC,cAAc,CAGhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,MAAgC,EAChC,IAA+B,EAC/B,GAAG,KAAK,EACT,EAAE,oCAAoC,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAqBxF"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { createComponentResolver } from '../../../core/components-registry/component-resolver.frontend.helper.js';
|
|
4
4
|
import { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models';
|
|
5
|
-
import { navigationBackAffordanceAdmitsShell, navigationBackAffordanceAdmitsSurface, } from '@wildo-ai/saas-models';
|
|
5
|
+
import { NavigationZoneName, navigationBackAffordanceAdmitsShell, navigationBackAffordanceAdmitsSurface, } from '@wildo-ai/saas-models';
|
|
6
6
|
import { UIContext } from '../../../core/ui/UIContext.js';
|
|
7
7
|
/**
|
|
8
8
|
* Which LAYER is mounting this back control. The same component is mounted by
|
|
@@ -17,8 +17,20 @@ export var NavigationBackHost;
|
|
|
17
17
|
/** A surface's own header — a resource or view header, beside its title. */
|
|
18
18
|
NavigationBackHost["SURFACE"] = "surface";
|
|
19
19
|
})(NavigationBackHost || (NavigationBackHost = {}));
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Which zone the back control acts on.
|
|
22
|
+
*
|
|
23
|
+
* A surface header names its own zone. The SHELL's control cannot, so it acts on the zone the reader
|
|
24
|
+
* last worked in — unless that zone holds nothing, in which case PRIMARY. Nothing reset the focused
|
|
25
|
+
* zone when its pane closed, so after closing a detail pane with its own control the header's arrow
|
|
26
|
+
* stayed enabled (an adjacent zone "closes on back") and clicking it did nothing: `goBack` on an
|
|
27
|
+
* empty zone returns at once. The focus itself is left alone on purpose — a reader may genuinely
|
|
28
|
+
* work in an empty `EMPTY_STATE` pane — so the question is answered here, where it is asked.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveApplicationLevelNavigationBackZone(navigationZone, focusedZone, focusedZoneHoldsContent = true) {
|
|
31
|
+
if (navigationZone)
|
|
32
|
+
return navigationZone;
|
|
33
|
+
return focusedZoneHoldsContent ? focusedZone : NavigationZoneName.PRIMARY;
|
|
22
34
|
}
|
|
23
35
|
/**
|
|
24
36
|
* Back-affordance OWNERSHIP GATE — the one place the policy is applied.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationLevel_NavigationBack.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_NavigationBack.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAC;AAC1H,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,
|
|
1
|
+
{"version":3,"file":"ApplicationLevel_NavigationBack.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_NavigationBack.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAC;AAC1H,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,EACL,kBAAkB,EAClB,mCAAmC,EACnC,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAGlE;;;;;GAKG;AACH,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,4EAA4E;IAC5E,qCAAe,CAAA;IACf,4EAA4E;IAC5E,yCAAmB,CAAA;AACrB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAkBD;;;;;;;;;GASG;AACH,MAAM,UAAU,yCAAyC,CACvD,cAA0C,EAC1C,WAA+B,EAC/B,0BAAmC,IAAI;IAEvC,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAC1C,OAAO,uBAAuB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAC5E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,+BAA+B,CAAC,EAC9C,MAAM,GAAG,eAAe,CAAC,OAAO,EAChC,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAC/B,GAAG,KAAK,EACoD;IAC5D,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,4EAA4E;IAC5E,4BAA4B;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,KAAK,kBAAkB,CAAC,KAAK;QAChD,CAAC,CAAC,mCAAmC,CAAC,KAAK,CAAC;QAC5C,CAAC,CAAC,qCAAqC,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CACvC,qBAAqB,CAAC,iCAAiC,EACvD,iCAAiC,CAClC,CAAC,MAAM,CAAC,CAAC;IACV,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAC;AAClC,CAAC","sourcesContent":["import React, { useContext } from 'react';\nimport { ApplicationLevelComponentType } from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\nimport { HorizontalPlacement, VerticalPlacement } from '@wildo-ai/presets-components-models';\n\nimport { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas';\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper';\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models';\nimport type { NavigationZone } from '~wildo-frontend-lib/core/navigation/navigation.schemas';\nimport {\n NavigationZoneName,\n navigationBackAffordanceAdmitsShell,\n navigationBackAffordanceAdmitsSurface,\n} from '@wildo-ai/saas-models';\nimport { UIContext } from '~wildo-frontend-lib/core/ui/UIContext';\nimport type { BaseApplicationLevelProps } from './component-props.application-level.frontend.schemas';\n\n/**\n * Which LAYER is mounting this back control. The same component is mounted by\n * the app shell (the menubar's hosted navigation control) and by a surface's own\n * header, and {@link NavigationBackAffordanceOwner} decides which of them may\n * render — so each mount site must say who it is.\n */\nexport enum NavigationBackHost {\n /** The app shell's hosted navigation control (menubar / sidebar chrome). */\n SHELL = 'shell',\n /** A surface's own header — a resource or view header, beside its title. */\n SURFACE = 'surface',\n}\n\n// --- Contract ---\nexport interface ApplicationLevelProps_NavigationBack extends BaseApplicationLevelProps {\n navigationZone?: NavigationZone;\n containerType?: ApplicationLevelComponentType;\n containerPlacement?: HorizontalPlacement | VerticalPlacement;\n className?: string;\n ariaLabel?: string;\n /**\n * The mounting layer. Defaults to {@link NavigationBackHost.SHELL} because the\n * shell mounts this through the generic component registry, which passes only\n * the container props — it cannot name itself. Surface headers mount it\n * directly and therefore declare `SURFACE` explicitly.\n */\n host?: NavigationBackHost;\n}\n\n/**\n * Which zone the back control acts on.\n *\n * A surface header names its own zone. The SHELL's control cannot, so it acts on the zone the reader\n * last worked in — unless that zone holds nothing, in which case PRIMARY. Nothing reset the focused\n * zone when its pane closed, so after closing a detail pane with its own control the header's arrow\n * stayed enabled (an adjacent zone \"closes on back\") and clicking it did nothing: `goBack` on an\n * empty zone returns at once. The focus itself is left alone on purpose — a reader may genuinely\n * work in an empty `EMPTY_STATE` pane — so the question is answered here, where it is asked.\n */\nexport function resolveApplicationLevelNavigationBackZone(\n navigationZone: NavigationZone | undefined,\n focusedZone: NavigationZoneName,\n focusedZoneHoldsContent: boolean = true,\n): NavigationZone {\n if (navigationZone) return navigationZone;\n return focusedZoneHoldsContent ? focusedZone : NavigationZoneName.PRIMARY;\n}\n\n/**\n * Back-affordance OWNERSHIP GATE — the one place the policy is applied.\n *\n * Both mounting layers resolve through this wrapper, so the gate lives here\n * rather than in each host: a host cannot forget to check, and the two cannot\n * drift into disagreeing about one application-wide policy. The preset below is\n * unchanged — it still owns \"is there anywhere to go back TO\" (`canGoBack`);\n * this decides \"may THIS layer offer it at all\".\n */\nexport function ApplicationLevel_NavigationBack({\n preset = CorePresetNames.DEFAULT,\n host = NavigationBackHost.SHELL,\n ...props\n}: ApplicationLevelProps_NavigationBack & ComponentPresetProps): React.JSX.Element | null {\n // Read the UI context DEFENSIVELY rather than through `useUI()`, which THROWS\n // outside a `UIProvider`. This component previously needed no UI context at\n // all, so requiring one would turn every mount outside that provider — an\n // error surface, a public shell, a test harness — into a crash instead of a\n // back button. A chrome-ownership gate must fail to its documented DEFAULT,\n // never take the page down.\n const uiContext = useContext(UIContext);\n const owner = uiContext?.navigationLayout?.backAffordanceOwner;\n const admitted = host === NavigationBackHost.SHELL\n ? navigationBackAffordanceAdmitsShell(owner)\n : navigationBackAffordanceAdmitsSurface(owner);\n if (!admitted) {\n return null;\n }\n\n const Component = createComponentResolver<ApplicationLevelProps_NavigationBack>(\n FrontendComponentType.APPLICATION_LEVEL_NAVIGATION_BACK,\n 'ApplicationLevel_NavigationBack'\n )(preset);\n return <Component {...props} />;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import type { StatusBarPlacement } from '../../../core/config/app-level-components.frontend.schemas';
|
|
3
3
|
import { ComponentPresetProps } from '../../../core/components-registry/component-registry.frontend.schemas';
|
|
4
4
|
export interface ApplicationLevelProps_StatusBar {
|
|
5
|
-
placement?:
|
|
5
|
+
placement?: StatusBarPlacement;
|
|
6
6
|
content?: React.ReactNode;
|
|
7
7
|
children?: React.ReactNode;
|
|
8
8
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationLevel_StatusBar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ApplicationLevel_StatusBar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uEAAuE,CAAC;AAEhH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAC;AAKxH,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,0BAA0B,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,+BAA+B,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGpK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationLevel_StatusBar.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_StatusBar.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAC;AAC1H,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAU7F,MAAM,UAAU,0BAA0B,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA0D;IAC/I,MAAM,SAAS,GAAG,uBAAuB,CAAkC,qBAAqB,CAAC,4BAA4B,EAAE,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;IACrK,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAC;AAClC,CAAC","sourcesContent":["import React from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"ApplicationLevel_StatusBar.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/ApplicationLevel_StatusBar.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAC;AAC1H,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAU7F,MAAM,UAAU,0BAA0B,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA0D;IAC/I,MAAM,SAAS,GAAG,uBAAuB,CAAkC,qBAAqB,CAAC,4BAA4B,EAAE,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;IACrK,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAC;AAClC,CAAC","sourcesContent":["import React from 'react';\nimport type { StatusBarPlacement } from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\n\nimport { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas';\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper';\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models';\n\n// --- Contract ---\nexport interface ApplicationLevelProps_StatusBar {\n placement?: StatusBarPlacement;\n content?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function ApplicationLevel_StatusBar({ preset = CorePresetNames.DEFAULT, ...props }: ApplicationLevelProps_StatusBar & ComponentPresetProps): React.JSX.Element {\n const Component = createComponentResolver<ApplicationLevelProps_StatusBar>(FrontendComponentType.APPLICATION_LEVEL_STATUS_BAR, 'ApplicationLevel_StatusBar')(preset);\n return <Component {...props} />;\n}\n"]}
|
|
@@ -22,8 +22,8 @@ export declare function useHostedComponentInteractions(): HostedComponentInterac
|
|
|
22
22
|
* hosted in the menubar AND the sidebar at once. Without a single owner, each
|
|
23
23
|
* surface would independently register the open hotkey and own a private open
|
|
24
24
|
* state — pressing `Cmd+K` would toggle two dialogs, and each trigger would open
|
|
25
|
-
* its own copy. This provider is mounted ONCE above both surfaces (
|
|
26
|
-
* layout container) and:
|
|
25
|
+
* its own copy. This provider is mounted ONCE above both surfaces (by
|
|
26
|
+
* `AppShellProviders`, which every app layout container renders once) and:
|
|
27
27
|
*
|
|
28
28
|
* - resolves the hosted set of BOTH surfaces through the shared
|
|
29
29
|
* `resolveHostedComponents` pipeline (surface-qualified instance ids);
|
|
@@ -40,8 +40,8 @@ const INTERACTIVE_TYPES = new Set([
|
|
|
40
40
|
* hosted in the menubar AND the sidebar at once. Without a single owner, each
|
|
41
41
|
* surface would independently register the open hotkey and own a private open
|
|
42
42
|
* state — pressing `Cmd+K` would toggle two dialogs, and each trigger would open
|
|
43
|
-
* its own copy. This provider is mounted ONCE above both surfaces (
|
|
44
|
-
* layout container) and:
|
|
43
|
+
* its own copy. This provider is mounted ONCE above both surfaces (by
|
|
44
|
+
* `AppShellProviders`, which every app layout container renders once) and:
|
|
45
45
|
*
|
|
46
46
|
* - resolves the hosted set of BOTH surfaces through the shared
|
|
47
47
|
* `resolveHostedComponents` pipeline (surface-qualified instance ids);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostedComponentInteractionsProvider.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/HostedComponentInteractionsProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,WAAW,GACZ,MAAM,uEAAuE,CAAC;AAK/E,OAAO,EACL,cAAc,GAEf,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AAgBrG,MAAM,kCAAkC,GAAG,aAAa,CAA8B;IACpF,wEAAwE;IACxE,4EAA4E;IAC5E,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACpC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO,UAAU,CAAC,kCAAkC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAe;IAChD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,mFAAmF;AACnF,MAAM,iBAAiB,GAA+C,IAAI,GAAG,CAAC;IAC5E,6BAA6B,CAAC,YAAY;IAC1C,6BAA6B,CAAC,mBAAmB;IACjD,6BAA6B,CAAC,cAAc;CAC7C,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mCAAmC,CAAC,EAAE,QAAQ,EAAiC;IAC7F,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAG,gBAAgB,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5E,MAAM,iBAAiB,GAAG,QAAQ,EAAE,iBAAiB,CAAC;IACtD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACzC,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,aAAa,GAAG,0BAA0B,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,0BAA0B,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAE1F,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,SAAS,GAAG,OAAO,CAA4B,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,0BAAiE,CAAC;QACjF,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC;YACjD,CAAC,CAAC,uBAAuB,CACrB,6BAA6B,CAAC,OAAO,EACrC,aAAa,CAAC,gBAAwD,EACtE,MAAM,EACN,iBAAiB,EACjB,mBAAmB,CAAC,KAAK,EACzB,gBAAgB,CACjB;YACH,CAAC,CAAC,EAAE,CAAC;QACP,mEAAmE;QACnE,4EAA4E;QAC5E,mEAAmE;QACnE,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC;YACjD,CAAC,CAAC,uBAAuB,CACrB,6BAA6B,CAAC,OAAO,EACpC,aAAiE,CAAC,gBAAgB,EACnF,MAAM,EACN,iBAAiB,EACjB,iBAAiB,CAAC,GAAG,EACrB,gBAAgB,CACjB;YACH,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,0BAA0B,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpG,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAC9D,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,2EAA2E;IAC3E,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyC,CAAC;QAChE,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;gBAAE,SAAS;YAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,kBAAkB,GAAG,CAAC,aAA4C,EAAW,EAAE,CACnF,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEjC,MAAM,iBAAiB,GAAG,0BAA0B,EAAE,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACnG,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,iBAAiB,CAAC;QAC1E,CAAC,CAAC,iBAAiB,CAAC,YAAY;QAChC,CAAC,CAAC,SAAS,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,YAAY,CAAC;YAAE,OAAO;QAC5E,OAAO,EAAE,CAAC,cAAc,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACtD,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,mBAAmB,CAAC;YAAE,OAAO;QACnF,OAAO,EAAE,CAAC,cAAc,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvD,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,cAAc,CAAC;YAAE,OAAO;QAC9E,OAAO,EAAE,CAAC,cAAc,CAAC,0BAA0B,EAAE,GAAG,EAAE;YACxD,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,YAAY,CAAC;YAAE,OAAO;QAC5E,IAAI,CAAC,uBAAuB,IAAI,iBAAiB,KAAK,KAAK;YAAE,OAAO;QAEpE,OAAO,QAAQ,CAAC;YACd,EAAE,EAAE,yCAAyC;YAC7C,QAAQ,EAAE,uBAAuB;YACjC,WAAW,EAAE,CAAC,CAAC,gCAAgC,CAAC;YAChD,KAAK,EAAE,WAAW,CAAC,MAAM;YACzB,KAAK,EAAE,WAAW,CAAC,UAAU;YAC7B,QAAQ,EAAE,6BAA6B,CAAC,YAAY;YACpD,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE,EAAyC,CAAC,CAAC;YAC3F,CAAC;SACF,CAAC,CAAC;IACL,CAAC,EAAE;QACD,iBAAiB;QACjB,uBAAuB;QACvB,IAAI;QACJ,QAAQ;QACR,CAAC;QACD,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAA8B,GAAG,EAAE,CAAC,CAAC;QACxD,uBAAuB,EAAE,CACvB,aAA4C,EAC5C,UAAkB,EACO,EAAE;YAC3B,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC;YAEjF,QAAQ,aAAa,EAAE,CAAC;gBACtB,KAAK,6BAA6B,CAAC,YAAY;oBAC7C,yEAAyE;oBACzE,OAAO;wBACL,gBAAgB,EAAE,KAAK;wBACvB,MAAM,EAAE,eAAe;wBACvB,YAAY,EAAE,kBAAkB;wBAChC,YAAY,EAAE,kBAAkB;qBACjC,CAAC;gBACJ,KAAK,6BAA6B,CAAC,mBAAmB;oBACpD,OAAO;wBACL,gBAAgB,EAAE,KAAK;wBACvB,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;4BACvB,MAAM,EAAE,sBAAsB;4BAC9B,YAAY,EAAE,yBAAyB;yBACxC,CAAC,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC;gBACJ,KAAK,6BAA6B,CAAC,cAAc;oBAC/C,OAAO;wBACL,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;qBACjE,CAAC;gBACJ;oBACE,OAAO,EAAE,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE/F,OAAO,CACL,KAAC,kCAAkC,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACtD,QAAQ,GACmC,CAC/C,CAAC;AACJ,CAAC","sourcesContent":["import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { HorizontalPlacement, VerticalPlacement } from '@wildo-ai/presets-components-models';\n\nimport {\n ApplicationLevelComponentType,\n HotkeyGroup,\n HotkeyScope,\n} from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\nimport type {\n MenubarHostedComponent,\n SidebarHostedComponent,\n} from '~wildo-frontend-lib/core/config/launcher-items.frontend.schemas';\nimport {\n FrontendEvents,\n type FrontendEvent_HotkeyCommandMenuOpen,\n} from '~wildo-frontend-lib/core/events/events.frontend.schemas';\nimport { useEventBus } from '~wildo-frontend-lib/core/events/useEventBus';\nimport { useHotkeyRegistry } from '~wildo-frontend-lib/core/hotkey/useHotkey';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\nimport { useUI } from '~wildo-frontend-lib/core/ui/useUI';\nimport { resolveHostedComponents } from '~wildo-frontend-lib/core/app-shell/hosted-components.utils';\nimport type { ResolvedHostedComponent } from '~wildo-frontend-lib/core/app-shell/app-shell.schemas';\n\n/**\n * Props a hosted component receives from the shell-level interaction owner.\n * Deliberately open (`Record<string, unknown>`) — the consuming preset picks\n * the keys it understands (`isOpen`, `onOpenChange`, `listenForHotkeys`,\n * `renderDialog`, `focusTrigger`).\n */\nexport interface HostedComponentInteractions {\n getHostedComponentProps: (\n componentType: ApplicationLevelComponentType,\n instanceId: string,\n ) => Record<string, unknown>;\n}\n\nconst HostedComponentInteractionsContext = createContext<HostedComponentInteractions>({\n // Default (no provider): behave as un-hosted — no shared open state, no\n // interaction ownership. Presets fall back to their own uncontrolled state.\n getHostedComponentProps: () => ({}),\n});\n\n/**\n * Read the shell-level hosted-component interaction bridge. Both the menubar\n * and sidebar presets call this to spread interaction props onto the components\n * they host (open/close state, hotkey ownership, dialog-host election).\n */\nexport function useHostedComponentInteractions(): HostedComponentInteractions {\n return useContext(HostedComponentInteractionsContext);\n}\n\nfunction isConfigObject(config: unknown): config is Record<string, unknown> {\n return typeof config === 'object' && config !== null && !Array.isArray(config);\n}\n\nfunction isCommandMenuConfigObject(config: unknown): config is { openShortcut?: string } {\n return isConfigObject(config);\n}\n\n/** The interactive hosted types that carry open/focus state + hotkey ownership. */\nconst INTERACTIVE_TYPES: ReadonlySet<ApplicationLevelComponentType> = new Set([\n ApplicationLevelComponentType.COMMAND_MENU,\n ApplicationLevelComponentType.NOTIFICATION_CENTER,\n ApplicationLevelComponentType.QUICK_SWITCHER,\n]);\n\n/**\n * Shell-level owner of hosted-component interaction state.\n *\n * A hosted component (command menu, notification center, quick switcher) can be\n * hosted in the menubar AND the sidebar at once. Without a single owner, each\n * surface would independently register the open hotkey and own a private open\n * state — pressing `Cmd+K` would toggle two dialogs, and each trigger would open\n * its own copy. This provider is mounted ONCE above both surfaces (in the app\n * layout container) and:\n *\n * - resolves the hosted set of BOTH surfaces through the shared\n * `resolveHostedComponents` pipeline (surface-qualified instance ids);\n * - owns ONE open state per interactive type + registers the open hotkey ONCE;\n * - elects a single GLOBAL \"interaction owner\" instance per type — the first\n * across the union (menubar entries precede sidebar entries).\n *\n * For the command menu specifically, EVERY hosted instance receives the shared\n * `isOpen`/`onOpenChange` (so every trigger reflects + toggles the one shared\n * state), but only the owner instance receives `renderDialog: true` — so exactly\n * one `<CommandDialog>` is mounted no matter how many triggers exist. The dialog\n * is a portal/overlay, so which surface's subtree mounts it is immaterial.\n */\nexport function HostedComponentInteractionsProvider({ children }: { children: React.ReactNode }): React.JSX.Element {\n const { appComponentsConfiguration, UIConfig , navigationLayout } = useUI();\n const currentBreakpoint = UIConfig?.currentBreakpoint;\n const { on, emit } = useEventBus();\n const { register } = useHotkeyRegistry();\n const { t } = useI18n();\n\n const [commandMenuOpen, setCommandMenuOpen] = useState(false);\n const [notificationCenterOpen, setNotificationCenterOpen] = useState(false);\n const [quickSwitcherFocusTrigger, setQuickSwitcherFocusTrigger] = useState(0);\n\n const menubarConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.MENUBAR];\n const sidebarConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.SIDEBAR];\n\n // Resolve BOTH surfaces through the one shared pipeline; the union drives\n // ownership so the same component hosted in two places has ONE owner.\n const allHosted = useMemo<ResolvedHostedComponent[]>(() => {\n const config = appComponentsConfiguration as Record<string, unknown> | undefined;\n const menubarHosted = isConfigObject(menubarConfig)\n ? resolveHostedComponents(\n ApplicationLevelComponentType.MENUBAR,\n menubarConfig.hostedComponents as MenubarHostedComponent[] | undefined,\n config,\n currentBreakpoint,\n HorizontalPlacement.START,\n navigationLayout,\n )\n : [];\n // The viewport transform strips the sidebar object to `{placement,\n // collapsible, policy}` in its static type but PRESERVES `hostedComponents`\n // at runtime (spread `...sidebarRest`), so read it through a cast.\n const sidebarHosted = isConfigObject(sidebarConfig)\n ? resolveHostedComponents(\n ApplicationLevelComponentType.SIDEBAR,\n (sidebarConfig as { hostedComponents?: SidebarHostedComponent[] }).hostedComponents,\n config,\n currentBreakpoint,\n VerticalPlacement.TOP,\n navigationLayout,\n )\n : [];\n return [...menubarHosted, ...sidebarHosted];\n }, [appComponentsConfiguration, menubarConfig, sidebarConfig, currentBreakpoint, navigationLayout]);\n\n const hostedTypes = useMemo(\n () => new Set(allHosted.map(component => component.component)),\n [allHosted],\n );\n\n // First instance per interactive type across the union = its global owner.\n const interactionOwnerIds = useMemo(() => {\n const owners = new Map<ApplicationLevelComponentType, string>();\n for (const component of allHosted) {\n if (!INTERACTIVE_TYPES.has(component.component)) continue;\n if (!owners.has(component.component)) {\n owners.set(component.component, component.instanceId);\n }\n }\n return owners;\n }, [allHosted]);\n\n const hasHostedComponent = (componentType: ApplicationLevelComponentType): boolean =>\n hostedTypes.has(componentType);\n\n const commandMenuConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.COMMAND_MENU];\n const commandMenuOpenShortcut = isCommandMenuConfigObject(commandMenuConfig)\n ? commandMenuConfig.openShortcut\n : undefined;\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.COMMAND_MENU)) return;\n return on(FrontendEvents.HOTKEY_COMMAND_MENU_OPEN, () => {\n setCommandMenuOpen(prev => !prev);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.NOTIFICATION_CENTER)) return;\n return on(FrontendEvents.HOTKEY_NOTIFICATIONS_OPEN, () => {\n setNotificationCenterOpen(prev => !prev);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.QUICK_SWITCHER)) return;\n return on(FrontendEvents.HOTKEY_QUICK_SWITCHER_OPEN, () => {\n setQuickSwitcherFocusTrigger(prev => prev + 1);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.COMMAND_MENU)) return;\n if (!commandMenuOpenShortcut || commandMenuConfig === false) return;\n\n return register({\n id: 'shell-hosted-command-menu-open-shortcut',\n shortcut: commandMenuOpenShortcut,\n description: t('engine.hotkeys.commandMenuOpen'),\n scope: HotkeyScope.GLOBAL,\n group: HotkeyGroup.NAVIGATION,\n launcher: ApplicationLevelComponentType.COMMAND_MENU,\n preventDefault: true,\n handler: () => {\n emit(FrontendEvents.HOTKEY_COMMAND_MENU_OPEN, {} as FrontendEvent_HotkeyCommandMenuOpen);\n },\n });\n }, [\n commandMenuConfig,\n commandMenuOpenShortcut,\n emit,\n register,\n t,\n hostedTypes,\n ]);\n\n const value = useMemo<HostedComponentInteractions>(() => ({\n getHostedComponentProps: (\n componentType: ApplicationLevelComponentType,\n instanceId: string,\n ): Record<string, unknown> => {\n const isInteractionOwner = interactionOwnerIds.get(componentType) === instanceId;\n\n switch (componentType) {\n case ApplicationLevelComponentType.COMMAND_MENU:\n // Every trigger shares one open state; only the owner mounts the dialog.\n return {\n listenForHotkeys: false,\n isOpen: commandMenuOpen,\n onOpenChange: setCommandMenuOpen,\n renderDialog: isInteractionOwner,\n };\n case ApplicationLevelComponentType.NOTIFICATION_CENTER:\n return {\n listenForHotkeys: false,\n ...(isInteractionOwner ? {\n isOpen: notificationCenterOpen,\n onOpenChange: setNotificationCenterOpen,\n } : {}),\n };\n case ApplicationLevelComponentType.QUICK_SWITCHER:\n return {\n focusTrigger: isInteractionOwner ? quickSwitcherFocusTrigger : 0,\n };\n default:\n return {};\n }\n },\n }), [interactionOwnerIds, commandMenuOpen, notificationCenterOpen, quickSwitcherFocusTrigger]);\n\n return (\n <HostedComponentInteractionsContext.Provider value={value}>\n {children}\n </HostedComponentInteractionsContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HostedComponentInteractionsProvider.js","sourceRoot":"","sources":["../../../../../../src/components/navigation/app-level/HostedComponentInteractionsProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { HorizontalPlacement, VerticalPlacement } from '@wildo-ai/presets-components-models';\n\nimport {\n ApplicationLevelComponentType,\n HotkeyGroup,\n HotkeyScope,\n} from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\nimport type {\n MenubarHostedComponent,\n SidebarHostedComponent,\n} from '~wildo-frontend-lib/core/config/launcher-items.frontend.schemas';\nimport {\n FrontendEvents,\n type FrontendEvent_HotkeyCommandMenuOpen,\n} from '~wildo-frontend-lib/core/events/events.frontend.schemas';\nimport { useEventBus } from '~wildo-frontend-lib/core/events/useEventBus';\nimport { useHotkeyRegistry } from '~wildo-frontend-lib/core/hotkey/useHotkey';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\nimport { useUI } from '~wildo-frontend-lib/core/ui/useUI';\nimport { resolveHostedComponents } from '~wildo-frontend-lib/core/app-shell/hosted-components.utils';\nimport type { ResolvedHostedComponent } from '~wildo-frontend-lib/core/app-shell/app-shell.schemas';\n\n/**\n * Props a hosted component receives from the shell-level interaction owner.\n * Deliberately open (`Record<string, unknown>`) — the consuming preset picks\n * the keys it understands (`isOpen`, `onOpenChange`, `listenForHotkeys`,\n * `renderDialog`, `focusTrigger`).\n */\nexport interface HostedComponentInteractions {\n getHostedComponentProps: (\n componentType: ApplicationLevelComponentType,\n instanceId: string,\n ) => Record<string, unknown>;\n}\n\nconst HostedComponentInteractionsContext = createContext<HostedComponentInteractions>({\n // Default (no provider): behave as un-hosted — no shared open state, no\n // interaction ownership. Presets fall back to their own uncontrolled state.\n getHostedComponentProps: () => ({}),\n});\n\n/**\n * Read the shell-level hosted-component interaction bridge. Both the menubar\n * and sidebar presets call this to spread interaction props onto the components\n * they host (open/close state, hotkey ownership, dialog-host election).\n */\nexport function useHostedComponentInteractions(): HostedComponentInteractions {\n return useContext(HostedComponentInteractionsContext);\n}\n\nfunction isConfigObject(config: unknown): config is Record<string, unknown> {\n return typeof config === 'object' && config !== null && !Array.isArray(config);\n}\n\nfunction isCommandMenuConfigObject(config: unknown): config is { openShortcut?: string } {\n return isConfigObject(config);\n}\n\n/** The interactive hosted types that carry open/focus state + hotkey ownership. */\nconst INTERACTIVE_TYPES: ReadonlySet<ApplicationLevelComponentType> = new Set([\n ApplicationLevelComponentType.COMMAND_MENU,\n ApplicationLevelComponentType.NOTIFICATION_CENTER,\n ApplicationLevelComponentType.QUICK_SWITCHER,\n]);\n\n/**\n * Shell-level owner of hosted-component interaction state.\n *\n * A hosted component (command menu, notification center, quick switcher) can be\n * hosted in the menubar AND the sidebar at once. Without a single owner, each\n * surface would independently register the open hotkey and own a private open\n * state — pressing `Cmd+K` would toggle two dialogs, and each trigger would open\n * its own copy. This provider is mounted ONCE above both surfaces (by\n * `AppShellProviders`, which every app layout container renders once) and:\n *\n * - resolves the hosted set of BOTH surfaces through the shared\n * `resolveHostedComponents` pipeline (surface-qualified instance ids);\n * - owns ONE open state per interactive type + registers the open hotkey ONCE;\n * - elects a single GLOBAL \"interaction owner\" instance per type — the first\n * across the union (menubar entries precede sidebar entries).\n *\n * For the command menu specifically, EVERY hosted instance receives the shared\n * `isOpen`/`onOpenChange` (so every trigger reflects + toggles the one shared\n * state), but only the owner instance receives `renderDialog: true` — so exactly\n * one `<CommandDialog>` is mounted no matter how many triggers exist. The dialog\n * is a portal/overlay, so which surface's subtree mounts it is immaterial.\n */\nexport function HostedComponentInteractionsProvider({ children }: { children: React.ReactNode }): React.JSX.Element {\n const { appComponentsConfiguration, UIConfig , navigationLayout } = useUI();\n const currentBreakpoint = UIConfig?.currentBreakpoint;\n const { on, emit } = useEventBus();\n const { register } = useHotkeyRegistry();\n const { t } = useI18n();\n\n const [commandMenuOpen, setCommandMenuOpen] = useState(false);\n const [notificationCenterOpen, setNotificationCenterOpen] = useState(false);\n const [quickSwitcherFocusTrigger, setQuickSwitcherFocusTrigger] = useState(0);\n\n const menubarConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.MENUBAR];\n const sidebarConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.SIDEBAR];\n\n // Resolve BOTH surfaces through the one shared pipeline; the union drives\n // ownership so the same component hosted in two places has ONE owner.\n const allHosted = useMemo<ResolvedHostedComponent[]>(() => {\n const config = appComponentsConfiguration as Record<string, unknown> | undefined;\n const menubarHosted = isConfigObject(menubarConfig)\n ? resolveHostedComponents(\n ApplicationLevelComponentType.MENUBAR,\n menubarConfig.hostedComponents as MenubarHostedComponent[] | undefined,\n config,\n currentBreakpoint,\n HorizontalPlacement.START,\n navigationLayout,\n )\n : [];\n // The viewport transform strips the sidebar object to `{placement,\n // collapsible, policy}` in its static type but PRESERVES `hostedComponents`\n // at runtime (spread `...sidebarRest`), so read it through a cast.\n const sidebarHosted = isConfigObject(sidebarConfig)\n ? resolveHostedComponents(\n ApplicationLevelComponentType.SIDEBAR,\n (sidebarConfig as { hostedComponents?: SidebarHostedComponent[] }).hostedComponents,\n config,\n currentBreakpoint,\n VerticalPlacement.TOP,\n navigationLayout,\n )\n : [];\n return [...menubarHosted, ...sidebarHosted];\n }, [appComponentsConfiguration, menubarConfig, sidebarConfig, currentBreakpoint, navigationLayout]);\n\n const hostedTypes = useMemo(\n () => new Set(allHosted.map(component => component.component)),\n [allHosted],\n );\n\n // First instance per interactive type across the union = its global owner.\n const interactionOwnerIds = useMemo(() => {\n const owners = new Map<ApplicationLevelComponentType, string>();\n for (const component of allHosted) {\n if (!INTERACTIVE_TYPES.has(component.component)) continue;\n if (!owners.has(component.component)) {\n owners.set(component.component, component.instanceId);\n }\n }\n return owners;\n }, [allHosted]);\n\n const hasHostedComponent = (componentType: ApplicationLevelComponentType): boolean =>\n hostedTypes.has(componentType);\n\n const commandMenuConfig = appComponentsConfiguration?.[ApplicationLevelComponentType.COMMAND_MENU];\n const commandMenuOpenShortcut = isCommandMenuConfigObject(commandMenuConfig)\n ? commandMenuConfig.openShortcut\n : undefined;\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.COMMAND_MENU)) return;\n return on(FrontendEvents.HOTKEY_COMMAND_MENU_OPEN, () => {\n setCommandMenuOpen(prev => !prev);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.NOTIFICATION_CENTER)) return;\n return on(FrontendEvents.HOTKEY_NOTIFICATIONS_OPEN, () => {\n setNotificationCenterOpen(prev => !prev);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.QUICK_SWITCHER)) return;\n return on(FrontendEvents.HOTKEY_QUICK_SWITCHER_OPEN, () => {\n setQuickSwitcherFocusTrigger(prev => prev + 1);\n });\n }, [on, hostedTypes]);\n\n useEffect(() => {\n if (!hasHostedComponent(ApplicationLevelComponentType.COMMAND_MENU)) return;\n if (!commandMenuOpenShortcut || commandMenuConfig === false) return;\n\n return register({\n id: 'shell-hosted-command-menu-open-shortcut',\n shortcut: commandMenuOpenShortcut,\n description: t('engine.hotkeys.commandMenuOpen'),\n scope: HotkeyScope.GLOBAL,\n group: HotkeyGroup.NAVIGATION,\n launcher: ApplicationLevelComponentType.COMMAND_MENU,\n preventDefault: true,\n handler: () => {\n emit(FrontendEvents.HOTKEY_COMMAND_MENU_OPEN, {} as FrontendEvent_HotkeyCommandMenuOpen);\n },\n });\n }, [\n commandMenuConfig,\n commandMenuOpenShortcut,\n emit,\n register,\n t,\n hostedTypes,\n ]);\n\n const value = useMemo<HostedComponentInteractions>(() => ({\n getHostedComponentProps: (\n componentType: ApplicationLevelComponentType,\n instanceId: string,\n ): Record<string, unknown> => {\n const isInteractionOwner = interactionOwnerIds.get(componentType) === instanceId;\n\n switch (componentType) {\n case ApplicationLevelComponentType.COMMAND_MENU:\n // Every trigger shares one open state; only the owner mounts the dialog.\n return {\n listenForHotkeys: false,\n isOpen: commandMenuOpen,\n onOpenChange: setCommandMenuOpen,\n renderDialog: isInteractionOwner,\n };\n case ApplicationLevelComponentType.NOTIFICATION_CENTER:\n return {\n listenForHotkeys: false,\n ...(isInteractionOwner ? {\n isOpen: notificationCenterOpen,\n onOpenChange: setNotificationCenterOpen,\n } : {}),\n };\n case ApplicationLevelComponentType.QUICK_SWITCHER:\n return {\n focusTrigger: isInteractionOwner ? quickSwitcherFocusTrigger : 0,\n };\n default:\n return {};\n }\n },\n }), [interactionOwnerIds, commandMenuOpen, notificationCenterOpen, quickSwitcherFocusTrigger]);\n\n return (\n <HostedComponentInteractionsContext.Provider value={value}>\n {children}\n </HostedComponentInteractionsContext.Provider>\n );\n}\n"]}
|