@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-pricing-table.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BillingPlanChangePhase, useBillingPlanChange } from '~wildo-frontend-lib/core/billing/useBillingPlanChange'\nimport { PlanChangePreview } from './billing-plan-change-preview'\nimport { BillingStateSlice } from '@wildo-ai/saas-models'\nimport React, { useMemo, useCallback, useEffect, useRef } from 'react'\nimport type { MoneyValue } from '@wildo-ai/zod-decorators'\nimport { ProductType } from '@wildo-ai/saas-models'\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport type { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n'\nimport { useBillingSafe } from '~wildo-frontend-lib/core/billing/useBilling'\nimport { useSafeBillingActionExecutor } from '~wildo-frontend-lib/core/billing/useSafeBillingActionExecutor'\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage'\n\n// --- Contract ---\n\nexport interface PricingTableFeature {\n id: string\n label: string\n}\n\nexport interface PricingTableLimit {\n id: string\n label: string\n value: number\n}\n\nexport interface PricingTablePlan {\n key: string\n name: string\n description?: string\n planTier?: string\n sortOrder: number\n grantedFeatures: PricingTableFeature[]\n grantedLimits: PricingTableLimit[]\n isCurrent: boolean\n prices: Array<{\n priceId: string\n price: MoneyValue\n interval?: string\n isDefault: boolean\n }>\n isPopular?: boolean\n isFree?: boolean\n trialDays?: number\n}\n\nexport interface PricingTableProps {\n plans: PricingTablePlan[]\n currentPlanKey?: string | null\n onSelectPlan: (planKey: string, priceId: string) => void\n showIntervalToggle?: boolean\n /** Freeze plan selection while a confirmed mutation is in flight. */\n isSelectionDisabled?: boolean\n isLoading?: boolean\n unavailable?: boolean\n error?: string | null\n}\n\n// --- Wrapper ---\n\n/**\n * Wrapper props: `plans` / `onSelectPlan` are OPTIONAL here — the wrapper\n * derives plans from the billing product catalog and defaults plan selection to\n * checkout for new subscriptions and preview/confirmation for existing ones when omitted. The PRESET contract above keeps\n * them required: the wrapper always materializes them before resolving the\n * preset. NOTE: do NOT pass `plans={[]}` to \"let the context win\" — a provided\n * array (even empty) intentionally overrides the derived catalog.\n */\nexport type PricingTableWrapperProps = Omit<PricingTableProps, 'plans' | 'onSelectPlan'> &\n Partial<Pick<PricingTableProps, 'plans' | 'onSelectPlan'>> &\n ComponentPresetProps\n\nexport function PricingTable({ preset = CorePresetNames.DEFAULT, ...props }: PricingTableWrapperProps): React.JSX.Element | null {\n const billing = useBillingSafe()\n const toUserFacingErrorMessage = useUserFacingErrorMessage()\n const planChange = useBillingPlanChange(billing)\n const selectionTrigger = useRef<HTMLElement | null>(null)\n const hadPreview = useRef(false)\n useEffect(() => {\n const hasPreview = planChange.state.phase !== BillingPlanChangePhase.IDLE\n if (hadPreview.current && !hasPreview && selectionTrigger.current?.isConnected) selectionTrigger.current.focus()\n hadPreview.current = hasPreview\n }, [planChange.state.phase])\n useEffect(() => { if (props.onSelectPlan) planChange.cancel() }, [props.onSelectPlan, planChange.cancel])\n const runBillingActionSafely = useSafeBillingActionExecutor()\n const { tBillingProduct, tBillingFeature, tBillingLimit, isReady } = useI18n({\n keys: ['billing_products', 'billing_features', 'billing_limits'],\n })\n const Component = createComponentResolver<PricingTableProps>(FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE, 'PricingTable')(preset)\n\n const plans: PricingTablePlan[] = useMemo(() => {\n if (props.plans) return props.plans\n if (!billing?.products) return []\n\n return billing.products\n .filter(p => p.type === ProductType.PLAN && p.isPublic && p.isActive)\n .filter(p => !billing.currentScope || !p.targetScopes || p.targetScopes.includes(billing.currentScope))\n .map(product => {\n const productPrices = billing.getPricesForProduct(product._id)\n return {\n key: product.key,\n name: tBillingProduct(product.key, 'name'),\n description: tBillingProduct(product.key, 'tagline'),\n planTier: product.planTier,\n sortOrder: product.sortOrder ?? 0,\n grantedFeatures: (product.grantedFeatures ?? []).map(f => ({\n id: f,\n label: tBillingFeature(f, 'label'),\n })),\n grantedLimits: Object.entries(product.grantedLimits ?? {}).map(([k, v]) => ({\n id: k,\n label: tBillingLimit(k, 'label'),\n value: typeof v === 'object' && v !== null ? (v as any).value ?? 0 : 0,\n })),\n isCurrent: product.key === billing.currentPlanKey,\n prices: productPrices\n .filter(price => price.unitPrice && price.unitPrice.currency)\n .map(price => ({\n priceId: price._id,\n price: price.unitPrice as MoneyValue,\n interval: price.interval,\n isDefault: price.isDefault ?? true,\n })),\n isPopular: product.sortOrder === 1,\n isFree: productPrices.length > 0 && productPrices.every(price => price.unitPrice?.amount === 0n),\n trialDays: product.behaviorPolicy?.trial?.days,\n }\n })\n }, [props.plans, billing?.products, billing?.currentScope, billing?.currentPlanKey, billing?.getPricesForProduct, tBillingProduct, tBillingFeature, tBillingLimit])\n\n const currentPlanKey = props.currentPlanKey !== undefined ? props.currentPlanKey : (billing?.currentPlanKey ?? null)\n\n const onSelectPlan = useCallback(\n (planKey: string, priceId: string) => {\n if (props.onSelectPlan) {\n props.onSelectPlan(planKey, priceId)\n return\n }\n if (!billing || ![BillingStateSlice.BILLING_ACCOUNT, BillingStateSlice.SUBSCRIPTION, BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES].every(billing.isSliceAvailable)) return\n if (billing.subscription) {\n if (document.activeElement instanceof HTMLElement) selectionTrigger.current = document.activeElement\n void planChange.select({ newProductKey: planKey, newPriceId: priceId })\n } else {\n runBillingActionSafely(() => billing.openCheckout(planKey, priceId))\n }\n },\n [props.onSelectPlan, billing, runBillingActionSafely, planChange.select],\n )\n\n const unavailable = props.unavailable ?? (!!billing?.isEnabled && !(props.plans !== undefined) && [BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES, BillingStateSlice.SUBSCRIPTION].some(slice => !billing.isSliceAvailable(slice)))\n const isLoading = props.isLoading ?? billing?.isLoading\n const error = props.error !== undefined ? props.error : (billing?.error ? toUserFacingErrorMessage(billing.error) : null)\n\n if (!isReady) return null\n\n return (\n <>\n <Component\n {...props}\n plans={plans}\n currentPlanKey={currentPlanKey}\n onSelectPlan={onSelectPlan}\n isLoading={isLoading}\n error={error}\n unavailable={unavailable}\n isSelectionDisabled={props.isSelectionDisabled || planChange.state.phase === BillingPlanChangePhase.CONFIRMING}\n />\n {planChange.state.phase !== BillingPlanChangePhase.IDLE && (\n <PlanChangePreview\n targetPlanName={tBillingProduct(planChange.state.target.newProductKey, 'name')}\n preview={'preview' in planChange.state ? planChange.state.preview : null}\n isLoading={planChange.state.phase === BillingPlanChangePhase.PREVIEWING}\n isConfirming={planChange.state.phase === BillingPlanChangePhase.CONFIRMING}\n hasError={planChange.state.phase === BillingPlanChangePhase.FAILED || ('hasError' in planChange.state && planChange.state.hasError)}\n onCancel={planChange.cancel}\n onConfirm={planChange.state.phase === BillingPlanChangePhase.READY || planChange.state.phase === BillingPlanChangePhase.CONFIRMING ? () => { void planChange.confirm() } : undefined}\n onRetry={planChange.state.phase === BillingPlanChangePhase.FAILED ? () => {\n if (planChange.state.phase === BillingPlanChangePhase.FAILED) void planChange.select(planChange.state.target)\n } : undefined}\n />\n )}\n </>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"billing-pricing-table.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAA;AACpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAc,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhF,OAAO,EAAE,WAAW,EAA0B,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAC5G,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAA;AACzH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE5F,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+DAA+D,CAAA;AAC5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2DAA2D,CAAA;AAyFrG,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA4B;IACnG,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAChC,MAAM,wBAAwB,GAAG,yBAAyB,EAAE,CAAA;IAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAChD,MAAM,gBAAgB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,IAAI,CAAA;QACzE,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,OAAO,EAAE,WAAW;YAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAChH,UAAU,CAAC,OAAO,GAAG,UAAU,CAAA;IACjC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5B,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,YAAY;QAAE,UAAU,CAAC,MAAM,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACzG,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAA;IAC7D,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC3E,IAAI,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;KACjE,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,uBAAuB,CAAoB,qBAAqB,CAAC,+BAA+B,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;IAE3I,MAAM,KAAK,GAAuB,OAAO,CAAC,GAAG,EAAE;QAC7C,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,KAAK,CAAA;QACnC,IAAI,CAAC,OAAO,EAAE,QAAQ;YAAE,OAAO,EAAE,CAAA;QAEjC,OAAO,OAAO,CAAC,QAAQ;YACrB,6FAA6F;YAC7F,0FAA0F;YAC1F,mDAAmD;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;aACpE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aACtG,GAAG,CAAC,OAAO,CAAC,EAAE;YACb,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC9D,OAAO;gBACL,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC1C,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;gBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;gBACjC,eAAe,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzD,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC;iBACnC,CAAC,CAAC;gBACH,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1E,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;oBAChC,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAE,CAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvE,CAAC,CAAC;gBACH,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,cAAc;gBACjD,MAAM,EAAE,aAAa;qBAClB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;qBAC5D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,EAAE,KAAK,CAAC,GAAG;oBAClB,KAAK,EAAE,KAAK,CAAC,SAAuB;oBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;iBACnC,CAAC,CAAC;gBACL,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;gBAC7C,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;gBACtD,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,KAAK,EAAE,CAAC;gBAChG,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI;aAC/C,CAAA;QACH,CAAC,CAAC,CAAA;IACN,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;IAEjM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,CAAA;IAEpH,kIAAkI;IAClI,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAA;IACpE,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACjH,cAAc,EAAE,CAAC,GAAG,EAAE;YACpB,MAAM,GAAG,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,mBAAmB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAA;YAClG,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAA;QAC3E,CAAC,CAAC,EAAE;QACJ,WAAW,EAAE,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;KACvD,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACT,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvE,iIAAiI;IACjI,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,+BAA+B,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAClJ,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAC7B,sBAAsB,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBAAC,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAA;YAAC,CAAC;oBAAS,CAAC;gBAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;YAAC,CAAC;QAC5F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEd,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;QACnC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACpC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAAE,OAAM;QAClL,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,aAAa,YAAY,WAAW;gBAAE,gBAAgB,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAA;YACpG,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;QACzE,CAAC;aAAM,CAAC;YACN,sBAAsB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACtE,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,MAAM,CAAC,CACzE,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACzO,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,EAAE,SAAS,CAAA;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAEzH,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,OAAO,CACL,8BACA,KAAC,SAAS,OACJ,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,UAAU,IAAI,CAAC,CAAC,iBAAiB,EACrI,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,oBAAoB,GACxE,EACD,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,IAAI,IAAI,CACzD,KAAC,iBAAiB,IAChB,cAAc,EAAE,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,EAC9E,OAAO,EAAE,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EACxE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,UAAU,EACvE,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,UAAU,EAC1E,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EACnI,QAAQ,EAAE,UAAU,CAAC,MAAM,EAC3B,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,UAAU,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACpL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;oBACvE,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC,MAAM;wBAAE,KAAK,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC/G,CAAC,CAAC,CAAC,CAAC,SAAS,GACb,CACH,IACE,CACJ,CAAA;AACH,CAAC","sourcesContent":["import { BillingPlanChangePhase, useBillingPlanChange } from '~wildo-frontend-lib/core/billing/useBillingPlanChange'\nimport { PlanChangePreview } from './billing-plan-change-preview'\nimport { BillingStateSlice } from '@wildo-ai/saas-models'\nimport React, { useMemo, useCallback, useEffect, useRef, useState } from 'react'\nimport type { MoneyValue } from '@wildo-ai/zod-decorators'\nimport { ProductType, ProductPriceDisclosure, isPendingPlanChangeWithdrawable } from '@wildo-ai/saas-models'\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport type { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n'\nimport { useBillingSafe } from '~wildo-frontend-lib/core/billing/useBilling'\nimport { useSafeBillingActionExecutor } from '~wildo-frontend-lib/core/billing/useSafeBillingActionExecutor'\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage'\n\n// --- Contract ---\n\nexport interface PricingTableFeature {\n id: string\n label: string\n}\n\nexport interface PricingTableLimit {\n id: string\n label: string\n value: number\n}\n\nexport interface PricingTablePlan {\n key: string\n name: string\n description?: string\n planTier?: string\n sortOrder: number\n grantedFeatures: PricingTableFeature[]\n grantedLimits: PricingTableLimit[]\n isCurrent: boolean\n prices: Array<{\n priceId: string\n price: MoneyValue\n interval?: string\n isDefault: boolean\n }>\n /**\n * The plan the catalogue recommends (`Product.isRecommended`), emphasised in the grid. A\n * recommendation, never a popularity claim. Until #1835 this was `isPopular`, derived from\n * `sortOrder === 1` — so whichever plan happened to sort second was badged \"most popular\" on a\n * product nobody had measured.\n */\n isRecommended?: boolean\n /** How much of the price the tile may state (`Product.priceDisclosure`). Omitted = listed. */\n priceDisclosure?: ProductPriceDisclosure\n /**\n * Whether the plan can be bought right now. `false` for an announced-but-upcoming plan: the tile\n * is shown so the plan can be seen, and its selection is disabled because the backend refuses it.\n * Omitted = acquirable, for a caller supplying its own `plans`.\n */\n isAcquirable?: boolean\n isFree?: boolean\n trialDays?: number\n}\n\nexport interface PricingTableProps {\n plans: PricingTablePlan[]\n currentPlanKey?: string | null\n onSelectPlan: (planKey: string, priceId: string) => void\n showIntervalToggle?: boolean\n /**\n * Where an on-request plan's \"contact sales\" action leads. Without it, an on-request plan shows no\n * action: a button that goes nowhere is worse than none.\n */\n contactSalesHref?: string\n /** Freeze plan selection while a confirmed mutation is in flight. */\n isSelectionDisabled?: boolean\n /**\n * A plan change pending at the end of the period (#1868): the plan the subscription moves to, and when. Shown above the grid; plan\n * selection is disabled while it is pending, because another change is refused until it is withdrawn.\n */\n pendingPlanChange?: { targetPlanName: string; effectiveAt: Date } | null\n /** Withdraw the pending change and keep the current plan. Absent when nothing is pending. */\n onKeepCurrentPlan?: () => void\n /** The withdrawal is in progress. */\n isKeepingCurrentPlan?: boolean\n isLoading?: boolean\n unavailable?: boolean\n error?: string | null\n}\n\n// --- Wrapper ---\n\n/**\n * Wrapper props: `plans` / `onSelectPlan` are OPTIONAL here — the wrapper\n * derives plans from the billing product catalog and defaults plan selection to\n * checkout for new subscriptions and preview/confirmation for existing ones when omitted. The PRESET contract above keeps\n * them required: the wrapper always materializes them before resolving the\n * preset. NOTE: do NOT pass `plans={[]}` to \"let the context win\" — a provided\n * array (even empty) intentionally overrides the derived catalog.\n */\nexport type PricingTableWrapperProps = Omit<PricingTableProps, 'plans' | 'onSelectPlan'> &\n Partial<Pick<PricingTableProps, 'plans' | 'onSelectPlan'>> &\n ComponentPresetProps\n\nexport function PricingTable({ preset = CorePresetNames.DEFAULT, ...props }: PricingTableWrapperProps): React.JSX.Element | null {\n const billing = useBillingSafe()\n const toUserFacingErrorMessage = useUserFacingErrorMessage()\n const planChange = useBillingPlanChange(billing)\n const selectionTrigger = useRef<HTMLElement | null>(null)\n const hadPreview = useRef(false)\n useEffect(() => {\n const hasPreview = planChange.state.phase !== BillingPlanChangePhase.IDLE\n if (hadPreview.current && !hasPreview && selectionTrigger.current?.isConnected) selectionTrigger.current.focus()\n hadPreview.current = hasPreview\n }, [planChange.state.phase])\n useEffect(() => { if (props.onSelectPlan) planChange.cancel() }, [props.onSelectPlan, planChange.cancel])\n const runBillingActionSafely = useSafeBillingActionExecutor()\n const { tBillingProduct, tBillingFeature, tBillingLimit, isReady } = useI18n({\n keys: ['billing_products', 'billing_features', 'billing_limits'],\n })\n const Component = createComponentResolver<PricingTableProps>(FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE, 'PricingTable')(preset)\n\n const plans: PricingTablePlan[] = useMemo(() => {\n if (props.plans) return props.plans\n if (!billing?.products) return []\n\n return billing.products\n // VISIBILITY, not acquirability: public and not retired. An UPCOMING plan stays listed — the\n // grid announces it — and its selection is gated by `isAcquirable` below, which reads the\n // backend's own answer rather than re-deriving it.\n .filter(p => p.type === ProductType.PLAN && p.isPublic && p.isActive)\n .filter(p => !billing.currentScope || !p.targetScopes || p.targetScopes.includes(billing.currentScope))\n .map(product => {\n const productPrices = billing.getPricesForProduct(product._id)\n return {\n key: product.key,\n name: tBillingProduct(product.key, 'name'),\n description: tBillingProduct(product.key, 'tagline'),\n planTier: product.planTier,\n sortOrder: product.sortOrder ?? 0,\n grantedFeatures: (product.grantedFeatures ?? []).map(f => ({\n id: f,\n label: tBillingFeature(f, 'label'),\n })),\n grantedLimits: Object.entries(product.grantedLimits ?? {}).map(([k, v]) => ({\n id: k,\n label: tBillingLimit(k, 'label'),\n value: typeof v === 'object' && v !== null ? (v as any).value ?? 0 : 0,\n })),\n isCurrent: product.key === billing.currentPlanKey,\n prices: productPrices\n .filter(price => price.unitPrice && price.unitPrice.currency)\n .map(price => ({\n priceId: price._id,\n price: price.unitPrice as MoneyValue,\n interval: price.interval,\n isDefault: price.isDefault ?? true,\n })),\n isRecommended: product.isRecommended === true,\n priceDisclosure: product.priceDisclosure,\n isAcquirable: billing.isProductAcquirable(product.key),\n isFree: productPrices.length > 0 && productPrices.every(price => price.unitPrice?.amount === 0n),\n trialDays: product.behaviorPolicy?.trial?.days,\n }\n })\n }, [props.plans, billing?.products, billing?.currentScope, billing?.currentPlanKey, billing?.getPricesForProduct, billing?.isProductAcquirable, tBillingProduct, tBillingFeature, tBillingLimit])\n\n const currentPlanKey = props.currentPlanKey !== undefined ? props.currentPlanKey : (billing?.currentPlanKey ?? null)\n\n // A plan change pending at the end of the period (#1868). The plan is named from the catalogue; a product the catalogue no longer\n // lists shows its id, so a missing name looks missing instead of being invented.\n const storedPendingChange = billing?.subscription?.pendingPlanChange\n const pendingPlanChange = props.pendingPlanChange !== undefined ? props.pendingPlanChange : (storedPendingChange ? {\n targetPlanName: (() => {\n const key = billing?.products?.find(product => product._id === storedPendingChange.productId)?.key\n return key ? tBillingProduct(key, 'name') : storedPendingChange.productId\n })(),\n effectiveAt: new Date(storedPendingChange.effectiveAt),\n } : null)\n const [isKeepingCurrentPlan, setIsKeepingCurrentPlan] = useState(false)\n // Offered only while the change can still be withdrawn: minutes from renewal the operation refuses it, so the action is withheld\n // rather than shown to fail (#1868, `PLAN_CHANGE_WITHDRAWAL_CUTOFF_MS`).\n const onKeepCurrentPlan = props.onKeepCurrentPlan ?? (storedPendingChange && billing && isPendingPlanChangeWithdrawable(storedPendingChange) ? () => {\n setIsKeepingCurrentPlan(true)\n runBillingActionSafely(async () => {\n try { await billing.cancelPendingPlanChange() } finally { setIsKeepingCurrentPlan(false) }\n })\n } : undefined)\n\n const onSelectPlan = useCallback(\n (planKey: string, priceId: string) => {\n if (props.onSelectPlan) {\n props.onSelectPlan(planKey, priceId)\n return\n }\n if (!billing || ![BillingStateSlice.BILLING_ACCOUNT, BillingStateSlice.SUBSCRIPTION, BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES].every(billing.isSliceAvailable)) return\n if (billing.subscription) {\n if (document.activeElement instanceof HTMLElement) selectionTrigger.current = document.activeElement\n void planChange.select({ newProductKey: planKey, newPriceId: priceId })\n } else {\n runBillingActionSafely(() => billing.openCheckout(planKey, priceId))\n }\n },\n [props.onSelectPlan, billing, runBillingActionSafely, planChange.select],\n )\n\n const unavailable = props.unavailable ?? (!!billing?.isEnabled && !(props.plans !== undefined) && [BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES, BillingStateSlice.SUBSCRIPTION].some(slice => !billing.isSliceAvailable(slice)))\n const isLoading = props.isLoading ?? billing?.isLoading\n const error = props.error !== undefined ? props.error : (billing?.error ? toUserFacingErrorMessage(billing.error) : null)\n\n if (!isReady) return null\n\n return (\n <>\n <Component\n {...props}\n plans={plans}\n currentPlanKey={currentPlanKey}\n onSelectPlan={onSelectPlan}\n isLoading={isLoading}\n error={error}\n unavailable={unavailable}\n isSelectionDisabled={props.isSelectionDisabled || planChange.state.phase === BillingPlanChangePhase.CONFIRMING || !!pendingPlanChange}\n pendingPlanChange={pendingPlanChange}\n onKeepCurrentPlan={onKeepCurrentPlan}\n isKeepingCurrentPlan={props.isKeepingCurrentPlan ?? isKeepingCurrentPlan}\n />\n {planChange.state.phase !== BillingPlanChangePhase.IDLE && (\n <PlanChangePreview\n targetPlanName={tBillingProduct(planChange.state.target.newProductKey, 'name')}\n preview={'preview' in planChange.state ? planChange.state.preview : null}\n isLoading={planChange.state.phase === BillingPlanChangePhase.PREVIEWING}\n isConfirming={planChange.state.phase === BillingPlanChangePhase.CONFIRMING}\n hasError={planChange.state.phase === BillingPlanChangePhase.FAILED || ('hasError' in planChange.state && planChange.state.hasError)}\n onCancel={planChange.cancel}\n onConfirm={planChange.state.phase === BillingPlanChangePhase.READY || planChange.state.phase === BillingPlanChangePhase.CONFIRMING ? () => { void planChange.confirm() } : undefined}\n onRetry={planChange.state.phase === BillingPlanChangePhase.FAILED ? () => {\n if (planChange.state.phase === BillingPlanChangePhase.FAILED) void planChange.select(planChange.state.target)\n } : undefined}\n />\n )}\n </>\n )\n}\n"]}
|
|
@@ -12,7 +12,7 @@ export function SubscriptionStatus({ preset = CorePresetNames.DEFAULT, ...props
|
|
|
12
12
|
const billing = useBillingSafe();
|
|
13
13
|
const toUserFacingErrorMessage = useUserFacingErrorMessage();
|
|
14
14
|
const runBillingActionSafely = useSafeBillingActionExecutor();
|
|
15
|
-
const billingProviderLabelKeys = useMemo(() => collectBillingProviderLabelKeys(billing?.
|
|
15
|
+
const billingProviderLabelKeys = useMemo(() => collectBillingProviderLabelKeys(billing?.billingProviderRef), [billing?.billingProviderRef]);
|
|
16
16
|
const { tBillingProduct, t: translateProvider, isReady } = useI18n({
|
|
17
17
|
keys: ['billing_products', ...billingProviderLabelKeys],
|
|
18
18
|
});
|
|
@@ -20,7 +20,7 @@ export function SubscriptionStatus({ preset = CorePresetNames.DEFAULT, ...props
|
|
|
20
20
|
const status = props.status ?? billing?.subscription?.status ?? null;
|
|
21
21
|
const planName = props.planName ?? (billing?.currentPlanKey ? tBillingProduct(billing.currentPlanKey, 'name') : null);
|
|
22
22
|
const providerName = props.providerName ?? resolveBillingProviderDisplayName({
|
|
23
|
-
|
|
23
|
+
providerRef: billing?.billingProviderRef,
|
|
24
24
|
translate: translateProvider,
|
|
25
25
|
});
|
|
26
26
|
const currentPeriodEnd = props.currentPeriodEnd ?? billing?.subscription?.currentPeriodEnd ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-subscription-status.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAA;AACzH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE5F,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+DAA+D,CAAA;AAC5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2DAA2D,CAAA;AACrG,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,0EAA0E,CAAA;AA8BjF,MAAM,UAAU,kBAAkB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAkC;IAC/G,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAChC,MAAM,wBAAwB,GAAG,yBAAyB,EAAE,CAAA;IAC5D,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAA;IAC7D,MAAM,wBAAwB,GAAG,OAAO,CACtC,GAAG,EAAE,CAAC,+BAA+B,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"billing-subscription-status.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BillingStateSlice } from '@wildo-ai/saas-models'\nimport React, { useMemo } from 'react'\nimport type { MoneyValue } from '@wildo-ai/zod-decorators'\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport type { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n'\nimport { useBillingSafe } from '~wildo-frontend-lib/core/billing/useBilling'\nimport { useSafeBillingActionExecutor } from '~wildo-frontend-lib/core/billing/useSafeBillingActionExecutor'\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage'\nimport {\n collectBillingProviderLabelKeys,\n resolveBillingProviderDisplayName,\n} from '~wildo-frontend-lib/core/billing/billing-provider-display.frontend.utils'\n\n// --- Contract ---\n\nexport interface SubscriptionStatusProps {\n status: string | null\n planName: string | null\n providerName?: string\n currentPeriodEnd: Date | null\n cancelAtPeriodEnd?: boolean\n trialEnd?: Date | null\n nextPayment?: MoneyValue\n onManageBilling?: () => void\n isLoading?: boolean\n unavailable?: boolean\n error?: string | null\n}\n\n// --- Wrapper ---\n\n/**\n * Wrapper props: the context-hydratable data props are OPTIONAL here — the\n * wrapper fills `status` / `planName` / `currentPeriodEnd` (and the rest) from\n * `useBillingSafe()` when omitted. The PRESET contract above keeps them\n * required: the wrapper always materializes them before resolving the preset.\n */\nexport type SubscriptionStatusWrapperProps = Omit<SubscriptionStatusProps, 'status' | 'planName' | 'currentPeriodEnd'> &\n Partial<Pick<SubscriptionStatusProps, 'status' | 'planName' | 'currentPeriodEnd'>> &\n ComponentPresetProps\n\nexport function SubscriptionStatus({ preset = CorePresetNames.DEFAULT, ...props }: SubscriptionStatusWrapperProps): React.JSX.Element | null {\n const billing = useBillingSafe()\n const toUserFacingErrorMessage = useUserFacingErrorMessage()\n const runBillingActionSafely = useSafeBillingActionExecutor()\n const billingProviderLabelKeys = useMemo(\n () => collectBillingProviderLabelKeys(billing?.billingProviderRef),\n [billing?.billingProviderRef],\n )\n const { tBillingProduct, t: translateProvider, isReady } = useI18n({\n keys: ['billing_products', ...billingProviderLabelKeys],\n })\n const Component = createComponentResolver<SubscriptionStatusProps>(FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS, 'SubscriptionStatus')(preset)\n\n const status = props.status ?? billing?.subscription?.status ?? null\n const planName = props.planName ?? (billing?.currentPlanKey ? tBillingProduct(billing.currentPlanKey, 'name') : null)\n const providerName = props.providerName ?? resolveBillingProviderDisplayName({\n providerRef: billing?.billingProviderRef,\n translate: translateProvider,\n })\n const currentPeriodEnd = props.currentPeriodEnd ?? billing?.subscription?.currentPeriodEnd ?? null\n const cancelAtPeriodEnd = props.cancelAtPeriodEnd ?? billing?.subscription?.cancelAtPeriodEnd\n const trialEnd = props.trialEnd !== undefined ? props.trialEnd : (billing?.subscription?.trialEnd ?? null)\n\n const nextPayment = useMemo(() => {\n if (props.nextPayment !== undefined) return props.nextPayment\n if (!billing?.isSliceAvailable(BillingStateSlice.PRICES) || !billing.currentPlanProduct) return undefined\n const planPrices = billing.getPricesForProduct(billing.currentPlanProduct._id)\n const defaultPrice = planPrices.find(p => p.isDefault) ?? planPrices[0]\n const price = defaultPrice?.unitPrice\n if (!price || !price.currency) return undefined\n return price as MoneyValue\n }, [props.nextPayment, billing?.currentPlanProduct, billing?.getPricesForProduct])\n\n const onManageBilling = props.onManageBilling ?? (billing?.isSliceAvailable(BillingStateSlice.BILLING_ACCOUNT) ? () => {\n runBillingActionSafely(() => billing.openCustomerPortal())\n } : undefined)\n const unavailable = props.unavailable ?? (!!billing?.isEnabled && !(props.status !== undefined && props.planName !== undefined && props.currentPeriodEnd !== undefined) && [BillingStateSlice.SUBSCRIPTION, BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES].some(slice => !billing.isSliceAvailable(slice)))\n const isLoading = props.isLoading ?? billing?.isLoading\n const error = props.error !== undefined ? props.error : (billing?.error ? toUserFacingErrorMessage(billing.error) : null)\n\n if (!isReady) return null\n\n return (\n <Component\n {...props}\n status={status}\n planName={planName}\n providerName={providerName}\n currentPeriodEnd={currentPeriodEnd}\n cancelAtPeriodEnd={cancelAtPeriodEnd}\n trialEnd={trialEnd}\n nextPayment={nextPayment}\n onManageBilling={onManageBilling}\n isLoading={isLoading}\n error={error}\n unavailable={unavailable}\n />\n )\n}\n"]}
|
|
@@ -13,6 +13,8 @@ export interface UsageDashboardCreditPool {
|
|
|
13
13
|
poolName: string;
|
|
14
14
|
available: number;
|
|
15
15
|
totalPurchased: number;
|
|
16
|
+
/** Credits given rather than bought, such as referral rewards (#1802). */
|
|
17
|
+
totalGranted: number;
|
|
16
18
|
totalConsumed: number;
|
|
17
19
|
}
|
|
18
20
|
export interface UsageDashboardProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-usage-dashboard.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAInD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAA;AAQ5H,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;IACjC,WAAW,EAAE,wBAAwB,EAAE,CAAA;IACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAID;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,GAC5F,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,GAC9D,oBAAoB,CAAA;AAEtB,wBAAgB,cAAc,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,0BAA0B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"billing-usage-dashboard.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAInD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAA;AAQ5H,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;IACjC,WAAW,EAAE,wBAAwB,EAAE,CAAA;IACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAID;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,GAC5F,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,GAC9D,oBAAoB,CAAA;AAEtB,wBAAgB,cAAc,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,0BAA0B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAwEnI"}
|
|
@@ -39,6 +39,7 @@ export function UsageDashboard({ preset = CorePresetNames.DEFAULT, ...props }) {
|
|
|
39
39
|
poolName: tBillingCreditPool(poolKey, 'name'),
|
|
40
40
|
available: data.available,
|
|
41
41
|
totalPurchased: data.totalPurchased,
|
|
42
|
+
totalGranted: data.totalGranted ?? 0,
|
|
42
43
|
totalConsumed: data.totalConsumed,
|
|
43
44
|
}));
|
|
44
45
|
}, [props.creditPools, billing?.creditPools, tBillingCreditPool]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-usage-dashboard.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iFAAiF,CAAA;AACzH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE5F,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+DAA+D,CAAA;AAC5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2DAA2D,CAAA;
|
|
1
|
+
{"version":3,"file":"billing-usage-dashboard.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useMemo, useCallback } from 'react'\nimport { BillingStateSlice, ProductType } from '@wildo-ai/saas-models'\nimport { createComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport type { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n'\nimport { useBillingSafe } from '~wildo-frontend-lib/core/billing/useBilling'\nimport { useSafeBillingActionExecutor } from '~wildo-frontend-lib/core/billing/useSafeBillingActionExecutor'\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage'\n\n// --- Contract ---\n\nexport interface UsageDashboardProduct {\n productKey: string\n productName: string\n currentPeriodUsage: number\n previousPeriodUsage?: number\n limit?: number\n lastRecordedAt?: Date\n}\n\nexport interface UsageDashboardCreditPool {\n poolKey: string\n poolName: string\n available: number\n totalPurchased: number\n /** Credits given rather than bought, such as referral rewards (#1802). */\n totalGranted: number\n totalConsumed: number\n}\n\nexport interface UsageDashboardProps {\n products: UsageDashboardProduct[]\n creditPools: UsageDashboardCreditPool[]\n onTopUp?: (poolKey: string) => void\n isLoading?: boolean\n usageUnavailable?: boolean\n creditPoolsUnavailable?: boolean\n error?: string | null\n}\n\n// --- Wrapper ---\n\n/**\n * Wrapper props: `products` / `creditPools` are OPTIONAL here — the wrapper\n * derives both from the billing usage state when omitted. The PRESET contract\n * above keeps them required: the wrapper always materializes them before\n * resolving the preset.\n */\nexport type UsageDashboardWrapperProps = Omit<UsageDashboardProps, 'products' | 'creditPools'> &\n Partial<Pick<UsageDashboardProps, 'products' | 'creditPools'>> &\n ComponentPresetProps\n\nexport function UsageDashboard({ preset = CorePresetNames.DEFAULT, ...props }: UsageDashboardWrapperProps): React.JSX.Element | null {\n const billing = useBillingSafe()\n const toUserFacingErrorMessage = useUserFacingErrorMessage()\n const runBillingActionSafely = useSafeBillingActionExecutor()\n const { tBillingProduct, tBillingCreditPool, isReady } = useI18n({\n keys: ['billing_products', 'billing_credit_pools'],\n })\n const Component = createComponentResolver<UsageDashboardProps>(FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD, 'UsageDashboard')(preset)\n\n const products: UsageDashboardProduct[] = useMemo(() => {\n if (props.products) return props.products\n if (!billing?.usage?.byProduct) return []\n return Object.entries(billing.usage.byProduct).map(([productKey, data]) => ({\n productKey,\n productName: tBillingProduct(productKey, 'name'),\n currentPeriodUsage: data.currentPeriodUsage,\n previousPeriodUsage: data.previousPeriodUsage,\n limit: data.limit,\n lastRecordedAt: data.lastRecordedAt,\n }))\n }, [props.products, billing?.usage?.byProduct, tBillingProduct])\n\n const creditPools: UsageDashboardCreditPool[] = useMemo(() => {\n if (props.creditPools) return props.creditPools\n if (!billing?.creditPools) return []\n return Object.entries(billing.creditPools).map(([poolKey, data]) => ({\n poolKey,\n poolName: tBillingCreditPool(poolKey, 'name'),\n available: data.available,\n totalPurchased: data.totalPurchased,\n totalGranted: data.totalGranted ?? 0,\n totalConsumed: data.totalConsumed,\n }))\n }, [props.creditPools, billing?.creditPools, tBillingCreditPool])\n\n const onTopUp = useCallback((poolKey: string) => {\n if (props.onTopUp) {\n props.onTopUp(poolKey)\n return\n }\n if (!billing || ![BillingStateSlice.BILLING_ACCOUNT, BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES, BillingStateSlice.CREDIT_POOLS].every(billing.isSliceAvailable)) return\n const creditPackProduct = billing.products.find(\n p => p.type === ProductType.CREDIT_PACK && p.purchaseConfig?.creditPoolKey === poolKey,\n )\n if (!creditPackProduct) return\n const creditPackPrices = billing.getPricesForProduct(creditPackProduct._id)\n const defaultPrice = creditPackPrices.find(p => p.isDefault) ?? creditPackPrices[0]\n if (defaultPrice) {\n runBillingActionSafely(() => billing.openCheckout(creditPackProduct.key, defaultPrice._id))\n }\n }, [props.onTopUp, billing, runBillingActionSafely])\n\n const usageUnavailable = props.usageUnavailable ?? (!!billing?.isEnabled && props.products === undefined && !billing.isSliceAvailable(BillingStateSlice.USAGE))\n const creditPoolsUnavailable = props.creditPoolsUnavailable ?? (!!billing?.isEnabled && props.creditPools === undefined && !billing.isSliceAvailable(BillingStateSlice.CREDIT_POOLS))\n const canTopUp = !!props.onTopUp || !!billing && [BillingStateSlice.BILLING_ACCOUNT, BillingStateSlice.PRODUCTS, BillingStateSlice.PRICES, BillingStateSlice.CREDIT_POOLS].every(billing.isSliceAvailable)\n const isLoading = props.isLoading ?? billing?.isLoading\n const error = props.error !== undefined ? props.error : (billing?.error ? toUserFacingErrorMessage(billing.error) : null)\n\n if (!isReady) return null\n\n return (\n <Component\n {...props}\n products={products}\n creditPools={creditPools}\n onTopUp={canTopUp ? onTopUp : undefined}\n usageUnavailable={usageUnavailable}\n creditPoolsUnavailable={creditPoolsUnavailable}\n isLoading={isLoading}\n error={error}\n />\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayField.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EACL,KAAK,iBAAiB,EAUtB,KAAK,qBAAqB,IAAI,yBAAyB,EACvD,eAAe,EAEf,qBAAqB,EACrB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAW9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"DisplayField.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EACL,KAAK,iBAAiB,EAUtB,KAAK,qBAAqB,IAAI,yBAAyB,EACvD,eAAe,EAEf,qBAAqB,EACrB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAW9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAiH9E,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,uGAAuG;IACvG,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IACtB,oFAAoF;IACpF,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gGAAgG;IAChG,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,oGAAoG;IACpG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uGAAuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,kHAAkH;IAClH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC;IACtE,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAMD,iBAAS,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAuT1E;kBAvTQ,qBAAqB;;;AA2T9B,eAAO,MAAM,YAAY,EAAE,OAAO,qBAAqB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAA0B,CAAC;AAM1G,UAAU,8BAA8B;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,UAAU,8BAA8B;IACtC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,KAAK,CAAC,SAAS,CAC5D,8BAA8B,EAC9B,8BAA8B,CAC/B;IACC,KAAK,EAAE,8BAA8B,CAAuB;IAE5D,MAAM,CAAC,wBAAwB,IAAI,8BAA8B;IAIjE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IASjE,MAAM,IAAI,KAAK,CAAC,SAAS;CAc1B"}
|
|
@@ -29,6 +29,7 @@ import { DisplayFieldReadOnly } from './DisplayFieldReadOnly.js';
|
|
|
29
29
|
import { DisplayFieldReadOnlyArraySection } from './DisplayFieldReadOnlyArraySection.js';
|
|
30
30
|
import { DisplayFieldEditable } from './DisplayFieldEditable.js';
|
|
31
31
|
import { DisplayFieldEditableArray } from './DisplayFieldEditableArray.js';
|
|
32
|
+
import { useExternalDataFieldProvenance } from './external-data-provenance/useExternalDataFieldProvenance.js';
|
|
32
33
|
const logger = LoggerFrontendService.getLogger();
|
|
33
34
|
function resolveSurfaceDisplayChromeMode(value) {
|
|
34
35
|
switch (value) {
|
|
@@ -251,6 +252,16 @@ function DisplayFieldComponent(props) {
|
|
|
251
252
|
*/
|
|
252
253
|
const resolvedEmptyValue = defaultEmptyValue
|
|
253
254
|
?? resolveSurfaceAutoEmptyValue(surfacePolicy.autoRender?.autoEmptyValue);
|
|
255
|
+
// ── Provenance (#1997) ──
|
|
256
|
+
//
|
|
257
|
+
// A field an external-data pipeline writes says where its value came from and how current it is. Only a TOP-LEVEL
|
|
258
|
+
// field of the displayed record can be pipeline-written, so a field inside an object scope (a `pathPrefix`) or an
|
|
259
|
+
// array item never asks. SUMMARY surfaces (cards, FK previews) never show the cue, so they never cause the read.
|
|
260
|
+
// The chrome suppresses it in COMPACT and HIDDEN on its own.
|
|
261
|
+
const provenance = useExternalDataFieldProvenance({
|
|
262
|
+
fieldName: !pathPrefix && !isArrayItemPath ? resolvedName : undefined,
|
|
263
|
+
enabled: displayContextKind !== DisplayContextKind.SUMMARY && !props.resourceLinkTrail,
|
|
264
|
+
});
|
|
254
265
|
// ── Inline edit gate ──
|
|
255
266
|
//
|
|
256
267
|
// A field is offered in place when it ASKS (the decorator) or when its LAYOUT offers its writable
|
|
@@ -324,6 +335,7 @@ function DisplayFieldComponent(props) {
|
|
|
324
335
|
label,
|
|
325
336
|
description,
|
|
326
337
|
tooltip: tooltipProp,
|
|
338
|
+
provenance,
|
|
327
339
|
enumLabels,
|
|
328
340
|
displayComponent,
|
|
329
341
|
parentData,
|
|
@@ -348,7 +360,9 @@ function DisplayFieldComponent(props) {
|
|
|
348
360
|
// Inline-editable ARRAY → a PERSISTENT inline editor (add / edit / remove /
|
|
349
361
|
// reorder, whole-array autosave) instead of the scalar click-to-edit overlay.
|
|
350
362
|
// `isInlineEditable` already guarantees `resolvedName` is a non-empty string.
|
|
351
|
-
_jsx(DisplayFieldEditableArray, { name: resolvedName, schema: schema, value: value, label: label, description: description, doInlineUpdate: doInlineUpdate, renderField: props.renderField, sectionAppearance: props.sectionAppearance, objectItemLayout: props.objectItemLayout
|
|
363
|
+
_jsx(DisplayFieldEditableArray, { name: resolvedName, schema: schema, value: value, label: label, description: description, doInlineUpdate: doInlineUpdate, renderField: props.renderField, sectionAppearance: props.sectionAppearance, objectItemLayout: props.objectItemLayout, enumLabels: enumLabels, displayChromeMode: breakpoint
|
|
364
|
+
? resolveResponsiveValue(resolvedChromeMode, breakpoint)
|
|
365
|
+
: (typeof resolvedChromeMode === 'string' ? resolvedChromeMode : undefined) })) : isInlineEditable ? (_jsx(DisplayFieldEditable, { ...resolvedProps, doInlineUpdate: doInlineUpdate, rmm: rmm })) : schemaType === FieldSchemaType.ARRAY && props.sectionAppearance ? (
|
|
352
366
|
// Read-only ARRAY authored via DisplayFieldArray (which sets
|
|
353
367
|
// `sectionAppearance`, GHOST by default) → render it in a controllable
|
|
354
368
|
// SECTION container (legend + appearance), matching the editable path,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayField.js","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayField.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * DisplayField — thin gate component for display fields.\n *\n * Resolves field props from DisplayTemplateContext, evaluates early-return\n * conditions (skeleton, showWhen, missing schema), then routes to:\n * - DisplayFieldEditable (inline editing available)\n * - DisplayFieldReadOnly (pure display)\n *\n * Wraps the routed component in DisplayFieldErrorBoundary for crash isolation.\n *\n * Pattern: Gate → Resolution → Early Returns → Route → ErrorBoundary → Child\n */\n\nimport React from 'react';\nimport { z } from 'zod';\n\nimport { useOptionalDisplayTemplateContext } from './DisplayTemplateContext';\nimport { DisplayContextKind, useDisplayContextKind } from './DisplayContextKindContext';\nimport { useFieldScope } from '~wildo-frontend-lib/components/resources/skeleton/FieldScopeContext';\nimport { useDisplayChromeContext } from './chromes/DisplayChromeContext';\nimport { DisplayFieldChrome } from './chromes/DisplayFieldChrome';\nimport { Skeleton } from '~wildo-frontend-lib/components/feedback/skeleton';\nimport { useSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { getFieldSchema, getNestedValue, getParentData, resolveResponsiveValue } from './display-field-resolution.utils';\nimport {\n type DisplayLabelStyle,\n DisplayChromeMode,\n getSchemaType,\n getFieldUIDisplayConfig,\n getFieldUISummaryDisplayConfig,\n getShowWhenParams,\n hasDescriptionForDisplay,\n hasInlineEditableDecorator,\n isEligibleForLayoutDefaultInlineEdit,\n isHiddenForDisplay,\n type DisplayFieldComponent as DisplayFieldComponentEnum,\n FieldSchemaType,\n type ForceHideDisplayConfig,\n ArrayObjectItemLayout,\n type SoloSectionMode,\n} from '@wildo-ai/zod-decorators';\nimport type { AutoEmptyValue, AutoLabelPlacement } from '@wildo-ai/presets-components-models';\n\nimport { useResourceDisplayContext } from './automatic-displayer.utils';\nimport { ResourceLayoutInlineEditDefault } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport { AutomatedLayoutFrontendUtils } from '~wildo-frontend-lib/core/automated-layout/automated-layout.frontend.utils';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\n\nimport { DisplayFieldReadOnly } from './DisplayFieldReadOnly';\nimport { DisplayFieldReadOnlyArraySection } from './DisplayFieldReadOnlyArraySection';\nimport { DisplayFieldEditable } from './DisplayFieldEditable';\nimport { DisplayFieldEditableArray } from './DisplayFieldEditableArray';\nimport type { DisplayResourceLinkTrail } from './display-resource-link-trail';\n\nconst logger = LoggerFrontendService.getLogger();\n\nfunction resolveSurfaceDisplayChromeMode(value: string | undefined): DisplayChromeMode | undefined {\n switch (value) {\n case 'stacked':\n return DisplayChromeMode.STACKED;\n case 'inline':\n return DisplayChromeMode.INLINE;\n case 'compact':\n return DisplayChromeMode.COMPACT;\n default:\n return undefined;\n }\n}\n\nfunction resolveSurfaceAutoEmptyValue(value: string | undefined): AutoEmptyValue | undefined {\n switch (value) {\n case 'em-dash':\n case 'placeholder':\n case 'hidden':\n case 'skeleton':\n return value;\n default:\n return undefined;\n }\n}\n\nfunction resolveSurfaceAutoLabelPlacement(value: string | undefined): AutoLabelPlacement | undefined {\n switch (value) {\n case 'top':\n case 'start':\n case 'inline':\n case 'hidden':\n return value;\n default:\n return undefined;\n }\n}\n\n/**\n * Emptiness test for the field-level `display.hideWhenEmpty` mechanism.\n *\n * A value counts as empty when it is null / undefined, an empty (or\n * whitespace-only) string, an empty array, or a PLAIN OBJECT with no own\n * enumerable keys. Every other value — including `false` and `0`, which are\n * answers rather than absences — is present. This mirrors what every display\n * formatter treats as the \"—\" em-dash case, centralized here so a\n * `hideWhenEmpty` field drops out of the read surface entirely instead of\n * rendering the placeholder.\n *\n * ## Why `{}` counts, added 2026-09-18\n *\n * It did not until this change, and the omission made `hideWhenEmpty`\n * unable to express the one thing an object field needs it for. An object\n * whose members are all optional — a context bag, a set of locators — is\n * `{}` whenever none of them applies, and the row then rendered a label\n * with a void under it. There was no other mechanism: `showWhen` compares a\n * value, and `{}` satisfies `EXISTS`.\n *\n * It is consistent rather than special: an empty array was already empty,\n * and an empty object is the same absence in the other container. And the\n * decoration is OPT-IN, so a field reaching this line has already asked to\n * disappear rather than render the placeholder — there is no field for which\n * showing an empty labelled block is the better answer.\n *\n * ## The guard is the whole of the risk\n *\n * `Object.keys()` is empty for far more than a plain object: a `Date`, a\n * `Map`, a `Set`, a `File`, and every class instance whose state lives on its\n * prototype or in private fields. Counting keys without checking the\n * prototype would make every date field on every read surface vanish. So the\n * test is PROTOTYPE-first — `Object.prototype` or a null prototype, nothing\n * else — and `display-field-empty-value.test.tsx` pins each of those shapes\n * as present.\n */\nfunction isEmptyDisplayValue(value: unknown): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim() === '';\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === 'object') {\n const prototype = Object.getPrototypeOf(value);\n if (prototype === Object.prototype || prototype === null) {\n return Object.keys(value).length === 0;\n }\n }\n return false;\n}\n\nfunction fieldMatchesDisplayShapingRule(fieldName: string | undefined, rules?: string[]): boolean {\n if (!fieldName || !rules || rules.length === 0) {\n return false;\n }\n\n return rules.some((rule) => (\n fieldName === rule ||\n fieldName.startsWith(`${rule}.`) ||\n fieldName.startsWith(`${rule}[`)\n ));\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface DisplayFieldProps {\n /**\n * Field name — the primary identifier. All other props are resolved from\n * DisplayTemplateContext when absent.\n */\n name?: string;\n\n /** Field schema — resolved from context via `getFieldSchema(ctx.schema, resolvedName)` when absent. */\n schema?: z.ZodTypeAny;\n /** Field schema type — resolved via `getSchemaType(resolvedSchema)` when absent. */\n schemaType?: FieldSchemaType;\n /** Display component override — when set, overrides the schemaType-based component dispatch. */\n displayComponent?: DisplayFieldComponentEnum;\n /** Field value — resolved from context via `getNestedValue(ctx.data, resolvedName)` when absent. */\n value?: unknown;\n /** Enum labels — resolved from context via `ctx.enumLabels[resolvedName]` when absent. */\n enumLabels?: Record<string, string>;\n /** Field label — resolved from context via `ctx.fieldLabels[resolvedName]` when absent. */\n label?: string;\n /** Field description — resolved from context via `ctx.fieldDescriptions[resolvedName]` when absent. */\n description?: string;\n /**\n * Tooltip text to display next to the field label.\n * Resolved from i18n via `ctx.fieldTooltips[resolvedName]` when absent.\n */\n tooltip?: string;\n /** When true, label is hidden regardless of chrome mode. */\n hideLabel?: boolean;\n /** When true, description is hidden regardless of chrome mode. */\n hideDescription?: boolean;\n /** Explicit label placement; falls back to surface policy when absent. */\n labelPlacement?: AutoLabelPlacement;\n /** Label styling override (small-title labels etc.); falls back to the field's decorator `display.labelStyle`. */\n labelStyle?: DisplayLabelStyle;\n className?: string;\n\n /** Force disable inline editing for this specific field. */\n disableInlineEdit?: boolean;\n\n /**\n * @internal Recursion plumbing — set by the display pipeline, not by a caller.\n *\n * Where this subtree sits in RESOURCE terms: which resource its fields belong to, and how many\n * relationship objects were expanded in place to reach it. Absent at the display root.\n *\n * This replaced a bare `depth: number` that every nested object and array item incremented. That\n * number counted a record's own structure — which is finite by construction — and never counted\n * the traversal that can actually run away, so it truncated real data while guarding nothing.\n * See `display-resource-link-trail.ts`.\n */\n resourceLinkTrail?: DisplayResourceLinkTrail;\n\n /**\n * The parent data object containing this field (REL-02).\n * Resolved from context via `getParentData(ctx.data, pathPrefix)` when absent.\n */\n parentData?: Record<string, unknown>;\n\n /**\n * @internal Array plumbing — set via `DisplayFieldArray`, not directly.\n * Per-array-item TEMPLATE, forwarded to `AutomatedArrayField.renderField`\n * for INLINE-EDITABLE arrays. Receives `(itemPath, itemSchema)` scoped to the\n * array's local edit form (e.g. `checklist.0`).\n */\n renderField?: (name: string, schema: z.ZodTypeAny) => React.ReactNode;\n /** @internal Array plumbing — set via `DisplayFieldArray`. Array section-frame appearance. */\n sectionAppearance?: SoloSectionMode;\n /** @internal Array plumbing — set via `DisplayFieldArray`. Per-placement item-layout override. */\n objectItemLayout?: ArrayObjectItemLayout;\n}\n\n// =============================================================================\n// GATE COMPONENT\n// =============================================================================\n\nfunction DisplayFieldComponent(props: DisplayFieldProps): React.JSX.Element {\n // ── Context resolution ──\n const ctx = useOptionalDisplayTemplateContext();\n const { pathPrefix } = useFieldScope();\n const surfacePolicy = useSurfacePolicy();\n const displayContextKind = useDisplayContextKind();\n\n const effectiveName = props.name;\n const resolvedName = effectiveName\n ? (pathPrefix ? `${pathPrefix}.${effectiveName}` : effectiveName)\n : undefined;\n\n const schema = props.schema ?? (resolvedName ? getFieldSchema(ctx?.schema, resolvedName) : undefined);\n const schemaType = props.schemaType ?? (schema ? getSchemaType(schema) : undefined);\n const value = props.value ?? (resolvedName ? getNestedValue(ctx?.data, resolvedName) : undefined);\n /*\n * Context lookups are INDEX-FREE: an array item's field resolves as `constraints[0].kind`, but\n * the label maps are keyed by the schema path (`constraints.kind`) — one label set per FIELD,\n * not per row. Stripping the indices is what lets an authored label or enum label inside an\n * entry collection resolve at all; before this each silently fell back (the enum to its raw\n * wire value, the label to the formatted field name — the second was invisible wherever the\n * fallback happened to read well, which is how it outlived the enum fix).\n *\n * With one carve-out: a path ENDING in an index is an array ITEM, not a field. An item must\n * never inherit its array's label/description — stripping there put the array's label on every\n * row (\"Accepted when · Accepted when · Accepted when\"). Enum labels are the exception in the\n * other direction: they map VALUES, and an enum-array's items are exactly the values the map\n * exists for.\n */\n const indexFreeName = resolvedName?.replace(/\\[\\d+\\]/g, '');\n const isArrayItemPath = resolvedName ? /\\[\\d+\\]$/.test(resolvedName) : false;\n const fieldMetaKey = isArrayItemPath ? undefined : indexFreeName;\n /*\n * Final fallback: the LEAF key, unchanged. The context map already answers for every path it\n * registered, so this only fires for paths the label walk cannot reach (union-variant members,\n * depths past the walk) — where the object dispatcher used to force-feed the same leaf as an\n * explicit prop, winning over authored labels.\n *\n * It is a KEY, not words derived from one (#420): a leaf that shows up as `streetName` is\n * visibly unlabelled and gets authored, where \"Street Name\" reads as finished and never does.\n */\n const leafFallbackLabel = fieldMetaKey\n ? AutomatedLayoutFrontendUtils.unresolvedFieldLabel(fieldMetaKey.split('.').pop() ?? fieldMetaKey)\n : undefined;\n const label = props.label ?? (fieldMetaKey ? ctx?.fieldLabels?.[fieldMetaKey] : undefined) ?? leafFallbackLabel;\n /*\n * The DECLARATION decides whether a description renders, not the presence of a resolved string.\n *\n * `{primitive}UI.display.showDescription` is documented as an \"opt-in for description text below\n * the field value\" — and it was only ever an i18n GENERATION flag: it tells the companion to\n * produce the key, and nothing read it at render time. So a field resolved whatever description\n * its label bundle happened to contain, and turning the flag OFF changed nothing until somebody\n * regenerated labels — which needs a running companion, and until then the surface keeps showing\n * a sentence its schema no longer asks for. That is a generated artifact outranking the source\n * it was generated from.\n *\n * An explicitly passed `description` prop still wins: a template author writing one is making the\n * declaration at the call site.\n */\n const declaresDisplayDescription = schema ? hasDescriptionForDisplay(schema) : false;\n const description = props.description\n ?? (fieldMetaKey && declaresDisplayDescription ? ctx?.fieldDescriptions?.[fieldMetaKey] : undefined);\n const tooltipProp = props.tooltip ?? (fieldMetaKey ? ctx?.fieldTooltips?.[fieldMetaKey] : undefined);\n const enumLabels = props.enumLabels\n ?? (indexFreeName ? ctx?.enumLabels?.[indexFreeName] : undefined);\n // SUMMARY surfaces resolve base display params with `summaryOverride` merged\n // over `display` (the {primitive}UI decorator contract for cards/FK previews).\n const displayConfig = schema\n ? (displayContextKind === DisplayContextKind.SUMMARY\n ? getFieldUISummaryDisplayConfig(schema)\n : getFieldUIDisplayConfig(schema))\n : undefined;\n const displayComponent = props.displayComponent ?? displayConfig?.component;\n const parentData = props.parentData ?? getParentData(ctx?.data, pathPrefix || undefined);\n const disableInlineEdit = props.disableInlineEdit ?? false;\n const className = props.className;\n const isHiddenByDisplayShaping = fieldMatchesDisplayShapingRule(resolvedName, ctx?.hiddenFieldNames);\n const isInlineEditDisabledByDisplayShaping = fieldMatchesDisplayShapingRule(\n resolvedName,\n ctx?.inlineEditDisabledFieldNames,\n );\n\n // ── Chrome mode resolution ──\n const { displayChromeMode, sectionChromeMode } = useDisplayChromeContext();\n const surfaceChromeMode = resolveSurfaceDisplayChromeMode(surfacePolicy.autoRender?.autoFieldChrome);\n const explicitChromeMode = displayConfig?.chromeMode ?? sectionChromeMode ?? displayChromeMode;\n const resolvedChromeMode = explicitChromeMode ?? surfaceChromeMode;\n /*\n * The surface's auto label placement is a DEFAULT for undecorated fields — a field whose\n * decorator declares its own chromeMode has chosen its presentation, and the chrome derives\n * placement from that mode. Before this guard, a surface-level `autoLabelPlacement: 'top'`\n * silently outranked every `chromeMode: INLINE` decoration: the chrome received mode INLINE\n * plus placement 'top' and rendered the STACKED branch, so INLINE was unreachable on any\n * surface that states a default — which is every resource READ page.\n */\n const resolvedLabelPlacement = props.labelPlacement\n ?? (displayConfig?.chromeMode !== undefined\n ? undefined\n : resolveSurfaceAutoLabelPlacement(surfacePolicy.autoRender?.autoLabelPlacement));\n const resolvedLabelStyle = props.labelStyle ?? displayConfig?.labelStyle;\n\n // forceHide → hideLabel/hideDescription (resolves responsive breakpoint-aware values)\n const breakpoint = ctx?.breakpoint;\n const resolvedForceHide = breakpoint\n ? resolveResponsiveValue<ForceHideDisplayConfig>(displayConfig?.forceHide, breakpoint)\n : (displayConfig?.forceHide as ForceHideDisplayConfig | undefined);\n const forceHideLabel = resolvedForceHide?.label === true;\n const forceHideDescription = resolvedForceHide?.description === true;\n\n const hideLabel = (props.hideLabel === true) || forceHideLabel;\n const hideDescription = (props.hideDescription === true) || forceHideDescription;\n\n // ── Resource display context (lightweight read for routing + fileUploadContext) ──\n const {\n canInlineEdit: contextCanInlineEdit,\n doInlineUpdate,\n fileUploadContext,\n rmm,\n defaultInlineEdit,\n defaultEmptyValue,\n } = useResourceDisplayContext();\n\n /*\n * The LAYOUT outranks the surface policy here, and only here.\n *\n * `AutoEmptyValue` is declared per surface variant — BASE, RAISED, OVERLAY and INSET all say\n * `em-dash` — which is right for a surface, because a surface knows nothing about the fields it\n * happens to hold. In a dense table or a summary card a dash IS correct: the reader is scanning\n * and meaning comes from the neighbours.\n *\n * A settings layout knows something the surface cannot: its rows are the content, read one at a\n * time to decide something, and there an em dash refuses to say which of four things it means.\n * That layout says so once (`defaultEmptyValue`) rather than every field saying it.\n *\n * A layout with no opinion omits it and the surface policy decides exactly as before — which is\n * every layout in the product except the settings ones that opt in.\n */\n const resolvedEmptyValue = defaultEmptyValue\n ?? resolveSurfaceAutoEmptyValue(surfacePolicy.autoRender?.autoEmptyValue);\n\n // ── Inline edit gate ──\n //\n // A field is offered in place when it ASKS (the decorator) or when its LAYOUT offers its writable\n // fields and this field qualifies. The two are ORed on purpose and the precedence is deliberate:\n // the decorator decides HOW (mode, saveOn, which buttons), the layout default decides only\n // WHETHER — so a field carrying params keeps them under a layout that turns the default on, and a\n // field carrying `inlineEditable: false` is refused by BOTH (`hasInlineEditableDecorator` is false\n // for it, and `isEligibleForLayoutDefaultInlineEdit` declines it explicitly).\n //\n // Everything else in this conjunction still holds, and that is what keeps the default safe: a\n // layout cannot manufacture a write path. `contextCanInlineEdit` requires an RMM, an\n // `onInlineEdit`, or a real UPDATE operation; `isInlineEditDisabledByDisplayShaping` keeps\n // relationship object/array slots fail-closed. See `ResourceLayoutInlineEditDefault` for why a\n // settings layout needs the default at all.\n const hasDecorator = resolvedName && schema && hasInlineEditableDecorator(schema);\n const isOfferedByLayoutDefault = (\n !!resolvedName\n && !!schema\n && defaultInlineEdit === ResourceLayoutInlineEditDefault.WRITABLE_FIELDS\n && isEligibleForLayoutDefaultInlineEdit(schema)\n );\n const isInlineEditable = (\n !disableInlineEdit &&\n !isInlineEditDisabledByDisplayShaping &&\n contextCanInlineEdit &&\n (!!hasDecorator || isOfferedByLayoutDefault)\n );\n\n // ── Early returns (after all hooks) ──\n\n if (isHiddenByDisplayShaping) {\n return <></>;\n }\n\n // Decorator-level hidden — a field marked `.isHidden()` (display variant) must\n // never render in ANY display surface. This covers both the explicit-layout path\n // (a `<DisplayField name=\"x\" />` whose schema is `.isHidden()`) and the recursive\n // object-render path (DisplayValueDispatcher renders each nested field through this\n // gate), so hidden audit/internal sub-fields stay out of whole-object renders too.\n // (`isHiddenByDisplayShaping` above handles runtime/relationship shaping via the\n // `hiddenFieldNames` context; this handles the static schema decorator.)\n if (schema && isHiddenForDisplay(schema)) {\n return <></>;\n }\n\n // DD-9: Template-as-skeleton — render Skeleton when loading\n const isLoading = ctx?.isLoading ?? false;\n if (isLoading) {\n return (\n <DisplayFieldChrome\n mode={resolvedChromeMode}\n label={label}\n labelStyle={resolvedLabelStyle}\n name={resolvedName}\n labelPlacement={resolvedLabelPlacement}\n hideLabel={hideLabel}\n hideDescription={true}\n tooltip={tooltipProp}\n >\n <Skeleton className=\"h-5 w-full\" />\n </DisplayFieldChrome>\n );\n }\n\n // DD-10: Per-field showWhen — hidden by condition.\n // When inside an ObjectScope (pathPrefix set), evaluate showWhen against the scoped\n // parent data so sibling references resolve correctly (e.g., showWhen({ field: 'country' })\n // on address.city checks address.country, not root.country).\n // Falls back to root data when no pathPrefix or parent data is unavailable.\n const showWhenParams = schema ? getShowWhenParams(schema) : undefined;\n const showWhenData = (pathPrefix && parentData) ? parentData : ctx?.data;\n if (showWhenParams && showWhenData && !AutomatedLayoutFrontendUtils.evaluateShowWhen(showWhenParams, showWhenData)) {\n return <></>;\n }\n\n // Field-level hide-when-empty — a field decorated with\n // `{primitive}UI({ display: { hideWhenEmpty: true } })` is omitted from the\n // DISPLAY surface entirely when its value is empty (no label, no em-dash).\n // Display-only: the edit form still renders the field so it can be filled.\n if (displayConfig?.hideWhenEmpty && isEmptyDisplayValue(value)) {\n return <></>;\n }\n\n // No schema — cannot render\n if (!schema || !schemaType) {\n logger.error('[DisplayField] Cannot resolve schema for field', { name: resolvedName });\n return <></>;\n }\n\n // ── Resolved props for child components ──\n const resolvedProps = {\n schema,\n schemaType,\n value,\n fieldName: resolvedName,\n label,\n description,\n tooltip: tooltipProp,\n enumLabels,\n displayComponent,\n parentData,\n resourceLinkTrail: props.resourceLinkTrail,\n /*\n * The per-item template now reaches the READ path too. It used to be forwarded only on the\n * inline-editable ARRAY branch below, so `DisplayFieldArray.renderItem` was accepted and\n * silently ignored on every display template — measured: the rendered page was byte-identical\n * with and without it.\n */\n renderItem: props.renderField,\n className,\n hideLabel,\n hideDescription,\n resolvedChromeMode,\n resolvedLabelPlacement,\n resolvedLabelStyle,\n resolvedEmptyValue,\n fileUploadContext,\n };\n\n return (\n <DisplayFieldErrorBoundary name={resolvedName}>\n {isInlineEditable && schemaType === FieldSchemaType.ARRAY ? (\n // Inline-editable ARRAY → a PERSISTENT inline editor (add / edit / remove /\n // reorder, whole-array autosave) instead of the scalar click-to-edit overlay.\n // `isInlineEditable` already guarantees `resolvedName` is a non-empty string.\n <DisplayFieldEditableArray\n name={resolvedName as string}\n schema={schema}\n value={value}\n label={label}\n description={description}\n doInlineUpdate={doInlineUpdate}\n renderField={props.renderField}\n sectionAppearance={props.sectionAppearance}\n objectItemLayout={props.objectItemLayout}\n />\n ) : isInlineEditable ? (\n <DisplayFieldEditable\n {...resolvedProps}\n doInlineUpdate={doInlineUpdate}\n rmm={rmm}\n />\n ) : schemaType === FieldSchemaType.ARRAY && props.sectionAppearance ? (\n // Read-only ARRAY authored via DisplayFieldArray (which sets\n // `sectionAppearance`, GHOST by default) → render it in a controllable\n // SECTION container (legend + appearance), matching the editable path,\n // instead of the default chrome + bare list. Only wrapper-authored\n // arrays pass `sectionAppearance`, so direct DisplayField usages are\n // untouched.\n <DisplayFieldReadOnlyArraySection {...resolvedProps} sectionAppearance={props.sectionAppearance} />\n ) : (\n <DisplayFieldReadOnly {...resolvedProps} />\n )}\n </DisplayFieldErrorBoundary>\n );\n}\n\nDisplayFieldComponent.displayName = 'DisplayField';\n\nexport const DisplayField: typeof DisplayFieldComponent & { displayName: string } = DisplayFieldComponent;\n\n// =============================================================================\n// ERROR BOUNDARY (ROBUST-01)\n// =============================================================================\n\ninterface DisplayFieldErrorBoundaryProps {\n name?: string;\n children: React.ReactNode;\n}\n\ninterface DisplayFieldErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * Lightweight error boundary wrapping individual DisplayField instances.\n * Prevents a single malformed field value from crashing the entire page.\n *\n * Uses hardcoded English for the fallback message because class components\n * cannot call hooks (useI18n). Error boundaries are a last resort — the\n * message is developer-facing, not user-facing in normal operation.\n */\nexport class DisplayFieldErrorBoundary extends React.Component<\n DisplayFieldErrorBoundaryProps,\n DisplayFieldErrorBoundaryState\n> {\n state: DisplayFieldErrorBoundaryState = { hasError: false };\n\n static getDerivedStateFromError(): DisplayFieldErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n const fieldId = this.props.name;\n logger.error('[DisplayField] Error boundary caught error', {\n name: fieldId,\n error: error.message,\n componentStack: errorInfo.componentStack,\n });\n }\n\n render(): React.ReactNode {\n const fieldId = this.props.name;\n if (this.state.hasError) {\n return (\n <div className=\"flex items-center gap-element px-card-sm py-item-xs rounded-md bg-destructive/10 border border-destructive/20\">\n <span className=\"text-destructive text-sm\">Error rendering field</span>\n {fieldId && (\n <code className=\"text-xs text-destructive/70 px-item-xs rounded bg-destructive/5\">{fieldId}</code>\n )}\n </div>\n );\n }\n return this.props.children;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DisplayField.js","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayField.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * DisplayField — thin gate component for display fields.\n *\n * Resolves field props from DisplayTemplateContext, evaluates early-return\n * conditions (skeleton, showWhen, missing schema), then routes to:\n * - DisplayFieldEditable (inline editing available)\n * - DisplayFieldReadOnly (pure display)\n *\n * Wraps the routed component in DisplayFieldErrorBoundary for crash isolation.\n *\n * Pattern: Gate → Resolution → Early Returns → Route → ErrorBoundary → Child\n */\n\nimport React from 'react';\nimport { z } from 'zod';\n\nimport { useOptionalDisplayTemplateContext } from './DisplayTemplateContext';\nimport { DisplayContextKind, useDisplayContextKind } from './DisplayContextKindContext';\nimport { useFieldScope } from '~wildo-frontend-lib/components/resources/skeleton/FieldScopeContext';\nimport { useDisplayChromeContext } from './chromes/DisplayChromeContext';\nimport { DisplayFieldChrome } from './chromes/DisplayFieldChrome';\nimport { Skeleton } from '~wildo-frontend-lib/components/feedback/skeleton';\nimport { useSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { getFieldSchema, getNestedValue, getParentData, resolveResponsiveValue } from './display-field-resolution.utils';\nimport {\n type DisplayLabelStyle,\n DisplayChromeMode,\n getSchemaType,\n getFieldUIDisplayConfig,\n getFieldUISummaryDisplayConfig,\n getShowWhenParams,\n hasDescriptionForDisplay,\n hasInlineEditableDecorator,\n isEligibleForLayoutDefaultInlineEdit,\n isHiddenForDisplay,\n type DisplayFieldComponent as DisplayFieldComponentEnum,\n FieldSchemaType,\n type ForceHideDisplayConfig,\n ArrayObjectItemLayout,\n type SoloSectionMode,\n} from '@wildo-ai/zod-decorators';\nimport type { AutoEmptyValue, AutoLabelPlacement } from '@wildo-ai/presets-components-models';\n\nimport { useResourceDisplayContext } from './automatic-displayer.utils';\nimport { ResourceLayoutInlineEditDefault } from '~wildo-frontend-lib/core/resources/resources.frontend.schemas';\nimport { AutomatedLayoutFrontendUtils } from '~wildo-frontend-lib/core/automated-layout/automated-layout.frontend.utils';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\n\nimport { DisplayFieldReadOnly } from './DisplayFieldReadOnly';\nimport { DisplayFieldReadOnlyArraySection } from './DisplayFieldReadOnlyArraySection';\nimport { DisplayFieldEditable } from './DisplayFieldEditable';\nimport { DisplayFieldEditableArray } from './DisplayFieldEditableArray';\nimport type { DisplayResourceLinkTrail } from './display-resource-link-trail';\nimport { useExternalDataFieldProvenance } from './external-data-provenance/useExternalDataFieldProvenance';\n\nconst logger = LoggerFrontendService.getLogger();\n\nfunction resolveSurfaceDisplayChromeMode(value: string | undefined): DisplayChromeMode | undefined {\n switch (value) {\n case 'stacked':\n return DisplayChromeMode.STACKED;\n case 'inline':\n return DisplayChromeMode.INLINE;\n case 'compact':\n return DisplayChromeMode.COMPACT;\n default:\n return undefined;\n }\n}\n\nfunction resolveSurfaceAutoEmptyValue(value: string | undefined): AutoEmptyValue | undefined {\n switch (value) {\n case 'em-dash':\n case 'placeholder':\n case 'hidden':\n case 'skeleton':\n return value;\n default:\n return undefined;\n }\n}\n\nfunction resolveSurfaceAutoLabelPlacement(value: string | undefined): AutoLabelPlacement | undefined {\n switch (value) {\n case 'top':\n case 'start':\n case 'inline':\n case 'hidden':\n return value;\n default:\n return undefined;\n }\n}\n\n/**\n * Emptiness test for the field-level `display.hideWhenEmpty` mechanism.\n *\n * A value counts as empty when it is null / undefined, an empty (or\n * whitespace-only) string, an empty array, or a PLAIN OBJECT with no own\n * enumerable keys. Every other value — including `false` and `0`, which are\n * answers rather than absences — is present. This mirrors what every display\n * formatter treats as the \"—\" em-dash case, centralized here so a\n * `hideWhenEmpty` field drops out of the read surface entirely instead of\n * rendering the placeholder.\n *\n * ## Why `{}` counts, added 2026-09-18\n *\n * It did not until this change, and the omission made `hideWhenEmpty`\n * unable to express the one thing an object field needs it for. An object\n * whose members are all optional — a context bag, a set of locators — is\n * `{}` whenever none of them applies, and the row then rendered a label\n * with a void under it. There was no other mechanism: `showWhen` compares a\n * value, and `{}` satisfies `EXISTS`.\n *\n * It is consistent rather than special: an empty array was already empty,\n * and an empty object is the same absence in the other container. And the\n * decoration is OPT-IN, so a field reaching this line has already asked to\n * disappear rather than render the placeholder — there is no field for which\n * showing an empty labelled block is the better answer.\n *\n * ## The guard is the whole of the risk\n *\n * `Object.keys()` is empty for far more than a plain object: a `Date`, a\n * `Map`, a `Set`, a `File`, and every class instance whose state lives on its\n * prototype or in private fields. Counting keys without checking the\n * prototype would make every date field on every read surface vanish. So the\n * test is PROTOTYPE-first — `Object.prototype` or a null prototype, nothing\n * else — and `display-field-empty-value.test.tsx` pins each of those shapes\n * as present.\n */\nfunction isEmptyDisplayValue(value: unknown): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim() === '';\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === 'object') {\n const prototype = Object.getPrototypeOf(value);\n if (prototype === Object.prototype || prototype === null) {\n return Object.keys(value).length === 0;\n }\n }\n return false;\n}\n\nfunction fieldMatchesDisplayShapingRule(fieldName: string | undefined, rules?: string[]): boolean {\n if (!fieldName || !rules || rules.length === 0) {\n return false;\n }\n\n return rules.some((rule) => (\n fieldName === rule ||\n fieldName.startsWith(`${rule}.`) ||\n fieldName.startsWith(`${rule}[`)\n ));\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface DisplayFieldProps {\n /**\n * Field name — the primary identifier. All other props are resolved from\n * DisplayTemplateContext when absent.\n */\n name?: string;\n\n /** Field schema — resolved from context via `getFieldSchema(ctx.schema, resolvedName)` when absent. */\n schema?: z.ZodTypeAny;\n /** Field schema type — resolved via `getSchemaType(resolvedSchema)` when absent. */\n schemaType?: FieldSchemaType;\n /** Display component override — when set, overrides the schemaType-based component dispatch. */\n displayComponent?: DisplayFieldComponentEnum;\n /** Field value — resolved from context via `getNestedValue(ctx.data, resolvedName)` when absent. */\n value?: unknown;\n /** Enum labels — resolved from context via `ctx.enumLabels[resolvedName]` when absent. */\n enumLabels?: Record<string, string>;\n /** Field label — resolved from context via `ctx.fieldLabels[resolvedName]` when absent. */\n label?: string;\n /** Field description — resolved from context via `ctx.fieldDescriptions[resolvedName]` when absent. */\n description?: string;\n /**\n * Tooltip text to display next to the field label.\n * Resolved from i18n via `ctx.fieldTooltips[resolvedName]` when absent.\n */\n tooltip?: string;\n /** When true, label is hidden regardless of chrome mode. */\n hideLabel?: boolean;\n /** When true, description is hidden regardless of chrome mode. */\n hideDescription?: boolean;\n /** Explicit label placement; falls back to surface policy when absent. */\n labelPlacement?: AutoLabelPlacement;\n /** Label styling override (small-title labels etc.); falls back to the field's decorator `display.labelStyle`. */\n labelStyle?: DisplayLabelStyle;\n className?: string;\n\n /** Force disable inline editing for this specific field. */\n disableInlineEdit?: boolean;\n\n /**\n * @internal Recursion plumbing — set by the display pipeline, not by a caller.\n *\n * Where this subtree sits in RESOURCE terms: which resource its fields belong to, and how many\n * relationship objects were expanded in place to reach it. Absent at the display root.\n *\n * This replaced a bare `depth: number` that every nested object and array item incremented. That\n * number counted a record's own structure — which is finite by construction — and never counted\n * the traversal that can actually run away, so it truncated real data while guarding nothing.\n * See `display-resource-link-trail.ts`.\n */\n resourceLinkTrail?: DisplayResourceLinkTrail;\n\n /**\n * The parent data object containing this field (REL-02).\n * Resolved from context via `getParentData(ctx.data, pathPrefix)` when absent.\n */\n parentData?: Record<string, unknown>;\n\n /**\n * @internal Array plumbing — set via `DisplayFieldArray`, not directly.\n * Per-array-item TEMPLATE, forwarded to `AutomatedArrayField.renderField`\n * for INLINE-EDITABLE arrays. Receives `(itemPath, itemSchema)` scoped to the\n * array's local edit form (e.g. `checklist.0`).\n */\n renderField?: (name: string, schema: z.ZodTypeAny) => React.ReactNode;\n /** @internal Array plumbing — set via `DisplayFieldArray`. Array section-frame appearance. */\n sectionAppearance?: SoloSectionMode;\n /** @internal Array plumbing — set via `DisplayFieldArray`. Per-placement item-layout override. */\n objectItemLayout?: ArrayObjectItemLayout;\n}\n\n// =============================================================================\n// GATE COMPONENT\n// =============================================================================\n\nfunction DisplayFieldComponent(props: DisplayFieldProps): React.JSX.Element {\n // ── Context resolution ──\n const ctx = useOptionalDisplayTemplateContext();\n const { pathPrefix } = useFieldScope();\n const surfacePolicy = useSurfacePolicy();\n const displayContextKind = useDisplayContextKind();\n\n const effectiveName = props.name;\n const resolvedName = effectiveName\n ? (pathPrefix ? `${pathPrefix}.${effectiveName}` : effectiveName)\n : undefined;\n\n const schema = props.schema ?? (resolvedName ? getFieldSchema(ctx?.schema, resolvedName) : undefined);\n const schemaType = props.schemaType ?? (schema ? getSchemaType(schema) : undefined);\n const value = props.value ?? (resolvedName ? getNestedValue(ctx?.data, resolvedName) : undefined);\n /*\n * Context lookups are INDEX-FREE: an array item's field resolves as `constraints[0].kind`, but\n * the label maps are keyed by the schema path (`constraints.kind`) — one label set per FIELD,\n * not per row. Stripping the indices is what lets an authored label or enum label inside an\n * entry collection resolve at all; before this each silently fell back (the enum to its raw\n * wire value, the label to the formatted field name — the second was invisible wherever the\n * fallback happened to read well, which is how it outlived the enum fix).\n *\n * With one carve-out: a path ENDING in an index is an array ITEM, not a field. An item must\n * never inherit its array's label/description — stripping there put the array's label on every\n * row (\"Accepted when · Accepted when · Accepted when\"). Enum labels are the exception in the\n * other direction: they map VALUES, and an enum-array's items are exactly the values the map\n * exists for.\n */\n const indexFreeName = resolvedName?.replace(/\\[\\d+\\]/g, '');\n const isArrayItemPath = resolvedName ? /\\[\\d+\\]$/.test(resolvedName) : false;\n const fieldMetaKey = isArrayItemPath ? undefined : indexFreeName;\n /*\n * Final fallback: the LEAF key, unchanged. The context map already answers for every path it\n * registered, so this only fires for paths the label walk cannot reach (union-variant members,\n * depths past the walk) — where the object dispatcher used to force-feed the same leaf as an\n * explicit prop, winning over authored labels.\n *\n * It is a KEY, not words derived from one (#420): a leaf that shows up as `streetName` is\n * visibly unlabelled and gets authored, where \"Street Name\" reads as finished and never does.\n */\n const leafFallbackLabel = fieldMetaKey\n ? AutomatedLayoutFrontendUtils.unresolvedFieldLabel(fieldMetaKey.split('.').pop() ?? fieldMetaKey)\n : undefined;\n const label = props.label ?? (fieldMetaKey ? ctx?.fieldLabels?.[fieldMetaKey] : undefined) ?? leafFallbackLabel;\n /*\n * The DECLARATION decides whether a description renders, not the presence of a resolved string.\n *\n * `{primitive}UI.display.showDescription` is documented as an \"opt-in for description text below\n * the field value\" — and it was only ever an i18n GENERATION flag: it tells the companion to\n * produce the key, and nothing read it at render time. So a field resolved whatever description\n * its label bundle happened to contain, and turning the flag OFF changed nothing until somebody\n * regenerated labels — which needs a running companion, and until then the surface keeps showing\n * a sentence its schema no longer asks for. That is a generated artifact outranking the source\n * it was generated from.\n *\n * An explicitly passed `description` prop still wins: a template author writing one is making the\n * declaration at the call site.\n */\n const declaresDisplayDescription = schema ? hasDescriptionForDisplay(schema) : false;\n const description = props.description\n ?? (fieldMetaKey && declaresDisplayDescription ? ctx?.fieldDescriptions?.[fieldMetaKey] : undefined);\n const tooltipProp = props.tooltip ?? (fieldMetaKey ? ctx?.fieldTooltips?.[fieldMetaKey] : undefined);\n const enumLabels = props.enumLabels\n ?? (indexFreeName ? ctx?.enumLabels?.[indexFreeName] : undefined);\n // SUMMARY surfaces resolve base display params with `summaryOverride` merged\n // over `display` (the {primitive}UI decorator contract for cards/FK previews).\n const displayConfig = schema\n ? (displayContextKind === DisplayContextKind.SUMMARY\n ? getFieldUISummaryDisplayConfig(schema)\n : getFieldUIDisplayConfig(schema))\n : undefined;\n const displayComponent = props.displayComponent ?? displayConfig?.component;\n const parentData = props.parentData ?? getParentData(ctx?.data, pathPrefix || undefined);\n const disableInlineEdit = props.disableInlineEdit ?? false;\n const className = props.className;\n const isHiddenByDisplayShaping = fieldMatchesDisplayShapingRule(resolvedName, ctx?.hiddenFieldNames);\n const isInlineEditDisabledByDisplayShaping = fieldMatchesDisplayShapingRule(\n resolvedName,\n ctx?.inlineEditDisabledFieldNames,\n );\n\n // ── Chrome mode resolution ──\n const { displayChromeMode, sectionChromeMode } = useDisplayChromeContext();\n const surfaceChromeMode = resolveSurfaceDisplayChromeMode(surfacePolicy.autoRender?.autoFieldChrome);\n const explicitChromeMode = displayConfig?.chromeMode ?? sectionChromeMode ?? displayChromeMode;\n const resolvedChromeMode = explicitChromeMode ?? surfaceChromeMode;\n /*\n * The surface's auto label placement is a DEFAULT for undecorated fields — a field whose\n * decorator declares its own chromeMode has chosen its presentation, and the chrome derives\n * placement from that mode. Before this guard, a surface-level `autoLabelPlacement: 'top'`\n * silently outranked every `chromeMode: INLINE` decoration: the chrome received mode INLINE\n * plus placement 'top' and rendered the STACKED branch, so INLINE was unreachable on any\n * surface that states a default — which is every resource READ page.\n */\n const resolvedLabelPlacement = props.labelPlacement\n ?? (displayConfig?.chromeMode !== undefined\n ? undefined\n : resolveSurfaceAutoLabelPlacement(surfacePolicy.autoRender?.autoLabelPlacement));\n const resolvedLabelStyle = props.labelStyle ?? displayConfig?.labelStyle;\n\n // forceHide → hideLabel/hideDescription (resolves responsive breakpoint-aware values)\n const breakpoint = ctx?.breakpoint;\n const resolvedForceHide = breakpoint\n ? resolveResponsiveValue<ForceHideDisplayConfig>(displayConfig?.forceHide, breakpoint)\n : (displayConfig?.forceHide as ForceHideDisplayConfig | undefined);\n const forceHideLabel = resolvedForceHide?.label === true;\n const forceHideDescription = resolvedForceHide?.description === true;\n\n const hideLabel = (props.hideLabel === true) || forceHideLabel;\n const hideDescription = (props.hideDescription === true) || forceHideDescription;\n\n // ── Resource display context (lightweight read for routing + fileUploadContext) ──\n const {\n canInlineEdit: contextCanInlineEdit,\n doInlineUpdate,\n fileUploadContext,\n rmm,\n defaultInlineEdit,\n defaultEmptyValue,\n } = useResourceDisplayContext();\n\n /*\n * The LAYOUT outranks the surface policy here, and only here.\n *\n * `AutoEmptyValue` is declared per surface variant — BASE, RAISED, OVERLAY and INSET all say\n * `em-dash` — which is right for a surface, because a surface knows nothing about the fields it\n * happens to hold. In a dense table or a summary card a dash IS correct: the reader is scanning\n * and meaning comes from the neighbours.\n *\n * A settings layout knows something the surface cannot: its rows are the content, read one at a\n * time to decide something, and there an em dash refuses to say which of four things it means.\n * That layout says so once (`defaultEmptyValue`) rather than every field saying it.\n *\n * A layout with no opinion omits it and the surface policy decides exactly as before — which is\n * every layout in the product except the settings ones that opt in.\n */\n const resolvedEmptyValue = defaultEmptyValue\n ?? resolveSurfaceAutoEmptyValue(surfacePolicy.autoRender?.autoEmptyValue);\n\n // ── Provenance (#1997) ──\n //\n // A field an external-data pipeline writes says where its value came from and how current it is. Only a TOP-LEVEL\n // field of the displayed record can be pipeline-written, so a field inside an object scope (a `pathPrefix`) or an\n // array item never asks. SUMMARY surfaces (cards, FK previews) never show the cue, so they never cause the read.\n // The chrome suppresses it in COMPACT and HIDDEN on its own.\n const provenance = useExternalDataFieldProvenance({\n fieldName: !pathPrefix && !isArrayItemPath ? resolvedName : undefined,\n enabled: displayContextKind !== DisplayContextKind.SUMMARY && !props.resourceLinkTrail,\n });\n\n // ── Inline edit gate ──\n //\n // A field is offered in place when it ASKS (the decorator) or when its LAYOUT offers its writable\n // fields and this field qualifies. The two are ORed on purpose and the precedence is deliberate:\n // the decorator decides HOW (mode, saveOn, which buttons), the layout default decides only\n // WHETHER — so a field carrying params keeps them under a layout that turns the default on, and a\n // field carrying `inlineEditable: false` is refused by BOTH (`hasInlineEditableDecorator` is false\n // for it, and `isEligibleForLayoutDefaultInlineEdit` declines it explicitly).\n //\n // Everything else in this conjunction still holds, and that is what keeps the default safe: a\n // layout cannot manufacture a write path. `contextCanInlineEdit` requires an RMM, an\n // `onInlineEdit`, or a real UPDATE operation; `isInlineEditDisabledByDisplayShaping` keeps\n // relationship object/array slots fail-closed. See `ResourceLayoutInlineEditDefault` for why a\n // settings layout needs the default at all.\n const hasDecorator = resolvedName && schema && hasInlineEditableDecorator(schema);\n const isOfferedByLayoutDefault = (\n !!resolvedName\n && !!schema\n && defaultInlineEdit === ResourceLayoutInlineEditDefault.WRITABLE_FIELDS\n && isEligibleForLayoutDefaultInlineEdit(schema)\n );\n const isInlineEditable = (\n !disableInlineEdit &&\n !isInlineEditDisabledByDisplayShaping &&\n contextCanInlineEdit &&\n (!!hasDecorator || isOfferedByLayoutDefault)\n );\n\n // ── Early returns (after all hooks) ──\n\n if (isHiddenByDisplayShaping) {\n return <></>;\n }\n\n // Decorator-level hidden — a field marked `.isHidden()` (display variant) must\n // never render in ANY display surface. This covers both the explicit-layout path\n // (a `<DisplayField name=\"x\" />` whose schema is `.isHidden()`) and the recursive\n // object-render path (DisplayValueDispatcher renders each nested field through this\n // gate), so hidden audit/internal sub-fields stay out of whole-object renders too.\n // (`isHiddenByDisplayShaping` above handles runtime/relationship shaping via the\n // `hiddenFieldNames` context; this handles the static schema decorator.)\n if (schema && isHiddenForDisplay(schema)) {\n return <></>;\n }\n\n // DD-9: Template-as-skeleton — render Skeleton when loading\n const isLoading = ctx?.isLoading ?? false;\n if (isLoading) {\n return (\n <DisplayFieldChrome\n mode={resolvedChromeMode}\n label={label}\n labelStyle={resolvedLabelStyle}\n name={resolvedName}\n labelPlacement={resolvedLabelPlacement}\n hideLabel={hideLabel}\n hideDescription={true}\n tooltip={tooltipProp}\n >\n <Skeleton className=\"h-5 w-full\" />\n </DisplayFieldChrome>\n );\n }\n\n // DD-10: Per-field showWhen — hidden by condition.\n // When inside an ObjectScope (pathPrefix set), evaluate showWhen against the scoped\n // parent data so sibling references resolve correctly (e.g., showWhen({ field: 'country' })\n // on address.city checks address.country, not root.country).\n // Falls back to root data when no pathPrefix or parent data is unavailable.\n const showWhenParams = schema ? getShowWhenParams(schema) : undefined;\n const showWhenData = (pathPrefix && parentData) ? parentData : ctx?.data;\n if (showWhenParams && showWhenData && !AutomatedLayoutFrontendUtils.evaluateShowWhen(showWhenParams, showWhenData)) {\n return <></>;\n }\n\n // Field-level hide-when-empty — a field decorated with\n // `{primitive}UI({ display: { hideWhenEmpty: true } })` is omitted from the\n // DISPLAY surface entirely when its value is empty (no label, no em-dash).\n // Display-only: the edit form still renders the field so it can be filled.\n if (displayConfig?.hideWhenEmpty && isEmptyDisplayValue(value)) {\n return <></>;\n }\n\n // No schema — cannot render\n if (!schema || !schemaType) {\n logger.error('[DisplayField] Cannot resolve schema for field', { name: resolvedName });\n return <></>;\n }\n\n // ── Resolved props for child components ──\n const resolvedProps = {\n schema,\n schemaType,\n value,\n fieldName: resolvedName,\n label,\n description,\n tooltip: tooltipProp,\n provenance,\n enumLabels,\n displayComponent,\n parentData,\n resourceLinkTrail: props.resourceLinkTrail,\n /*\n * The per-item template now reaches the READ path too. It used to be forwarded only on the\n * inline-editable ARRAY branch below, so `DisplayFieldArray.renderItem` was accepted and\n * silently ignored on every display template — measured: the rendered page was byte-identical\n * with and without it.\n */\n renderItem: props.renderField,\n className,\n hideLabel,\n hideDescription,\n resolvedChromeMode,\n resolvedLabelPlacement,\n resolvedLabelStyle,\n resolvedEmptyValue,\n fileUploadContext,\n };\n\n return (\n <DisplayFieldErrorBoundary name={resolvedName}>\n {isInlineEditable && schemaType === FieldSchemaType.ARRAY ? (\n // Inline-editable ARRAY → a PERSISTENT inline editor (add / edit / remove /\n // reorder, whole-array autosave) instead of the scalar click-to-edit overlay.\n // `isInlineEditable` already guarantees `resolvedName` is a non-empty string.\n <DisplayFieldEditableArray\n name={resolvedName as string}\n schema={schema}\n value={value}\n label={label}\n description={description}\n doInlineUpdate={doInlineUpdate}\n renderField={props.renderField}\n sectionAppearance={props.sectionAppearance}\n objectItemLayout={props.objectItemLayout}\n enumLabels={enumLabels}\n displayChromeMode={breakpoint\n ? resolveResponsiveValue<DisplayChromeMode>(resolvedChromeMode, breakpoint)\n : (typeof resolvedChromeMode === 'string' ? resolvedChromeMode : undefined)}\n />\n ) : isInlineEditable ? (\n <DisplayFieldEditable\n {...resolvedProps}\n doInlineUpdate={doInlineUpdate}\n rmm={rmm}\n />\n ) : schemaType === FieldSchemaType.ARRAY && props.sectionAppearance ? (\n // Read-only ARRAY authored via DisplayFieldArray (which sets\n // `sectionAppearance`, GHOST by default) → render it in a controllable\n // SECTION container (legend + appearance), matching the editable path,\n // instead of the default chrome + bare list. Only wrapper-authored\n // arrays pass `sectionAppearance`, so direct DisplayField usages are\n // untouched.\n <DisplayFieldReadOnlyArraySection {...resolvedProps} sectionAppearance={props.sectionAppearance} />\n ) : (\n <DisplayFieldReadOnly {...resolvedProps} />\n )}\n </DisplayFieldErrorBoundary>\n );\n}\n\nDisplayFieldComponent.displayName = 'DisplayField';\n\nexport const DisplayField: typeof DisplayFieldComponent & { displayName: string } = DisplayFieldComponent;\n\n// =============================================================================\n// ERROR BOUNDARY (ROBUST-01)\n// =============================================================================\n\ninterface DisplayFieldErrorBoundaryProps {\n name?: string;\n children: React.ReactNode;\n}\n\ninterface DisplayFieldErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * Lightweight error boundary wrapping individual DisplayField instances.\n * Prevents a single malformed field value from crashing the entire page.\n *\n * Uses hardcoded English for the fallback message because class components\n * cannot call hooks (useI18n). Error boundaries are a last resort — the\n * message is developer-facing, not user-facing in normal operation.\n */\nexport class DisplayFieldErrorBoundary extends React.Component<\n DisplayFieldErrorBoundaryProps,\n DisplayFieldErrorBoundaryState\n> {\n state: DisplayFieldErrorBoundaryState = { hasError: false };\n\n static getDerivedStateFromError(): DisplayFieldErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n const fieldId = this.props.name;\n logger.error('[DisplayField] Error boundary caught error', {\n name: fieldId,\n error: error.message,\n componentStack: errorInfo.componentStack,\n });\n }\n\n render(): React.ReactNode {\n const fieldId = this.props.name;\n if (this.state.hasError) {\n return (\n <div className=\"flex items-center gap-element px-card-sm py-item-xs rounded-md bg-destructive/10 border border-destructive/20\">\n <span className=\"text-destructive text-sm\">Error rendering field</span>\n {fieldId && (\n <code className=\"text-xs text-destructive/70 px-item-xs rounded bg-destructive/5\">{fieldId}</code>\n )}\n </div>\n );\n }\n return this.props.children;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayFieldArray.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldArray.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAe,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIzG;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;IACrC,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7E;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6GAA6G;IAC7G,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"DisplayFieldArray.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldArray.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAe,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIzG;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;IACrC,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7E;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6GAA6G;IAC7G,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAaD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,UAAU,EACV,iBAAqC,EACrC,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,eAAe,EACf,UAAU,GACX,EAAE,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAa5C;yBAtBe,iBAAiB"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { SectionMode } from '@wildo-ai/zod-decorators';
|
|
3
3
|
import { DisplayField } from './DisplayField.js';
|
|
4
|
+
/*
|
|
5
|
+
* Unlike `FormFieldArray`, this wrapper DOES default `sectionAppearance` to GHOST, and the difference is
|
|
6
|
+
* load-bearing. `DisplayField` renders a READ-ONLY array as a section only when `sectionAppearance` is set
|
|
7
|
+
* (a direct `DisplayField` of an array keeps the default chrome and a bare list), so the default is what
|
|
8
|
+
* makes a template-authored read-only array a section at all. The cost, accepted: an array authored here
|
|
9
|
+
* and edited in place on a settings-row pane stays a section rather than joining the row (the
|
|
10
|
+
* settings-row frame applies only when no appearance was asked for). No current consumer pays it: Wonder
|
|
11
|
+
* Todos' checklist wants its own legend, and the application-creation workbench's artifact presentations
|
|
12
|
+
* are read-only and not on a settings-row pane. A template that wants the row renders the array with a
|
|
13
|
+
* plain `DisplayField`.
|
|
14
|
+
*/
|
|
4
15
|
export function DisplayFieldArray({ name, renderItem, sectionAppearance = SectionMode.GHOST, objectItemLayout, className, hideLabel, hideDescription, labelStyle, }) {
|
|
5
16
|
return (_jsx(DisplayField, { name: name, renderField: renderItem, sectionAppearance: sectionAppearance, objectItemLayout: objectItemLayout, labelStyle: labelStyle, className: className, hideLabel: hideLabel, hideDescription: hideDescription }));
|
|
6
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayFieldArray.js","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldArray.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAoD,MAAM,0BAA0B,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0C9C,MAAM,UAAU,iBAAiB,CAAC,EAChC,IAAI,EACJ,UAAU,EACV,iBAAiB,GAAG,WAAW,CAAC,KAAK,EACrC,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,eAAe,EACf,UAAU,GACa;IACvB,OAAO,CACL,KAAC,YAAY,IACX,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,UAAU,EACvB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;AACJ,CAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC","sourcesContent":["import * as React from 'react';\nimport type { z } from 'zod';\nimport type { DisplayLabelStyle } from '@wildo-ai/zod-decorators';\nimport { SectionMode, type ArrayObjectItemLayout, type SoloSectionMode } from '@wildo-ai/zod-decorators';\n\nimport { DisplayField } from './DisplayField';\n\n/**\n * DisplayFieldArray — the template-facing component for authoring an ARRAY field\n * on a display / read surface.\n *\n * Array-specific concerns live HERE — the per-item template (`renderItem`), the\n * array's section-frame appearance (`sectionAppearance`), and a per-placement\n * item-layout override (`objectItemLayout`) — instead of leaking onto the\n * generic `DisplayField` (where they mean nothing for a scalar field). It\n * delegates to `DisplayField` for schema resolution + the inline-editable / read\n * dispatch, so there's no duplicated resolution logic.\n *\n * Semantic TRUTHS about the field (is it inline-editable? sortable? the default\n * item layout?) stay on the `arrayUI` schema decorator; these props are\n * PRESENTATION for this placement and win over the decorator default.\n */\nexport interface DisplayFieldArrayProps {\n /** The array field name (dot path), resolved against the display template context. */\n name: string;\n /**\n * Per-item TEMPLATE. Receives `(itemPath, itemSchema)` — `itemPath` is scoped\n * to the array's local edit form (e.g. `checklist.0`). Bind item sub-fields\n * with `useArrayItemAutosaveField`.\n */\n renderItem?: (itemPath: string, itemSchema: z.ZodTypeAny) => React.ReactNode;\n /**\n * Appearance of the array's own section frame (legend + item list). Defaults\n * to `SectionMode.GHOST` — a quiet, frameless section (legend + list, no card\n * border). Opt into `CARD` to containerize it in a framed card, `COLLAPSIBLE`\n * for a toggle.\n */\n sectionAppearance?: SoloSectionMode;\n /** Per-placement item framing override (`CARD` framed cards vs compact `ROW`). */\n objectItemLayout?: ArrayObjectItemLayout;\n className?: string;\n hideLabel?: boolean;\n hideDescription?: boolean;\n /** Label styling override, forwarded verbatim — an array section's label is a field label like any other. */\n labelStyle?: DisplayLabelStyle;\n}\n\nexport function DisplayFieldArray({\n name,\n renderItem,\n sectionAppearance = SectionMode.GHOST,\n objectItemLayout,\n className,\n hideLabel,\n hideDescription,\n labelStyle,\n}: DisplayFieldArrayProps): React.JSX.Element {\n return (\n <DisplayField\n name={name}\n renderField={renderItem}\n sectionAppearance={sectionAppearance}\n objectItemLayout={objectItemLayout}\n labelStyle={labelStyle}\n className={className}\n hideLabel={hideLabel}\n hideDescription={hideDescription}\n />\n );\n}\n\nDisplayFieldArray.displayName = 'DisplayFieldArray';\n"]}
|
|
1
|
+
{"version":3,"file":"DisplayFieldArray.js","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldArray.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAoD,MAAM,0BAA0B,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0C9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,IAAI,EACJ,UAAU,EACV,iBAAiB,GAAG,WAAW,CAAC,KAAK,EACrC,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,eAAe,EACf,UAAU,GACa;IACvB,OAAO,CACL,KAAC,YAAY,IACX,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,UAAU,EACvB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;AACJ,CAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC","sourcesContent":["import * as React from 'react';\nimport type { z } from 'zod';\nimport type { DisplayLabelStyle } from '@wildo-ai/zod-decorators';\nimport { SectionMode, type ArrayObjectItemLayout, type SoloSectionMode } from '@wildo-ai/zod-decorators';\n\nimport { DisplayField } from './DisplayField';\n\n/**\n * DisplayFieldArray — the template-facing component for authoring an ARRAY field\n * on a display / read surface.\n *\n * Array-specific concerns live HERE — the per-item template (`renderItem`), the\n * array's section-frame appearance (`sectionAppearance`), and a per-placement\n * item-layout override (`objectItemLayout`) — instead of leaking onto the\n * generic `DisplayField` (where they mean nothing for a scalar field). It\n * delegates to `DisplayField` for schema resolution + the inline-editable / read\n * dispatch, so there's no duplicated resolution logic.\n *\n * Semantic TRUTHS about the field (is it inline-editable? sortable? the default\n * item layout?) stay on the `arrayUI` schema decorator; these props are\n * PRESENTATION for this placement and win over the decorator default.\n */\nexport interface DisplayFieldArrayProps {\n /** The array field name (dot path), resolved against the display template context. */\n name: string;\n /**\n * Per-item TEMPLATE. Receives `(itemPath, itemSchema)` — `itemPath` is scoped\n * to the array's local edit form (e.g. `checklist.0`). Bind item sub-fields\n * with `useArrayItemAutosaveField`.\n */\n renderItem?: (itemPath: string, itemSchema: z.ZodTypeAny) => React.ReactNode;\n /**\n * Appearance of the array's own section frame (legend + item list). Defaults\n * to `SectionMode.GHOST` — a quiet, frameless section (legend + list, no card\n * border). Opt into `CARD` to containerize it in a framed card, `COLLAPSIBLE`\n * for a toggle.\n */\n sectionAppearance?: SoloSectionMode;\n /** Per-placement item framing override (`CARD` framed cards vs compact `ROW`). */\n objectItemLayout?: ArrayObjectItemLayout;\n className?: string;\n hideLabel?: boolean;\n hideDescription?: boolean;\n /** Label styling override, forwarded verbatim — an array section's label is a field label like any other. */\n labelStyle?: DisplayLabelStyle;\n}\n\n/*\n * Unlike `FormFieldArray`, this wrapper DOES default `sectionAppearance` to GHOST, and the difference is\n * load-bearing. `DisplayField` renders a READ-ONLY array as a section only when `sectionAppearance` is set\n * (a direct `DisplayField` of an array keeps the default chrome and a bare list), so the default is what\n * makes a template-authored read-only array a section at all. The cost, accepted: an array authored here\n * and edited in place on a settings-row pane stays a section rather than joining the row (the\n * settings-row frame applies only when no appearance was asked for). No current consumer pays it: Wonder\n * Todos' checklist wants its own legend, and the application-creation workbench's artifact presentations\n * are read-only and not on a settings-row pane. A template that wants the row renders the array with a\n * plain `DisplayField`.\n */\nexport function DisplayFieldArray({\n name,\n renderItem,\n sectionAppearance = SectionMode.GHOST,\n objectItemLayout,\n className,\n hideLabel,\n hideDescription,\n labelStyle,\n}: DisplayFieldArrayProps): React.JSX.Element {\n return (\n <DisplayField\n name={name}\n renderField={renderItem}\n sectionAppearance={sectionAppearance}\n objectItemLayout={objectItemLayout}\n labelStyle={labelStyle}\n className={className}\n hideLabel={hideLabel}\n hideDescription={hideDescription}\n />\n );\n}\n\nDisplayFieldArray.displayName = 'DisplayFieldArray';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayFieldEditable.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldEditable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAkF,MAAM,OAAO,CAAC;AA0BvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gEAAgE,CAAC;AAS9G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AA0ChF,MAAM,WAAW,yBAA0B,SAAQ,yBAAyB;IAC1E,oEAAoE;IACpE,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,uDAAuD;IACvD,GAAG,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACtC;AAMD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"DisplayFieldEditable.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DisplayFieldEditable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAkF,MAAM,OAAO,CAAC;AA0BvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gEAAgE,CAAC;AAS9G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AA0ChF,MAAM,WAAW,yBAA0B,SAAQ,yBAAyB;IAC1E,oEAAoE;IACpE,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,uDAAuD;IACvD,GAAG,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACtC;AAMD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA4hB/F;yBA5hBe,oBAAoB"}
|
|
@@ -66,7 +66,7 @@ const DEFAULT_INLINE_EDIT_PARAMS = {
|
|
|
66
66
|
// COMPONENT
|
|
67
67
|
// =============================================================================
|
|
68
68
|
export function DisplayFieldEditable(props) {
|
|
69
|
-
const { schema, schemaType, value, fieldName, label, description, tooltip, enumLabels, displayComponent, parentData, resourceLinkTrail, className, hideLabel, hideDescription, resolvedChromeMode, resolvedLabelPlacement, resolvedEmptyValue, fileUploadContext, doInlineUpdate, rmm, } = props;
|
|
69
|
+
const { schema, schemaType, value, fieldName, label, description, tooltip, provenance, enumLabels, displayComponent, parentData, resourceLinkTrail, className, hideLabel, hideDescription, resolvedChromeMode, resolvedLabelPlacement, resolvedEmptyValue, fileUploadContext, doInlineUpdate, rmm, } = props;
|
|
70
70
|
const { tComponent, isReady } = useI18n({
|
|
71
71
|
component: [FrontendComponentType.LOW_LEVEL_FORM_FIELD, FrontendComponentType.LOW_LEVEL_BUTTON],
|
|
72
72
|
});
|
|
@@ -389,7 +389,7 @@ export function DisplayFieldEditable(props) {
|
|
|
389
389
|
else {
|
|
390
390
|
content = renderInlineEditTrigger();
|
|
391
391
|
}
|
|
392
|
-
return (_jsx(DisplayFieldChrome, { mode: resolvedChromeMode, label: label, description: description, tooltip: tooltip, name: fieldName, labelPlacement: resolvedLabelPlacement, hideLabel: hideLabel, hideDescription: hideDescription, className: className, children: content }));
|
|
392
|
+
return (_jsx(DisplayFieldChrome, { mode: resolvedChromeMode, label: label, description: description, tooltip: tooltip, provenance: provenance, name: fieldName, labelPlacement: resolvedLabelPlacement, hideLabel: hideLabel, hideDescription: hideDescription, className: className, children: content }));
|
|
393
393
|
}
|
|
394
394
|
DisplayFieldEditable.displayName = 'DisplayFieldEditable';
|
|
395
395
|
//# sourceMappingURL=DisplayFieldEditable.js.map
|