@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
|
@@ -56,6 +56,9 @@ export declare enum RouteOrganizationAccess {
|
|
|
56
56
|
export interface RouteOrganizationMembershipFacts {
|
|
57
57
|
organizationId?: string | null;
|
|
58
58
|
status?: OrganizationMemberStatus | string | null;
|
|
59
|
+
/** Present on a service-provider membership (#1597). */
|
|
60
|
+
serviceProviderRelationshipId?: string | null;
|
|
61
|
+
providerOrganizationId?: string | null;
|
|
59
62
|
}
|
|
60
63
|
/**
|
|
61
64
|
* True when the memberships carry an ACTIVE membership in `organizationId`.
|
|
@@ -63,6 +66,10 @@ export interface RouteOrganizationMembershipFacts {
|
|
|
63
66
|
* Only ACTIVE counts: an INVITED, INACTIVE or SUSPENDED membership confers no access on the server, so
|
|
64
67
|
* treating it as a pass would let exactly the refused reads through. Such a membership falls through to
|
|
65
68
|
* the server probe instead, which answers correctly either way.
|
|
69
|
+
*
|
|
70
|
+
* A SERVICE-PROVIDER membership never counts (#1597, review 6): its status is a mirror of the relationship, which
|
|
71
|
+
* the server re-checks on every request — a suspended relationship, or one past its term, still shows an ACTIVE row
|
|
72
|
+
* here. It falls through to the server probe like any other membership the client cannot vouch for.
|
|
66
73
|
*/
|
|
67
74
|
export declare function hasActiveMembershipInOrganization(memberships: ReadonlyArray<RouteOrganizationMembershipFacts> | null | undefined, organizationId: string): boolean;
|
|
68
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-organization-access.frontend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/core/security/route-organization-access.frontend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"route-organization-access.frontend.utils.d.ts","sourceRoot":"","sources":["../../../../../src/core/security/route-organization-access.frontend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAGzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,gCAAgC,EAChC,uCAAuC,EACxC,MAAM,+DAA+D,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,oBAAY,uBAAuB;IACjC,qFAAqF;IACrF,aAAa,kBAAkB;IAC/B;;;;OAIG;IACH,WAAW,gBAAgB;IAC3B,8GAA8G;IAC9G,iBAAiB,sBAAsB;IACvC,sGAAsG;IACtG,SAAS,cAAc;IACvB,uIAAuI;IACvI,QAAQ,aAAa;IACrB;;;;;;OAMG;IACH,OAAO,YAAY;IACnB;;;;OAIG;IACH,YAAY,iBAAiB;CAC9B;AAED,+HAA+H;AAC/H,MAAM,WAAW,gCAAgC;IAC/C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,wDAAwD;IACxD,6BAA6B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,aAAa,CAAC,gCAAgC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/E,cAAc,EAAE,MAAM,GACrB,OAAO,CAMT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,qBAAqB,EAAE,gCAAgC,GAAG,SAAS,GAClE,uCAAuC,GAAG,SAAS,CAWrD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CoreResourceOperation, OrganizationMemberStatus, ResourceOperationVariantType, } from '@wildo-ai/saas-models';
|
|
1
|
+
import { CoreResourceOperation, OrganizationMemberStatus, isServiceProviderMembership, ResourceOperationVariantType, } from '@wildo-ai/saas-models';
|
|
2
2
|
/**
|
|
3
3
|
* Whether the signed-in account may open the organization a route addresses (`/organizations/:id/…`).
|
|
4
4
|
*
|
|
@@ -58,9 +58,15 @@ export var RouteOrganizationAccess;
|
|
|
58
58
|
* Only ACTIVE counts: an INVITED, INACTIVE or SUSPENDED membership confers no access on the server, so
|
|
59
59
|
* treating it as a pass would let exactly the refused reads through. Such a membership falls through to
|
|
60
60
|
* the server probe instead, which answers correctly either way.
|
|
61
|
+
*
|
|
62
|
+
* A SERVICE-PROVIDER membership never counts (#1597, review 6): its status is a mirror of the relationship, which
|
|
63
|
+
* the server re-checks on every request — a suspended relationship, or one past its term, still shows an ACTIVE row
|
|
64
|
+
* here. It falls through to the server probe like any other membership the client cannot vouch for.
|
|
61
65
|
*/
|
|
62
66
|
export function hasActiveMembershipInOrganization(memberships, organizationId) {
|
|
63
|
-
return (memberships ?? []).some((membership) => membership.organizationId === organizationId
|
|
67
|
+
return (memberships ?? []).some((membership) => membership.organizationId === organizationId
|
|
68
|
+
&& membership.status === OrganizationMemberStatus.ACTIVE
|
|
69
|
+
&& !isServiceProviderMembership(membership));
|
|
64
70
|
}
|
|
65
71
|
/**
|
|
66
72
|
* The default, non-bulk API READ of a resource — the operation that fetches one row by its identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-organization-access.frontend.utils.js","sourceRoot":"","sources":["../../../../../src/core/security/route-organization-access.frontend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAM/B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAN,IAAY,uBA6BX;AA7BD,WAAY,uBAAuB;IACjC,qFAAqF;IACrF,0DAA+B,CAAA;IAC/B;;;;OAIG;IACH,sDAA2B,CAAA;IAC3B,8GAA8G;IAC9G,kEAAuC,CAAA;IACvC,sGAAsG;IACtG,kDAAuB,CAAA;IACvB,uIAAuI;IACvI,gDAAqB,CAAA;IACrB;;;;;;OAMG;IACH,8CAAmB,CAAA;IACnB;;;;OAIG;IACH,wDAA6B,CAAA;AAC/B,CAAC,EA7BW,uBAAuB,KAAvB,uBAAuB,QA6BlC;
|
|
1
|
+
{"version":3,"file":"route-organization-access.frontend.utils.js","sourceRoot":"","sources":["../../../../../src/core/security/route-organization-access.frontend.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAM/B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAN,IAAY,uBA6BX;AA7BD,WAAY,uBAAuB;IACjC,qFAAqF;IACrF,0DAA+B,CAAA;IAC/B;;;;OAIG;IACH,sDAA2B,CAAA;IAC3B,8GAA8G;IAC9G,kEAAuC,CAAA;IACvC,sGAAsG;IACtG,kDAAuB,CAAA;IACvB,uIAAuI;IACvI,gDAAqB,CAAA;IACrB;;;;;;OAMG;IACH,8CAAmB,CAAA;IACnB;;;;OAIG;IACH,wDAA6B,CAAA;AAC/B,CAAC,EA7BW,uBAAuB,KAAvB,uBAAuB,QA6BlC;AAWD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC,CAC/C,WAA+E,EAC/E,cAAsB;IAEtB,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAC7B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,KAAK,cAAc;WACvD,UAAU,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM;WACrD,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,qBAAmE;IAEnE,OAAO,qBAAqB,EAAE,UAAU,EAAE,IAAI,CAC5C,CAAC,SAAkD,EAAE,EAAE,CACrD,SAAS,CAAC,mBAAmB,KAAK,qBAAqB,CAAC,IAAI;WACzD,SAAS,CAAC,kBAAkB,KAAK,IAAI;WACrC,SAAS,CAAC,eAAe,KAAK,IAAI;WAClC,CACD,SAAS,CAAC,WAAW,KAAK,4BAA4B,CAAC,QAAQ;eAC5D,SAAS,CAAC,WAAW,KAAK,4BAA4B,CAAC,sBAAsB,CACjF,CACJ,CAAC;AACJ,CAAC","sourcesContent":["import {\n CoreResourceOperation,\n OrganizationMemberStatus,\n isServiceProviderMembership,\n ResourceOperationVariantType,\n} from '@wildo-ai/saas-models';\nimport type {\n AnyFrontendResourceConfiguration,\n FrontendResourceConfiguration_Operation,\n} from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\n\n/**\n * Whether the signed-in account may open the organization a route addresses (`/organizations/:id/…`).\n *\n * ## Why the route needs its own answer\n *\n * The AppScope organization is membership-checked: `UserOrgsContext` only commits an organization the\n * account belongs to. A route's organization segment is not. `ScopeUtilsService.buildResourceOperationContextIdentifiers`\n * places the URL's identifiers LAST, so they override the checked scope, and the page issues its reads\n * against whatever organization the link names. The link is not always the account's own: a session\n * that expires on `/organizations/A/tasks` saves that URL as the post-login `redirect`, and a DIFFERENT\n * account signing in is sent straight to it. Every read then answered 403, and the person was left on\n * a page that could never load.\n *\n * ## Why the server decides, and the membership list only short-circuits\n *\n * The user context embeds `organizationMembers`, but that array is a context projection capped at\n * `DEFAULT_RELATIONSHIP_CONTEXT_POLICY.limit` (20, newest first) and \"cannot say it was truncated\".\n * A refusal computed from it would eject a member of a 21st organization, and it would also eject a\n * platform operator on a crossing the server admits. So an ACTIVE membership found in the list is\n * trusted (a positive answer cannot be invented by truncation), and anything else is asked of the\n * server with one silent READ of the organization. Only a refusal from that READ redirects.\n */\nexport enum RouteOrganizationAccess {\n /** The current route carries no organization segment. There is nothing to decide. */\n NOT_ADDRESSED = 'NOT_ADDRESSED',\n /**\n * The route addresses an organization, but the session cannot be judged yet or at all: restore is\n * unresolved, no user context was loaded, or the loaded user is not the token's subject (a stale\n * context from the previous account). The route renders as it would without this check.\n */\n UNDECIDABLE = 'UNDECIDABLE',\n /** The loaded user context carries an ACTIVE membership in the addressed organization. No request is made. */\n ACTIVE_MEMBERSHIP = 'ACTIVE_MEMBERSHIP',\n /** No active membership is known, and the server is being asked. The page must not load meanwhile. */\n VERIFYING = 'VERIFYING',\n /** The server answered the organization READ. The account may open it (a membership past the context cap, or an admitted crossing). */\n ADMITTED = 'ADMITTED',\n /**\n * The server refused the organization READ (403, or the deliberate 404 a non-member receives so the\n * answer is not an existence oracle). The route must not render.\n *\n * A link to an organization that does not exist lands here too, and on purpose: the server answers it\n * with the same 404, so the frontend cannot tell the two apart, and must not try to.\n */\n REFUSED = 'REFUSED',\n /**\n * The READ failed for a reason that says nothing about access (network, 5xx, no READ operation mounted).\n * The route renders, and its own requests report whatever is wrong: a transient failure must never\n * eject someone from a page they may open.\n */\n INCONCLUSIVE = 'INCONCLUSIVE',\n}\n\n/** The membership fields this decision reads, structurally, so the check does not depend on the context's population shape. */\nexport interface RouteOrganizationMembershipFacts {\n organizationId?: string | null;\n status?: OrganizationMemberStatus | string | null;\n /** Present on a service-provider membership (#1597). */\n serviceProviderRelationshipId?: string | null;\n providerOrganizationId?: string | null;\n}\n\n/**\n * True when the memberships carry an ACTIVE membership in `organizationId`.\n *\n * Only ACTIVE counts: an INVITED, INACTIVE or SUSPENDED membership confers no access on the server, so\n * treating it as a pass would let exactly the refused reads through. Such a membership falls through to\n * the server probe instead, which answers correctly either way.\n *\n * A SERVICE-PROVIDER membership never counts (#1597, review 6): its status is a mirror of the relationship, which\n * the server re-checks on every request — a suspended relationship, or one past its term, still shows an ACTIVE row\n * here. It falls through to the server probe like any other membership the client cannot vouch for.\n */\nexport function hasActiveMembershipInOrganization(\n memberships: ReadonlyArray<RouteOrganizationMembershipFacts> | null | undefined,\n organizationId: string,\n): boolean {\n return (memberships ?? []).some(\n (membership) => membership.organizationId === organizationId\n && membership.status === OrganizationMemberStatus.ACTIVE\n && !isServiceProviderMembership(membership),\n );\n}\n\n/**\n * The default, non-bulk API READ of a resource — the operation that fetches one row by its identifier.\n *\n * Shared by the session's organization loading and the route access probe, which must address the same\n * operation: if they disagreed, the probe could admit an organization the session cannot load.\n */\nexport function findDefaultApiReadOperation(\n resourceConfiguration: AnyFrontendResourceConfiguration | undefined,\n): FrontendResourceConfiguration_Operation | undefined {\n return resourceConfiguration?.operations?.find(\n (operation: FrontendResourceConfiguration_Operation) =>\n operation.operationIdentifier === CoreResourceOperation.READ\n && operation.isOperationDefault === true\n && operation.isBulkOperation !== true\n && (\n operation.variantType === ResourceOperationVariantType.API_CALL\n || operation.variantType === ResourceOperationVariantType.API_CALL_WITH_CALLBACK\n ),\n );\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The consent purposes the signed-in person has granted, and the one door that records a new grant —
|
|
3
|
+
* for a surface that must gate provider code on consent (#1702).
|
|
4
|
+
*
|
|
5
|
+
* ## Why this reads `UserOrgsContext` WITHOUT `useUserOrgs`
|
|
6
|
+
*
|
|
7
|
+
* `useUserOrgs` throws outside its provider. A provider component can be mounted outside it — in a test, on
|
|
8
|
+
* a pre-authentication page — and there the right answer is not an exception but "nothing has been
|
|
9
|
+
* granted", because nobody is known to have granted anything. So an absent context reads as the empty set,
|
|
10
|
+
* which fails closed, and offers no way to record a grant, because there is no person to record it for.
|
|
11
|
+
*
|
|
12
|
+
* ## Why the grant source is the person's stored preferences
|
|
13
|
+
*
|
|
14
|
+
* `privacy.consentedPurposes` on the self-preferences record is the audited consent decision
|
|
15
|
+
* (`resource-operation-audit-emission` reads it). Reading the same record here means a component gate and
|
|
16
|
+
* the application's consent gate can never disagree about what was granted, and recording a grant through
|
|
17
|
+
* `recordConsentDecision` adds no second audit trail — the write IS the audit event.
|
|
18
|
+
*/
|
|
19
|
+
import { type ConsentPurpose } from '@wildo-ai/saas-models/public-runtime';
|
|
20
|
+
export interface GrantedConsentPurposes {
|
|
21
|
+
/** What the signed-in person has granted, normalized. Empty when nobody is known. */
|
|
22
|
+
readonly granted: readonly ConsentPurpose[];
|
|
23
|
+
/**
|
|
24
|
+
* Grants exactly `purposes` IN ADDITION to what is already granted, through the audited preference
|
|
25
|
+
* write. `undefined` when there is no person to record a decision for.
|
|
26
|
+
*/
|
|
27
|
+
readonly grant: ((purposes: readonly ConsentPurpose[]) => Promise<void>) | undefined;
|
|
28
|
+
}
|
|
29
|
+
export declare function useGrantedConsentPurposes(): GrantedConsentPurposes;
|
|
30
|
+
//# sourceMappingURL=useGrantedConsentPurposes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGrantedConsentPurposes.d.ts","sourceRoot":"","sources":["../../../../../src/core/security/useGrantedConsentPurposes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAIrG,MAAM,WAAW,sBAAsB;IACrC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACtF;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAkBlE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The consent purposes the signed-in person has granted, and the one door that records a new grant —
|
|
3
|
+
* for a surface that must gate provider code on consent (#1702).
|
|
4
|
+
*
|
|
5
|
+
* ## Why this reads `UserOrgsContext` WITHOUT `useUserOrgs`
|
|
6
|
+
*
|
|
7
|
+
* `useUserOrgs` throws outside its provider. A provider component can be mounted outside it — in a test, on
|
|
8
|
+
* a pre-authentication page — and there the right answer is not an exception but "nothing has been
|
|
9
|
+
* granted", because nobody is known to have granted anything. So an absent context reads as the empty set,
|
|
10
|
+
* which fails closed, and offers no way to record a grant, because there is no person to record it for.
|
|
11
|
+
*
|
|
12
|
+
* ## Why the grant source is the person's stored preferences
|
|
13
|
+
*
|
|
14
|
+
* `privacy.consentedPurposes` on the self-preferences record is the audited consent decision
|
|
15
|
+
* (`resource-operation-audit-emission` reads it). Reading the same record here means a component gate and
|
|
16
|
+
* the application's consent gate can never disagree about what was granted, and recording a grant through
|
|
17
|
+
* `recordConsentDecision` adds no second audit trail — the write IS the audit event.
|
|
18
|
+
*/
|
|
19
|
+
import { useCallback, useContext, useMemo } from 'react';
|
|
20
|
+
import { normalizeConsentPurposes } from '@wildo-ai/saas-models/public-runtime';
|
|
21
|
+
import { UserOrgsContext } from './UserOrgsContext.js';
|
|
22
|
+
import { composeConsentDecision } from './consent-gate.frontend.utils.js';
|
|
23
|
+
export function useGrantedConsentPurposes() {
|
|
24
|
+
const context = useContext(UserOrgsContext);
|
|
25
|
+
const storedPurposes = context?.privacy?.consentedPurposes;
|
|
26
|
+
const granted = useMemo(() => normalizeConsentPurposes(storedPurposes), [storedPurposes]);
|
|
27
|
+
const recordConsentDecision = context?.recordConsentDecision;
|
|
28
|
+
const canRecord = context?.user !== null && context?.user !== undefined && recordConsentDecision !== undefined;
|
|
29
|
+
const grant = useCallback(async (purposes) => {
|
|
30
|
+
if (recordConsentDecision === undefined)
|
|
31
|
+
return;
|
|
32
|
+
// Offered and selected are the same set: the person agreed to exactly the purposes they were shown,
|
|
33
|
+
// and every purpose they did not see keeps its stored answer.
|
|
34
|
+
await recordConsentDecision(composeConsentDecision(granted, purposes, purposes));
|
|
35
|
+
}, [granted, recordConsentDecision]);
|
|
36
|
+
return { granted, grant: canRecord ? grant : undefined };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=useGrantedConsentPurposes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGrantedConsentPurposes.js","sourceRoot":"","sources":["../../../../../src/core/security/useGrantedConsentPurposes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAuB,MAAM,sCAAsC,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAYvE,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1F,MAAM,qBAAqB,GAAG,OAAO,EAAE,qBAAqB,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,qBAAqB,KAAK,SAAS,CAAC;IAE/G,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EAAE,QAAmC,EAAiB,EAAE;QAC3D,IAAI,qBAAqB,KAAK,SAAS;YAAE,OAAO;QAChD,oGAAoG;QACpG,8DAA8D;QAC9D,MAAM,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,CAAC,EACD,CAAC,OAAO,EAAE,qBAAqB,CAAC,CACjC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3D,CAAC","sourcesContent":["/**\n * The consent purposes the signed-in person has granted, and the one door that records a new grant —\n * for a surface that must gate provider code on consent (#1702).\n *\n * ## Why this reads `UserOrgsContext` WITHOUT `useUserOrgs`\n *\n * `useUserOrgs` throws outside its provider. A provider component can be mounted outside it — in a test, on\n * a pre-authentication page — and there the right answer is not an exception but \"nothing has been\n * granted\", because nobody is known to have granted anything. So an absent context reads as the empty set,\n * which fails closed, and offers no way to record a grant, because there is no person to record it for.\n *\n * ## Why the grant source is the person's stored preferences\n *\n * `privacy.consentedPurposes` on the self-preferences record is the audited consent decision\n * (`resource-operation-audit-emission` reads it). Reading the same record here means a component gate and\n * the application's consent gate can never disagree about what was granted, and recording a grant through\n * `recordConsentDecision` adds no second audit trail — the write IS the audit event.\n */\n\nimport { useCallback, useContext, useMemo } from 'react';\nimport { normalizeConsentPurposes, type ConsentPurpose } from '@wildo-ai/saas-models/public-runtime';\nimport { UserOrgsContext } from './UserOrgsContext';\nimport { composeConsentDecision } from './consent-gate.frontend.utils';\n\nexport interface GrantedConsentPurposes {\n /** What the signed-in person has granted, normalized. Empty when nobody is known. */\n readonly granted: readonly ConsentPurpose[];\n /**\n * Grants exactly `purposes` IN ADDITION to what is already granted, through the audited preference\n * write. `undefined` when there is no person to record a decision for.\n */\n readonly grant: ((purposes: readonly ConsentPurpose[]) => Promise<void>) | undefined;\n}\n\nexport function useGrantedConsentPurposes(): GrantedConsentPurposes {\n const context = useContext(UserOrgsContext);\n const storedPurposes = context?.privacy?.consentedPurposes;\n const granted = useMemo(() => normalizeConsentPurposes(storedPurposes), [storedPurposes]);\n const recordConsentDecision = context?.recordConsentDecision;\n const canRecord = context?.user !== null && context?.user !== undefined && recordConsentDecision !== undefined;\n\n const grant = useCallback(\n async (purposes: readonly ConsentPurpose[]): Promise<void> => {\n if (recordConsentDecision === undefined) return;\n // Offered and selected are the same set: the person agreed to exactly the purposes they were shown,\n // and every purpose they did not see keeps its stored answer.\n await recordConsentDecision(composeConsentDecision(granted, purposes, purposes));\n },\n [granted, recordConsentDecision],\n );\n\n return { granted, grant: canRecord ? grant : undefined };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIContext.d.ts","sourceRoot":"","sources":["../../../../../src/core/ui/UIContext.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"UIContext.d.ts","sourceRoot":"","sources":["../../../../../src/core/ui/UIContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -607,11 +607,15 @@ export function UIProvider({ children, frontendConfiguration, subscribeToUserPre
|
|
|
607
607
|
// lower it; DOM order only orders peers within the SAME painting level.
|
|
608
608
|
//
|
|
609
609
|
// So a surface is visible under a themed layer only if its content also reaches the
|
|
610
|
-
// z-index:0 level.
|
|
611
|
-
//
|
|
612
|
-
//
|
|
613
|
-
//
|
|
614
|
-
// `
|
|
610
|
+
// z-index:0 level. "Incidentally" is not enough, and both shells learned it: the wide
|
|
611
|
+
// public layout's governed-document pages rendered as an empty gradient with the whole
|
|
612
|
+
// document in the DOM (#1204), and the authenticated shell — where most texts happen to
|
|
613
|
+
// sit under a positioned ancestor — hid its status bar's "Connected" (#1830). Both shells
|
|
614
|
+
// now state it: `isolate` on the `<main>` elements of
|
|
615
|
+
// `presets-components/src/components/app/public-layout-main-container.tsx`, and
|
|
616
|
+
// `relative` (deliberately not `isolate`, see there) on the root of
|
|
617
|
+
// `presets-components/src/components/app/app-layout-main-container.tsx`. The shell
|
|
618
|
+
// baseline scenario pins it (T5 in `browser-shell-baseline`).
|
|
615
619
|
//
|
|
616
620
|
// Raising the layer BELOW content instead was considered and rejected: the shell fill
|
|
617
621
|
// (`Surface` SHELL, opaque) sits at step 3, so a layer painted under content would be
|
|
@@ -703,7 +707,7 @@ function transformAppComponentsForBreakpoint(appComponents, currentBreakpoint, l
|
|
|
703
707
|
: false;
|
|
704
708
|
// CONTROL_PANEL - boolean or object with per-launcher items[]
|
|
705
709
|
transformed[ApplicationLevelComponentType.CONTROL_PANEL] = appComponents[ApplicationLevelComponentType.CONTROL_PANEL] || false;
|
|
706
|
-
// STATUS_BAR - boolean,
|
|
710
|
+
// STATUS_BAR - boolean, a StatusBarPlacement string (top | bottom), or object with config fields
|
|
707
711
|
const statusBarConfig = appComponents[ApplicationLevelComponentType.STATUS_BAR];
|
|
708
712
|
if (typeof statusBarConfig === 'boolean') {
|
|
709
713
|
transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIContext.js","sourceRoot":"","sources":["../../../../../src/core/ui/UIContext.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * UI Context\n * Provides simplified UI configuration with abstracted breakpoints\n */\n\nimport React, { createContext, ReactNode, useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { MotionConfig } from 'motion/react';\nimport { z } from 'zod';\nimport type { AppConfiguration_Frontend } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport type { SettingsHubConfig } from '~wildo-frontend-lib/core/config/settings-hub.frontend.schemas';\nimport type { ShellIdentity } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport { ViewportBreakpoint, getViewportBreakpoint } from '@wildo-ai/zod-decorators';\nimport { UserTheme, UserPreferences, describeCaughtError } from '@wildo-ai/saas-models';\nimport { type NavigationLayout } from '@wildo-ai/saas-models';\nimport type { CompositeViewDefinition } from '~wildo-frontend-lib/core/config/composite-view.schemas';\nimport type { OnboardingViewDefinition } from '~wildo-frontend-lib/core/config/onboarding-view.frontend.schemas';\nimport { ApplicationLevelComponentType } from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\nimport { SidebarResponsivePolicy } from '~wildo-frontend-lib/core/config/launcher-items.frontend.schemas';\nimport type { FullCustomViewDefinition } from '~wildo-frontend-lib/core/config/full-custom-view.schemas';\nimport type { FlowsActorsViewDefinition } from '~wildo-frontend-lib/core/config/flows-actors-view.schemas';\nimport type { HomeDefinition } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport {\n DesignSystemToken,\n getDesignTokenValue,\n UIBehavior,\n SpacingSemantic,\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n FRAMEWORK_DEFAULT_SURFACE_POLICIES,\n ShellAppearance,\n SidebarCompactLabelMode,\n ActionLabelDisplayMode,\n MaterialProfileRole,\n} from '@wildo-ai/presets-components-models';\nimport type {\n ComponentStyleTheme,\n ChartStylePreset,\n DesignSystemConfiguration,\n DesignTokenConfiguration,\n DeepPartialSurfacePolicy,\n SurfacePolicy,\n UIBehaviorRecipe,\n MaterialProfile,\n} from '@wildo-ai/presets-components-models';\nimport {\n applyDesignSystemConfiguration,\n clearAppliedDesignTokens,\n darkModeUtils,\n loadFontsFromTypography,\n mergeDesignSystemConfiguration,\n} from '~wildo-frontend-lib/core/ui/design-token.utils';\nimport { DEFAULT_CHART_STYLE_PRESET } from '~wildo-frontend-lib/core/ui/chart-style-defaults';\nimport { defaultTheme } from '~wildo-frontend-lib/core/ui/themes/default.theme';\nimport { cn } from '~wildo-frontend-lib/core/ui/cn';\nimport { envLoader } from '~wildo-frontend-lib/core/runtime/env-variable-loader.frontend.service';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\nimport { UIConfiguration } from '~wildo-frontend-lib/core/ui/ui.frontend.schemas';\nimport { mergeSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { MaterialRuntimePolicyProvider } from '~wildo-frontend-lib/core/ui/material-runtime';\n\n// =============================================================================\n// RECIPE UTILITIES\n// =============================================================================\n\nconst EMPTY_RECIPE: UIBehaviorRecipe = {\n base: '',\n states: {},\n motion: {},\n};\n\nfunction resolveRecipe(\n theme: ComponentStyleTheme,\n behavior: UIBehavior,\n variant?: string,\n): UIBehaviorRecipe {\n switch (behavior) {\n case UIBehavior.INTERACTIVE:\n return theme.interactive[variant as InteractiveVariant ?? InteractiveVariant.PRIMARY] ?? EMPTY_RECIPE;\n case UIBehavior.SURFACE:\n return theme.surface[variant as SurfaceVariant ?? SurfaceVariant.BASE] ?? EMPTY_RECIPE;\n case UIBehavior.FORM_CONTROL:\n return theme.formControl[variant as FormControlVariant ?? FormControlVariant.DEFAULT] ?? EMPTY_RECIPE;\n case UIBehavior.INDICATOR:\n return theme.indicator[variant as IndicatorVariant ?? IndicatorVariant.NEUTRAL] ?? EMPTY_RECIPE;\n case UIBehavior.SELECTABLE:\n return theme.selectable[variant as SelectableVariant ?? SelectableVariant.FILLED] ?? EMPTY_RECIPE;\n case UIBehavior.OVERLAY_BACKDROP:\n return theme.overlayBackdrop;\n case UIBehavior.DIVIDER:\n return theme.divider[variant as DividerVariant ?? DividerVariant.DEFAULT] ?? EMPTY_RECIPE;\n case UIBehavior.SKELETON:\n return theme.skeleton;\n case UIBehavior.LOADING_SPINNER:\n return theme.loadingSpinner;\n case UIBehavior.LOADING_OVERLAY:\n return theme.loadingOverlay;\n case UIBehavior.TYPOGRAPHY:\n return theme.typography[variant as TypographyVariant ?? TypographyVariant.BODY] ?? EMPTY_RECIPE;\n default:\n return EMPTY_RECIPE;\n }\n}\n\n/**\n * Compose a single className string from a recipe's base, all standard states,\n * size, and motion.\n *\n * **Note:** `highlighted` is intentionally excluded. It is a menu-item-specific\n * state (Radix `data-highlighted`) that must be applied selectively by menu\n * components. Including it here would add undesired focus-bg styles to regular\n * interactive elements like buttons.\n */\nfunction composeClasses(recipe: UIBehaviorRecipe, size?: string): string {\n const parts: (string | undefined)[] = [\n recipe.base,\n recipe.states.hover,\n recipe.states.active,\n recipe.states.focus,\n recipe.states.disabled,\n recipe.states.selected,\n recipe.states.invalid,\n recipe.states.open,\n size ? recipe.sizes?.[size] : undefined,\n recipe.motion.transition,\n recipe.motion.enter,\n recipe.motion.exit,\n ];\n return parts.filter(Boolean).join(' ');\n}\n\nfunction mergeThemeRequiredCustomTokens(\n tokens: DesignSystemConfiguration | undefined,\n theme: ComponentStyleTheme | undefined,\n): DesignSystemConfiguration | undefined {\n if (\n !tokens\n || !theme?.requiredCustomTokens\n || Object.keys(theme.requiredCustomTokens).length === 0\n ) {\n return tokens;\n }\n\n // Theme-owned custom tokens are part of the active visual contract.\n // They must be merged into the runtime-applied design system so recipes that\n // reference custom CSS variables remain self-contained when the theme is used.\n return mergeDesignSystemConfiguration(tokens, {\n customTokens: theme.requiredCustomTokens,\n });\n}\n\n// =============================================================================\n// DESIGN SYSTEM RUNTIME VARIABLES\n// =============================================================================\n\nfunction getThemeRuntimeVariableEntries(theme: ComponentStyleTheme): Array<[string, string]> {\n const entries: Array<[string, string]> = [];\n\n if (theme.spacing) {\n for (const [semantic, value] of Object.entries(theme.spacing) as Array<[SpacingSemantic, string]>) {\n if (value) {\n entries.push([`--${semantic}`, value]);\n }\n }\n }\n\n if (theme.radius) {\n entries.push(['--radius', theme.radius]);\n }\n\n return entries;\n}\n\n// =============================================================================\n// VIEWPORT CONTEXT & PROVIDER\n// =============================================================================\n\nconst RESIZE_DEBOUNCE_MS: number = 150;\nconst SSR_DEFAULT_WIDTH: number = 1280;\n\nexport interface ComponentsViewportContextType {\n currentBreakpoint: ViewportBreakpoint;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n viewportWidth: number;\n isTouch: boolean;\n prefersReducedMotion: boolean;\n isMac: boolean;\n isInitialized: boolean;\n}\n\nexport interface ComponentsViewportProviderProps {\n children: ReactNode;\n currentBreakpoint?: ViewportBreakpoint;\n viewportWidth?: number;\n isTouch?: boolean;\n prefersReducedMotion?: boolean;\n isMac?: boolean;\n}\n\nfunction detectIsTouch(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(pointer: coarse)').matches;\n}\n\nfunction detectPrefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nfunction detectIsMac(): boolean {\n if (typeof navigator === 'undefined') return false;\n if ('userAgentData' in navigator && (navigator as any).userAgentData?.platform) {\n return (navigator as any).userAgentData.platform === 'macOS';\n }\n return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nfunction getWindowWidth(): number {\n if (typeof window === 'undefined') return SSR_DEFAULT_WIDTH;\n return window.innerWidth;\n}\n\nfunction useWindowWidth(): number {\n const [width, setWidth] = useState<number>(getWindowWidth);\n const resizeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleResize = useCallback((): void => {\n if (typeof window === 'undefined') {\n return;\n }\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n resizeTimerRef.current = setTimeout(() => {\n setWidth(window.innerWidth);\n resizeTimerRef.current = null;\n }, RESIZE_DEBOUNCE_MS);\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n };\n }, [handleResize]);\n\n return width;\n}\n\nconst ComponentsViewportContext = createContext<ComponentsViewportContextType | undefined>(undefined);\n\nexport const ComponentsViewportProvider: React.FC<ComponentsViewportProviderProps> = ({\n children,\n currentBreakpoint: injectedBreakpoint,\n viewportWidth: injectedWidth,\n isTouch: injectedIsTouch,\n prefersReducedMotion: injectedPrefersReducedMotion,\n isMac: injectedIsMac,\n}) => {\n const isInjected = injectedBreakpoint !== undefined;\n\n const [standaloneWidth, setStandaloneWidth] = useState<number>(getWindowWidth);\n const resizeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleResize = useCallback((): void => {\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n resizeTimerRef.current = setTimeout(() => {\n setStandaloneWidth(window.innerWidth);\n resizeTimerRef.current = null;\n }, RESIZE_DEBOUNCE_MS);\n }, []);\n\n useEffect(() => {\n if (isInjected) return;\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n };\n }, [isInjected, handleResize]);\n\n const [standaloneIsTouch, setStandaloneIsTouch] = useState<boolean>(detectIsTouch);\n\n useEffect(() => {\n if (isInjected) return;\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(pointer: coarse)');\n const handler = (e: MediaQueryListEvent): void => setStandaloneIsTouch(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [isInjected]);\n\n const [standaloneReducedMotion, setStandaloneReducedMotion] = useState<boolean>(detectPrefersReducedMotion);\n\n useEffect(() => {\n if (isInjected) return;\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const handler = (e: MediaQueryListEvent): void => setStandaloneReducedMotion(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [isInjected]);\n\n const vpViewportWidth = isInjected ? (injectedWidth ?? SSR_DEFAULT_WIDTH) : standaloneWidth;\n const vpCurrentBreakpoint = isInjected ? injectedBreakpoint : getViewportBreakpoint(standaloneWidth);\n const vpIsTouch = isInjected ? (injectedIsTouch ?? false) : standaloneIsTouch;\n const vpPrefersReducedMotion = isInjected ? (injectedPrefersReducedMotion ?? false) : standaloneReducedMotion;\n const vpIsMac = injectedIsMac ?? detectIsMac();\n\n const vpIsMobile = vpCurrentBreakpoint === ViewportBreakpoint.MOBILE;\n const vpIsTablet = vpCurrentBreakpoint === ViewportBreakpoint.VERT_TABLET;\n const vpIsDesktop = vpCurrentBreakpoint === ViewportBreakpoint.DESKTOP;\n\n const value: ComponentsViewportContextType = useMemo(\n () => ({\n currentBreakpoint: vpCurrentBreakpoint,\n isMobile: vpIsMobile,\n isTablet: vpIsTablet,\n isDesktop: vpIsDesktop,\n viewportWidth: vpViewportWidth,\n isTouch: vpIsTouch,\n prefersReducedMotion: vpPrefersReducedMotion,\n isMac: vpIsMac,\n isInitialized: true,\n }),\n [vpCurrentBreakpoint, vpIsMobile, vpIsTablet, vpIsDesktop, vpViewportWidth, vpIsTouch, vpPrefersReducedMotion, vpIsMac],\n );\n\n return (\n <ComponentsViewportContext.Provider value={value}>\n {children}\n </ComponentsViewportContext.Provider>\n );\n};\n\n// =============================================================================\n// UI CONTEXT\n// =============================================================================\n\n/**\n * UI Context State\n * Exported for use in separate hook file (Fast Refresh compatibility)\n */\nexport interface UIContextType {\n // Current complete UI configuration\n UIConfig : UIConfiguration | undefined;\n\n // Direct access to frontend sub-configurations\n navigationLayout?: NavigationLayout;\n appComponentsConfiguration?: UIConfiguration['appComponentsConfiguration'];\n designSystemConfiguration?: UIConfiguration['designSystemConfiguration'];\n\n // These are not breakpoint-dependent, use raw types\n compositeViews?: CompositeViewDefinition[];\n onboardingViews?: OnboardingViewDefinition[];\n fullCustomViews?: FullCustomViewDefinition[];\n flowsActorsViews?: FlowsActorsViewDefinition[];\n homeDefinition?: HomeDefinition;\n /**\n * The application's authored settings rail. Exposed here so\n * `useSettingsHubConfig` reads the SAME frontend configuration every other\n * sub-config comes from, rather than reaching for a framework default.\n */\n settingsHub?: SettingsHubConfig;\n /**\n * The identity THIS SURFACE presents, when it is not the application it talks\n * to. Exposed here so `useBrandIdentity` — and any future shell affordance\n * that names the product — reads it from the same resolved frontend\n * configuration every other sub-config comes from. Absent means \"I am the\n * application's own frontend\", and the application config answers instead.\n */\n shellIdentity?: ShellIdentity;\n\n // Dark mode utilities\n isDark: boolean;\n setDark: (enabled: boolean) => void;\n toggleDark: () => void;\n /**\n * The user's chosen theme PREFERENCE (`LIGHT` / `DARK` / `AUTO`), distinct\n * from `isDark` (the resolved boolean). `AUTO` follows the OS scheme. Read this\n * to drive a 3-way theme selector; `isDark` only tells you the resolved value.\n */\n themePreference: UserTheme;\n /**\n * Set the theme preference and apply it. Unlike `setDark` (LIGHT/DARK only),\n * this handles all three `UserTheme` values — `AUTO` resolves against the OS\n * scheme — and keeps `isDark` + `themePreference` in sync.\n */\n setTheme: (theme: UserTheme) => void;\n\n // Preferences injected into UIProvider from upstream contexts/events\n uiPreferences: UserPreferences['ui'] | null;\n\n // Preference getters\n getUiPreferences: () => UserPreferences['ui'] | null;\n\n // ── Viewport ──\n currentBreakpoint: ViewportBreakpoint;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n viewportWidth: number;\n isTouch: boolean;\n prefersReducedMotion: boolean;\n isMac: boolean;\n\n // ── Design System ──\n getRecipe: (behavior: UIBehavior, variant?: string) => UIBehaviorRecipe;\n getComposedClasses: (behavior: UIBehavior, variant?: string, size?: string) => string;\n /** Resolve a recipe-selected material role through the active theme. */\n getMaterialProfile?: (role: MaterialProfileRole | undefined) => MaterialProfile | undefined;\n getSurfacePolicy?: (\n variant: SurfaceVariant,\n callSiteOverride?: DeepPartialSurfacePolicy,\n parentPolicy?: SurfacePolicy,\n ) => SurfacePolicy;\n getTokenValue: (token: DesignSystemToken) => string;\n getCssVariable: (token: DesignSystemToken) => string;\n getChartStylePreset: () => ChartStylePreset;\n designTheme: { id: string; name: string };\n /**\n * Resolved theme-level shell chrome policy (defaulted to `SEPARATED` when the\n * active theme doesn't declare one). App-shell region presets (sidebar,\n * menubar, toolbar, activity/status bars) and the navigation content zones\n * branch on this to render transparent regions in `CONTINUOUS` mode.\n */\n shellAppearance: ShellAppearance;\n /**\n * Resolved theme-level collapsed-sidebar label policy (defaulted to\n * `ICON_ONLY`). Consumed by the sidebar preset (item layout) and\n * `useSidebarBehavior` (default collapsed width).\n */\n sidebarCompactLabelMode: SidebarCompactLabelMode;\n /**\n * Resolved app-wide default for how action buttons render their label\n * (defaulted to `TOOLTIP`). `ActionBar` reads this whenever a caller doesn't\n * pass an explicit `labelDisplayMode`, so every action cluster honors the\n * app policy; per-resource-view overrides pass an explicit value instead.\n */\n actionLabelDisplayMode: ActionLabelDisplayMode;\n}\n\n/**\n * UI Context\n * Exported for use in separate hook file (Fast Refresh compatibility)\n * @internal - Use useUI() hook instead of accessing this directly\n */\nexport const UIContext: React.Context<UIContextType | undefined> = createContext<UIContextType | undefined>(undefined);\nconst logger: LoggerFrontendService = LoggerFrontendService.getLogger();\nconst logDebug = logger.debugByType('UIContext');\nlogger.setDebugTypeLogging('UIContext', false);\n\n/**\n * The UI runtime's inputs are PROPS, not an ambient context.\n *\n * `UIProvider` deliberately does not call `useApplication()`/`useEventBus()` itself: keeping it\n * independent of the application runtime is what lets the focused UI tests (theme tokens, dark-mode\n * preference, isolate layering) mount it with synthetic values instead of a whole provider tree.\n *\n * That independence used to be bought with a context — `FrontendHostUIRuntimeBindingProvider` plus a\n * hook, a type and a throw — extracted so a non-SaaS browser host could supply a different\n * implementation. That host was the application-creation workbench; it was deleted 2026-08-23, and\n * the seam was then measured to have ZERO polymorphism: one consumer, and two \"different\" suppliers\n * (`SaaSUIRuntimeProvider`, `TestUIProvider`) that were the same `useApplication()` + `useEventBus()`\n * code written twice. Every mount site had the provider as this component's IMMEDIATE parent, so the\n * context was carrying values one level. Props buy the same independence for three lines.\n */\nexport interface UIProviderProps {\n children: ReactNode;\n /** Resolved, schema-validated frontend configuration. */\n frontendConfiguration: AppConfiguration_Frontend | undefined;\n /** Subscribe to user-preference changes; returns an unsubscribe. */\n subscribeToUserPreferences: (listener: (preferences: UserPreferences['ui'] | null) => void) => () => void;\n /** Acknowledge that the UI runtime has completed startup. */\n markInitialized: () => void;\n}\n\nexport function UIProvider({\n children,\n frontendConfiguration,\n subscribeToUserPreferences,\n markInitialized,\n}: UIProviderProps): React.ReactElement {\n const width = useWindowWidth();\n\n logDebug('frontendConfiguration available:', !!frontendConfiguration);\n\n // Local state\n const [UIConfig, setUIConfig] = useState<UIConfiguration>();\n const [isDark, setIsDarkState] = useState<boolean>(() => darkModeUtils.resolvePreferredDarkMode());\n const [themePreference, setThemePreferenceState] = useState<UserTheme>(\n () => darkModeUtils.getStoredPreference() ?? UserTheme.AUTO,\n );\n const themePreferenceRef = useRef<UserTheme>(themePreference);\n const [currentFrontendConfig, setCurrentFrontendConfig] = useState<AppConfiguration_Frontend>();\n const [uiPreferences, setUiPreferences] = useState<UserPreferences['ui'] | null>(null);\n\n /**\n * Commit the semantic preference to both React state and a synchronous ref.\n * The ref closes the passive-effect gap during which the previous system-theme\n * listener could otherwise still observe AUTO immediately after the user\n * selected an explicit LIGHT or DARK preference.\n */\n const commitThemePreference = useCallback((theme: UserTheme): void => {\n themePreferenceRef.current = theme;\n setThemePreferenceState(theme);\n }, []);\n\n // Determine current viewport breakpoint using presets-components-models ViewportBreakpoint\n const currentBreakpoint = getViewportBreakpoint(width);\n\n // ── Device & platform detection ──\n // Pointer modality is not stable for the lifetime of a page: hybrid laptops\n // can switch between trackpad/mouse and direct touch without a reload. Keep\n // this source live because Glass uses it to choose interaction intensity and\n // every touch-target recipe relies on the same `(pointer: coarse)` truth.\n const [isTouch, setIsTouch] = useState<boolean>(detectIsTouch);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(pointer: coarse)');\n const handler = (event: MediaQueryListEvent): void => setIsTouch(event.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n const isMac = useMemo(() => {\n if (typeof navigator === 'undefined') return false;\n if ('userAgentData' in navigator && (navigator as any).userAgentData?.platform) {\n return (navigator as any).userAgentData.platform === 'macOS';\n }\n return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent);\n }, []);\n\n const [prefersReducedMotion, setPrefersReducedMotion] = useState<boolean>(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const handler = (e: MediaQueryListEvent): void => setPrefersReducedMotion(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n // Dark mode utilities\n const setDark = useCallback((enabled: boolean): void => {\n darkModeUtils.setDark(enabled);\n setIsDarkState(enabled);\n // A direct dark toggle is an explicit LIGHT/DARK preference (never AUTO).\n commitThemePreference(enabled ? UserTheme.DARK : UserTheme.LIGHT);\n }, [commitThemePreference]);\n\n const toggleDark = useCallback((): boolean => {\n const newState = !isDark;\n setDark(newState);\n return newState;\n }, [isDark, setDark]);\n\n /**\n * Complete 3-way theme setter. Applies the chosen preference, persists it, and\n * keeps both `isDark` and `themePreference` in sync — including `AUTO`, which\n * `setDark` cannot express. Mirrors the `USER_PREFERENCES_CHANGED` handler.\n */\n const setTheme = useCallback((theme: UserTheme): void => {\n if (theme === UserTheme.DARK) {\n darkModeUtils.setDark(true);\n setIsDarkState(true);\n } else if (theme === UserTheme.LIGHT) {\n darkModeUtils.setDark(false);\n setIsDarkState(false);\n } else {\n const prefersDark = darkModeUtils.setAuto();\n setIsDarkState(prefersDark);\n }\n commitThemePreference(theme);\n }, [commitThemePreference]);\n\n // Initialize dark mode on mount with cleanup\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const initialDarkMode = darkModeUtils.initDark();\n setIsDarkState(initialDarkMode);\n commitThemePreference(darkModeUtils.getStoredPreference() ?? UserTheme.AUTO);\n logDebug('Dark mode initialized', { isDark: initialDarkMode });\n }\n\n // Cleanup function for memory management\n return () => {\n darkModeUtils.cleanup();\n };\n }, [commitThemePreference, logger]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handleSystemThemeChange = (): void => {\n /**\n * The in-memory semantic preference is authoritative. Reading storage\n * here made a fresh/private browser session internally contradictory:\n * React correctly exposed AUTO for the missing value, while the listener\n * treated that same missing value as \"not auto\" and ignored macOS changes.\n */\n if (themePreferenceRef.current !== UserTheme.AUTO) {\n return;\n }\n\n const nextDarkMode = darkModeUtils.setAuto();\n setIsDarkState(nextDarkMode);\n logDebug('Dark mode updated from system preference', { isDark: nextDarkMode });\n };\n\n mql.addEventListener('change', handleSystemThemeChange);\n return () => mql.removeEventListener('change', handleSystemThemeChange);\n }, [logDebug]);\n\n // UserOrgsProvider lives deeper in the tree and injects UI preferences upward\n // through the event bus. Keep the UI layer compatible with anonymous / not-yet-\n // connected sessions by treating the absence of that event as \"no preferences\".\n useEffect(() => {\n const unsubscribe = subscribeToUserPreferences((preferences) => {\n setUiPreferences(preferences);\n\n // Apply UI theme preferences\n if (preferences?.theme) {\n const theme = preferences.theme as UserTheme;\n logDebug('Applying UI theme preference from UserOrgsContext event', { theme });\n\n if (theme === UserTheme.DARK) {\n setDark(true);\n } else if (theme === UserTheme.LIGHT) {\n setDark(false);\n } else if (theme === UserTheme.AUTO) {\n const prefersDark = darkModeUtils.setAuto();\n setIsDarkState(prefersDark);\n }\n commitThemePreference(theme);\n }\n });\n\n return unsubscribe;\n }, [commitThemePreference, subscribeToUserPreferences, setDark, logDebug]);\n\n // Preference getter\n const getUiPreferences = useCallback((): UserPreferences['ui'] | null => {\n return uiPreferences;\n }, [uiPreferences]);\n\n // Initialize UI configuration\n useEffect(() => {\n logDebug('useEffect triggered - checking frontendConfiguration');\n\n if (!frontendConfiguration) {\n logDebug('Frontend configuration not available yet');\n logger.warn('[UIContext] Frontend configuration not available');\n return;\n }\n\n const envConfig = envLoader.loadEnvironmentConfig();\n if (!envConfig) {\n logger.warn('[UIContext] Environment configuration not available');\n return;\n }\n\n // Transform complex responsive configuration to breakpoint-specific configuration\n const transformedAppComponents = transformAppComponentsForBreakpoint(\n frontendConfiguration.appComponentsConfiguration,\n currentBreakpoint,\n logger\n );\n\n const tempUIConfig: UIConfiguration = {\n currentBreakpoint,\n navigationLayout: frontendConfiguration.navigationLayout,\n appComponentsConfiguration: transformedAppComponents,\n designSystemConfiguration: frontendConfiguration.designSystemConfiguration,\n\n isMobile: currentBreakpoint === ViewportBreakpoint.MOBILE,\n isTablet: currentBreakpoint === ViewportBreakpoint.VERT_TABLET,\n isDesktop: currentBreakpoint === ViewportBreakpoint.DESKTOP\n };\n\n setUIConfig(tempUIConfig);\n setCurrentFrontendConfig(frontendConfiguration);\n logDebug('UIConfig set successfully', {\n breakpoint: currentBreakpoint,\n frontendServiceName: envConfig.frontendServiceName,\n hasNavigationLayout: !!frontendConfiguration.navigationLayout,\n transformedComponents: Object.keys(transformedAppComponents).length,\n hasDesignSystemConfiguration: !!tempUIConfig.designSystemConfiguration,\n });\n }, [frontendConfiguration, currentBreakpoint, logger]);\n\n const resolvedTheme = UIConfig?.designSystemConfiguration?.theme ?? defaultTheme;\n const resolvedDesignSystemConfiguration = useMemo(\n () => mergeThemeRequiredCustomTokens(UIConfig?.designSystemConfiguration, resolvedTheme),\n [UIConfig?.designSystemConfiguration, resolvedTheme],\n );\n const resolvedUIConfig = useMemo(\n () => UIConfig\n ? {\n ...UIConfig,\n designSystemConfiguration: resolvedDesignSystemConfiguration,\n }\n : undefined,\n [UIConfig, resolvedDesignSystemConfiguration],\n );\n\n const themeRuntimeVariables = useMemo(\n () => getThemeRuntimeVariableEntries(resolvedTheme),\n [resolvedTheme],\n );\n\n // Re-apply design tokens when the resolved design system or active mode changes.\n useEffect(() => {\n if (!resolvedDesignSystemConfiguration) {\n return;\n }\n\n applyDesignSystemConfiguration(resolvedDesignSystemConfiguration, {\n dark: isDark,\n logger,\n themeRuntimeVariables,\n });\n logDebug('Design tokens applied', {\n isDark,\n hasStandardTokens: !!resolvedDesignSystemConfiguration.tokens,\n hasCustomTokens: !!resolvedDesignSystemConfiguration.customTokens,\n });\n\n // On unmount, strip every CSS variable we wrote so the document\n // doesn't keep stale tokens (HMR, SPA navigation across tenants, etc.).\n // Re-applies during the lifetime of the provider are handled internally\n // by `applyDesignSystemConfiguration`'s own diff.\n return () => {\n clearAppliedDesignTokens();\n };\n }, [resolvedDesignSystemConfiguration, isDark, logger, themeRuntimeVariables]);\n\n // Load typography fonts once per typography configuration, then mark the UI layer ready.\n useEffect(() => {\n const typography = resolvedDesignSystemConfiguration?.typography;\n let cancelled = false;\n\n const initializeFonts = async (): Promise<void> => {\n if (!typography) {\n markInitialized();\n return;\n }\n\n logDebug('Loading typography fonts...');\n\n try {\n const result = await loadFontsFromTypography(typography, {\n timeout: 5000,\n waitForLoad: true,\n logger: {\n debug: (msg, ctx) => logDebug(msg, ctx),\n warn: (msg, ctx) => logger.warn(msg, ctx),\n error: (msg, ctx) => logger.error(msg, ctx),\n },\n });\n\n if (cancelled) {\n return;\n }\n\n logDebug('Typography fonts loaded', {\n success: result.success,\n loadedFonts: result.loadedFonts,\n failedFonts: result.failedFonts,\n loadTimeMs: result.loadTimeMs,\n });\n } catch (error) {\n if (cancelled) {\n return;\n }\n\n logger.error('[UIContext] Font loading failed', {\n error: describeCaughtError(error),\n });\n }\n\n markInitialized();\n };\n\n void initializeFonts();\n\n return () => {\n cancelled = true;\n };\n }, [resolvedDesignSystemConfiguration?.typography, logger, markInitialized]);\n\n // ── Design system callbacks ──\n const getRecipe = useCallback(\n (behavior: UIBehavior, variant?: string): UIBehaviorRecipe => resolveRecipe(resolvedTheme, behavior, variant),\n [resolvedTheme],\n );\n\n const getComposedClasses = useCallback(\n (behavior: UIBehavior, variant?: string, size?: string): string => composeClasses(resolveRecipe(resolvedTheme, behavior, variant), size),\n [resolvedTheme],\n );\n\n const getMaterialProfile = useCallback(\n (role: MaterialProfileRole | undefined): MaterialProfile | undefined => (\n role ? resolvedTheme.materials?.[role] : undefined\n ),\n [resolvedTheme],\n );\n\n const getSurfacePolicy = useCallback(\n (\n variant: SurfaceVariant,\n callSiteOverride?: DeepPartialSurfacePolicy,\n parentPolicy?: SurfacePolicy,\n ): SurfacePolicy => {\n const frameworkDefault = FRAMEWORK_DEFAULT_SURFACE_POLICIES[variant];\n const themeDefault = resolvedTheme.surface[variant]?.policy;\n const appSurfacePolicies = resolvedDesignSystemConfiguration?.surfacePolicies as Partial<Record<SurfaceVariant, DeepPartialSurfacePolicy>> | undefined;\n\n return mergeSurfacePolicy(\n frameworkDefault,\n themeDefault,\n appSurfacePolicies?.[variant],\n callSiteOverride,\n {\n variant,\n parentPolicy,\n logger,\n },\n );\n },\n [resolvedDesignSystemConfiguration?.surfacePolicies, resolvedTheme],\n );\n\n const dsTokens = resolvedDesignSystemConfiguration;\n const getTokenValue = useCallback(\n (token: DesignSystemToken): string => {\n if (dsTokens?.tokens) {\n const cfg: DesignTokenConfiguration | undefined = dsTokens.tokens[token];\n if (cfg) return getDesignTokenValue(cfg, isDark ? 'dark' : 'light');\n }\n if (dsTokens?.customTokens) {\n const cfg: DesignTokenConfiguration | undefined = dsTokens.customTokens[token];\n if (cfg) return getDesignTokenValue(cfg, isDark ? 'dark' : 'light');\n }\n return `var(--${token})`;\n },\n [dsTokens, isDark],\n );\n\n const getCssVariable = useCallback((token: DesignSystemToken): string => `var(--${token})`, []);\n\n const getChartStylePreset = useCallback((): ChartStylePreset => resolvedTheme.chartStyle ?? DEFAULT_CHART_STYLE_PRESET, [resolvedTheme]);\n\n // ── Viewport convenience ──\n const isMobile = currentBreakpoint === ViewportBreakpoint.MOBILE;\n const isTablet = currentBreakpoint === ViewportBreakpoint.VERT_TABLET;\n const isDesktop = currentBreakpoint === ViewportBreakpoint.DESKTOP;\n\n const contextValue: UIContextType = {\n // Current complete UI configuration\n UIConfig: resolvedUIConfig,\n\n // Direct access to frontend sub-configurations\n navigationLayout: resolvedUIConfig?.navigationLayout,\n appComponentsConfiguration: resolvedUIConfig?.appComponentsConfiguration,\n designSystemConfiguration: resolvedDesignSystemConfiguration,\n compositeViews: currentFrontendConfig?.compositeViews,\n onboardingViews: currentFrontendConfig?.onboardingViews,\n fullCustomViews: currentFrontendConfig?.fullCustomViews,\n flowsActorsViews: currentFrontendConfig?.flowsActorsViews,\n homeDefinition: currentFrontendConfig?.homeDefinition,\n settingsHub: currentFrontendConfig?.settingsHub,\n shellIdentity: currentFrontendConfig?.shellIdentity,\n\n // Dark mode utilities\n isDark,\n setDark,\n toggleDark,\n themePreference,\n setTheme,\n\n // Preferences\n uiPreferences,\n getUiPreferences,\n\n // Viewport\n currentBreakpoint,\n isMobile,\n isTablet,\n isDesktop,\n viewportWidth: width,\n isTouch,\n prefersReducedMotion,\n isMac,\n\n // Design System\n getRecipe,\n getComposedClasses,\n getMaterialProfile,\n getSurfacePolicy,\n getTokenValue,\n getCssVariable,\n getChartStylePreset,\n designTheme: { id: resolvedTheme.id, name: resolvedTheme.name },\n shellAppearance: resolvedTheme.shellAppearance ?? ShellAppearance.SEPARATED,\n sidebarCompactLabelMode: resolvedTheme.sidebarCompactLabelMode ?? SidebarCompactLabelMode.ICON_ONLY,\n actionLabelDisplayMode: resolvedTheme.actionLabelDisplayMode ?? ActionLabelDisplayMode.TOOLTIP,\n };\n\n return (\n <UIContext.Provider value={contextValue}>\n <MaterialRuntimePolicyProvider policy={resolvedTheme.materialRuntimePolicy}>\n <MotionConfig reducedMotion=\"user\">\n <ComponentsViewportProvider\n currentBreakpoint={currentBreakpoint}\n viewportWidth={width}\n isTouch={isTouch}\n prefersReducedMotion={prefersReducedMotion}\n isMac={isMac}\n >\n {/*\n `children` (the WHOLE provider + router subtree) MUST keep a stable tree position\n across bootstrap, or it remounts. `resolvedTheme.backgroundLayer` starts falsy —\n the default theme has none — and flips truthy the moment `UIConfig` resolves an app\n theme that defines one (mid-bootstrap). An earlier version branched the ENTIRE node\n on that flip (`themed ? <div class=\"isolate\">…{children}</div> : children`), which\n moved `children` from a direct child of `ComponentsViewportProvider` to a grandchild\n under a NEW `<div>` — a different parent at that position, so React unmounted and\n remounted the entire app: every provider re-ran init, all i18n labels re-fetched,\n and one-shot effects double-fired (the OAuth2 `/auth/callback` code exchange fired a\n second time and its `consumable_token_already_consumed` 401 masked the successful\n first exchange, stranding an authenticated user on an error screen).\n\n Fix: render `children` at a FIXED positional index (index 1 below) in BOTH states,\n preceded by a slot that holds the decorative layer only when themed. React reconciles\n by index, so index 1 stays the same instance whether index 0 is `null` or the layer —\n `children` never remounts. When there is no background layer the output is exactly the\n previous bare-`children` shape (a `null` sibling renders nothing, adds no DOM box), so\n non-themed apps are byte-unchanged; only the themed path stops remounting.\n */}\n {resolvedTheme.backgroundLayer ? (\n // The `isolate` wrapper is load-bearing, not decorative. A `-z-10` child of the ROOT\n // stacking context paints BEFORE the body's own background fill (CSS painting order:\n // negative-z-index descendants of the root come before in-flow block backgrounds), so\n // any app with the standard `body { background: var(--background) }` rule would paint\n // an opaque rect OVER the layer and it would never be visible. Isolating here scopes\n // the layer's `-z-10` to THIS wrapper's stacking context (not the root); the wrapper\n // is an empty, zero-height in-flow block (its only child is `position:fixed`, out of\n // flow), so it is layout-neutral and paints AFTER the body background. Crucially the\n // wrapper contains ONLY the layer, never `children`, so `children` stay at a fixed\n // position across the bootstrap flip (see the note above).\n //\n // ⚠️ THE LAYER PAINTS ABOVE APP CONTENT, NOT BELOW IT — and every shell must account\n // for that. This comment used to claim the wrapper \"sits above the body fill but below\n // all app content (`children` follow it in paint order)\". That is FALSE, and it cost\n // #1204: `isolation: isolate` on a NON-POSITIONED element promotes this wrapper to the\n // z-index:0 painting level (CSS 2.1 painting order step 8), while ordinary in-flow\n // content paints at steps 3-5 underneath it. Being an earlier DOM sibling does not\n // lower it; DOM order only orders peers within the SAME painting level.\n //\n // So a surface is visible under a themed layer only if its content also reaches the\n // z-index:0 level. Authenticated shells and cards do so incidentally (flex items\n // carrying `z-index: 0`); the wide public layout did not, and its governed-document\n // pages rendered as an empty gradient with the whole document in the DOM. Shells now\n // state it — see `isolate` on the `<main>` elements of\n // `presets-components/src/components/app/public-layout-main-container.tsx`.\n //\n // Raising the layer BELOW content instead was considered and rejected: the shell fill\n // (`Surface` SHELL, opaque) sits at step 3, so a layer painted under content would be\n // hidden by every shell and no app would show a decorative ground at all.\n <div className=\"isolate\">\n <div\n className={cn(\n \"fixed inset-0 -z-10 pointer-events-none\",\n resolvedTheme.backgroundLayer.classes\n )}\n style={{\n background: resolvedTheme.backgroundLayer.background,\n ...(resolvedTheme.backgroundLayer.opacity != null && { opacity: resolvedTheme.backgroundLayer.opacity }),\n }}\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n {children}\n </ComponentsViewportProvider>\n </MotionConfig>\n </MaterialRuntimePolicyProvider>\n </UIContext.Provider>\n );\n}\n\n/**\n * Transform app components configuration based on current breakpoint\n * Handle each ApplicationLevelComponentType case by case\n */\nfunction transformAppComponentsForBreakpoint(\n appComponents: any,\n currentBreakpoint: ViewportBreakpoint,\n logger: any\n) {\n const transformed: any = {};\n\n // MENUBAR - boolean, \"FIXED\"/\"OVERLAY\", responsive array, or object with hostedComponents\n const menubarConfig = appComponents[ApplicationLevelComponentType.MENUBAR];\n if (typeof menubarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else if (typeof menubarConfig === 'string') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else if (Array.isArray(menubarConfig)) {\n const matching = menubarConfig.find(config => config.breakpoint === currentBreakpoint);\n transformed[ApplicationLevelComponentType.MENUBAR] = matching?.responsivePolicy || \"FIXED\";\n } else if (menubarConfig && typeof menubarConfig === 'object') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else {\n transformed[ApplicationLevelComponentType.MENUBAR] = \"FIXED\";\n }\n\n // TOOLBAR - boolean or object with per-launcher tools[]\n transformed[ApplicationLevelComponentType.TOOLBAR] = appComponents[ApplicationLevelComponentType.TOOLBAR] || false;\n\n // HOTKEY - boolean or object with per-launcher bindings[]\n transformed[ApplicationLevelComponentType.HOTKEY] = appComponents[ApplicationLevelComponentType.HOTKEY] || false;\n\n // NOTIFICATION_CENTER - boolean\n transformed[ApplicationLevelComponentType.NOTIFICATION_CENTER] = Boolean(appComponents[ApplicationLevelComponentType.NOTIFICATION_CENTER]);\n\n // ACTIVITY_BAR - boolean or object with desktopRendering/mobileRendering\n const activityBarConfig = appComponents[ApplicationLevelComponentType.ACTIVITY_BAR];\n if (activityBarConfig && typeof activityBarConfig === 'object') {\n transformed[ApplicationLevelComponentType.ACTIVITY_BAR] = activityBarConfig;\n } else {\n transformed[ApplicationLevelComponentType.ACTIVITY_BAR] = Boolean(activityBarConfig);\n }\n\n // UTILITY_PANEL - boolean or object with items/position\n const utilityPanelConfig = appComponents[ApplicationLevelComponentType.UTILITY_PANEL];\n if (utilityPanelConfig && typeof utilityPanelConfig === 'object') {\n transformed[ApplicationLevelComponentType.UTILITY_PANEL] = utilityPanelConfig;\n } else {\n transformed[ApplicationLevelComponentType.UTILITY_PANEL] = Boolean(utilityPanelConfig);\n }\n\n // SIDEBAR - boolean or object with placement/collapsible/responsiveBreakpoint/responsivePolicy + per-launcher content\n const sidebarConfig = appComponents[ApplicationLevelComponentType.SIDEBAR];\n if (typeof sidebarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.SIDEBAR] = sidebarConfig;\n } else if (sidebarConfig && typeof sidebarConfig === 'object') {\n const { responsivePolicy, collapsible, ...sidebarRest } = sidebarConfig;\n transformed[ApplicationLevelComponentType.SIDEBAR] = {\n ...sidebarRest,\n collapsible: collapsible !== false,\n policy: (responsivePolicy as SidebarResponsivePolicy) || SidebarResponsivePolicy.BURGER,\n };\n } else {\n transformed[ApplicationLevelComponentType.SIDEBAR] = false;\n }\n\n // COMMAND_MENU - boolean or object with behavioral config + per-launcher commands[]\n transformed[ApplicationLevelComponentType.COMMAND_MENU] = appComponents[ApplicationLevelComponentType.COMMAND_MENU] || false;\n\n // QUICK_ACTION_BUTTON - boolean, \"FLOATING\", or object with per-launcher actions[]\n const quickActionConfig = appComponents[ApplicationLevelComponentType.QUICK_ACTION_BUTTON];\n if (quickActionConfig === 'FLOATING') {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = 'FLOATING';\n } else if (quickActionConfig && typeof quickActionConfig === 'object') {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = quickActionConfig;\n } else {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = Boolean(quickActionConfig);\n }\n\n // QUICK_SWITCHER - boolean only; scope fields live in appScope.fields\n transformed[ApplicationLevelComponentType.QUICK_SWITCHER] =\n typeof appComponents[ApplicationLevelComponentType.QUICK_SWITCHER] === 'boolean'\n ? appComponents[ApplicationLevelComponentType.QUICK_SWITCHER]\n : false;\n\n // CONTROL_PANEL - boolean or object with per-launcher items[]\n transformed[ApplicationLevelComponentType.CONTROL_PANEL] = appComponents[ApplicationLevelComponentType.CONTROL_PANEL] || false;\n\n // STATUS_BAR - boolean, VerticalPlacement string, or object with config fields\n const statusBarConfig = appComponents[ApplicationLevelComponentType.STATUS_BAR];\n if (typeof statusBarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else if (typeof statusBarConfig === 'string') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else if (statusBarConfig && typeof statusBarConfig === 'object') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = false;\n }\n\n // USER_DROPDOWN - from original schema (boolean or object)\n transformed[ApplicationLevelComponentType.USER_DROPDOWN] = appComponents[ApplicationLevelComponentType.USER_DROPDOWN] || false;\n\n\n // NAVIGATION_CONTROL - from original schema (boolean or object)\n transformed[ApplicationLevelComponentType.NAVIGATION_CONTROL] = appComponents[ApplicationLevelComponentType.NAVIGATION_CONTROL] || false;\n\n logDebug('App components transformed case by case', {\n breakpoint: currentBreakpoint,\n transformedComponents: Object.keys(transformed)\n });\n\n return transformed;\n}\n\n// useUI hook is now in separate file: ./useUI.ts\n// This separation is required for React Fast Refresh compatibility\n"]}
|
|
1
|
+
{"version":3,"file":"UIContext.js","sourceRoot":"","sources":["../../../../../src/core/ui/UIContext.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * UI Context\n * Provides simplified UI configuration with abstracted breakpoints\n */\n\nimport React, { createContext, ReactNode, useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { MotionConfig } from 'motion/react';\nimport { z } from 'zod';\nimport type { AppConfiguration_Frontend } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport type { SettingsHubConfig } from '~wildo-frontend-lib/core/config/settings-hub.frontend.schemas';\nimport type { ShellIdentity } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport { ViewportBreakpoint, getViewportBreakpoint } from '@wildo-ai/zod-decorators';\nimport { UserTheme, UserPreferences, describeCaughtError } from '@wildo-ai/saas-models';\nimport { type NavigationLayout } from '@wildo-ai/saas-models';\nimport type { CompositeViewDefinition } from '~wildo-frontend-lib/core/config/composite-view.schemas';\nimport type { OnboardingViewDefinition } from '~wildo-frontend-lib/core/config/onboarding-view.frontend.schemas';\nimport { ApplicationLevelComponentType } from '~wildo-frontend-lib/core/config/app-level-components.frontend.schemas';\nimport { SidebarResponsivePolicy } from '~wildo-frontend-lib/core/config/launcher-items.frontend.schemas';\nimport type { FullCustomViewDefinition } from '~wildo-frontend-lib/core/config/full-custom-view.schemas';\nimport type { FlowsActorsViewDefinition } from '~wildo-frontend-lib/core/config/flows-actors-view.schemas';\nimport type { HomeDefinition } from '~wildo-frontend-lib/core/config/app-configuration-frontend.schemas';\nimport {\n DesignSystemToken,\n getDesignTokenValue,\n UIBehavior,\n SpacingSemantic,\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n FRAMEWORK_DEFAULT_SURFACE_POLICIES,\n ShellAppearance,\n SidebarCompactLabelMode,\n ActionLabelDisplayMode,\n MaterialProfileRole,\n} from '@wildo-ai/presets-components-models';\nimport type {\n ComponentStyleTheme,\n ChartStylePreset,\n DesignSystemConfiguration,\n DesignTokenConfiguration,\n DeepPartialSurfacePolicy,\n SurfacePolicy,\n UIBehaviorRecipe,\n MaterialProfile,\n} from '@wildo-ai/presets-components-models';\nimport {\n applyDesignSystemConfiguration,\n clearAppliedDesignTokens,\n darkModeUtils,\n loadFontsFromTypography,\n mergeDesignSystemConfiguration,\n} from '~wildo-frontend-lib/core/ui/design-token.utils';\nimport { DEFAULT_CHART_STYLE_PRESET } from '~wildo-frontend-lib/core/ui/chart-style-defaults';\nimport { defaultTheme } from '~wildo-frontend-lib/core/ui/themes/default.theme';\nimport { cn } from '~wildo-frontend-lib/core/ui/cn';\nimport { envLoader } from '~wildo-frontend-lib/core/runtime/env-variable-loader.frontend.service';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\nimport { UIConfiguration } from '~wildo-frontend-lib/core/ui/ui.frontend.schemas';\nimport { mergeSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { MaterialRuntimePolicyProvider } from '~wildo-frontend-lib/core/ui/material-runtime';\n\n// =============================================================================\n// RECIPE UTILITIES\n// =============================================================================\n\nconst EMPTY_RECIPE: UIBehaviorRecipe = {\n base: '',\n states: {},\n motion: {},\n};\n\nfunction resolveRecipe(\n theme: ComponentStyleTheme,\n behavior: UIBehavior,\n variant?: string,\n): UIBehaviorRecipe {\n switch (behavior) {\n case UIBehavior.INTERACTIVE:\n return theme.interactive[variant as InteractiveVariant ?? InteractiveVariant.PRIMARY] ?? EMPTY_RECIPE;\n case UIBehavior.SURFACE:\n return theme.surface[variant as SurfaceVariant ?? SurfaceVariant.BASE] ?? EMPTY_RECIPE;\n case UIBehavior.FORM_CONTROL:\n return theme.formControl[variant as FormControlVariant ?? FormControlVariant.DEFAULT] ?? EMPTY_RECIPE;\n case UIBehavior.INDICATOR:\n return theme.indicator[variant as IndicatorVariant ?? IndicatorVariant.NEUTRAL] ?? EMPTY_RECIPE;\n case UIBehavior.SELECTABLE:\n return theme.selectable[variant as SelectableVariant ?? SelectableVariant.FILLED] ?? EMPTY_RECIPE;\n case UIBehavior.OVERLAY_BACKDROP:\n return theme.overlayBackdrop;\n case UIBehavior.DIVIDER:\n return theme.divider[variant as DividerVariant ?? DividerVariant.DEFAULT] ?? EMPTY_RECIPE;\n case UIBehavior.SKELETON:\n return theme.skeleton;\n case UIBehavior.LOADING_SPINNER:\n return theme.loadingSpinner;\n case UIBehavior.LOADING_OVERLAY:\n return theme.loadingOverlay;\n case UIBehavior.TYPOGRAPHY:\n return theme.typography[variant as TypographyVariant ?? TypographyVariant.BODY] ?? EMPTY_RECIPE;\n default:\n return EMPTY_RECIPE;\n }\n}\n\n/**\n * Compose a single className string from a recipe's base, all standard states,\n * size, and motion.\n *\n * **Note:** `highlighted` is intentionally excluded. It is a menu-item-specific\n * state (Radix `data-highlighted`) that must be applied selectively by menu\n * components. Including it here would add undesired focus-bg styles to regular\n * interactive elements like buttons.\n */\nfunction composeClasses(recipe: UIBehaviorRecipe, size?: string): string {\n const parts: (string | undefined)[] = [\n recipe.base,\n recipe.states.hover,\n recipe.states.active,\n recipe.states.focus,\n recipe.states.disabled,\n recipe.states.selected,\n recipe.states.invalid,\n recipe.states.open,\n size ? recipe.sizes?.[size] : undefined,\n recipe.motion.transition,\n recipe.motion.enter,\n recipe.motion.exit,\n ];\n return parts.filter(Boolean).join(' ');\n}\n\nfunction mergeThemeRequiredCustomTokens(\n tokens: DesignSystemConfiguration | undefined,\n theme: ComponentStyleTheme | undefined,\n): DesignSystemConfiguration | undefined {\n if (\n !tokens\n || !theme?.requiredCustomTokens\n || Object.keys(theme.requiredCustomTokens).length === 0\n ) {\n return tokens;\n }\n\n // Theme-owned custom tokens are part of the active visual contract.\n // They must be merged into the runtime-applied design system so recipes that\n // reference custom CSS variables remain self-contained when the theme is used.\n return mergeDesignSystemConfiguration(tokens, {\n customTokens: theme.requiredCustomTokens,\n });\n}\n\n// =============================================================================\n// DESIGN SYSTEM RUNTIME VARIABLES\n// =============================================================================\n\nfunction getThemeRuntimeVariableEntries(theme: ComponentStyleTheme): Array<[string, string]> {\n const entries: Array<[string, string]> = [];\n\n if (theme.spacing) {\n for (const [semantic, value] of Object.entries(theme.spacing) as Array<[SpacingSemantic, string]>) {\n if (value) {\n entries.push([`--${semantic}`, value]);\n }\n }\n }\n\n if (theme.radius) {\n entries.push(['--radius', theme.radius]);\n }\n\n return entries;\n}\n\n// =============================================================================\n// VIEWPORT CONTEXT & PROVIDER\n// =============================================================================\n\nconst RESIZE_DEBOUNCE_MS: number = 150;\nconst SSR_DEFAULT_WIDTH: number = 1280;\n\nexport interface ComponentsViewportContextType {\n currentBreakpoint: ViewportBreakpoint;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n viewportWidth: number;\n isTouch: boolean;\n prefersReducedMotion: boolean;\n isMac: boolean;\n isInitialized: boolean;\n}\n\nexport interface ComponentsViewportProviderProps {\n children: ReactNode;\n currentBreakpoint?: ViewportBreakpoint;\n viewportWidth?: number;\n isTouch?: boolean;\n prefersReducedMotion?: boolean;\n isMac?: boolean;\n}\n\nfunction detectIsTouch(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(pointer: coarse)').matches;\n}\n\nfunction detectPrefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nfunction detectIsMac(): boolean {\n if (typeof navigator === 'undefined') return false;\n if ('userAgentData' in navigator && (navigator as any).userAgentData?.platform) {\n return (navigator as any).userAgentData.platform === 'macOS';\n }\n return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nfunction getWindowWidth(): number {\n if (typeof window === 'undefined') return SSR_DEFAULT_WIDTH;\n return window.innerWidth;\n}\n\nfunction useWindowWidth(): number {\n const [width, setWidth] = useState<number>(getWindowWidth);\n const resizeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleResize = useCallback((): void => {\n if (typeof window === 'undefined') {\n return;\n }\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n resizeTimerRef.current = setTimeout(() => {\n setWidth(window.innerWidth);\n resizeTimerRef.current = null;\n }, RESIZE_DEBOUNCE_MS);\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n };\n }, [handleResize]);\n\n return width;\n}\n\nconst ComponentsViewportContext = createContext<ComponentsViewportContextType | undefined>(undefined);\n\nexport const ComponentsViewportProvider: React.FC<ComponentsViewportProviderProps> = ({\n children,\n currentBreakpoint: injectedBreakpoint,\n viewportWidth: injectedWidth,\n isTouch: injectedIsTouch,\n prefersReducedMotion: injectedPrefersReducedMotion,\n isMac: injectedIsMac,\n}) => {\n const isInjected = injectedBreakpoint !== undefined;\n\n const [standaloneWidth, setStandaloneWidth] = useState<number>(getWindowWidth);\n const resizeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleResize = useCallback((): void => {\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n resizeTimerRef.current = setTimeout(() => {\n setStandaloneWidth(window.innerWidth);\n resizeTimerRef.current = null;\n }, RESIZE_DEBOUNCE_MS);\n }, []);\n\n useEffect(() => {\n if (isInjected) return;\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n if (resizeTimerRef.current !== null) {\n clearTimeout(resizeTimerRef.current);\n }\n };\n }, [isInjected, handleResize]);\n\n const [standaloneIsTouch, setStandaloneIsTouch] = useState<boolean>(detectIsTouch);\n\n useEffect(() => {\n if (isInjected) return;\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(pointer: coarse)');\n const handler = (e: MediaQueryListEvent): void => setStandaloneIsTouch(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [isInjected]);\n\n const [standaloneReducedMotion, setStandaloneReducedMotion] = useState<boolean>(detectPrefersReducedMotion);\n\n useEffect(() => {\n if (isInjected) return;\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const handler = (e: MediaQueryListEvent): void => setStandaloneReducedMotion(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [isInjected]);\n\n const vpViewportWidth = isInjected ? (injectedWidth ?? SSR_DEFAULT_WIDTH) : standaloneWidth;\n const vpCurrentBreakpoint = isInjected ? injectedBreakpoint : getViewportBreakpoint(standaloneWidth);\n const vpIsTouch = isInjected ? (injectedIsTouch ?? false) : standaloneIsTouch;\n const vpPrefersReducedMotion = isInjected ? (injectedPrefersReducedMotion ?? false) : standaloneReducedMotion;\n const vpIsMac = injectedIsMac ?? detectIsMac();\n\n const vpIsMobile = vpCurrentBreakpoint === ViewportBreakpoint.MOBILE;\n const vpIsTablet = vpCurrentBreakpoint === ViewportBreakpoint.VERT_TABLET;\n const vpIsDesktop = vpCurrentBreakpoint === ViewportBreakpoint.DESKTOP;\n\n const value: ComponentsViewportContextType = useMemo(\n () => ({\n currentBreakpoint: vpCurrentBreakpoint,\n isMobile: vpIsMobile,\n isTablet: vpIsTablet,\n isDesktop: vpIsDesktop,\n viewportWidth: vpViewportWidth,\n isTouch: vpIsTouch,\n prefersReducedMotion: vpPrefersReducedMotion,\n isMac: vpIsMac,\n isInitialized: true,\n }),\n [vpCurrentBreakpoint, vpIsMobile, vpIsTablet, vpIsDesktop, vpViewportWidth, vpIsTouch, vpPrefersReducedMotion, vpIsMac],\n );\n\n return (\n <ComponentsViewportContext.Provider value={value}>\n {children}\n </ComponentsViewportContext.Provider>\n );\n};\n\n// =============================================================================\n// UI CONTEXT\n// =============================================================================\n\n/**\n * UI Context State\n * Exported for use in separate hook file (Fast Refresh compatibility)\n */\nexport interface UIContextType {\n // Current complete UI configuration\n UIConfig : UIConfiguration | undefined;\n\n // Direct access to frontend sub-configurations\n navigationLayout?: NavigationLayout;\n appComponentsConfiguration?: UIConfiguration['appComponentsConfiguration'];\n designSystemConfiguration?: UIConfiguration['designSystemConfiguration'];\n\n // These are not breakpoint-dependent, use raw types\n compositeViews?: CompositeViewDefinition[];\n onboardingViews?: OnboardingViewDefinition[];\n fullCustomViews?: FullCustomViewDefinition[];\n flowsActorsViews?: FlowsActorsViewDefinition[];\n homeDefinition?: HomeDefinition;\n /**\n * The application's authored settings rail. Exposed here so\n * `useSettingsHubConfig` reads the SAME frontend configuration every other\n * sub-config comes from, rather than reaching for a framework default.\n */\n settingsHub?: SettingsHubConfig;\n /**\n * The identity THIS SURFACE presents, when it is not the application it talks\n * to. Exposed here so `useBrandIdentity` — and any future shell affordance\n * that names the product — reads it from the same resolved frontend\n * configuration every other sub-config comes from. Absent means \"I am the\n * application's own frontend\", and the application config answers instead.\n */\n shellIdentity?: ShellIdentity;\n\n // Dark mode utilities\n isDark: boolean;\n setDark: (enabled: boolean) => void;\n toggleDark: () => void;\n /**\n * The user's chosen theme PREFERENCE (`LIGHT` / `DARK` / `AUTO`), distinct\n * from `isDark` (the resolved boolean). `AUTO` follows the OS scheme. Read this\n * to drive a 3-way theme selector; `isDark` only tells you the resolved value.\n */\n themePreference: UserTheme;\n /**\n * Set the theme preference and apply it. Unlike `setDark` (LIGHT/DARK only),\n * this handles all three `UserTheme` values — `AUTO` resolves against the OS\n * scheme — and keeps `isDark` + `themePreference` in sync.\n */\n setTheme: (theme: UserTheme) => void;\n\n // Preferences injected into UIProvider from upstream contexts/events\n uiPreferences: UserPreferences['ui'] | null;\n\n // Preference getters\n getUiPreferences: () => UserPreferences['ui'] | null;\n\n // ── Viewport ──\n currentBreakpoint: ViewportBreakpoint;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n viewportWidth: number;\n isTouch: boolean;\n prefersReducedMotion: boolean;\n isMac: boolean;\n\n // ── Design System ──\n getRecipe: (behavior: UIBehavior, variant?: string) => UIBehaviorRecipe;\n getComposedClasses: (behavior: UIBehavior, variant?: string, size?: string) => string;\n /** Resolve a recipe-selected material role through the active theme. */\n getMaterialProfile?: (role: MaterialProfileRole | undefined) => MaterialProfile | undefined;\n getSurfacePolicy?: (\n variant: SurfaceVariant,\n callSiteOverride?: DeepPartialSurfacePolicy,\n parentPolicy?: SurfacePolicy,\n ) => SurfacePolicy;\n getTokenValue: (token: DesignSystemToken) => string;\n getCssVariable: (token: DesignSystemToken) => string;\n getChartStylePreset: () => ChartStylePreset;\n designTheme: { id: string; name: string };\n /**\n * Resolved theme-level shell chrome policy (defaulted to `SEPARATED` when the\n * active theme doesn't declare one). App-shell region presets (sidebar,\n * menubar, toolbar, activity/status bars) and the navigation content zones\n * branch on this to render transparent regions in `CONTINUOUS` mode.\n */\n shellAppearance: ShellAppearance;\n /**\n * Resolved theme-level collapsed-sidebar label policy (defaulted to\n * `ICON_ONLY`). Consumed by the sidebar preset (item layout) and\n * `useSidebarBehavior` (default collapsed width).\n */\n sidebarCompactLabelMode: SidebarCompactLabelMode;\n /**\n * Resolved app-wide default for how action buttons render their label\n * (defaulted to `TOOLTIP`). `ActionBar` reads this whenever a caller doesn't\n * pass an explicit `labelDisplayMode`, so every action cluster honors the\n * app policy; per-resource-view overrides pass an explicit value instead.\n */\n actionLabelDisplayMode: ActionLabelDisplayMode;\n}\n\n/**\n * UI Context\n * Exported for use in separate hook file (Fast Refresh compatibility)\n * @internal - Use useUI() hook instead of accessing this directly\n */\nexport const UIContext: React.Context<UIContextType | undefined> = createContext<UIContextType | undefined>(undefined);\nconst logger: LoggerFrontendService = LoggerFrontendService.getLogger();\nconst logDebug = logger.debugByType('UIContext');\nlogger.setDebugTypeLogging('UIContext', false);\n\n/**\n * The UI runtime's inputs are PROPS, not an ambient context.\n *\n * `UIProvider` deliberately does not call `useApplication()`/`useEventBus()` itself: keeping it\n * independent of the application runtime is what lets the focused UI tests (theme tokens, dark-mode\n * preference, isolate layering) mount it with synthetic values instead of a whole provider tree.\n *\n * That independence used to be bought with a context — `FrontendHostUIRuntimeBindingProvider` plus a\n * hook, a type and a throw — extracted so a non-SaaS browser host could supply a different\n * implementation. That host was the application-creation workbench; it was deleted 2026-08-23, and\n * the seam was then measured to have ZERO polymorphism: one consumer, and two \"different\" suppliers\n * (`SaaSUIRuntimeProvider`, `TestUIProvider`) that were the same `useApplication()` + `useEventBus()`\n * code written twice. Every mount site had the provider as this component's IMMEDIATE parent, so the\n * context was carrying values one level. Props buy the same independence for three lines.\n */\nexport interface UIProviderProps {\n children: ReactNode;\n /** Resolved, schema-validated frontend configuration. */\n frontendConfiguration: AppConfiguration_Frontend | undefined;\n /** Subscribe to user-preference changes; returns an unsubscribe. */\n subscribeToUserPreferences: (listener: (preferences: UserPreferences['ui'] | null) => void) => () => void;\n /** Acknowledge that the UI runtime has completed startup. */\n markInitialized: () => void;\n}\n\nexport function UIProvider({\n children,\n frontendConfiguration,\n subscribeToUserPreferences,\n markInitialized,\n}: UIProviderProps): React.ReactElement {\n const width = useWindowWidth();\n\n logDebug('frontendConfiguration available:', !!frontendConfiguration);\n\n // Local state\n const [UIConfig, setUIConfig] = useState<UIConfiguration>();\n const [isDark, setIsDarkState] = useState<boolean>(() => darkModeUtils.resolvePreferredDarkMode());\n const [themePreference, setThemePreferenceState] = useState<UserTheme>(\n () => darkModeUtils.getStoredPreference() ?? UserTheme.AUTO,\n );\n const themePreferenceRef = useRef<UserTheme>(themePreference);\n const [currentFrontendConfig, setCurrentFrontendConfig] = useState<AppConfiguration_Frontend>();\n const [uiPreferences, setUiPreferences] = useState<UserPreferences['ui'] | null>(null);\n\n /**\n * Commit the semantic preference to both React state and a synchronous ref.\n * The ref closes the passive-effect gap during which the previous system-theme\n * listener could otherwise still observe AUTO immediately after the user\n * selected an explicit LIGHT or DARK preference.\n */\n const commitThemePreference = useCallback((theme: UserTheme): void => {\n themePreferenceRef.current = theme;\n setThemePreferenceState(theme);\n }, []);\n\n // Determine current viewport breakpoint using presets-components-models ViewportBreakpoint\n const currentBreakpoint = getViewportBreakpoint(width);\n\n // ── Device & platform detection ──\n // Pointer modality is not stable for the lifetime of a page: hybrid laptops\n // can switch between trackpad/mouse and direct touch without a reload. Keep\n // this source live because Glass uses it to choose interaction intensity and\n // every touch-target recipe relies on the same `(pointer: coarse)` truth.\n const [isTouch, setIsTouch] = useState<boolean>(detectIsTouch);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(pointer: coarse)');\n const handler = (event: MediaQueryListEvent): void => setIsTouch(event.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n const isMac = useMemo(() => {\n if (typeof navigator === 'undefined') return false;\n if ('userAgentData' in navigator && (navigator as any).userAgentData?.platform) {\n return (navigator as any).userAgentData.platform === 'macOS';\n }\n return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent);\n }, []);\n\n const [prefersReducedMotion, setPrefersReducedMotion] = useState<boolean>(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const handler = (e: MediaQueryListEvent): void => setPrefersReducedMotion(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, []);\n\n // Dark mode utilities\n const setDark = useCallback((enabled: boolean): void => {\n darkModeUtils.setDark(enabled);\n setIsDarkState(enabled);\n // A direct dark toggle is an explicit LIGHT/DARK preference (never AUTO).\n commitThemePreference(enabled ? UserTheme.DARK : UserTheme.LIGHT);\n }, [commitThemePreference]);\n\n const toggleDark = useCallback((): boolean => {\n const newState = !isDark;\n setDark(newState);\n return newState;\n }, [isDark, setDark]);\n\n /**\n * Complete 3-way theme setter. Applies the chosen preference, persists it, and\n * keeps both `isDark` and `themePreference` in sync — including `AUTO`, which\n * `setDark` cannot express. Mirrors the `USER_PREFERENCES_CHANGED` handler.\n */\n const setTheme = useCallback((theme: UserTheme): void => {\n if (theme === UserTheme.DARK) {\n darkModeUtils.setDark(true);\n setIsDarkState(true);\n } else if (theme === UserTheme.LIGHT) {\n darkModeUtils.setDark(false);\n setIsDarkState(false);\n } else {\n const prefersDark = darkModeUtils.setAuto();\n setIsDarkState(prefersDark);\n }\n commitThemePreference(theme);\n }, [commitThemePreference]);\n\n // Initialize dark mode on mount with cleanup\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const initialDarkMode = darkModeUtils.initDark();\n setIsDarkState(initialDarkMode);\n commitThemePreference(darkModeUtils.getStoredPreference() ?? UserTheme.AUTO);\n logDebug('Dark mode initialized', { isDark: initialDarkMode });\n }\n\n // Cleanup function for memory management\n return () => {\n darkModeUtils.cleanup();\n };\n }, [commitThemePreference, logger]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handleSystemThemeChange = (): void => {\n /**\n * The in-memory semantic preference is authoritative. Reading storage\n * here made a fresh/private browser session internally contradictory:\n * React correctly exposed AUTO for the missing value, while the listener\n * treated that same missing value as \"not auto\" and ignored macOS changes.\n */\n if (themePreferenceRef.current !== UserTheme.AUTO) {\n return;\n }\n\n const nextDarkMode = darkModeUtils.setAuto();\n setIsDarkState(nextDarkMode);\n logDebug('Dark mode updated from system preference', { isDark: nextDarkMode });\n };\n\n mql.addEventListener('change', handleSystemThemeChange);\n return () => mql.removeEventListener('change', handleSystemThemeChange);\n }, [logDebug]);\n\n // UserOrgsProvider lives deeper in the tree and injects UI preferences upward\n // through the event bus. Keep the UI layer compatible with anonymous / not-yet-\n // connected sessions by treating the absence of that event as \"no preferences\".\n useEffect(() => {\n const unsubscribe = subscribeToUserPreferences((preferences) => {\n setUiPreferences(preferences);\n\n // Apply UI theme preferences\n if (preferences?.theme) {\n const theme = preferences.theme as UserTheme;\n logDebug('Applying UI theme preference from UserOrgsContext event', { theme });\n\n if (theme === UserTheme.DARK) {\n setDark(true);\n } else if (theme === UserTheme.LIGHT) {\n setDark(false);\n } else if (theme === UserTheme.AUTO) {\n const prefersDark = darkModeUtils.setAuto();\n setIsDarkState(prefersDark);\n }\n commitThemePreference(theme);\n }\n });\n\n return unsubscribe;\n }, [commitThemePreference, subscribeToUserPreferences, setDark, logDebug]);\n\n // Preference getter\n const getUiPreferences = useCallback((): UserPreferences['ui'] | null => {\n return uiPreferences;\n }, [uiPreferences]);\n\n // Initialize UI configuration\n useEffect(() => {\n logDebug('useEffect triggered - checking frontendConfiguration');\n\n if (!frontendConfiguration) {\n logDebug('Frontend configuration not available yet');\n logger.warn('[UIContext] Frontend configuration not available');\n return;\n }\n\n const envConfig = envLoader.loadEnvironmentConfig();\n if (!envConfig) {\n logger.warn('[UIContext] Environment configuration not available');\n return;\n }\n\n // Transform complex responsive configuration to breakpoint-specific configuration\n const transformedAppComponents = transformAppComponentsForBreakpoint(\n frontendConfiguration.appComponentsConfiguration,\n currentBreakpoint,\n logger\n );\n\n const tempUIConfig: UIConfiguration = {\n currentBreakpoint,\n navigationLayout: frontendConfiguration.navigationLayout,\n appComponentsConfiguration: transformedAppComponents,\n designSystemConfiguration: frontendConfiguration.designSystemConfiguration,\n\n isMobile: currentBreakpoint === ViewportBreakpoint.MOBILE,\n isTablet: currentBreakpoint === ViewportBreakpoint.VERT_TABLET,\n isDesktop: currentBreakpoint === ViewportBreakpoint.DESKTOP\n };\n\n setUIConfig(tempUIConfig);\n setCurrentFrontendConfig(frontendConfiguration);\n logDebug('UIConfig set successfully', {\n breakpoint: currentBreakpoint,\n frontendServiceName: envConfig.frontendServiceName,\n hasNavigationLayout: !!frontendConfiguration.navigationLayout,\n transformedComponents: Object.keys(transformedAppComponents).length,\n hasDesignSystemConfiguration: !!tempUIConfig.designSystemConfiguration,\n });\n }, [frontendConfiguration, currentBreakpoint, logger]);\n\n const resolvedTheme = UIConfig?.designSystemConfiguration?.theme ?? defaultTheme;\n const resolvedDesignSystemConfiguration = useMemo(\n () => mergeThemeRequiredCustomTokens(UIConfig?.designSystemConfiguration, resolvedTheme),\n [UIConfig?.designSystemConfiguration, resolvedTheme],\n );\n const resolvedUIConfig = useMemo(\n () => UIConfig\n ? {\n ...UIConfig,\n designSystemConfiguration: resolvedDesignSystemConfiguration,\n }\n : undefined,\n [UIConfig, resolvedDesignSystemConfiguration],\n );\n\n const themeRuntimeVariables = useMemo(\n () => getThemeRuntimeVariableEntries(resolvedTheme),\n [resolvedTheme],\n );\n\n // Re-apply design tokens when the resolved design system or active mode changes.\n useEffect(() => {\n if (!resolvedDesignSystemConfiguration) {\n return;\n }\n\n applyDesignSystemConfiguration(resolvedDesignSystemConfiguration, {\n dark: isDark,\n logger,\n themeRuntimeVariables,\n });\n logDebug('Design tokens applied', {\n isDark,\n hasStandardTokens: !!resolvedDesignSystemConfiguration.tokens,\n hasCustomTokens: !!resolvedDesignSystemConfiguration.customTokens,\n });\n\n // On unmount, strip every CSS variable we wrote so the document\n // doesn't keep stale tokens (HMR, SPA navigation across tenants, etc.).\n // Re-applies during the lifetime of the provider are handled internally\n // by `applyDesignSystemConfiguration`'s own diff.\n return () => {\n clearAppliedDesignTokens();\n };\n }, [resolvedDesignSystemConfiguration, isDark, logger, themeRuntimeVariables]);\n\n // Load typography fonts once per typography configuration, then mark the UI layer ready.\n useEffect(() => {\n const typography = resolvedDesignSystemConfiguration?.typography;\n let cancelled = false;\n\n const initializeFonts = async (): Promise<void> => {\n if (!typography) {\n markInitialized();\n return;\n }\n\n logDebug('Loading typography fonts...');\n\n try {\n const result = await loadFontsFromTypography(typography, {\n timeout: 5000,\n waitForLoad: true,\n logger: {\n debug: (msg, ctx) => logDebug(msg, ctx),\n warn: (msg, ctx) => logger.warn(msg, ctx),\n error: (msg, ctx) => logger.error(msg, ctx),\n },\n });\n\n if (cancelled) {\n return;\n }\n\n logDebug('Typography fonts loaded', {\n success: result.success,\n loadedFonts: result.loadedFonts,\n failedFonts: result.failedFonts,\n loadTimeMs: result.loadTimeMs,\n });\n } catch (error) {\n if (cancelled) {\n return;\n }\n\n logger.error('[UIContext] Font loading failed', {\n error: describeCaughtError(error),\n });\n }\n\n markInitialized();\n };\n\n void initializeFonts();\n\n return () => {\n cancelled = true;\n };\n }, [resolvedDesignSystemConfiguration?.typography, logger, markInitialized]);\n\n // ── Design system callbacks ──\n const getRecipe = useCallback(\n (behavior: UIBehavior, variant?: string): UIBehaviorRecipe => resolveRecipe(resolvedTheme, behavior, variant),\n [resolvedTheme],\n );\n\n const getComposedClasses = useCallback(\n (behavior: UIBehavior, variant?: string, size?: string): string => composeClasses(resolveRecipe(resolvedTheme, behavior, variant), size),\n [resolvedTheme],\n );\n\n const getMaterialProfile = useCallback(\n (role: MaterialProfileRole | undefined): MaterialProfile | undefined => (\n role ? resolvedTheme.materials?.[role] : undefined\n ),\n [resolvedTheme],\n );\n\n const getSurfacePolicy = useCallback(\n (\n variant: SurfaceVariant,\n callSiteOverride?: DeepPartialSurfacePolicy,\n parentPolicy?: SurfacePolicy,\n ): SurfacePolicy => {\n const frameworkDefault = FRAMEWORK_DEFAULT_SURFACE_POLICIES[variant];\n const themeDefault = resolvedTheme.surface[variant]?.policy;\n const appSurfacePolicies = resolvedDesignSystemConfiguration?.surfacePolicies as Partial<Record<SurfaceVariant, DeepPartialSurfacePolicy>> | undefined;\n\n return mergeSurfacePolicy(\n frameworkDefault,\n themeDefault,\n appSurfacePolicies?.[variant],\n callSiteOverride,\n {\n variant,\n parentPolicy,\n logger,\n },\n );\n },\n [resolvedDesignSystemConfiguration?.surfacePolicies, resolvedTheme],\n );\n\n const dsTokens = resolvedDesignSystemConfiguration;\n const getTokenValue = useCallback(\n (token: DesignSystemToken): string => {\n if (dsTokens?.tokens) {\n const cfg: DesignTokenConfiguration | undefined = dsTokens.tokens[token];\n if (cfg) return getDesignTokenValue(cfg, isDark ? 'dark' : 'light');\n }\n if (dsTokens?.customTokens) {\n const cfg: DesignTokenConfiguration | undefined = dsTokens.customTokens[token];\n if (cfg) return getDesignTokenValue(cfg, isDark ? 'dark' : 'light');\n }\n return `var(--${token})`;\n },\n [dsTokens, isDark],\n );\n\n const getCssVariable = useCallback((token: DesignSystemToken): string => `var(--${token})`, []);\n\n const getChartStylePreset = useCallback((): ChartStylePreset => resolvedTheme.chartStyle ?? DEFAULT_CHART_STYLE_PRESET, [resolvedTheme]);\n\n // ── Viewport convenience ──\n const isMobile = currentBreakpoint === ViewportBreakpoint.MOBILE;\n const isTablet = currentBreakpoint === ViewportBreakpoint.VERT_TABLET;\n const isDesktop = currentBreakpoint === ViewportBreakpoint.DESKTOP;\n\n const contextValue: UIContextType = {\n // Current complete UI configuration\n UIConfig: resolvedUIConfig,\n\n // Direct access to frontend sub-configurations\n navigationLayout: resolvedUIConfig?.navigationLayout,\n appComponentsConfiguration: resolvedUIConfig?.appComponentsConfiguration,\n designSystemConfiguration: resolvedDesignSystemConfiguration,\n compositeViews: currentFrontendConfig?.compositeViews,\n onboardingViews: currentFrontendConfig?.onboardingViews,\n fullCustomViews: currentFrontendConfig?.fullCustomViews,\n flowsActorsViews: currentFrontendConfig?.flowsActorsViews,\n homeDefinition: currentFrontendConfig?.homeDefinition,\n settingsHub: currentFrontendConfig?.settingsHub,\n shellIdentity: currentFrontendConfig?.shellIdentity,\n\n // Dark mode utilities\n isDark,\n setDark,\n toggleDark,\n themePreference,\n setTheme,\n\n // Preferences\n uiPreferences,\n getUiPreferences,\n\n // Viewport\n currentBreakpoint,\n isMobile,\n isTablet,\n isDesktop,\n viewportWidth: width,\n isTouch,\n prefersReducedMotion,\n isMac,\n\n // Design System\n getRecipe,\n getComposedClasses,\n getMaterialProfile,\n getSurfacePolicy,\n getTokenValue,\n getCssVariable,\n getChartStylePreset,\n designTheme: { id: resolvedTheme.id, name: resolvedTheme.name },\n shellAppearance: resolvedTheme.shellAppearance ?? ShellAppearance.SEPARATED,\n sidebarCompactLabelMode: resolvedTheme.sidebarCompactLabelMode ?? SidebarCompactLabelMode.ICON_ONLY,\n actionLabelDisplayMode: resolvedTheme.actionLabelDisplayMode ?? ActionLabelDisplayMode.TOOLTIP,\n };\n\n return (\n <UIContext.Provider value={contextValue}>\n <MaterialRuntimePolicyProvider policy={resolvedTheme.materialRuntimePolicy}>\n <MotionConfig reducedMotion=\"user\">\n <ComponentsViewportProvider\n currentBreakpoint={currentBreakpoint}\n viewportWidth={width}\n isTouch={isTouch}\n prefersReducedMotion={prefersReducedMotion}\n isMac={isMac}\n >\n {/*\n `children` (the WHOLE provider + router subtree) MUST keep a stable tree position\n across bootstrap, or it remounts. `resolvedTheme.backgroundLayer` starts falsy —\n the default theme has none — and flips truthy the moment `UIConfig` resolves an app\n theme that defines one (mid-bootstrap). An earlier version branched the ENTIRE node\n on that flip (`themed ? <div class=\"isolate\">…{children}</div> : children`), which\n moved `children` from a direct child of `ComponentsViewportProvider` to a grandchild\n under a NEW `<div>` — a different parent at that position, so React unmounted and\n remounted the entire app: every provider re-ran init, all i18n labels re-fetched,\n and one-shot effects double-fired (the OAuth2 `/auth/callback` code exchange fired a\n second time and its `consumable_token_already_consumed` 401 masked the successful\n first exchange, stranding an authenticated user on an error screen).\n\n Fix: render `children` at a FIXED positional index (index 1 below) in BOTH states,\n preceded by a slot that holds the decorative layer only when themed. React reconciles\n by index, so index 1 stays the same instance whether index 0 is `null` or the layer —\n `children` never remounts. When there is no background layer the output is exactly the\n previous bare-`children` shape (a `null` sibling renders nothing, adds no DOM box), so\n non-themed apps are byte-unchanged; only the themed path stops remounting.\n */}\n {resolvedTheme.backgroundLayer ? (\n // The `isolate` wrapper is load-bearing, not decorative. A `-z-10` child of the ROOT\n // stacking context paints BEFORE the body's own background fill (CSS painting order:\n // negative-z-index descendants of the root come before in-flow block backgrounds), so\n // any app with the standard `body { background: var(--background) }` rule would paint\n // an opaque rect OVER the layer and it would never be visible. Isolating here scopes\n // the layer's `-z-10` to THIS wrapper's stacking context (not the root); the wrapper\n // is an empty, zero-height in-flow block (its only child is `position:fixed`, out of\n // flow), so it is layout-neutral and paints AFTER the body background. Crucially the\n // wrapper contains ONLY the layer, never `children`, so `children` stay at a fixed\n // position across the bootstrap flip (see the note above).\n //\n // ⚠️ THE LAYER PAINTS ABOVE APP CONTENT, NOT BELOW IT — and every shell must account\n // for that. This comment used to claim the wrapper \"sits above the body fill but below\n // all app content (`children` follow it in paint order)\". That is FALSE, and it cost\n // #1204: `isolation: isolate` on a NON-POSITIONED element promotes this wrapper to the\n // z-index:0 painting level (CSS 2.1 painting order step 8), while ordinary in-flow\n // content paints at steps 3-5 underneath it. Being an earlier DOM sibling does not\n // lower it; DOM order only orders peers within the SAME painting level.\n //\n // So a surface is visible under a themed layer only if its content also reaches the\n // z-index:0 level. \"Incidentally\" is not enough, and both shells learned it: the wide\n // public layout's governed-document pages rendered as an empty gradient with the whole\n // document in the DOM (#1204), and the authenticated shell — where most texts happen to\n // sit under a positioned ancestor — hid its status bar's \"Connected\" (#1830). Both shells\n // now state it: `isolate` on the `<main>` elements of\n // `presets-components/src/components/app/public-layout-main-container.tsx`, and\n // `relative` (deliberately not `isolate`, see there) on the root of\n // `presets-components/src/components/app/app-layout-main-container.tsx`. The shell\n // baseline scenario pins it (T5 in `browser-shell-baseline`).\n //\n // Raising the layer BELOW content instead was considered and rejected: the shell fill\n // (`Surface` SHELL, opaque) sits at step 3, so a layer painted under content would be\n // hidden by every shell and no app would show a decorative ground at all.\n <div className=\"isolate\">\n <div\n className={cn(\n \"fixed inset-0 -z-10 pointer-events-none\",\n resolvedTheme.backgroundLayer.classes\n )}\n style={{\n background: resolvedTheme.backgroundLayer.background,\n ...(resolvedTheme.backgroundLayer.opacity != null && { opacity: resolvedTheme.backgroundLayer.opacity }),\n }}\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n {children}\n </ComponentsViewportProvider>\n </MotionConfig>\n </MaterialRuntimePolicyProvider>\n </UIContext.Provider>\n );\n}\n\n/**\n * Transform app components configuration based on current breakpoint\n * Handle each ApplicationLevelComponentType case by case\n */\nfunction transformAppComponentsForBreakpoint(\n appComponents: any,\n currentBreakpoint: ViewportBreakpoint,\n logger: any\n) {\n const transformed: any = {};\n\n // MENUBAR - boolean, \"FIXED\"/\"OVERLAY\", responsive array, or object with hostedComponents\n const menubarConfig = appComponents[ApplicationLevelComponentType.MENUBAR];\n if (typeof menubarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else if (typeof menubarConfig === 'string') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else if (Array.isArray(menubarConfig)) {\n const matching = menubarConfig.find(config => config.breakpoint === currentBreakpoint);\n transformed[ApplicationLevelComponentType.MENUBAR] = matching?.responsivePolicy || \"FIXED\";\n } else if (menubarConfig && typeof menubarConfig === 'object') {\n transformed[ApplicationLevelComponentType.MENUBAR] = menubarConfig;\n } else {\n transformed[ApplicationLevelComponentType.MENUBAR] = \"FIXED\";\n }\n\n // TOOLBAR - boolean or object with per-launcher tools[]\n transformed[ApplicationLevelComponentType.TOOLBAR] = appComponents[ApplicationLevelComponentType.TOOLBAR] || false;\n\n // HOTKEY - boolean or object with per-launcher bindings[]\n transformed[ApplicationLevelComponentType.HOTKEY] = appComponents[ApplicationLevelComponentType.HOTKEY] || false;\n\n // NOTIFICATION_CENTER - boolean\n transformed[ApplicationLevelComponentType.NOTIFICATION_CENTER] = Boolean(appComponents[ApplicationLevelComponentType.NOTIFICATION_CENTER]);\n\n // ACTIVITY_BAR - boolean or object with desktopRendering/mobileRendering\n const activityBarConfig = appComponents[ApplicationLevelComponentType.ACTIVITY_BAR];\n if (activityBarConfig && typeof activityBarConfig === 'object') {\n transformed[ApplicationLevelComponentType.ACTIVITY_BAR] = activityBarConfig;\n } else {\n transformed[ApplicationLevelComponentType.ACTIVITY_BAR] = Boolean(activityBarConfig);\n }\n\n // UTILITY_PANEL - boolean or object with items/position\n const utilityPanelConfig = appComponents[ApplicationLevelComponentType.UTILITY_PANEL];\n if (utilityPanelConfig && typeof utilityPanelConfig === 'object') {\n transformed[ApplicationLevelComponentType.UTILITY_PANEL] = utilityPanelConfig;\n } else {\n transformed[ApplicationLevelComponentType.UTILITY_PANEL] = Boolean(utilityPanelConfig);\n }\n\n // SIDEBAR - boolean or object with placement/collapsible/responsiveBreakpoint/responsivePolicy + per-launcher content\n const sidebarConfig = appComponents[ApplicationLevelComponentType.SIDEBAR];\n if (typeof sidebarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.SIDEBAR] = sidebarConfig;\n } else if (sidebarConfig && typeof sidebarConfig === 'object') {\n const { responsivePolicy, collapsible, ...sidebarRest } = sidebarConfig;\n transformed[ApplicationLevelComponentType.SIDEBAR] = {\n ...sidebarRest,\n collapsible: collapsible !== false,\n policy: (responsivePolicy as SidebarResponsivePolicy) || SidebarResponsivePolicy.BURGER,\n };\n } else {\n transformed[ApplicationLevelComponentType.SIDEBAR] = false;\n }\n\n // COMMAND_MENU - boolean or object with behavioral config + per-launcher commands[]\n transformed[ApplicationLevelComponentType.COMMAND_MENU] = appComponents[ApplicationLevelComponentType.COMMAND_MENU] || false;\n\n // QUICK_ACTION_BUTTON - boolean, \"FLOATING\", or object with per-launcher actions[]\n const quickActionConfig = appComponents[ApplicationLevelComponentType.QUICK_ACTION_BUTTON];\n if (quickActionConfig === 'FLOATING') {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = 'FLOATING';\n } else if (quickActionConfig && typeof quickActionConfig === 'object') {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = quickActionConfig;\n } else {\n transformed[ApplicationLevelComponentType.QUICK_ACTION_BUTTON] = Boolean(quickActionConfig);\n }\n\n // QUICK_SWITCHER - boolean only; scope fields live in appScope.fields\n transformed[ApplicationLevelComponentType.QUICK_SWITCHER] =\n typeof appComponents[ApplicationLevelComponentType.QUICK_SWITCHER] === 'boolean'\n ? appComponents[ApplicationLevelComponentType.QUICK_SWITCHER]\n : false;\n\n // CONTROL_PANEL - boolean or object with per-launcher items[]\n transformed[ApplicationLevelComponentType.CONTROL_PANEL] = appComponents[ApplicationLevelComponentType.CONTROL_PANEL] || false;\n\n // STATUS_BAR - boolean, a StatusBarPlacement string (top | bottom), or object with config fields\n const statusBarConfig = appComponents[ApplicationLevelComponentType.STATUS_BAR];\n if (typeof statusBarConfig === 'boolean') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else if (typeof statusBarConfig === 'string') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else if (statusBarConfig && typeof statusBarConfig === 'object') {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = statusBarConfig;\n } else {\n transformed[ApplicationLevelComponentType.STATUS_BAR] = false;\n }\n\n // USER_DROPDOWN - from original schema (boolean or object)\n transformed[ApplicationLevelComponentType.USER_DROPDOWN] = appComponents[ApplicationLevelComponentType.USER_DROPDOWN] || false;\n\n\n // NAVIGATION_CONTROL - from original schema (boolean or object)\n transformed[ApplicationLevelComponentType.NAVIGATION_CONTROL] = appComponents[ApplicationLevelComponentType.NAVIGATION_CONTROL] || false;\n\n logDebug('App components transformed case by case', {\n breakpoint: currentBreakpoint,\n transformedComponents: Object.keys(transformed)\n });\n\n return transformed;\n}\n\n// useUI hook is now in separate file: ./useUI.ts\n// This separation is required for React Fast Refresh compatibility\n"]}
|