@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":"useResourceSearch.js","sourceRoot":"","sources":["../../../../../../src/components/resources-fields/resource-reference/useResourceSearch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * useResourceSearch\n *\n * Reusable hook for async resource-reference search:\n * - Fetches initial options when the dropdown opens\n * - Debounces search queries and fetches filtered results\n * - Resolves display labels for currently selected values\n * - Returns data shaped for Combobox/ComboboxMultiple consumption\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { z } from 'zod';\nimport { getArrayItemSchema, getSchemaType, FieldSchemaType } from '@wildo-ai/zod-decorators';\nimport { useResourceRegistry } from '~wildo-frontend-lib/core/resources/useResourceRegistry';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\nimport { FrontendResourceUtils } from '~wildo-frontend-lib/core/resources/frontend-resource.utils';\nimport { pickPreferredOperationForCoreSemantic } from '~wildo-frontend-lib/core/resources/operation-semantics.frontend.utils';\nimport { useOptionalFormSchemaContext } from '~wildo-frontend-lib/components/form/useFormSchemaContext';\nimport { resolveComponentLabel } from '~wildo-frontend-lib/core/i18n/component-label-resolution.utils';\nimport { useOptionalResourceOperationViewContext } from '~wildo-frontend-lib/core/resources/ResourceOperationViewContext';\nimport { FrontendComponentType } from '@wildo-ai/presets-components-models';\nimport { CoreResourceOperation, Resources_SharedUtils } from '@wildo-ai/saas-models';\nimport type { FieldOption } from '~wildo-frontend-lib/components/form/form-field-types';\nimport {\n fetchResourceReferenceRecordAndLabel,\n mapResourceReferenceOptions,\n normalizeResourceReferenceSelectionValue,\n} from './resource-reference.shared.utils';\nimport { extractErrorInfo, type DisplayableError } from '~wildo-frontend-lib/core/errors/errors.frontend.schemas';\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst INITIAL_LOAD_LIMIT = 10;\nconst SEARCH_DEBOUNCE_MS = 300;\nconst MIN_SEARCH_CHARS = 2;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface UseResourceSearchOptions {\n schema: z.ZodTypeAny;\n name: string;\n value: string | string[] | undefined;\n targetResourceType?: string;\n}\n\nexport interface UseResourceSearchResult {\n options: FieldOption<string>[];\n isLoading: boolean;\n isLoadingCurrentValue: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n handleSearchChange: (search: string) => void;\n getDisplayLabel: (id: string) => string;\n resourceType: string | undefined;\n isMultiple: boolean;\n normalizedValue: string[];\n emptyMessage: string;\n defaultPlaceholder: string;\n /**\n * E-4: surfaced error for the most-recent options fetch.\n * Consumers (Combobox/ComboboxMultiple presets) can render this as an inline\n * footer/notice in the dropdown so users know why the list is empty.\n * `null` when there is no error to display. Its `message` is already localized text (#1160).\n */\n fetchError: DisplayableError | null;\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\nexport function useResourceSearch({\n schema,\n name,\n value,\n targetResourceType,\n}: UseResourceSearchOptions): UseResourceSearchResult {\n const { registry, doOperation } = useResourceRegistry();\n const { t, tComponent, tResourceFieldEdit } = useI18n({ component: FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE });\n const toUserFacingErrorMessage = useUserFacingErrorMessage();\n\n const formSchemaContext = useOptionalFormSchemaContext();\n // Filter pickers render OUTSIDE a form (no FormSchemaContext) but INSIDE the\n // list's `ResourceOperationViewProvider`, which carries the rendered\n // operation's scope (e.g. the current `organizationId`). Without this\n // fallback, an org-scoped search SURFACE (e.g. `organizationMembers` for an\n // assignee picker) is requested with no org id and the backend correctly\n // 403s (\"Organization ID is required for organization-scoped collection\n // operations\"). Form pickers keep using their own (more specific) form\n // context unchanged — the operation-view scope is consulted ONLY when there\n // is no form context, so the form path is byte-for-byte preserved.\n const operationViewContext = useOptionalResourceOperationViewContext();\n\n const contextualParameters = useMemo(() => {\n if (formSchemaContext?.contextResourceIdentifiers) {\n return FrontendResourceUtils.buildContextualParameters(\n formSchemaContext.contextResourceIdentifiers,\n registry\n );\n }\n return operationViewContext?.contextualParameters ?? {};\n }, [formSchemaContext?.contextResourceIdentifiers, operationViewContext?.contextualParameters, registry]);\n\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const doOperationRef = useRef(doOperation);\n doOperationRef.current = doOperation;\n const contextualParametersRef = useRef(contextualParameters);\n contextualParametersRef.current = contextualParameters;\n\n const schemaType = getSchemaType(schema);\n const isMultiple = schemaType === FieldSchemaType.ARRAY;\n const fkSchema = isMultiple ? (getArrayItemSchema(schema) || schema) : schema;\n\n const resourceType = useMemo(() => {\n if (targetResourceType) {\n return targetResourceType;\n }\n\n try {\n return FrontendResourceUtils.resolveResourceTypeForForeignKey(name, fkSchema, registry);\n } catch {\n return undefined;\n }\n }, [fkSchema, name, registry, targetResourceType]);\n\n // Scope-required reference search (registry inference): the picker SEARCHES the\n // FK target (`resourceType`) directly and labels results with the TARGET's own\n // display config — never a separate \"surface\" resource. When the target has an\n // M:N junction to a scope present in the current context (e.g.\n // users ↔ organizations via organizationMembers, with the caller's\n // `organizationId` injected by the app scope), the search is restricted to that\n // single scope param so the backend's scope-anchored route\n // (`/organizations/{org}/users/search`) is selected and results are scoped\n // through the junction (members of the caller's org), authorized by membership.\n // Inferred per-fetch from `registry.manyToManyScopeJunctions` (Phase 1) — no\n // per-field declaration. The scope restriction also prevents an unrelated\n // context param (e.g. the caller's own `userId`) from hijacking route selection\n // and collapsing the result set to a single record.\n\n const [isOpen, setIsOpen] = useState(false);\n const [options, setOptions] = useState<FieldOption<string>[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingCurrentValue, setIsLoadingCurrentValue] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [currentValueLabels, setCurrentValueLabels] = useState<Map<string, string>>(new Map());\n // E-4: track the most recent fetch error so the consumer can surface it\n const [fetchError, setFetchError] = useState<DisplayableError | null>(null);\n\n const normalizedValue = useMemo(\n () => normalizeResourceReferenceSelectionValue(value),\n [value],\n );\n\n const readOperation = useMemo(() => {\n if (!resourceType) {\n return null;\n }\n\n return pickPreferredOperationForCoreSemantic(\n registry.resourceConfigurations?.[resourceType]?.operations ?? [],\n CoreResourceOperation.READ,\n ) ?? null;\n }, [registry, resourceType]);\n\n // =========================================================================\n // FETCH OPTIONS\n // =========================================================================\n\n const fetchOptions = useCallback(async (query?: string) => {\n if (!resourceType) return;\n setIsLoading(true);\n setFetchError(null);\n\n try {\n const operationPath = FrontendResourceUtils.buildForeignKeySearchOperationPath(resourceType, registry);\n const searchParams = FrontendResourceUtils.buildForeignKeySearchParams(query, INITIAL_LOAD_LIMIT);\n\n // Infer the scope junction (if any) for this FK target from the registry\n // map, using the scope params present in the LIVE context. When found,\n // restrict the search to that ONE scope param so the backend's\n // scope-anchored route is selected (members of the caller's org) and no\n // unrelated context param (e.g. the caller's own userId) hijacks route\n // selection. Otherwise pass the host context unchanged for a plain target\n // search. Guard for partial (test) registries with no map.\n const hostContextualParameters = contextualParametersRef.current;\n const scopeJunction = registry.manyToManyScopeJunctions\n ? Resources_SharedUtils.findScopeJunctionForTargetInContext(\n registry.manyToManyScopeJunctions,\n resourceType,\n new Set(Object.keys(hostContextualParameters)),\n )\n : undefined;\n const scopeValue = scopeJunction ? hostContextualParameters[scopeJunction.scopeFkField] : undefined;\n const effectiveContextualParameters =\n scopeJunction && (typeof scopeValue === 'string' || typeof scopeValue === 'number') && String(scopeValue).trim() !== ''\n ? { [scopeJunction.scopeFkField]: scopeValue }\n : hostContextualParameters;\n\n const result = await doOperationRef.current(operationPath, {\n contextualParameters: effectiveContextualParameters,\n queryParameters: searchParams.queryParameters,\n });\n\n let items: Record<string, unknown>[] = [];\n if (Array.isArray(result)) {\n items = result as Record<string, unknown>[];\n } else if (result && typeof result === 'object') {\n const resultObj = result as { data?: Record<string, unknown>[]; items?: Record<string, unknown>[] };\n items = resultObj.data || resultObj.items || [];\n }\n\n // Label results with the FK TARGET's own display config (e.g. users.email),\n // symmetric with the current-value + chip label paths. The stored option\n // value is the target record's own id — no projection.\n setOptions(mapResourceReferenceOptions({\n items,\n resourceType,\n registry,\n t,\n }));\n } catch (err) {\n const errorInfo = extractErrorInfo(err);\n LoggerFrontendService.getLogger().error(\n '[useResourceSearch] Failed to fetch options:',\n { resourceType, query, ...errorInfo, error: err },\n );\n // Shown in the picker's empty state: localized text, never the reference (#1160). The resolver has a\n // stable identity, so this callback's dependencies are unchanged.\n setFetchError({ ...errorInfo, message: toUserFacingErrorMessage(err) });\n setOptions([]);\n } finally {\n setIsLoading(false);\n }\n }, [resourceType, registry, t]);\n\n // =========================================================================\n // RESOLVE CURRENT VALUE LABELS\n // =========================================================================\n\n const currentValueLabelsRef = useRef(currentValueLabels);\n currentValueLabelsRef.current = currentValueLabels;\n\n const resolveCurrentValueLabels = useCallback(async () => {\n if (!resourceType || normalizedValue.length === 0) return;\n\n const unresolvedIds = normalizedValue.filter(id => !currentValueLabelsRef.current.has(id));\n if (unresolvedIds.length === 0) return;\n\n setIsLoadingCurrentValue(true);\n\n const newLabels = new Map(currentValueLabelsRef.current);\n\n for (const id of unresolvedIds) {\n try {\n const { label } = await fetchResourceReferenceRecordAndLabel({\n resourceType,\n id,\n registry,\n doOperation: doOperationRef.current,\n contextualParameters: contextualParametersRef.current,\n readOperation,\n t,\n });\n newLabels.set(id, label);\n } catch {\n newLabels.set(id, id);\n }\n }\n\n setCurrentValueLabels(newLabels);\n setIsLoadingCurrentValue(false);\n }, [resourceType, normalizedValue, registry, readOperation, t]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n\n useEffect(() => {\n resolveCurrentValueLabels();\n }, [resolveCurrentValueLabels]);\n\n // SINGLE fetch driver. Every options request is caused by a user gesture\n // observable in (isOpen, searchQuery): opening the dropdown fetches the\n // unfiltered head (query === ''), typing fetches the debounced filtered\n // set, clearing the query re-fetches the unfiltered head, and reopening\n // after a failure retries exactly once (handleOpenChange clears the error).\n //\n // Do NOT add a data-shape condition (e.g. `options.length === 0`) as a\n // fetch trigger here or in a sibling effect. Zero options is a RESOLVED\n // state, not a not-yet-loaded state: a successful fetch over an empty\n // collection settles on zero options just as legitimately as a failed one,\n // and a shape-driven trigger turns both into an unbounded refetch loop\n // (each completed request flips `isLoading`, re-runs the effect, and\n // re-satisfies the \"still empty\" condition — one request per round-trip,\n // forever). Empty is rendered by the consumer via `emptyMessage` /\n // `fetchError`; it is only ever retried through a new gesture.\n useEffect(() => {\n if (!isOpen) return;\n\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n if (searchQuery.length >= MIN_SEARCH_CHARS) {\n searchTimeoutRef.current = setTimeout(() => {\n fetchOptions(searchQuery);\n }, SEARCH_DEBOUNCE_MS);\n } else if (searchQuery.length === 0) {\n fetchOptions();\n }\n\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, [searchQuery, isOpen, fetchOptions]);\n\n // =========================================================================\n // SEARCH HANDLER\n // =========================================================================\n\n const handleSearchChange = useCallback((search: string) => {\n setSearchQuery(search);\n }, []);\n\n const handleOpenChange = useCallback((open: boolean) => {\n setIsOpen(open);\n if (!open) {\n setSearchQuery('');\n } else {\n // Reopening is the user's natural retry gesture after a failed fetch —\n // the open transition itself triggers one new attempt via the fetch\n // driver effect. Clearing the error here just prevents the stale error\n // notice from flashing while that attempt is in flight.\n setFetchError(null);\n }\n }, []);\n\n // =========================================================================\n // DISPLAY HELPERS\n // =========================================================================\n\n const getDisplayLabel = useCallback((id: string): string => {\n return currentValueLabels.get(id) || id;\n }, [currentValueLabels]);\n\n const emptyMessage = useMemo(() => {\n if (searchQuery.length > 0 && searchQuery.length < MIN_SEARCH_CHARS) {\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'minSearchChars', { count: String(MIN_SEARCH_CHARS) });\n }\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'noResults');\n }, [searchQuery, tComponent]);\n\n // Audit D2: prefer a TARGET-NAMED placeholder (\"Select a Todo list…\") over the\n // generic \"Select an item\". The `{target}` interpolation value is the FIELD's\n // resolved edit label — the same string shown as the field label above the\n // control, so placeholder and label can never disagree, and a label-tier fix\n // (e.g. singularizing a generated plural) automatically heals the placeholder.\n //\n // `selectReferencePlaceholder` is a framework-declared label. An application\n // whose generated bundle does not carry it yet shows the KEY (#1414) — it used\n // to fall back silently to the generic placeholder, so nothing ever said label\n // generation was owed. The generic `selectPlaceholder` is for the cases below\n // where the parameterized wording does not apply, not for a missing label.\n //\n // Single-selection only: the host resource type comes from the FORM context\n // (filter pickers outside a form keep the generic placeholder), and multi\n // pickers keep the generic wording — their trigger shows a selection count,\n // not an article-phrased prompt.\n const hostResourceTypeForLabels = formSchemaContext?.resourceType;\n const defaultPlaceholder = useMemo(() => {\n if (!isMultiple && hostResourceTypeForLabels) {\n const targetLabel = tResourceFieldEdit(hostResourceTypeForLabels, name, 'label');\n if (targetLabel) {\n return resolveComponentLabel({\n tComponent,\n componentType: FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE,\n key: 'selectReferencePlaceholder',\n params: { target: targetLabel },\n });\n }\n }\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'selectPlaceholder');\n }, [hostResourceTypeForLabels, isMultiple, name, tComponent, tResourceFieldEdit]);\n\n return {\n options,\n isLoading,\n isLoadingCurrentValue,\n isOpen,\n setIsOpen: handleOpenChange,\n handleSearchChange,\n getDisplayLabel,\n resourceType,\n isMultiple,\n normalizedValue,\n emptyMessage,\n defaultPlaceholder,\n fetchError,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useResourceSearch.js","sourceRoot":"","sources":["../../../../../../src/components/resources-fields/resource-reference/useResourceSearch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * useResourceSearch\n *\n * Reusable hook for async resource-reference search:\n * - Fetches initial options when the dropdown opens\n * - Debounces search queries and fetches filtered results\n * - Resolves display labels for currently selected values\n * - Returns data shaped for Combobox/ComboboxMultiple consumption\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { z } from 'zod';\nimport { getArrayItemSchema, getSchemaType, FieldSchemaType } from '@wildo-ai/zod-decorators';\nimport { useResourceRegistry } from '~wildo-frontend-lib/core/resources/useResourceRegistry';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\nimport { FrontendResourceUtils } from '~wildo-frontend-lib/core/resources/frontend-resource.utils';\nimport { pickPreferredOperationForCoreSemantic } from '~wildo-frontend-lib/core/resources/operation-semantics.frontend.utils';\nimport { useOptionalFormSchemaContext } from '~wildo-frontend-lib/components/form/useFormSchemaContext';\nimport { resolveComponentLabel } from '~wildo-frontend-lib/core/i18n/component-label-resolution.utils';\nimport { useOptionalResourceOperationViewContext } from '~wildo-frontend-lib/core/resources/ResourceOperationViewContext';\nimport { FrontendComponentType } from '@wildo-ai/presets-components-models';\nimport { CoreResourceOperation } from '@wildo-ai/saas-models';\nimport type { FieldOption } from '~wildo-frontend-lib/components/form/form-field-types';\nimport {\n fetchResourceReferenceRecordAndLabel,\n mapResourceReferenceOptions,\n normalizeResourceReferenceSelectionValue,\n resolveScopeRequiredReferenceParameters,\n} from './resource-reference.shared.utils';\nimport { extractErrorInfo, type DisplayableError } from '~wildo-frontend-lib/core/errors/errors.frontend.schemas';\nimport { useUserFacingErrorMessage } from '~wildo-frontend-lib/core/errors/useUserFacingErrorMessage';\nimport { LoggerFrontendService } from '~wildo-frontend-lib/core/monitoring/logger.frontend.service';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst INITIAL_LOAD_LIMIT = 10;\nconst SEARCH_DEBOUNCE_MS = 300;\nconst MIN_SEARCH_CHARS = 2;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface UseResourceSearchOptions {\n schema: z.ZodTypeAny;\n name: string;\n value: string | string[] | undefined;\n targetResourceType?: string;\n}\n\nexport interface UseResourceSearchResult {\n options: FieldOption<string>[];\n isLoading: boolean;\n isLoadingCurrentValue: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n handleSearchChange: (search: string) => void;\n getDisplayLabel: (id: string) => string;\n resourceType: string | undefined;\n isMultiple: boolean;\n normalizedValue: string[];\n emptyMessage: string;\n defaultPlaceholder: string;\n /**\n * E-4: surfaced error for the most-recent options fetch.\n * Consumers (Combobox/ComboboxMultiple presets) can render this as an inline\n * footer/notice in the dropdown so users know why the list is empty.\n * `null` when there is no error to display. Its `message` is already localized text (#1160).\n */\n fetchError: DisplayableError | null;\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\nexport function useResourceSearch({\n schema,\n name,\n value,\n targetResourceType,\n}: UseResourceSearchOptions): UseResourceSearchResult {\n const { registry, doOperation } = useResourceRegistry();\n const { t, formatDate, formatDateTime, tComponent, tResourceFieldEdit } = useI18n({ component: FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE });\n const toUserFacingErrorMessage = useUserFacingErrorMessage();\n\n const formSchemaContext = useOptionalFormSchemaContext();\n // Filter pickers render OUTSIDE a form (no FormSchemaContext) but INSIDE the\n // list's `ResourceOperationViewProvider`, which carries the rendered\n // operation's scope (e.g. the current `organizationId`). Without this\n // fallback, an org-scoped search SURFACE (e.g. `organizationMembers` for an\n // assignee picker) is requested with no org id and the backend correctly\n // 403s (\"Organization ID is required for organization-scoped collection\n // operations\"). Form pickers keep using their own (more specific) form\n // context unchanged — the operation-view scope is consulted ONLY when there\n // is no form context, so the form path is byte-for-byte preserved.\n const operationViewContext = useOptionalResourceOperationViewContext();\n\n const contextualParameters = useMemo(() => {\n if (formSchemaContext?.contextResourceIdentifiers) {\n return FrontendResourceUtils.buildContextualParameters(\n formSchemaContext.contextResourceIdentifiers,\n registry\n );\n }\n return operationViewContext?.contextualParameters ?? {};\n }, [formSchemaContext?.contextResourceIdentifiers, operationViewContext?.contextualParameters, registry]);\n\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const doOperationRef = useRef(doOperation);\n doOperationRef.current = doOperation;\n const contextualParametersRef = useRef(contextualParameters);\n contextualParametersRef.current = contextualParameters;\n\n const schemaType = getSchemaType(schema);\n const isMultiple = schemaType === FieldSchemaType.ARRAY;\n const fkSchema = isMultiple ? (getArrayItemSchema(schema) || schema) : schema;\n\n const resourceType = useMemo(() => {\n if (targetResourceType) {\n return targetResourceType;\n }\n\n try {\n return FrontendResourceUtils.resolveResourceTypeForForeignKey(name, fkSchema, registry);\n } catch {\n return undefined;\n }\n }, [fkSchema, name, registry, targetResourceType]);\n\n // Scope-required reference search (registry inference): the picker SEARCHES the\n // FK target (`resourceType`) directly and labels results with the TARGET's own\n // display config — never a separate \"surface\" resource. When the target has an\n // M:N junction to a scope present in the current context (e.g.\n // users ↔ organizations via organizationMembers, with the caller's\n // `organizationId` injected by the app scope), the search is restricted to that\n // single scope param so the backend's scope-anchored route\n // (`/organizations/{org}/users/search`) is selected and results are scoped\n // through the junction (members of the caller's org), authorized by membership.\n // Inferred per-fetch from `registry.manyToManyScopeJunctions` (Phase 1) — no\n // per-field declaration. The scope restriction also prevents an unrelated\n // context param (e.g. the caller's own `userId`) from hijacking route selection\n // and collapsing the result set to a single record.\n\n const [isOpen, setIsOpen] = useState(false);\n const [options, setOptions] = useState<FieldOption<string>[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingCurrentValue, setIsLoadingCurrentValue] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [currentValueLabels, setCurrentValueLabels] = useState<Map<string, string>>(new Map());\n // E-4: track the most recent fetch error so the consumer can surface it\n const [fetchError, setFetchError] = useState<DisplayableError | null>(null);\n\n const normalizedValue = useMemo(\n () => normalizeResourceReferenceSelectionValue(value),\n [value],\n );\n\n const readOperation = useMemo(() => {\n if (!resourceType) {\n return null;\n }\n\n return pickPreferredOperationForCoreSemantic(\n registry.resourceConfigurations?.[resourceType]?.operations ?? [],\n CoreResourceOperation.READ,\n ) ?? null;\n }, [registry, resourceType]);\n\n // =========================================================================\n // FETCH OPTIONS\n // =========================================================================\n\n const fetchOptions = useCallback(async (query?: string) => {\n if (!resourceType) return;\n setIsLoading(true);\n setFetchError(null);\n\n try {\n const operationPath = FrontendResourceUtils.buildForeignKeySearchOperationPath(resourceType, registry);\n const searchParams = FrontendResourceUtils.buildForeignKeySearchParams(query, INITIAL_LOAD_LIMIT);\n\n // Infer the scope junction (if any) for this FK target from the LIVE context, and restrict the\n // search to that ONE scope param so the scope-anchored route is selected (members of the\n // caller's org). Otherwise pass the host context unchanged for a plain target search. One\n // definition, shared with the label probe — see `resolveScopeRequiredReferenceParameters`.\n const hostContextualParameters = contextualParametersRef.current;\n const effectiveContextualParameters = resolveScopeRequiredReferenceParameters({\n resourceType,\n registry,\n contextualParameters: hostContextualParameters,\n }) ?? hostContextualParameters;\n\n const result = await doOperationRef.current(operationPath, {\n contextualParameters: effectiveContextualParameters,\n queryParameters: searchParams.queryParameters,\n });\n\n let items: Record<string, unknown>[] = [];\n if (Array.isArray(result)) {\n items = result as Record<string, unknown>[];\n } else if (result && typeof result === 'object') {\n const resultObj = result as { data?: Record<string, unknown>[]; items?: Record<string, unknown>[] };\n items = resultObj.data || resultObj.items || [];\n }\n\n // Label results with the FK TARGET's own display config (e.g. users.email),\n // symmetric with the current-value + chip label paths. The stored option\n // value is the target record's own id — no projection.\n setOptions(mapResourceReferenceOptions({\n items,\n resourceType,\n registry,\n t,\n formatDate,\n formatDateTime,\n }));\n } catch (err) {\n const errorInfo = extractErrorInfo(err);\n LoggerFrontendService.getLogger().error(\n '[useResourceSearch] Failed to fetch options:',\n { resourceType, query, ...errorInfo, error: err },\n );\n // Shown in the picker's empty state: localized text, never the reference (#1160). The resolver has a\n // stable identity, so this callback's dependencies are unchanged.\n setFetchError({ ...errorInfo, message: toUserFacingErrorMessage(err) });\n setOptions([]);\n } finally {\n setIsLoading(false);\n }\n }, [resourceType, registry, t, formatDate, formatDateTime]);\n\n // =========================================================================\n // RESOLVE CURRENT VALUE LABELS\n // =========================================================================\n\n const currentValueLabelsRef = useRef(currentValueLabels);\n currentValueLabelsRef.current = currentValueLabels;\n\n const resolveCurrentValueLabels = useCallback(async () => {\n if (!resourceType || normalizedValue.length === 0) return;\n\n const unresolvedIds = normalizedValue.filter(id => !currentValueLabelsRef.current.has(id));\n if (unresolvedIds.length === 0) return;\n\n setIsLoadingCurrentValue(true);\n\n const newLabels = new Map(currentValueLabelsRef.current);\n\n for (const id of unresolvedIds) {\n try {\n const { label } = await fetchResourceReferenceRecordAndLabel({\n resourceType,\n id,\n registry,\n doOperation: doOperationRef.current,\n contextualParameters: contextualParametersRef.current,\n readOperation,\n t,\n formatDate,\n formatDateTime,\n });\n newLabels.set(id, label);\n } catch {\n newLabels.set(id, id);\n }\n }\n\n setCurrentValueLabels(newLabels);\n setIsLoadingCurrentValue(false);\n }, [resourceType, normalizedValue, registry, readOperation, t, formatDate, formatDateTime]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n\n useEffect(() => {\n resolveCurrentValueLabels();\n }, [resolveCurrentValueLabels]);\n\n // SINGLE fetch driver. Every options request is caused by a user gesture\n // observable in (isOpen, searchQuery): opening the dropdown fetches the\n // unfiltered head (query === ''), typing fetches the debounced filtered\n // set, clearing the query re-fetches the unfiltered head, and reopening\n // after a failure retries exactly once (handleOpenChange clears the error).\n //\n // Do NOT add a data-shape condition (e.g. `options.length === 0`) as a\n // fetch trigger here or in a sibling effect. Zero options is a RESOLVED\n // state, not a not-yet-loaded state: a successful fetch over an empty\n // collection settles on zero options just as legitimately as a failed one,\n // and a shape-driven trigger turns both into an unbounded refetch loop\n // (each completed request flips `isLoading`, re-runs the effect, and\n // re-satisfies the \"still empty\" condition — one request per round-trip,\n // forever). Empty is rendered by the consumer via `emptyMessage` /\n // `fetchError`; it is only ever retried through a new gesture.\n useEffect(() => {\n if (!isOpen) return;\n\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n if (searchQuery.length >= MIN_SEARCH_CHARS) {\n searchTimeoutRef.current = setTimeout(() => {\n fetchOptions(searchQuery);\n }, SEARCH_DEBOUNCE_MS);\n } else if (searchQuery.length === 0) {\n fetchOptions();\n }\n\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, [searchQuery, isOpen, fetchOptions]);\n\n // =========================================================================\n // SEARCH HANDLER\n // =========================================================================\n\n const handleSearchChange = useCallback((search: string) => {\n setSearchQuery(search);\n }, []);\n\n const handleOpenChange = useCallback((open: boolean) => {\n setIsOpen(open);\n if (!open) {\n setSearchQuery('');\n } else {\n // Reopening is the user's natural retry gesture after a failed fetch —\n // the open transition itself triggers one new attempt via the fetch\n // driver effect. Clearing the error here just prevents the stale error\n // notice from flashing while that attempt is in flight.\n setFetchError(null);\n }\n }, []);\n\n // =========================================================================\n // DISPLAY HELPERS\n // =========================================================================\n\n const getDisplayLabel = useCallback((id: string): string => {\n return currentValueLabels.get(id) || id;\n }, [currentValueLabels]);\n\n const emptyMessage = useMemo(() => {\n if (searchQuery.length > 0 && searchQuery.length < MIN_SEARCH_CHARS) {\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'minSearchChars', { count: String(MIN_SEARCH_CHARS) });\n }\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'noResults');\n }, [searchQuery, tComponent]);\n\n // Audit D2: prefer a TARGET-NAMED placeholder (\"Select a Todo list…\") over the\n // generic \"Select an item\". The `{target}` interpolation value is the FIELD's\n // resolved edit label — the same string shown as the field label above the\n // control, so placeholder and label can never disagree, and a label-tier fix\n // (e.g. singularizing a generated plural) automatically heals the placeholder.\n //\n // `selectReferencePlaceholder` is a framework-declared label. An application\n // whose generated bundle does not carry it yet shows the KEY (#1414) — it used\n // to fall back silently to the generic placeholder, so nothing ever said label\n // generation was owed. The generic `selectPlaceholder` is for the cases below\n // where the parameterized wording does not apply, not for a missing label.\n //\n // Single-selection only: the host resource type comes from the FORM context\n // (filter pickers outside a form keep the generic placeholder), and multi\n // pickers keep the generic wording — their trigger shows a selection count,\n // not an article-phrased prompt.\n const hostResourceTypeForLabels = formSchemaContext?.resourceType;\n const defaultPlaceholder = useMemo(() => {\n if (!isMultiple && hostResourceTypeForLabels) {\n const targetLabel = tResourceFieldEdit(hostResourceTypeForLabels, name, 'label');\n if (targetLabel) {\n return resolveComponentLabel({\n tComponent,\n componentType: FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE,\n key: 'selectReferencePlaceholder',\n params: { target: targetLabel },\n });\n }\n }\n return tComponent(FrontendComponentType.RESOURCES_FIELDS_RESOURCE_REFERENCE, 'selectPlaceholder');\n }, [hostResourceTypeForLabels, isMultiple, name, tComponent, tResourceFieldEdit]);\n\n return {\n options,\n isLoading,\n isLoadingCurrentValue,\n isOpen,\n setIsOpen: handleOpenChange,\n handleSearchChange,\n getDisplayLabel,\n resourceType,\n isMultiple,\n normalizedValue,\n emptyMessage,\n defaultPlaceholder,\n fetchError,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentSectionContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/ContentSectionContainer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAEV,aAAa,EAed,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAAoG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ContentSectionContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/ContentSectionContainer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAEV,aAAa,EAed,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAAoG,gBAAgB,EAAqB,MAAM,qCAAqC,CAAC;AAkB5L,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,wBAAwB;IACxB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,kCAAkC;IAClC,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,qEAAqE;IACrE,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;CAC1D;AAsKD,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA8D1E,CAAC;AA8uBF,eAAe,uBAAuB,CAAC"}
|
|
@@ -21,7 +21,7 @@ import { SectionMode, DisplayDirection } from '@wildo-ai/zod-decorators';
|
|
|
21
21
|
import { cn } from '../../core/ui/cn.js';
|
|
22
22
|
import { useUI } from '../../core/ui/useUI.js';
|
|
23
23
|
import { useSurfacePolicy } from '../../core/ui/SurfacePolicyContext.js';
|
|
24
|
-
import { ButtonSize, FrontendComponentType, LabellingTypes, UIBehavior, SelectableVariant, SurfaceVariant } from '@wildo-ai/presets-components-models';
|
|
24
|
+
import { ButtonSize, FrontendComponentType, LabellingTypes, UIBehavior, SelectableVariant, SurfaceVariant, TypographyVariant } from '@wildo-ai/presets-components-models';
|
|
25
25
|
import { useI18n } from '../../core/i18n/useI18n.js';
|
|
26
26
|
import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/sections/tabs.js';
|
|
27
27
|
import { Timeline, TimelineBody, TimelineEntry } from '../../components/data-display/timeline.js';
|
|
@@ -82,8 +82,8 @@ function wrapModeToAppearance(wrapMode) {
|
|
|
82
82
|
* GROUPED wrap-mode chrome (T3) — the modern default for stacked forms/settings.
|
|
83
83
|
*
|
|
84
84
|
* Renders ALL sections inside ONE `SurfaceVariant.CARD`, each as a flat group
|
|
85
|
-
* introduced by an **eyebrow** label (`
|
|
86
|
-
*
|
|
85
|
+
* introduced by an **eyebrow** label (the theme's `TypographyVariant.EYEBROW` recipe, the same voice
|
|
86
|
+
* a TITLE-styled field label takes) and separated by `divide-y` — instead of a bordered card
|
|
87
87
|
* per section with a floating `<legend>`. Each group's body is a flat
|
|
88
88
|
* `ContentSection` (`SectionMode.DEFAULT`) so the native `<fieldset disabled>`
|
|
89
89
|
* cascade + inter-field spacing are preserved; the section title is promoted to
|
|
@@ -95,8 +95,9 @@ function wrapModeToAppearance(wrapMode) {
|
|
|
95
95
|
const GroupedSectionsCard = ({ sections, className }) => {
|
|
96
96
|
const { getRecipe } = useUI();
|
|
97
97
|
const cardRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.CARD);
|
|
98
|
+
const eyebrowRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.EYEBROW);
|
|
98
99
|
const getLabel = useContentSectionContainerLabel();
|
|
99
|
-
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.CARD, policyOverride: { nesting: { framingMode: 'always' } }, children: _jsx("div", { role: "region", "aria-label": getLabel('contentSectionsRegion'), className: cn(cardRecipe.base, 'divide-y divide-border', className), children: sections.map((section) => (_jsxs("section", { "data-slot": "content-group", className: "space-y-field p-card", children: [(section.title != null || section.icon != null) && (_jsxs("div", { className:
|
|
100
|
+
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.CARD, policyOverride: { nesting: { framingMode: 'always' } }, children: _jsx("div", { role: "region", "aria-label": getLabel('contentSectionsRegion'), className: cn(cardRecipe.base, 'divide-y divide-border', className), children: sections.map((section) => (_jsxs("section", { "data-slot": "content-group", className: "space-y-field p-card", children: [(section.title != null || section.icon != null) && (_jsxs("div", { className: cn('flex items-center gap-element-xs', eyebrowRecipe.base), children: [section.icon != null && _jsx("span", { className: "inline-flex items-center", children: section.icon }), section.title] })), section.description != null && (_jsx("p", { className: "text-sm text-muted-foreground", children: section.description })), _jsx(ContentSection, { appearance: SectionMode.DEFAULT, disabled: section.disabled, children: section.content })] }, section.id))) }) }));
|
|
100
101
|
};
|
|
101
102
|
/**
|
|
102
103
|
* Renders a section panel WITH its heading through `ContentSection` in PANEL mode:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentSectionContainer.js","sourceRoot":"","sources":["../../../../../src/components/sections/ContentSectionContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * ContentSectionContainer Component\n *\n * A universal container for rendering content sections in various modes.\n * Part of the UI Abstraction Patterns implementation.\n *\n * Uses the `SectionConfig` discriminated union — each mode variant\n * carries only its relevant parameters, enabling TypeScript narrowing\n * in the `switch (config.mode)` dispatcher.\n *\n * Supports 14 modes across 4 categories:\n * - Solo: default, card, ghost, collapsible\n * - Layout: inline, grid, columns\n * - Navigation: tabs, vertical_tabs, pills\n * - Expandable: accordion, expandable\n * - Guided: stepper, timeline\n */\n\nimport React, { useCallback, useId, useRef, useState } from 'react';\nimport { SectionMode, type SoloSectionMode, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport type {\n AutoSectionWrap,\n SectionConfig,\n SectionConfig_Default,\n SectionConfig_Card,\n SectionConfig_Ghost,\n SectionConfig_Inline,\n SectionConfig_Grid,\n SectionConfig_Columns,\n SectionConfig_Tabs,\n SectionConfig_VerticalTabs,\n SectionConfig_Pills,\n SectionConfig_Accordion,\n SectionConfig_Collapsible,\n SectionConfig_Expandable,\n SectionConfig_Stepper,\n SectionConfig_Timeline,\n} from '@wildo-ai/presets-components-models';\nimport { cn } from '~wildo-frontend-lib/core/ui/cn';\nimport { useUI } from '~wildo-frontend-lib/core/ui/useUI';\nimport { useSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { ButtonSize, FrontendComponentType, LabellingTypes, UIBehavior, SelectableVariant, SurfaceVariant, IndicatorVariant } from '@wildo-ai/presets-components-models';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\n\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '~wildo-frontend-lib/components/sections/tabs';\nimport { Timeline, TimelineBody, TimelineEntry } from '~wildo-frontend-lib/components/data-display/timeline';\nimport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '~wildo-frontend-lib/components/sections/accordion';\nimport { ToggleGroupType } from '~wildo-frontend-lib/components/form/controls/enum/toggle-group';\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from '~wildo-frontend-lib/components/sections/collapsible';\nimport { Button, ButtonVariants_Variant } from '~wildo-frontend-lib/components/actions/button';\nimport { Badge } from '~wildo-frontend-lib/components/data-display/badge';\nimport { Surface } from '~wildo-frontend-lib/components/sections/surface';\nimport { ContentSection } from '~wildo-frontend-lib/components/sections/content-section';\nimport { EmptyState } from '~wildo-frontend-lib/components/feedback/empty-state';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ContentSectionDescriptor {\n /** Unique identifier for the section */\n id: string;\n /** Display title resolved from i18n. */\n title?: React.ReactNode;\n /** Optional description */\n description?: React.ReactNode;\n /** Content to render */\n content: React.ReactNode;\n /** Optional icon */\n icon?: React.ReactNode;\n /** A count the section's tab carries beside its title, in the tone it reads in (#1325). */\n count?: number;\n countTone?: IndicatorVariant;\n /** Whether section is disabled */\n disabled?: boolean;\n}\n\nexport interface ContentSectionContainerProps {\n /** Array of sections to render */\n sections: ContentSectionDescriptor[];\n /** Configuration — discriminated union, narrowed by `config.mode` */\n config: SectionConfig;\n /** Additional CSS classes */\n className?: string;\n /** Callback when active section changes */\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nfunction resolveSectionWrapMode(value: string | undefined): AutoSectionWrap {\n switch (value) {\n case 'grouped':\n case 'flat':\n case 'separator-only':\n return value;\n default:\n return 'card-each';\n }\n}\n\n/**\n * Maps the surface-policy `autoSectionWrap` to a {@link ContentSection}\n * `appearance` (+ optional className). Every container panel now renders through\n * the registry-resolved `ContentSection` primitive (P3 consolidation), so panels\n * inherit the native `<fieldset disabled>` cascade and the truthful `when-orphan`\n * frame de-duplication that solo sections already have — instead of the old\n * always-on `<Surface variant=BASE><div border rounded-lg>` chrome that could not\n * de-dup its frame when nested:\n * - `card-each` → CARD (framed fieldset; frame self-suppresses when nested)\n * - `flat` → DEFAULT (bare fieldset, no frame)\n * - `separator-only` → DEFAULT + a bottom-divider className\n *\n * Note (plan P3, §7 Decision 2 — heading-chrome redesign): container panels render\n * through ContentSection's PANEL mode, which PRESERVES the titled-card-with-header\n * look (an `<h3>` band with icon over a `border-b` divider, content in a `p-card`\n * area) while gaining the `<fieldset>` disabled cascade + when-orphan frame de-dup.\n * The visible chrome is unchanged from the former bespoke `<Surface><div border\n * rounded-lg>`; only the element (div → fieldset) and the frame-dedup behavior change.\n */\nfunction wrapModeToAppearance(wrapMode: AutoSectionWrap): { appearance: SoloSectionMode; className?: string } {\n switch (wrapMode) {\n case 'flat':\n return { appearance: SectionMode.DEFAULT };\n case 'separator-only':\n return { appearance: SectionMode.DEFAULT, className: 'border-b pb-field last:border-b-0 last:pb-0' };\n // `grouped` renders its own single-card + eyebrow chrome in the stacked path\n // (see GroupedSectionsCard). Any OTHER container mode (grid/tabs/columns/…)\n // that resolves `grouped` falls back to `card-each` here — those modes supply\n // their own layout, so a per-section card is the sensible frame.\n case 'grouped':\n case 'card-each':\n default:\n return { appearance: SectionMode.CARD };\n }\n}\n\n/**\n * GROUPED wrap-mode chrome (T3) — the modern default for stacked forms/settings.\n *\n * Renders ALL sections inside ONE `SurfaceVariant.CARD`, each as a flat group\n * introduced by an **eyebrow** label (`text-xs font-semibold uppercase tracking-wide\n * text-muted-foreground`) and separated by `divide-y` — instead of a bordered card\n * per section with a floating `<legend>`. Each group's body is a flat\n * `ContentSection` (`SectionMode.DEFAULT`) so the native `<fieldset disabled>`\n * cascade + inter-field spacing are preserved; the section title is promoted to\n * the eyebrow (not the fieldset legend), so there is no nested per-group border.\n *\n * Used only by the stacked composition (single-section + InlineMode). It does not\n * touch the `ContentSection` primitive itself — it composes it.\n */\nconst GroupedSectionsCard: React.FC<{\n sections: ContentSectionDescriptor[];\n className?: string;\n}> = ({ sections, className }) => {\n const { getRecipe } = useUI();\n const cardRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.CARD);\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <Surface\n asChild\n emitPolicyVars={false}\n variant={SurfaceVariant.CARD}\n policyOverride={{ nesting: { framingMode: 'always' as const } }}\n >\n <div\n role=\"region\"\n aria-label={getLabel('contentSectionsRegion')}\n className={cn(cardRecipe.base, 'divide-y divide-border', className)}\n >\n {sections.map((section) => (\n <section key={section.id} data-slot=\"content-group\" className=\"space-y-field p-card\">\n {(section.title != null || section.icon != null) && (\n <div className=\"flex items-center gap-element-xs text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {section.icon != null && <span className=\"inline-flex items-center\">{section.icon}</span>}\n {section.title}\n </div>\n )}\n {section.description != null && (\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n )}\n <ContentSection appearance={SectionMode.DEFAULT} disabled={section.disabled}>\n {section.content}\n </ContentSection>\n </section>\n ))}\n </div>\n </Surface>\n );\n};\n\n/**\n * Renders a section panel WITH its heading through `ContentSection` in PANEL mode:\n * the heading renders as an `<h3>`/`<h4>` band (icon + title, level per `titleTag`,\n * default `h3`) with a `border-b` divider above the `p-card` content area (the\n * titled-card-with-header look), framed per `wrapMode` via a `<fieldset>` that\n * carries the disabled cascade + when-orphan frame-dedup. Used by the panel-heading\n * modes (single / inline / grid / columns / collapsible / expandable). Collapsible\n * panels pass `titleTag: 'h4'` since they nest under the collapsible-all `<h3>`.\n * The explicit `section.disabled` flows to the panel `<fieldset disabled>` for the\n * content cascade (plan Decision 4: panel content disabling is explicit/form-driven,\n * distinct from nav-trigger gating).\n */\nfunction renderPanelSection(section: ContentSectionDescriptor, params?: {\n titleTag?: 'h3' | 'h4';\n wrapMode?: AutoSectionWrap;\n}): React.ReactNode {\n const { appearance, className } = wrapModeToAppearance(params?.wrapMode ?? 'card-each');\n\n return (\n <ContentSection\n key={section.id}\n panel\n appearance={appearance}\n headingTag={params?.titleTag}\n legend={section.title}\n icon={section.icon}\n description={section.description}\n disabled={section.disabled}\n className={className}\n >\n {section.content}\n </ContentSection>\n );\n}\n\n/**\n * Renders a section panel WITHOUT a panel heading through `ContentSection` — used\n * by the navigation/guided modes (tabs / vertical-tabs / pills / accordion /\n * stepper / timeline) where the heading lives in the trigger or nav and any\n * description/title is already injected into `content`. No `disabled` is passed:\n * nav-trigger gating stays on the trigger, and form-context disabling already\n * cascades from the form-level `<fieldset disabled>` (plan Decision 4).\n */\nfunction renderSectionContentChrome(\n section: ContentSectionDescriptor,\n content: React.ReactNode = section.content,\n wrapMode: AutoSectionWrap = 'card-each',\n): React.ReactNode {\n const { appearance, className } = wrapModeToAppearance(wrapMode);\n\n return (\n <ContentSection key={section.id} panel appearance={appearance} className={className}>\n {content}\n </ContentSection>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\nexport const ContentSectionContainer: React.FC<ContentSectionContainerProps> = ({\n sections,\n config,\n className,\n onSectionChange,\n}) => {\n const surfacePolicy = useSurfacePolicy();\n const sectionWrapMode = resolveSectionWrapMode(surfacePolicy.autoRender?.autoSectionWrap);\n\n if (sections.length === 0) {\n if (config.emptyStateMessage) {\n return (\n <EmptyState\n title={config.emptyStateMessage}\n variant=\"compact\"\n className={className}\n />\n );\n }\n return null;\n }\n\n if (sections.length === 1 && !config.showSingleSectionNav) {\n if (sectionWrapMode === 'grouped') {\n return <GroupedSectionsCard sections={sections} className={className} />;\n }\n return (\n <div className={className}>\n {renderPanelSection(sections[0], { wrapMode: sectionWrapMode })}\n </div>\n );\n }\n\n switch (config.mode) {\n case SectionMode.DEFAULT:\n case SectionMode.CARD:\n case SectionMode.GHOST:\n case SectionMode.INLINE:\n return <InlineMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.GRID:\n return <GridMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.COLUMNS:\n return <ColumnsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.TABS:\n return <TabsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.VERTICAL_TABS:\n return <VerticalTabsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.PILLS:\n return <PillsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.ACCORDION:\n return <AccordionMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.COLLAPSIBLE:\n return <CollapsibleMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.EXPANDABLE:\n return <ExpandableMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.STEPPER:\n return <StepperMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.TIMELINE:\n return <TimelineMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n default:\n return <InlineMode sections={sections} config={{ mode: SectionMode.INLINE }} className={className} sectionWrapMode={sectionWrapMode} />;\n }\n};\n\n// =============================================================================\n// LAYOUT-BASED MODES\n// =============================================================================\n\n// =============================================================================\n// GAP HELPER\n// =============================================================================\n\nconst GAP_CLASSES = {\n sm: 'gap-element',\n md: 'gap-field',\n lg: 'gap-section',\n} as const;\n\nconst CONTENT_SECTION_CONTAINER_COMPONENT = FrontendComponentType.LOW_LEVEL_CONTENT_SECTION_CONTAINER;\n\nfunction useContentSectionContainerLabel(): (\n key: string,\n params?: Record<string, string | number>,\n) => string {\n const { tComponent } = useI18n({\n component: CONTENT_SECTION_CONTAINER_COMPONENT,\n });\n\n return useCallback((key: string, params?: Record<string, string | number>) => {\n const result = tComponent(CONTENT_SECTION_CONTAINER_COMPONENT, key, params);\n const base = `${LabellingTypes.COMPONENTS}.${CONTENT_SECTION_CONTAINER_COMPONENT}.${key}`;\n return result === base ? '' : result;\n }, [tComponent]);\n}\n\n// =============================================================================\n// LAYOUT-BASED MODES\n// =============================================================================\n\ninterface InlineModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Default | SectionConfig_Card | SectionConfig_Ghost | SectionConfig_Inline;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst InlineMode: React.FC<InlineModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const gap = ('gap' in config ? config.gap : undefined) ?? 'md';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n // GROUPED (modern default): one card, eyebrow-labelled groups, divide-y.\n if (sectionWrapMode === 'grouped') {\n return <GroupedSectionsCard sections={sections} className={className} />;\n }\n\n return (\n <div\n className={cn(`space-y-field ${gapClass}`, className)}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentSectionsRegion')}\n >\n {sections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n </div>\n );\n};\n\ninterface GridModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Grid;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst GridMode: React.FC<GridModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const columnCount = config.columnCount === 'auto' ? undefined : config.columnCount ?? 2;\n const gap = config.gap ?? 'md';\n const minColumnWidth = config.minColumnWidth ?? '300px';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n const style: React.CSSProperties = columnCount\n ? { gridTemplateColumns: `repeat(${columnCount}, 1fr)` }\n : { gridTemplateColumns: `repeat(auto-fit, minmax(${minColumnWidth}, 1fr))` };\n\n return (\n <div\n className={cn('grid', gapClass, className)}\n style={style}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentGridRegion')}\n >\n {sections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n </div>\n );\n};\n\ninterface ColumnsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Columns;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst ColumnsMode: React.FC<ColumnsModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const columnCount = config.columnCount === 'auto' ? 2 : config.columnCount ?? 2;\n const gap = config.gap ?? 'md';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <div\n className={cn('columns-2', gapClass, className)}\n style={{ columnCount }}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentColumnsRegion')}\n >\n {sections.map((section) => (\n <div\n key={section.id}\n className={cn(\n 'break-inside-avoid mb-field',\n sectionWrapMode === 'separator-only' && 'border-b pb-field last:border-b-0 last:pb-0'\n )}\n >\n {renderPanelSection(section, { wrapMode: sectionWrapMode === 'separator-only' ? 'flat' : sectionWrapMode })}\n </div>\n ))}\n </div>\n );\n};\n\n// =============================================================================\n// NAVIGATION-BASED MODES\n// =============================================================================\n\ninterface TabsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Tabs;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst TabsMode: React.FC<TabsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultActive ?? sections[0]?.id;\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <Tabs\n /*\n * Controlled when `config.activeSection` is present, uncontrolled otherwise — the standard\n * Radix contract, exposed so an OWNER can drive the tab (deep links, cross-pane navigation).\n * In the controlled shape every user click is only REPORTED through `onSectionChange`; an\n * owner that sets `activeSection` and ignores the callback has frozen its tabs.\n */\n {...(config.activeSection !== undefined ? { value: config.activeSection } : { defaultValue })}\n className={className}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n <TabsList role=\"tablist\" aria-label={config.ariaLabel ?? getLabel('sectionTabsNav')}>\n {sections.map((section) => (\n <TabsTrigger\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n role=\"tab\"\n aria-controls={`panel-${section.id}`}\n {...(section.count !== undefined ? { count: section.count } : {})}\n {...(section.countTone !== undefined ? { countTone: section.countTone } : {})}\n >\n {section.icon && <span className=\"me-element\">{section.icon}</span>}\n {section.title}\n </TabsTrigger>\n ))}\n </TabsList>\n {sections.map((section) => (\n <TabsContent\n key={section.id}\n value={section.id}\n role=\"tabpanel\"\n id={`panel-${section.id}`}\n aria-labelledby={section.id}\n // Radix unmounts inactive panels, so the active one mounts fresh on each\n // switch — `animate-in fade-in-0` runs once per activation (a subtle\n // cross-fade instead of an instant pop).\n className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {renderSectionContentChrome(section, section.content, sectionWrapMode)}\n </TabsContent>\n ))}\n </Tabs>\n );\n};\n\ninterface VerticalTabsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_VerticalTabs;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\n/**\n * VERTICAL_TABS — side nav rail + content pane.\n *\n * Built on the Radix `Tabs` primitive (`orientation=\"vertical\"`) rather than a\n * hand-rolled `<nav>` of buttons. The prior hand-rolled version had three real\n * defects the primitive fixes for free: (1) the icon rendered STACKED above the\n * label because the plain button lacked `inline-flex items-center` (the Tabs\n * trigger preset supplies it); (2) `aria-controls` / `aria-labelledby` pointed at\n * ids that were never emitted on the trigger side, so the tab↔panel relationship\n * was broken for AT; (3) `role=\"tab\"` buttons had no roving `tabindex` or\n * Arrow-key navigation. The Tabs preset already styles `data-[orientation=vertical]`\n * as a left-aligned nav rail, so the look is preserved.\n */\nconst VerticalTabsMode: React.FC<VerticalTabsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultActive ?? sections[0]?.id;\n const getLabel = useContentSectionContainerLabel();\n const navWidth = config.navWidth ?? 'w-48';\n\n return (\n <Tabs\n /* Controlled/uncontrolled split — same contract as TabsMode above (the seam's home). */\n {...(config.activeSection !== undefined ? { value: config.activeSection } : { defaultValue })}\n orientation={DisplayDirection.VERTICAL}\n /*\n * `mt-field` — the rail and its panel start BELOW whatever introduces them. A vertical tab\n * set is a navigation surface, not a paragraph: butted against the preceding content its\n * first rail item read as one more line of that content rather than as the top of a\n * different control. The horizontal set gets its separation for free from the strip's own\n * bottom rule; this one has no such edge, so the space has to be declared.\n */\n className={cn('mt-field', className)}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n <TabsList\n className={cn(navWidth, 'shrink-0 self-start border-e pe-card')}\n aria-label={config.ariaLabel ?? getLabel('verticalTabsRegion')}\n >\n {sections.map((section) => (\n <TabsTrigger\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n {...(section.count !== undefined ? { count: section.count } : {})}\n {...(section.countTone !== undefined ? { countTone: section.countTone } : {})}\n >\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </TabsTrigger>\n ))}\n </TabsList>\n {sections.map((section) => (\n <TabsContent\n key={section.id}\n value={section.id}\n className=\"min-w-0 flex-1 animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {renderSectionContentChrome(section, section.content, sectionWrapMode)}\n </TabsContent>\n ))}\n </Tabs>\n );\n};\n\ninterface PillsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Pills;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\n/**\n * PILLS — a horizontal nav tablist over a single content pane.\n *\n * Styled as the HORIZONTAL EQUIVALENT OF THE VERTICAL RAIL for coherence: the\n * same `SELECTABLE.FILLED` recipe (a soft tinted fill on the selected item) and\n * `rounded-md` shape the vertical-tabs rail uses — just laid out in a row instead\n * of a column. Separated items, NO connecting tray (a tray would read as a\n * segmented control, colliding with TABS's underline bar). The FILLED family is\n * the \"filled-selection\" pattern; TABS (underline) is the distinct sibling.\n *\n * Hand-rolled (the horizontal-row layout differs from the Radix rail) but\n * a11y-complete: `inline-flex items-center` so the icon sits INLINE with the\n * label; a roving `tabindex` (only the active item is tabbable) with\n * Arrow/Home/End keys per the WAI-ARIA tabs pattern; real `useId`-based\n * `aria-controls`/`aria-labelledby`. Each item carries `data-state` so the\n * recipe's `data-[state=active]:` selected fill actually applies — without it the\n * selection did not persist (only the transient focus ring showed).\n */\nconst PillsMode: React.FC<PillsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const [uncontrolledActiveSection, setUncontrolledActiveSection] = useState(config.defaultActive ?? sections[0]?.id);\n /*\n * Hand-rolled twin of the Radix controlled/uncontrolled contract the two Tabs modes get for\n * free: with `config.activeSection` present the OWNER's value renders and a click is only\n * REPORTED; without it the local state applies. The local setter still runs in the controlled\n * shape — harmlessly, and it keeps the uncontrolled fallback warm if the owner later removes\n * the prop (the same behavior Radix exhibits).\n */\n const activeSection = config.activeSection ?? uncontrolledActiveSection;\n const setActiveSection = setUncontrolledActiveSection;\n const { getRecipe } = useUI();\n const getLabel = useContentSectionContainerLabel();\n const baseId = useId();\n const tablistRef = useRef<HTMLDivElement>(null);\n // FILLED — the SAME recipe the vertical-tabs rail uses, so the two are coherent.\n const selectableRecipe = getRecipe(UIBehavior.SELECTABLE, SelectableVariant.FILLED);\n\n const tabId = (id: string): string => `${baseId}-tab-${id}`;\n const panelId = `${baseId}-panel`;\n\n const handleSectionChange = (id: string): void => {\n setActiveSection(id);\n onSectionChange?.(id);\n };\n\n // WAI-ARIA tabs keyboard model: Arrow keys move (and activate) among ENABLED\n // pills, wrapping at the ends; Home/End jump to first/last. Focus follows the\n // selection so the roving tabindex stays coherent.\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n const keys = ['ArrowRight', 'ArrowLeft', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n const enabledIds = sections.filter((s) => !s.disabled).map((s) => s.id);\n if (enabledIds.length === 0) return;\n event.preventDefault();\n const current = enabledIds.indexOf(activeSection);\n let nextIndex = current < 0 ? 0 : current;\n if (event.key === 'ArrowRight') nextIndex = (current + 1) % enabledIds.length;\n else if (event.key === 'ArrowLeft') nextIndex = (current - 1 + enabledIds.length) % enabledIds.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = enabledIds.length - 1;\n const nextId = enabledIds[nextIndex];\n handleSectionChange(nextId);\n tablistRef.current?.querySelector<HTMLElement>(`#${CSS.escape(tabId(nextId))}`)?.focus();\n };\n\n const activeContentSection = sections.find(s => s.id === activeSection);\n\n return (\n <div\n className={cn('space-y-field', className)}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('pillNavigationRegion')}\n >\n <div\n ref={tablistRef}\n className=\"flex flex-wrap items-center gap-item\"\n role=\"tablist\"\n aria-label={config.ariaLabel ?? getLabel('sectionTabsNav')}\n onKeyDown={handleKeyDown}\n >\n {sections.map((section) => {\n const isActive = activeSection === section.id;\n return (\n <button\n key={section.id}\n id={tabId(section.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n // `data-state` drives the PILL recipe's `data-[state=active]:` solid\n // fill — the persistent selected indicator (was missing → no fill).\n data-state={isActive ? 'active' : 'inactive'}\n tabIndex={isActive ? 0 : -1}\n disabled={section.disabled}\n className={cn(\n // Mirror the vertical rail item: FILLED recipe + rounded-md.\n 'inline-flex items-center gap-element rounded-md px-card-sm py-item font-medium',\n selectableRecipe.base,\n selectableRecipe.motion?.transition,\n selectableRecipe.states.focus,\n // Hover only when NOT active, so the hover tint can't override the\n // selected fill on the active item.\n !isActive && selectableRecipe.states.hover,\n isActive && selectableRecipe.states.selected,\n section.disabled && 'opacity-[var(--opacity-disabled)] cursor-not-allowed'\n )}\n onClick={() => handleSectionChange(section.id)}\n >\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </button>\n );\n })}\n </div>\n\n <div\n key={activeSection}\n role=\"tabpanel\"\n id={panelId}\n aria-labelledby={tabId(activeSection)}\n tabIndex={0}\n className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {activeContentSection && renderSectionContentChrome(activeContentSection, activeContentSection.content, sectionWrapMode)}\n </div>\n </div>\n );\n};\n\n// =============================================================================\n// EXPANDABLE MODES\n// =============================================================================\n\ninterface AccordionModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Accordion;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst AccordionMode: React.FC<AccordionModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultExpanded ?? [sections[0]?.id];\n // A true ACCORDION is single-open: opening one row collapses the others. Left\n // multi-open (the prior `!== false` default), it was indistinguishable from a\n // stack of independent EXPANDABLE toggles — the two modes lost their semantic\n // distinction. Multi-open stays available via explicit `allowMultiple: true`.\n const allowMultiple = config.allowMultiple ?? false;\n\n const accordionItems = sections.map((section) => (\n <AccordionItem\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n >\n <AccordionTrigger\n className={cn(section.disabled && 'opacity-[var(--opacity-disabled)] cursor-not-allowed')}\n >\n {/*\n * Wrap icon + title in ONE flex group so the trigger's own\n * `justify-between` separates [icon+title] from the chevron only. Passing\n * icon and title as two SIBLING children made `justify-between` distribute\n * THREE items (icon | title | chevron) and shove the title to the centre.\n */}\n <span className=\"flex items-center gap-item-xs\">\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </span>\n </AccordionTrigger>\n <AccordionContent>\n {renderSectionContentChrome(\n section,\n <>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mb-field\">{section.description}</p>\n )}\n {section.content}\n </>,\n sectionWrapMode,\n )}\n </AccordionContent>\n </AccordionItem>\n ));\n\n if (allowMultiple) {\n return (\n <Accordion\n type={ToggleGroupType.MULTIPLE}\n defaultValue={defaultValue}\n className={className}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n {accordionItems}\n </Accordion>\n );\n }\n\n return (\n <Accordion\n type={ToggleGroupType.SINGLE}\n defaultValue={defaultValue[0]}\n className={className}\n collapsible\n onValueChange={(value) => onSectionChange?.(value)}\n >\n {accordionItems}\n </Accordion>\n );\n};\n\ninterface CollapsibleModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Collapsible;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst CollapsibleMode: React.FC<CollapsibleModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const [isOpen, setIsOpen] = useState(true);\n const getLabel = useContentSectionContainerLabel();\n const openLabel = config.triggerLabel?.open ?? getLabel('accordionCollapseAll');\n const closedLabel = config.triggerLabel?.closed ?? getLabel('accordionExpandAll');\n const sectionCountLabel = getLabel('accordionSectionCount', { count: sections.length });\n\n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className={className}>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">{sectionCountLabel}</h3>\n <CollapsibleTrigger asChild>\n <Button variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} aria-expanded={isOpen}>\n {isOpen ? openLabel : closedLabel}\n </Button>\n </CollapsibleTrigger>\n </div>\n\n <CollapsibleContent className=\"space-y-field mt-field\">\n {sections.map((section) => renderPanelSection(section, { titleTag: 'h4', wrapMode: sectionWrapMode }))}\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\ninterface ExpandableModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Expandable;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst ExpandableMode: React.FC<ExpandableModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const initialCount = config.initialVisibleCount ?? 3;\n const [showAll, setShowAll] = useState(false);\n const getLabel = useContentSectionContainerLabel();\n\n const visibleSections = showAll ? sections : sections.slice(0, initialCount);\n const hiddenCount = sections.length - initialCount;\n\n const showMoreLabel = config.showMoreLabel ?? getLabel('expandableShowMore', { count: hiddenCount });\n const showLessLabel = config.showLessLabel ?? getLabel('expandableShowLess');\n\n return (\n <div className={cn('space-y-field', className)}>\n {visibleSections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n\n {hiddenCount > 0 && (\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n className=\"w-full\"\n onClick={() => setShowAll(!showAll)}\n aria-expanded={showAll}\n >\n {showAll ? showLessLabel : showMoreLabel}\n </Button>\n )}\n </div>\n );\n};\n\n// =============================================================================\n// GUIDED MODES\n// =============================================================================\n\ninterface StepperModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Stepper;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst StepperMode: React.FC<StepperModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const [currentStep, setCurrentStep] = useState(0);\n const getLabel = useContentSectionContainerLabel();\n const progressNavId = useId();\n const orientation = config.orientation ?? 'horizontal';\n // The numbered step indicators (filled circles + connectors) ALREADY communicate\n // progress, so the separate linear progress bar is redundant by default — a\n // double indicator for the same state. Opt in via `config.showProgress` only.\n const showProgress = config.showProgress ?? false;\n const allowSkip = config.allowSkip ?? false;\n const completedIcon = config.completedIcon ?? '✓';\n const nextLabel = config.nextLabel ?? getLabel('stepperNext');\n const previousLabel = config.previousLabel ?? getLabel('stepperPrevious');\n const completeLabel = config.completeLabel ?? getLabel('stepperComplete');\n\n // Single source of truth for \"can the user jump to this step?\" — used for BOTH\n // the disabled state AND the click handler. Previously the two disagreed: a step\n // could render ENABLED (`index <= currentStep + 1`) yet the handler silently\n // rejected the click (it only accepted STRICTLY adjacent steps), so e.g. jumping\n // back to step 1 from step 3 was a dead control. Users may revisit any completed\n // step and advance one step ahead; `allowSkip` unlocks arbitrary jumps.\n const canNavigate = (index: number): boolean => allowSkip || index <= currentStep + 1;\n\n const handleStepChange = (index: number) => {\n if (index < 0 || index >= sections.length) return;\n if (!canNavigate(index)) return;\n setCurrentStep(index);\n onSectionChange?.(sections[index].id);\n };\n\n const currentSection = sections[currentStep];\n\n return (\n <div className={cn('space-y-section', className)}>\n <nav\n id={progressNavId}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row gap-field' : 'flex-col gap-element'\n )}\n aria-label={config.ariaLabel ?? getLabel('stepperProgressNav')}\n >\n {sections.map((section, index) => {\n const isCompleted = index < currentStep;\n const isCurrent = index === currentStep;\n const isClickable = canNavigate(index);\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => handleStepChange(index)}\n disabled={!isClickable}\n className={cn(\n 'flex items-center gap-element',\n orientation === 'horizontal' ? 'flex-1' : '',\n !isClickable && 'cursor-not-allowed opacity-[var(--opacity-disabled)]'\n )}\n aria-current={isCurrent ? 'step' : undefined}\n >\n <div\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium border-2',\n isCompleted && 'bg-primary text-primary-foreground border-primary',\n isCurrent && 'border-primary text-primary',\n !isCompleted && !isCurrent && 'border-muted-foreground/30'\n )}\n >\n {isCompleted ? completedIcon : index + 1}\n </div>\n\n <span className={cn(\n 'text-sm',\n isCurrent && 'font-medium',\n !isCurrent && !isCompleted && 'text-muted-foreground'\n )}>\n {section.title}\n </span>\n\n {orientation === 'horizontal' && index < sections.length - 1 && (\n <div className={cn(\n 'flex-1 h-0.5',\n isCompleted ? 'bg-primary' : 'bg-muted-foreground/30'\n )} />\n )}\n </button>\n );\n })}\n </nav>\n\n {showProgress && (\n <div className=\"w-full bg-muted rounded-full h-2\">\n <div\n className=\"bg-primary h-2 rounded-full transition-[width]\"\n style={{ width: `${((currentStep + 1) / sections.length) * 100}%` }}\n role=\"progressbar\"\n /*\n * Named by the step navigation it summarises. `aria-labelledby` resolves the referenced\n * element's own `aria-label`, so the bar takes the SAME translated name as the landmark —\n * \"Step progress\" — with no second label key for every application to generate.\n * Unnamed, a screen reader announced a bare \"progress bar\" (axe `aria-progressbar-name`,\n * found enumerating #1411; its sibling on the Wonder Todos home was the one reported).\n */\n aria-labelledby={progressNavId}\n aria-valuenow={currentStep + 1}\n aria-valuemin={1}\n aria-valuemax={sections.length}\n />\n </div>\n )}\n\n {currentSection && (\n <div key={currentSection.id} className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\">\n {renderSectionContentChrome(currentSection, currentSection.content, sectionWrapMode)}\n </div>\n )}\n\n <div className=\"flex justify-between\">\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n onClick={() => handleStepChange(currentStep - 1)}\n disabled={currentStep === 0}\n >\n {previousLabel}\n </Button>\n <Button\n onClick={() => handleStepChange(currentStep + 1)}\n disabled={currentStep === sections.length - 1}\n >\n {currentStep === sections.length - 1 ? completeLabel : nextLabel}\n </Button>\n </div>\n </div>\n );\n};\n\ninterface TimelineModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Timeline;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst TimelineMode: React.FC<TimelineModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const getLabel = useContentSectionContainerLabel();\n\n /*\n * Drawn on the framework's own `Timeline` since #1317 — this mode used to draw a private rail and\n * dot of its own, the first of three hand-drawn timelines the one component replaced. Each section\n * is an entry; a section step has no status, so the marker is the NEUTRAL tone.\n */\n return (\n <div className={className} role=\"region\" aria-label={config.ariaLabel ?? getLabel('timelineRegion')}>\n <Timeline className=\"gap-section\">\n {sections.map((section, index) => (\n <TimelineEntry key={section.id}>\n <TimelineBody>\n {renderSectionContentChrome(\n section,\n <>\n <div className=\"flex items-center gap-element mb-element\">\n {section.icon}\n <h3 className=\"font-semibold\">{section.title}</h3>\n <Badge variant=\"outline\" className=\"ms-auto\">\n {getLabel('timelineStep', { step: index + 1 })}\n </Badge>\n </div>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mb-element\">{section.description}</p>\n )}\n {section.content}\n </>,\n sectionWrapMode,\n )}\n </TimelineBody>\n </TimelineEntry>\n ))}\n </Timeline>\n </div>\n );\n};\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\nContentSectionContainer.displayName = 'ContentSectionContainer';\n\nexport default ContentSectionContainer;\n"]}
|
|
1
|
+
{"version":3,"file":"ContentSectionContainer.js","sourceRoot":"","sources":["../../../../../src/components/sections/ContentSectionContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * ContentSectionContainer Component\n *\n * A universal container for rendering content sections in various modes.\n * Part of the UI Abstraction Patterns implementation.\n *\n * Uses the `SectionConfig` discriminated union — each mode variant\n * carries only its relevant parameters, enabling TypeScript narrowing\n * in the `switch (config.mode)` dispatcher.\n *\n * Supports 14 modes across 4 categories:\n * - Solo: default, card, ghost, collapsible\n * - Layout: inline, grid, columns\n * - Navigation: tabs, vertical_tabs, pills\n * - Expandable: accordion, expandable\n * - Guided: stepper, timeline\n */\n\nimport React, { useCallback, useId, useRef, useState } from 'react';\nimport { SectionMode, type SoloSectionMode, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport type {\n AutoSectionWrap,\n SectionConfig,\n SectionConfig_Default,\n SectionConfig_Card,\n SectionConfig_Ghost,\n SectionConfig_Inline,\n SectionConfig_Grid,\n SectionConfig_Columns,\n SectionConfig_Tabs,\n SectionConfig_VerticalTabs,\n SectionConfig_Pills,\n SectionConfig_Accordion,\n SectionConfig_Collapsible,\n SectionConfig_Expandable,\n SectionConfig_Stepper,\n SectionConfig_Timeline,\n} from '@wildo-ai/presets-components-models';\nimport { cn } from '~wildo-frontend-lib/core/ui/cn';\nimport { useUI } from '~wildo-frontend-lib/core/ui/useUI';\nimport { useSurfacePolicy } from '~wildo-frontend-lib/core/ui/SurfacePolicyContext';\nimport { ButtonSize, FrontendComponentType, LabellingTypes, UIBehavior, SelectableVariant, SurfaceVariant, IndicatorVariant, TypographyVariant } from '@wildo-ai/presets-components-models';\nimport { useI18n } from '~wildo-frontend-lib/core/i18n/useI18n';\n\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '~wildo-frontend-lib/components/sections/tabs';\nimport { Timeline, TimelineBody, TimelineEntry } from '~wildo-frontend-lib/components/data-display/timeline';\nimport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '~wildo-frontend-lib/components/sections/accordion';\nimport { ToggleGroupType } from '~wildo-frontend-lib/components/form/controls/enum/toggle-group';\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from '~wildo-frontend-lib/components/sections/collapsible';\nimport { Button, ButtonVariants_Variant } from '~wildo-frontend-lib/components/actions/button';\nimport { Badge } from '~wildo-frontend-lib/components/data-display/badge';\nimport { Surface } from '~wildo-frontend-lib/components/sections/surface';\nimport { ContentSection } from '~wildo-frontend-lib/components/sections/content-section';\nimport { EmptyState } from '~wildo-frontend-lib/components/feedback/empty-state';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ContentSectionDescriptor {\n /** Unique identifier for the section */\n id: string;\n /** Display title resolved from i18n. */\n title?: React.ReactNode;\n /** Optional description */\n description?: React.ReactNode;\n /** Content to render */\n content: React.ReactNode;\n /** Optional icon */\n icon?: React.ReactNode;\n /** A count the section's tab carries beside its title, in the tone it reads in (#1325). */\n count?: number;\n countTone?: IndicatorVariant;\n /** Whether section is disabled */\n disabled?: boolean;\n}\n\nexport interface ContentSectionContainerProps {\n /** Array of sections to render */\n sections: ContentSectionDescriptor[];\n /** Configuration — discriminated union, narrowed by `config.mode` */\n config: SectionConfig;\n /** Additional CSS classes */\n className?: string;\n /** Callback when active section changes */\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nfunction resolveSectionWrapMode(value: string | undefined): AutoSectionWrap {\n switch (value) {\n case 'grouped':\n case 'flat':\n case 'separator-only':\n return value;\n default:\n return 'card-each';\n }\n}\n\n/**\n * Maps the surface-policy `autoSectionWrap` to a {@link ContentSection}\n * `appearance` (+ optional className). Every container panel now renders through\n * the registry-resolved `ContentSection` primitive (P3 consolidation), so panels\n * inherit the native `<fieldset disabled>` cascade and the truthful `when-orphan`\n * frame de-duplication that solo sections already have — instead of the old\n * always-on `<Surface variant=BASE><div border rounded-lg>` chrome that could not\n * de-dup its frame when nested:\n * - `card-each` → CARD (framed fieldset; frame self-suppresses when nested)\n * - `flat` → DEFAULT (bare fieldset, no frame)\n * - `separator-only` → DEFAULT + a bottom-divider className\n *\n * Note (plan P3, §7 Decision 2 — heading-chrome redesign): container panels render\n * through ContentSection's PANEL mode, which PRESERVES the titled-card-with-header\n * look (an `<h3>` band with icon over a `border-b` divider, content in a `p-card`\n * area) while gaining the `<fieldset>` disabled cascade + when-orphan frame de-dup.\n * The visible chrome is unchanged from the former bespoke `<Surface><div border\n * rounded-lg>`; only the element (div → fieldset) and the frame-dedup behavior change.\n */\nfunction wrapModeToAppearance(wrapMode: AutoSectionWrap): { appearance: SoloSectionMode; className?: string } {\n switch (wrapMode) {\n case 'flat':\n return { appearance: SectionMode.DEFAULT };\n case 'separator-only':\n return { appearance: SectionMode.DEFAULT, className: 'border-b pb-field last:border-b-0 last:pb-0' };\n // `grouped` renders its own single-card + eyebrow chrome in the stacked path\n // (see GroupedSectionsCard). Any OTHER container mode (grid/tabs/columns/…)\n // that resolves `grouped` falls back to `card-each` here — those modes supply\n // their own layout, so a per-section card is the sensible frame.\n case 'grouped':\n case 'card-each':\n default:\n return { appearance: SectionMode.CARD };\n }\n}\n\n/**\n * GROUPED wrap-mode chrome (T3) — the modern default for stacked forms/settings.\n *\n * Renders ALL sections inside ONE `SurfaceVariant.CARD`, each as a flat group\n * introduced by an **eyebrow** label (the theme's `TypographyVariant.EYEBROW` recipe, the same voice\n * a TITLE-styled field label takes) and separated by `divide-y` — instead of a bordered card\n * per section with a floating `<legend>`. Each group's body is a flat\n * `ContentSection` (`SectionMode.DEFAULT`) so the native `<fieldset disabled>`\n * cascade + inter-field spacing are preserved; the section title is promoted to\n * the eyebrow (not the fieldset legend), so there is no nested per-group border.\n *\n * Used only by the stacked composition (single-section + InlineMode). It does not\n * touch the `ContentSection` primitive itself — it composes it.\n */\nconst GroupedSectionsCard: React.FC<{\n sections: ContentSectionDescriptor[];\n className?: string;\n}> = ({ sections, className }) => {\n const { getRecipe } = useUI();\n const cardRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.CARD);\n const eyebrowRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.EYEBROW);\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <Surface\n asChild\n emitPolicyVars={false}\n variant={SurfaceVariant.CARD}\n policyOverride={{ nesting: { framingMode: 'always' as const } }}\n >\n <div\n role=\"region\"\n aria-label={getLabel('contentSectionsRegion')}\n className={cn(cardRecipe.base, 'divide-y divide-border', className)}\n >\n {sections.map((section) => (\n <section key={section.id} data-slot=\"content-group\" className=\"space-y-field p-card\">\n {(section.title != null || section.icon != null) && (\n <div className={cn('flex items-center gap-element-xs', eyebrowRecipe.base)}>\n {section.icon != null && <span className=\"inline-flex items-center\">{section.icon}</span>}\n {section.title}\n </div>\n )}\n {section.description != null && (\n <p className=\"text-sm text-muted-foreground\">{section.description}</p>\n )}\n <ContentSection appearance={SectionMode.DEFAULT} disabled={section.disabled}>\n {section.content}\n </ContentSection>\n </section>\n ))}\n </div>\n </Surface>\n );\n};\n\n/**\n * Renders a section panel WITH its heading through `ContentSection` in PANEL mode:\n * the heading renders as an `<h3>`/`<h4>` band (icon + title, level per `titleTag`,\n * default `h3`) with a `border-b` divider above the `p-card` content area (the\n * titled-card-with-header look), framed per `wrapMode` via a `<fieldset>` that\n * carries the disabled cascade + when-orphan frame-dedup. Used by the panel-heading\n * modes (single / inline / grid / columns / collapsible / expandable). Collapsible\n * panels pass `titleTag: 'h4'` since they nest under the collapsible-all `<h3>`.\n * The explicit `section.disabled` flows to the panel `<fieldset disabled>` for the\n * content cascade (plan Decision 4: panel content disabling is explicit/form-driven,\n * distinct from nav-trigger gating).\n */\nfunction renderPanelSection(section: ContentSectionDescriptor, params?: {\n titleTag?: 'h3' | 'h4';\n wrapMode?: AutoSectionWrap;\n}): React.ReactNode {\n const { appearance, className } = wrapModeToAppearance(params?.wrapMode ?? 'card-each');\n\n return (\n <ContentSection\n key={section.id}\n panel\n appearance={appearance}\n headingTag={params?.titleTag}\n legend={section.title}\n icon={section.icon}\n description={section.description}\n disabled={section.disabled}\n className={className}\n >\n {section.content}\n </ContentSection>\n );\n}\n\n/**\n * Renders a section panel WITHOUT a panel heading through `ContentSection` — used\n * by the navigation/guided modes (tabs / vertical-tabs / pills / accordion /\n * stepper / timeline) where the heading lives in the trigger or nav and any\n * description/title is already injected into `content`. No `disabled` is passed:\n * nav-trigger gating stays on the trigger, and form-context disabling already\n * cascades from the form-level `<fieldset disabled>` (plan Decision 4).\n */\nfunction renderSectionContentChrome(\n section: ContentSectionDescriptor,\n content: React.ReactNode = section.content,\n wrapMode: AutoSectionWrap = 'card-each',\n): React.ReactNode {\n const { appearance, className } = wrapModeToAppearance(wrapMode);\n\n return (\n <ContentSection key={section.id} panel appearance={appearance} className={className}>\n {content}\n </ContentSection>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\nexport const ContentSectionContainer: React.FC<ContentSectionContainerProps> = ({\n sections,\n config,\n className,\n onSectionChange,\n}) => {\n const surfacePolicy = useSurfacePolicy();\n const sectionWrapMode = resolveSectionWrapMode(surfacePolicy.autoRender?.autoSectionWrap);\n\n if (sections.length === 0) {\n if (config.emptyStateMessage) {\n return (\n <EmptyState\n title={config.emptyStateMessage}\n variant=\"compact\"\n className={className}\n />\n );\n }\n return null;\n }\n\n if (sections.length === 1 && !config.showSingleSectionNav) {\n if (sectionWrapMode === 'grouped') {\n return <GroupedSectionsCard sections={sections} className={className} />;\n }\n return (\n <div className={className}>\n {renderPanelSection(sections[0], { wrapMode: sectionWrapMode })}\n </div>\n );\n }\n\n switch (config.mode) {\n case SectionMode.DEFAULT:\n case SectionMode.CARD:\n case SectionMode.GHOST:\n case SectionMode.INLINE:\n return <InlineMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.GRID:\n return <GridMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.COLUMNS:\n return <ColumnsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.TABS:\n return <TabsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.VERTICAL_TABS:\n return <VerticalTabsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.PILLS:\n return <PillsMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.ACCORDION:\n return <AccordionMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.COLLAPSIBLE:\n return <CollapsibleMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.EXPANDABLE:\n return <ExpandableMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n case SectionMode.STEPPER:\n return <StepperMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} onSectionChange={onSectionChange} />;\n case SectionMode.TIMELINE:\n return <TimelineMode sections={sections} config={config} className={className} sectionWrapMode={sectionWrapMode} />;\n default:\n return <InlineMode sections={sections} config={{ mode: SectionMode.INLINE }} className={className} sectionWrapMode={sectionWrapMode} />;\n }\n};\n\n// =============================================================================\n// LAYOUT-BASED MODES\n// =============================================================================\n\n// =============================================================================\n// GAP HELPER\n// =============================================================================\n\nconst GAP_CLASSES = {\n sm: 'gap-element',\n md: 'gap-field',\n lg: 'gap-section',\n} as const;\n\nconst CONTENT_SECTION_CONTAINER_COMPONENT = FrontendComponentType.LOW_LEVEL_CONTENT_SECTION_CONTAINER;\n\nfunction useContentSectionContainerLabel(): (\n key: string,\n params?: Record<string, string | number>,\n) => string {\n const { tComponent } = useI18n({\n component: CONTENT_SECTION_CONTAINER_COMPONENT,\n });\n\n return useCallback((key: string, params?: Record<string, string | number>) => {\n const result = tComponent(CONTENT_SECTION_CONTAINER_COMPONENT, key, params);\n const base = `${LabellingTypes.COMPONENTS}.${CONTENT_SECTION_CONTAINER_COMPONENT}.${key}`;\n return result === base ? '' : result;\n }, [tComponent]);\n}\n\n// =============================================================================\n// LAYOUT-BASED MODES\n// =============================================================================\n\ninterface InlineModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Default | SectionConfig_Card | SectionConfig_Ghost | SectionConfig_Inline;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst InlineMode: React.FC<InlineModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const gap = ('gap' in config ? config.gap : undefined) ?? 'md';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n // GROUPED (modern default): one card, eyebrow-labelled groups, divide-y.\n if (sectionWrapMode === 'grouped') {\n return <GroupedSectionsCard sections={sections} className={className} />;\n }\n\n return (\n <div\n className={cn(`space-y-field ${gapClass}`, className)}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentSectionsRegion')}\n >\n {sections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n </div>\n );\n};\n\ninterface GridModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Grid;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst GridMode: React.FC<GridModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const columnCount = config.columnCount === 'auto' ? undefined : config.columnCount ?? 2;\n const gap = config.gap ?? 'md';\n const minColumnWidth = config.minColumnWidth ?? '300px';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n const style: React.CSSProperties = columnCount\n ? { gridTemplateColumns: `repeat(${columnCount}, 1fr)` }\n : { gridTemplateColumns: `repeat(auto-fit, minmax(${minColumnWidth}, 1fr))` };\n\n return (\n <div\n className={cn('grid', gapClass, className)}\n style={style}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentGridRegion')}\n >\n {sections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n </div>\n );\n};\n\ninterface ColumnsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Columns;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst ColumnsMode: React.FC<ColumnsModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const columnCount = config.columnCount === 'auto' ? 2 : config.columnCount ?? 2;\n const gap = config.gap ?? 'md';\n const gapClass = GAP_CLASSES[gap];\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <div\n className={cn('columns-2', gapClass, className)}\n style={{ columnCount }}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('contentColumnsRegion')}\n >\n {sections.map((section) => (\n <div\n key={section.id}\n className={cn(\n 'break-inside-avoid mb-field',\n sectionWrapMode === 'separator-only' && 'border-b pb-field last:border-b-0 last:pb-0'\n )}\n >\n {renderPanelSection(section, { wrapMode: sectionWrapMode === 'separator-only' ? 'flat' : sectionWrapMode })}\n </div>\n ))}\n </div>\n );\n};\n\n// =============================================================================\n// NAVIGATION-BASED MODES\n// =============================================================================\n\ninterface TabsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Tabs;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst TabsMode: React.FC<TabsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultActive ?? sections[0]?.id;\n const getLabel = useContentSectionContainerLabel();\n\n return (\n <Tabs\n /*\n * Controlled when `config.activeSection` is present, uncontrolled otherwise — the standard\n * Radix contract, exposed so an OWNER can drive the tab (deep links, cross-pane navigation).\n * In the controlled shape every user click is only REPORTED through `onSectionChange`; an\n * owner that sets `activeSection` and ignores the callback has frozen its tabs.\n */\n {...(config.activeSection !== undefined ? { value: config.activeSection } : { defaultValue })}\n className={className}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n <TabsList role=\"tablist\" aria-label={config.ariaLabel ?? getLabel('sectionTabsNav')}>\n {sections.map((section) => (\n <TabsTrigger\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n role=\"tab\"\n aria-controls={`panel-${section.id}`}\n {...(section.count !== undefined ? { count: section.count } : {})}\n {...(section.countTone !== undefined ? { countTone: section.countTone } : {})}\n >\n {section.icon && <span className=\"me-element\">{section.icon}</span>}\n {section.title}\n </TabsTrigger>\n ))}\n </TabsList>\n {sections.map((section) => (\n <TabsContent\n key={section.id}\n value={section.id}\n role=\"tabpanel\"\n id={`panel-${section.id}`}\n aria-labelledby={section.id}\n // Radix unmounts inactive panels, so the active one mounts fresh on each\n // switch — `animate-in fade-in-0` runs once per activation (a subtle\n // cross-fade instead of an instant pop).\n className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {renderSectionContentChrome(section, section.content, sectionWrapMode)}\n </TabsContent>\n ))}\n </Tabs>\n );\n};\n\ninterface VerticalTabsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_VerticalTabs;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\n/**\n * VERTICAL_TABS — side nav rail + content pane.\n *\n * Built on the Radix `Tabs` primitive (`orientation=\"vertical\"`) rather than a\n * hand-rolled `<nav>` of buttons. The prior hand-rolled version had three real\n * defects the primitive fixes for free: (1) the icon rendered STACKED above the\n * label because the plain button lacked `inline-flex items-center` (the Tabs\n * trigger preset supplies it); (2) `aria-controls` / `aria-labelledby` pointed at\n * ids that were never emitted on the trigger side, so the tab↔panel relationship\n * was broken for AT; (3) `role=\"tab\"` buttons had no roving `tabindex` or\n * Arrow-key navigation. The Tabs preset already styles `data-[orientation=vertical]`\n * as a left-aligned nav rail, so the look is preserved.\n */\nconst VerticalTabsMode: React.FC<VerticalTabsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultActive ?? sections[0]?.id;\n const getLabel = useContentSectionContainerLabel();\n const navWidth = config.navWidth ?? 'w-48';\n\n return (\n <Tabs\n /* Controlled/uncontrolled split — same contract as TabsMode above (the seam's home). */\n {...(config.activeSection !== undefined ? { value: config.activeSection } : { defaultValue })}\n orientation={DisplayDirection.VERTICAL}\n /*\n * `mt-field` — the rail and its panel start BELOW whatever introduces them. A vertical tab\n * set is a navigation surface, not a paragraph: butted against the preceding content its\n * first rail item read as one more line of that content rather than as the top of a\n * different control. The horizontal set gets its separation for free from the strip's own\n * bottom rule; this one has no such edge, so the space has to be declared.\n */\n className={cn('mt-field', className)}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n <TabsList\n className={cn(navWidth, 'shrink-0 self-start border-e pe-card')}\n aria-label={config.ariaLabel ?? getLabel('verticalTabsRegion')}\n >\n {sections.map((section) => (\n <TabsTrigger\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n {...(section.count !== undefined ? { count: section.count } : {})}\n {...(section.countTone !== undefined ? { countTone: section.countTone } : {})}\n >\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </TabsTrigger>\n ))}\n </TabsList>\n {sections.map((section) => (\n <TabsContent\n key={section.id}\n value={section.id}\n className=\"min-w-0 flex-1 animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {renderSectionContentChrome(section, section.content, sectionWrapMode)}\n </TabsContent>\n ))}\n </Tabs>\n );\n};\n\ninterface PillsModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Pills;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\n/**\n * PILLS — a horizontal nav tablist over a single content pane.\n *\n * Styled as the HORIZONTAL EQUIVALENT OF THE VERTICAL RAIL for coherence: the\n * same `SELECTABLE.FILLED` recipe (a soft tinted fill on the selected item) and\n * `rounded-md` shape the vertical-tabs rail uses — just laid out in a row instead\n * of a column. Separated items, NO connecting tray (a tray would read as a\n * segmented control, colliding with TABS's underline bar). The FILLED family is\n * the \"filled-selection\" pattern; TABS (underline) is the distinct sibling.\n *\n * Hand-rolled (the horizontal-row layout differs from the Radix rail) but\n * a11y-complete: `inline-flex items-center` so the icon sits INLINE with the\n * label; a roving `tabindex` (only the active item is tabbable) with\n * Arrow/Home/End keys per the WAI-ARIA tabs pattern; real `useId`-based\n * `aria-controls`/`aria-labelledby`. Each item carries `data-state` so the\n * recipe's `data-[state=active]:` selected fill actually applies — without it the\n * selection did not persist (only the transient focus ring showed).\n */\nconst PillsMode: React.FC<PillsModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const [uncontrolledActiveSection, setUncontrolledActiveSection] = useState(config.defaultActive ?? sections[0]?.id);\n /*\n * Hand-rolled twin of the Radix controlled/uncontrolled contract the two Tabs modes get for\n * free: with `config.activeSection` present the OWNER's value renders and a click is only\n * REPORTED; without it the local state applies. The local setter still runs in the controlled\n * shape — harmlessly, and it keeps the uncontrolled fallback warm if the owner later removes\n * the prop (the same behavior Radix exhibits).\n */\n const activeSection = config.activeSection ?? uncontrolledActiveSection;\n const setActiveSection = setUncontrolledActiveSection;\n const { getRecipe } = useUI();\n const getLabel = useContentSectionContainerLabel();\n const baseId = useId();\n const tablistRef = useRef<HTMLDivElement>(null);\n // FILLED — the SAME recipe the vertical-tabs rail uses, so the two are coherent.\n const selectableRecipe = getRecipe(UIBehavior.SELECTABLE, SelectableVariant.FILLED);\n\n const tabId = (id: string): string => `${baseId}-tab-${id}`;\n const panelId = `${baseId}-panel`;\n\n const handleSectionChange = (id: string): void => {\n setActiveSection(id);\n onSectionChange?.(id);\n };\n\n // WAI-ARIA tabs keyboard model: Arrow keys move (and activate) among ENABLED\n // pills, wrapping at the ends; Home/End jump to first/last. Focus follows the\n // selection so the roving tabindex stays coherent.\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n const keys = ['ArrowRight', 'ArrowLeft', 'Home', 'End'];\n if (!keys.includes(event.key)) return;\n const enabledIds = sections.filter((s) => !s.disabled).map((s) => s.id);\n if (enabledIds.length === 0) return;\n event.preventDefault();\n const current = enabledIds.indexOf(activeSection);\n let nextIndex = current < 0 ? 0 : current;\n if (event.key === 'ArrowRight') nextIndex = (current + 1) % enabledIds.length;\n else if (event.key === 'ArrowLeft') nextIndex = (current - 1 + enabledIds.length) % enabledIds.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = enabledIds.length - 1;\n const nextId = enabledIds[nextIndex];\n handleSectionChange(nextId);\n tablistRef.current?.querySelector<HTMLElement>(`#${CSS.escape(tabId(nextId))}`)?.focus();\n };\n\n const activeContentSection = sections.find(s => s.id === activeSection);\n\n return (\n <div\n className={cn('space-y-field', className)}\n role=\"region\"\n aria-label={config.ariaLabel ?? getLabel('pillNavigationRegion')}\n >\n <div\n ref={tablistRef}\n className=\"flex flex-wrap items-center gap-item\"\n role=\"tablist\"\n aria-label={config.ariaLabel ?? getLabel('sectionTabsNav')}\n onKeyDown={handleKeyDown}\n >\n {sections.map((section) => {\n const isActive = activeSection === section.id;\n return (\n <button\n key={section.id}\n id={tabId(section.id)}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n // `data-state` drives the PILL recipe's `data-[state=active]:` solid\n // fill — the persistent selected indicator (was missing → no fill).\n data-state={isActive ? 'active' : 'inactive'}\n tabIndex={isActive ? 0 : -1}\n disabled={section.disabled}\n className={cn(\n // Mirror the vertical rail item: FILLED recipe + rounded-md.\n 'inline-flex items-center gap-element rounded-md px-card-sm py-item font-medium',\n selectableRecipe.base,\n selectableRecipe.motion?.transition,\n selectableRecipe.states.focus,\n // Hover only when NOT active, so the hover tint can't override the\n // selected fill on the active item.\n !isActive && selectableRecipe.states.hover,\n isActive && selectableRecipe.states.selected,\n section.disabled && 'opacity-[var(--opacity-disabled)] cursor-not-allowed'\n )}\n onClick={() => handleSectionChange(section.id)}\n >\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </button>\n );\n })}\n </div>\n\n <div\n key={activeSection}\n role=\"tabpanel\"\n id={panelId}\n aria-labelledby={tabId(activeSection)}\n tabIndex={0}\n className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\"\n >\n {activeContentSection && renderSectionContentChrome(activeContentSection, activeContentSection.content, sectionWrapMode)}\n </div>\n </div>\n );\n};\n\n// =============================================================================\n// EXPANDABLE MODES\n// =============================================================================\n\ninterface AccordionModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Accordion;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst AccordionMode: React.FC<AccordionModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const defaultValue = config.defaultExpanded ?? [sections[0]?.id];\n // A true ACCORDION is single-open: opening one row collapses the others. Left\n // multi-open (the prior `!== false` default), it was indistinguishable from a\n // stack of independent EXPANDABLE toggles — the two modes lost their semantic\n // distinction. Multi-open stays available via explicit `allowMultiple: true`.\n const allowMultiple = config.allowMultiple ?? false;\n\n const accordionItems = sections.map((section) => (\n <AccordionItem\n key={section.id}\n value={section.id}\n disabled={section.disabled}\n >\n <AccordionTrigger\n className={cn(section.disabled && 'opacity-[var(--opacity-disabled)] cursor-not-allowed')}\n >\n {/*\n * Wrap icon + title in ONE flex group so the trigger's own\n * `justify-between` separates [icon+title] from the chevron only. Passing\n * icon and title as two SIBLING children made `justify-between` distribute\n * THREE items (icon | title | chevron) and shove the title to the centre.\n */}\n <span className=\"flex items-center gap-item-xs\">\n {section.icon && <span className=\"inline-flex items-center shrink-0\">{section.icon}</span>}\n {section.title}\n </span>\n </AccordionTrigger>\n <AccordionContent>\n {renderSectionContentChrome(\n section,\n <>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mb-field\">{section.description}</p>\n )}\n {section.content}\n </>,\n sectionWrapMode,\n )}\n </AccordionContent>\n </AccordionItem>\n ));\n\n if (allowMultiple) {\n return (\n <Accordion\n type={ToggleGroupType.MULTIPLE}\n defaultValue={defaultValue}\n className={className}\n onValueChange={(value) => onSectionChange?.(value)}\n >\n {accordionItems}\n </Accordion>\n );\n }\n\n return (\n <Accordion\n type={ToggleGroupType.SINGLE}\n defaultValue={defaultValue[0]}\n className={className}\n collapsible\n onValueChange={(value) => onSectionChange?.(value)}\n >\n {accordionItems}\n </Accordion>\n );\n};\n\ninterface CollapsibleModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Collapsible;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst CollapsibleMode: React.FC<CollapsibleModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const [isOpen, setIsOpen] = useState(true);\n const getLabel = useContentSectionContainerLabel();\n const openLabel = config.triggerLabel?.open ?? getLabel('accordionCollapseAll');\n const closedLabel = config.triggerLabel?.closed ?? getLabel('accordionExpandAll');\n const sectionCountLabel = getLabel('accordionSectionCount', { count: sections.length });\n\n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className={className}>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">{sectionCountLabel}</h3>\n <CollapsibleTrigger asChild>\n <Button variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} aria-expanded={isOpen}>\n {isOpen ? openLabel : closedLabel}\n </Button>\n </CollapsibleTrigger>\n </div>\n\n <CollapsibleContent className=\"space-y-field mt-field\">\n {sections.map((section) => renderPanelSection(section, { titleTag: 'h4', wrapMode: sectionWrapMode }))}\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\ninterface ExpandableModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Expandable;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst ExpandableMode: React.FC<ExpandableModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const initialCount = config.initialVisibleCount ?? 3;\n const [showAll, setShowAll] = useState(false);\n const getLabel = useContentSectionContainerLabel();\n\n const visibleSections = showAll ? sections : sections.slice(0, initialCount);\n const hiddenCount = sections.length - initialCount;\n\n const showMoreLabel = config.showMoreLabel ?? getLabel('expandableShowMore', { count: hiddenCount });\n const showLessLabel = config.showLessLabel ?? getLabel('expandableShowLess');\n\n return (\n <div className={cn('space-y-field', className)}>\n {visibleSections.map((section) => renderPanelSection(section, { wrapMode: sectionWrapMode }))}\n\n {hiddenCount > 0 && (\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n className=\"w-full\"\n onClick={() => setShowAll(!showAll)}\n aria-expanded={showAll}\n >\n {showAll ? showLessLabel : showMoreLabel}\n </Button>\n )}\n </div>\n );\n};\n\n// =============================================================================\n// GUIDED MODES\n// =============================================================================\n\ninterface StepperModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Stepper;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n onSectionChange?: (sectionId: string | string[]) => void;\n}\n\nconst StepperMode: React.FC<StepperModeProps> = ({ sections, config, className, sectionWrapMode, onSectionChange }) => {\n const [currentStep, setCurrentStep] = useState(0);\n const getLabel = useContentSectionContainerLabel();\n const progressNavId = useId();\n const orientation = config.orientation ?? 'horizontal';\n // The numbered step indicators (filled circles + connectors) ALREADY communicate\n // progress, so the separate linear progress bar is redundant by default — a\n // double indicator for the same state. Opt in via `config.showProgress` only.\n const showProgress = config.showProgress ?? false;\n const allowSkip = config.allowSkip ?? false;\n const completedIcon = config.completedIcon ?? '✓';\n const nextLabel = config.nextLabel ?? getLabel('stepperNext');\n const previousLabel = config.previousLabel ?? getLabel('stepperPrevious');\n const completeLabel = config.completeLabel ?? getLabel('stepperComplete');\n\n // Single source of truth for \"can the user jump to this step?\" — used for BOTH\n // the disabled state AND the click handler. Previously the two disagreed: a step\n // could render ENABLED (`index <= currentStep + 1`) yet the handler silently\n // rejected the click (it only accepted STRICTLY adjacent steps), so e.g. jumping\n // back to step 1 from step 3 was a dead control. Users may revisit any completed\n // step and advance one step ahead; `allowSkip` unlocks arbitrary jumps.\n const canNavigate = (index: number): boolean => allowSkip || index <= currentStep + 1;\n\n const handleStepChange = (index: number) => {\n if (index < 0 || index >= sections.length) return;\n if (!canNavigate(index)) return;\n setCurrentStep(index);\n onSectionChange?.(sections[index].id);\n };\n\n const currentSection = sections[currentStep];\n\n return (\n <div className={cn('space-y-section', className)}>\n <nav\n id={progressNavId}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row gap-field' : 'flex-col gap-element'\n )}\n aria-label={config.ariaLabel ?? getLabel('stepperProgressNav')}\n >\n {sections.map((section, index) => {\n const isCompleted = index < currentStep;\n const isCurrent = index === currentStep;\n const isClickable = canNavigate(index);\n\n return (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => handleStepChange(index)}\n disabled={!isClickable}\n className={cn(\n 'flex items-center gap-element',\n orientation === 'horizontal' ? 'flex-1' : '',\n !isClickable && 'cursor-not-allowed opacity-[var(--opacity-disabled)]'\n )}\n aria-current={isCurrent ? 'step' : undefined}\n >\n <div\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium border-2',\n isCompleted && 'bg-primary text-primary-foreground border-primary',\n isCurrent && 'border-primary text-primary',\n !isCompleted && !isCurrent && 'border-muted-foreground/30'\n )}\n >\n {isCompleted ? completedIcon : index + 1}\n </div>\n\n <span className={cn(\n 'text-sm',\n isCurrent && 'font-medium',\n !isCurrent && !isCompleted && 'text-muted-foreground'\n )}>\n {section.title}\n </span>\n\n {orientation === 'horizontal' && index < sections.length - 1 && (\n <div className={cn(\n 'flex-1 h-0.5',\n isCompleted ? 'bg-primary' : 'bg-muted-foreground/30'\n )} />\n )}\n </button>\n );\n })}\n </nav>\n\n {showProgress && (\n <div className=\"w-full bg-muted rounded-full h-2\">\n <div\n className=\"bg-primary h-2 rounded-full transition-[width]\"\n style={{ width: `${((currentStep + 1) / sections.length) * 100}%` }}\n role=\"progressbar\"\n /*\n * Named by the step navigation it summarises. `aria-labelledby` resolves the referenced\n * element's own `aria-label`, so the bar takes the SAME translated name as the landmark —\n * \"Step progress\" — with no second label key for every application to generate.\n * Unnamed, a screen reader announced a bare \"progress bar\" (axe `aria-progressbar-name`,\n * found enumerating #1411; its sibling on the Wonder Todos home was the one reported).\n */\n aria-labelledby={progressNavId}\n aria-valuenow={currentStep + 1}\n aria-valuemin={1}\n aria-valuemax={sections.length}\n />\n </div>\n )}\n\n {currentSection && (\n <div key={currentSection.id} className=\"animate-in fade-in-0 duration-[var(--motion-duration-fast)]\">\n {renderSectionContentChrome(currentSection, currentSection.content, sectionWrapMode)}\n </div>\n )}\n\n <div className=\"flex justify-between\">\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n onClick={() => handleStepChange(currentStep - 1)}\n disabled={currentStep === 0}\n >\n {previousLabel}\n </Button>\n <Button\n onClick={() => handleStepChange(currentStep + 1)}\n disabled={currentStep === sections.length - 1}\n >\n {currentStep === sections.length - 1 ? completeLabel : nextLabel}\n </Button>\n </div>\n </div>\n );\n};\n\ninterface TimelineModeProps {\n sections: ContentSectionDescriptor[];\n config: SectionConfig_Timeline;\n className?: string;\n sectionWrapMode: AutoSectionWrap;\n}\n\nconst TimelineMode: React.FC<TimelineModeProps> = ({ sections, config, className, sectionWrapMode }) => {\n const getLabel = useContentSectionContainerLabel();\n\n /*\n * Drawn on the framework's own `Timeline` since #1317 — this mode used to draw a private rail and\n * dot of its own, the first of three hand-drawn timelines the one component replaced. Each section\n * is an entry; a section step has no status, so the marker is the NEUTRAL tone.\n */\n return (\n <div className={className} role=\"region\" aria-label={config.ariaLabel ?? getLabel('timelineRegion')}>\n <Timeline className=\"gap-section\">\n {sections.map((section, index) => (\n <TimelineEntry key={section.id}>\n <TimelineBody>\n {renderSectionContentChrome(\n section,\n <>\n <div className=\"flex items-center gap-element mb-element\">\n {section.icon}\n <h3 className=\"font-semibold\">{section.title}</h3>\n <Badge variant=\"outline\" className=\"ms-auto\">\n {getLabel('timelineStep', { step: index + 1 })}\n </Badge>\n </div>\n {section.description && (\n <p className=\"text-sm text-muted-foreground mb-element\">{section.description}</p>\n )}\n {section.content}\n </>,\n sectionWrapMode,\n )}\n </TimelineBody>\n </TimelineEntry>\n ))}\n </Timeline>\n </div>\n );\n};\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\nContentSectionContainer.displayName = 'ContentSectionContainer';\n\nexport default ContentSectionContainer;\n"]}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { DisplayDirection } from '@wildo-ai/zod-decorators';
|
|
3
3
|
import { ComponentPresetProps } from '../../core/components-registry/component-registry.frontend.schemas';
|
|
4
|
+
/**
|
|
5
|
+
* Every `step` and `currentStep` in the stepper family is a 0-based POSITION. The indicator shows position + 1,
|
|
6
|
+
* because a person counts steps from 1; it used to print the raw position, so a wizard read "0 Compose, 1 Publish".
|
|
7
|
+
*/
|
|
4
8
|
export interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
9
|
+
/** 0-based position of the active step. */
|
|
5
10
|
currentStep: number;
|
|
6
11
|
totalSteps: number;
|
|
7
12
|
orientation?: DisplayDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/stepper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAA;AAGvH,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IACzF,IAAI,EAAE,MAAM,CAAA;CACb;AAID,MAAM,WAAW,eAAe;IAC9B,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IACxC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAA;IAChC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAC1C,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAC1C,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAClC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;CAC/C;AAYD,wBAAgB,OAAO,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAG9H;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGtI;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGhJ;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGhJ;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGxI;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGpJ"}
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/stepper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kFAAkF,CAAA;AAGvH;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IACzF,IAAI,EAAE,MAAM,CAAA;CACb;AAID,MAAM,WAAW,eAAe;IAC9B,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IACxC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAA;IAChC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAC1C,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAC1C,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAClC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;CAC/C;AAYD,wBAAgB,OAAO,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAG9H;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGtI;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGhJ;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGhJ;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGxI;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAgC,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,GAAG,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAGpJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepper.js","sourceRoot":"","sources":["../../../../../src/components/sections/stepper.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE5F,OAAO,EAAE,+BAA+B,EAAE,MAAM,iFAAiF,CAAA;
|
|
1
|
+
{"version":3,"file":"stepper.js","sourceRoot":"","sources":["../../../../../src/components/sections/stepper.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE5F,OAAO,EAAE,+BAA+B,EAAE,MAAM,iFAAiF,CAAA;AA+CjI,mBAAmB;AAEnB,MAAM,OAAO,GAAG,+BAA+B,CAC7C,qBAAqB,CAAC,iBAAiB,EACvC,SAAS,EACT,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAC3D,CAAA;AAED,mBAAmB;AAEnB,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAuC;IACzG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,OAAK,KAAK,GAAI,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA2C;IACjH,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,IAAI,OAAK,KAAK,GAAI,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAgD;IAC3H,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,SAAS,OAAK,KAAK,GAAI,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAgD;IAC3H,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,SAAS,OAAK,KAAK,GAAI,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAA4C;IACnH,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,KAAK,OAAK,KAAK,GAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,KAAK,EAAkD;IAC/H,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,KAAC,CAAC,CAAC,WAAW,OAAK,KAAK,GAAI,CAAA;AACrC,CAAC","sourcesContent":["import React from 'react'\nimport { FrontendComponentType, CorePresetNames } from '@wildo-ai/presets-components-models'\nimport { DisplayDirection } from '@wildo-ai/zod-decorators'\nimport { createCompoundComponentResolver } from '~wildo-frontend-lib/core/components-registry/component-resolver.frontend.helper'\nimport { ComponentPresetProps } from '~wildo-frontend-lib/core/components-registry/component-registry.frontend.schemas'\n\n// --- Contract ---\n/**\n * Every `step` and `currentStep` in the stepper family is a 0-based POSITION. The indicator shows position + 1,\n * because a person counts steps from 1; it used to print the raw position, so a wizard read \"0 Compose, 1 Publish\".\n */\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0-based position of the active step. */\n currentStep: number\n totalSteps: number\n orientation?: DisplayDirection\n completedSteps?: Set<number>\n}\n\nexport interface StepperItemProps extends React.HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nexport interface StepperIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nexport interface StepperSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nexport interface StepperTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n step: number\n}\n\nexport interface StepperDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {\n step: number\n}\n\n// --- Compound type ---\n\nexport interface StepperCompound {\n (props: StepperProps): React.JSX.Element\n Item: React.FC<StepperItemProps>\n Indicator: React.FC<StepperIndicatorProps>\n Separator: React.FC<StepperSeparatorProps>\n Title: React.FC<StepperTitleProps>\n Description: React.FC<StepperDescriptionProps>\n}\n\n// --- Resolver ---\n\nconst resolve = createCompoundComponentResolver<StepperCompound>(\n FrontendComponentType.LOW_LEVEL_STEPPER,\n 'Stepper',\n ['Item', 'Indicator', 'Separator', 'Title', 'Description']\n)\n\n// --- Wrappers ---\n\nexport function Stepper({ preset = CorePresetNames.DEFAULT, ...props }: StepperProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C {...props} />\n}\n\nexport function StepperItem({ preset = CorePresetNames.DEFAULT, ...props }: StepperItemProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Item {...props} />\n}\n\nexport function StepperIndicator({ preset = CorePresetNames.DEFAULT, ...props }: StepperIndicatorProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Indicator {...props} />\n}\n\nexport function StepperSeparator({ preset = CorePresetNames.DEFAULT, ...props }: StepperSeparatorProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Separator {...props} />\n}\n\nexport function StepperTitle({ preset = CorePresetNames.DEFAULT, ...props }: StepperTitleProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Title {...props} />\n}\n\nexport function StepperDescription({ preset = CorePresetNames.DEFAULT, ...props }: StepperDescriptionProps & ComponentPresetProps): React.JSX.Element {\n const C = resolve(preset)\n return <C.Description {...props} />\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAEL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,qCAAqC,CAAC;AAgB7C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACzE;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6ID;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,SAAS,MAAM,QAAQ,GAAG,QAAQ,SAAS;IAAE,kBAAkB,CAAC,EAAE,MAAM,QAAQ,CAAA;CAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CA+B9M;
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../../../../src/components/sections/surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAEL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,qCAAqC,CAAC;AAgB7C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACzE;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6ID;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,SAAS,MAAM,QAAQ,GAAG,QAAQ,SAAS;IAAE,kBAAkB,CAAC,EAAE,MAAM,QAAQ,CAAA;CAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CA+B9M;AAwnBD,eAAO,MAAM,aAAa,mKA0BxB,CAAC;AAIH,eAAO,MAAM,WAAW,mKAetB,CAAC;AAIH,eAAO,MAAM,aAAa,mKA6BxB,CAAC;AAIH,eAAO,MAAM,aAAa,mKAYxB,CAAC;AAIH,eAAO,MAAM,OAAO;;;;;CAKlB,CAAC"}
|