@iblai/iblai-js 2.21.0 → 2.22.0

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.
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { useState, useEffect, forwardRef, createElement as createElement$3, useLayoutEffect, createContext, useContext, useMemo, useReducer, useRef, useImperativeHandle, useCallback, isValidElement, Children, PureComponent, cloneElement, Component as Component$1, Fragment as Fragment$2, useId as useId$2, useDebugValue, lazy, Suspense } from 'react';
4
4
  import * as dataLayer from '@iblai/data-layer';
5
- import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useGetUserProfileSummaryQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useUpdateGlobalMemoryMutation, useUpdateMentorMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useGetAllMentorMemoriesQuery, useDeleteGlobalMemoryMutation, useDeleteMentorMemoryMutation, useGetAiSearchMentorsQuery, useStarMentorMutation, useUnstarMentorMutation, useGetUserChatHistoryReportsQuery, USER_CHAT_HISTORY_REPORT_ACTIVE_STATES, useCreateUserChatHistoryReportMutation, useLazyGetDownloadReportFromURLQuery, useGetUserChatHistoryReportStatusQuery, userChatHistoryApiSlice, USER_CHAT_HISTORY_QUERY_KEYS, useGetUserChatHistoryQuery, useGetUserChatHistoryFilterQuery, useGetMentorsQuery, useGetUserChatHistorySessionQuery, useUserLlmUsageSummary, useUserLlmSpendOverTime, useUserLlmCostByModel, useUserLlmCostByService, useUserLlmRecentActivity, USER_LLM_RECENT_ACTIVITY_PAGE_SIZE, useUserLlmTraceObservations, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetVectorDocumentsQuery, useGetLlmsQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, useGetAccessibleUsersQuery, isPoliciesResponse, platformApiSlice, featureTags, useLazyGetRbacTeamsAccessListQuery, useCreateRbacTeamsAccessMutation, useGetRbacGroupsQuery, usePlatformUserGroupsQuery, useCreateRbacGroupMutation, useUpdateRbacGroupMutation, useDeleteRbacGroupMutation, useCreatePlatformUserGroupMutation, useUpdatePlatformUserGroupMutation, useDeletePlatformUserGroupMutation, useGetRbacGroupDetailsQuery, useGetPlatformUserGroupDetailsQuery, useGetRbacPermissionsMutation, useGetRbacRolesQuery, useCreateRbacRoleMutation, useUpdateRbacRoleMutation, useDeleteRbacRoleMutation, useGetRbacRoleDetailsQuery, useGetRbacActionsDefinitionQuery, useGetRbacResourceDiscoveryQuery, useGetRbacResourceListQuery, useGetRbacPoliciesQuery, useCreateRbacPolicyMutation, useUpdateRbacPolicyMutation, useDeleteRbacPolicyMutation, useGetRbacPolicyDetailsQuery, useGetWatchedGroupsQuery, useCreateWatchedGroupMutation, useUpdateWatchedGroupMutation, useDeleteWatchedGroupMutation, useAddWatchedUserMutation, useRemoveWatchedUserMutation, useAddWatcherMutation, useUpdateWatcherMutation, useDeleteWatcherMutation, useGetWatchedUsersQuery, useGetWatchersQuery, WATCHER_NOTIFICATION_EVENTS, WATCHER_NOTIFICATION_EVENT_LABELS, useGetApplicationFormsQuery, useGetApplicationFormDetailQuery, useCreateApplicationFormMutation, useUpdateApplicationFormMutation, useGetApplicationAdminDetailQuery, useInviteApplicationCandidateMutation, useLazyGetApplicationAttachmentFileQuery, useCreateApplicationWaiverMutation, useDeleteApplicationWaiverMutation, useSubmitApplicationOverrideMutation, useUpdateApplicationPlacementMutation, useDeleteApplicationCourseAssignmentMutation, useCreateApplicationNoteMutation, useUpdateApplicationNoteMutation, useDeleteApplicationNoteMutation, useTransitionApplicationMutation, useLinkApplicationCandidateMutation, useCreateApplicationPlacementsMutation, useGetCustomMentorsQuery, useCreateApplicationCourseAssignmentsMutation, useGetApplicationBlocksQuery, useDeleteApplicationBlockMutation, useGetApplicationsPipelineStatsQuery, useGetApplicationsPipelineQuery, useGetTenantMetadataQuery, useUpdateTenantMetadataMutation, useLazyGetTenantMetadataQuery, useDeleteApiKeyMutation, useGetApiKeyQuery, useGetApiKeyFieldPermissionsQuery, useUpdateApiKeyMutation, useGetApiKeysQuery, unwrapApiTokenList, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useGetAgentSpendCapQuery, useGetTenantSpendCapQuery, useListAgentUserSpendCapsQuery, useUpsertAgentSpendCapMutation, useDeleteAgentSpendCapMutation, useUpsertTenantSpendCapMutation, useDeleteTenantSpendCapMutation, useUpsertUserSpendCapMutation, useDeleteUserSpendCapMutation, useGetLlmUsageMetricsQuery, useListAgentSpendCapsQuery, useGetCreditTransactionsQuery, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, VERCEL_SPA, useGetCustomDomainsQuery, useGetHostingProjectsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useCreateHostingProjectDomainMutation, useUpdateHostingDomainMutation, useDeleteHostingDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useCreateMentorMemoryMutation, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useGetTenantChatPrivacyConfigQuery as useGetTenantChatPrivacyConfigQuery$1, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, chatPrivacyApiSlice, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, useGetVoicesQuery, useGetVoiceQuery, isBaseAgentMentor, useGetGradeResultQuery, useOverrideGradeResultMutation, useGetChatHistoryFilterQuery, useListGradeResultsQuery, useGetMentorGraderConfigurationQuery, useListGraderCriteriaQuery, useCreateMentorGraderConfigurationMutation, useUpdateMentorGraderConfigurationMutation, useCreateGraderCriterionMutation, useUpdateGraderCriterionMutation, useDeleteGraderCriterionMutation, useGetSpendCapStatusQuery, useGetMentorPublicSettingsQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useGetSupportTicketsQuery, useGetSupportTicketMessagesQuery, useCreateSupportTicketMessageMutation, usePatchSupportTicketMutation, useCloseSupportTicketMutation, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useDeleteLtiMentorMutation, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useGetDisclaimerAgreementsQuery, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation } from '@iblai/data-layer';
5
+ import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useGetUserProfileSummaryQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerCourseOutlineQuery, getSections, findResumeBlock, flattenOutline, normalizeLearnerCompletionError, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useUpdateGlobalMemoryMutation, useUpdateMentorMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useGetAllMentorMemoriesQuery, useDeleteGlobalMemoryMutation, useDeleteMentorMemoryMutation, useGetAiSearchMentorsQuery, useStarMentorMutation, useUnstarMentorMutation, useGetUserChatHistoryReportsQuery, USER_CHAT_HISTORY_REPORT_ACTIVE_STATES, useCreateUserChatHistoryReportMutation, useLazyGetDownloadReportFromURLQuery, useGetUserChatHistoryReportStatusQuery, userChatHistoryApiSlice, USER_CHAT_HISTORY_QUERY_KEYS, useGetUserChatHistoryQuery, useGetUserChatHistoryFilterQuery, useGetMentorsQuery, useGetUserChatHistorySessionQuery, useUserLlmUsageSummary, useUserLlmSpendOverTime, useUserLlmCostByModel, useUserLlmCostByService, useUserLlmRecentActivity, USER_LLM_RECENT_ACTIVITY_PAGE_SIZE, useUserLlmTraceObservations, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetVectorDocumentsQuery, useGetLlmsQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, useGetAccessibleUsersQuery, isPoliciesResponse, platformApiSlice, featureTags, useLazyGetRbacTeamsAccessListQuery, useCreateRbacTeamsAccessMutation, useGetRbacGroupsQuery, usePlatformUserGroupsQuery, useCreateRbacGroupMutation, useUpdateRbacGroupMutation, useDeleteRbacGroupMutation, useCreatePlatformUserGroupMutation, useUpdatePlatformUserGroupMutation, useDeletePlatformUserGroupMutation, useGetRbacGroupDetailsQuery, useGetPlatformUserGroupDetailsQuery, useGetRbacPermissionsMutation, useGetRbacRolesQuery, useCreateRbacRoleMutation, useUpdateRbacRoleMutation, useDeleteRbacRoleMutation, useGetRbacRoleDetailsQuery, useGetRbacActionsDefinitionQuery, useGetRbacResourceDiscoveryQuery, useGetRbacResourceListQuery, useGetRbacPoliciesQuery, useCreateRbacPolicyMutation, useUpdateRbacPolicyMutation, useDeleteRbacPolicyMutation, useGetRbacPolicyDetailsQuery, useGetWatchedGroupsQuery, useCreateWatchedGroupMutation, useUpdateWatchedGroupMutation, useDeleteWatchedGroupMutation, useAddWatchedUserMutation, useRemoveWatchedUserMutation, useAddWatcherMutation, useUpdateWatcherMutation, useDeleteWatcherMutation, useGetWatchedUsersQuery, useGetWatchersQuery, WATCHER_NOTIFICATION_EVENTS, WATCHER_NOTIFICATION_EVENT_LABELS, useGetApplicationFormsQuery, useGetApplicationFormDetailQuery, useCreateApplicationFormMutation, useUpdateApplicationFormMutation, useGetApplicationAdminDetailQuery, useInviteApplicationCandidateMutation, useLazyGetApplicationAttachmentFileQuery, useCreateApplicationWaiverMutation, useDeleteApplicationWaiverMutation, useSubmitApplicationOverrideMutation, useUpdateApplicationPlacementMutation, useDeleteApplicationCourseAssignmentMutation, useCreateApplicationNoteMutation, useUpdateApplicationNoteMutation, useDeleteApplicationNoteMutation, useTransitionApplicationMutation, useLinkApplicationCandidateMutation, useCreateApplicationPlacementsMutation, useGetCustomMentorsQuery, useCreateApplicationCourseAssignmentsMutation, useGetApplicationBlocksQuery, useDeleteApplicationBlockMutation, useGetApplicationsPipelineStatsQuery, useGetApplicationsPipelineQuery, useGetTenantMetadataQuery, useUpdateTenantMetadataMutation, useLazyGetTenantMetadataQuery, useDeleteApiKeyMutation, useGetApiKeyQuery, useGetApiKeyFieldPermissionsQuery, useUpdateApiKeyMutation, useGetApiKeysQuery, unwrapApiTokenList, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useGetAgentSpendCapQuery, useGetTenantSpendCapQuery, useListAgentUserSpendCapsQuery, useUpsertAgentSpendCapMutation, useDeleteAgentSpendCapMutation, useUpsertTenantSpendCapMutation, useDeleteTenantSpendCapMutation, useUpsertUserSpendCapMutation, useDeleteUserSpendCapMutation, useGetLlmUsageMetricsQuery, useListAgentSpendCapsQuery, useGetCreditTransactionsQuery, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, VERCEL_SPA, useGetCustomDomainsQuery, useGetHostingProjectsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useCreateHostingProjectDomainMutation, useUpdateHostingDomainMutation, useDeleteHostingDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useCreateMentorMemoryMutation, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useGetTenantChatPrivacyConfigQuery as useGetTenantChatPrivacyConfigQuery$1, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, chatPrivacyApiSlice, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, useGetVoicesQuery, useGetVoiceQuery, isBaseAgentMentor, useGetGradeResultQuery, useOverrideGradeResultMutation, useGetChatHistoryFilterQuery, useListGradeResultsQuery, useGetMentorGraderConfigurationQuery, useListGraderCriteriaQuery, useCreateMentorGraderConfigurationMutation, useUpdateMentorGraderConfigurationMutation, useCreateGraderCriterionMutation, useUpdateGraderCriterionMutation, useDeleteGraderCriterionMutation, useGetSpendCapStatusQuery, useGetMentorPublicSettingsQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useGetSupportTicketsQuery, useGetSupportTicketMessagesQuery, useCreateSupportTicketMessageMutation, usePatchSupportTicketMutation, useCloseSupportTicketMutation, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useDeleteLtiMentorMutation, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useGetDisclaimerAgreementsQuery, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation } from '@iblai/data-layer';
6
6
  import { removeAuthItem, setAuthItem, isTauriEmbeddedLLMHost, selectRbacPermissions, useCurrentTenant, canViewOtherUsersChatHistory, isPureWatcher, getInitials, useTenantMetadata, useUsername, selectStreaming, isLoggedIn, TOOL_NAME_MAP, WRITE_TODOS_TOOL, WithPermissions, canWriteField, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, selectNumberOfActiveChatMessages, TOOLS, hasRemoteAiConfig, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, removeFile, chatInputSliceActions, chatActions, WithFormPermissions, useTenantContext, TimeTracker, advancedTabsProperties, defaultSessionIds, pickWritableFields, ANONYMOUS_USERNAME as ANONYMOUS_USERNAME$3, redirectToAuthSpaJoinTenant, selectActiveTab, useAxdToken, useWelcomeMessage, markdownToPlainText, useCachedSessionId, use402ErrorCheck, use401TokenRefresh, selectTokenEnabled, selectToken, useServiceWorker, useUserAgreement, useAdvancedChat, sendMessageToParentWebsite, useMentorTools, useFileDragDrop, eventBus, RemoteEvents, selectEnableChatActionsPopup, advancedTabs, isInIframe, getAuthSpaJoinUrl, addMessage, clearFiles, MENTOR_VISIBILITY } from '@iblai/web-utils';
7
7
  import { useDispatch, useSelector } from 'react-redux';
8
8
  import { toast } from 'sonner';
@@ -96896,6 +96896,8 @@ var analyticsAnalyticsMonetizationStats$3 = {
96896
96896
  tableHeadPlan: "Plan",
96897
96897
  tableHeadAmount: "Amount",
96898
96898
  tableHeadStatus: "Status",
96899
+ tableHeadUser: "User",
96900
+ tableHeadSubscribed: "Subscribed",
96899
96901
  subscriberCountTotal: "{count} subscriber{plural} total",
96900
96902
  previous: "Previous",
96901
96903
  pageLabel: "Page {page}",
@@ -104217,6 +104219,8 @@ var analyticsAnalyticsMonetizationStats$2 = {
104217
104219
  tableHeadPlan: "Plan",
104218
104220
  tableHeadAmount: "Montant",
104219
104221
  tableHeadStatus: "Statut",
104222
+ tableHeadUser: "Utilisateur",
104223
+ tableHeadSubscribed: "Abonné le",
104220
104224
  subscriberCountTotal: "{count} abonné{plural} au total",
104221
104225
  previous: "Précédent",
104222
104226
  pageLabel: "Page {page}",
@@ -111538,6 +111542,8 @@ var analyticsAnalyticsMonetizationStats$1 = {
111538
111542
  tableHeadPlan: "Plan",
111539
111543
  tableHeadAmount: "Monto",
111540
111544
  tableHeadStatus: "Estado",
111545
+ tableHeadUser: "Usuario",
111546
+ tableHeadSubscribed: "Suscrito el",
111541
111547
  subscriberCountTotal: "{count} suscriptor{plural} en total",
111542
111548
  previous: "Anterior",
111543
111549
  pageLabel: "Página {page}",
@@ -118859,6 +118865,8 @@ var analyticsAnalyticsMonetizationStats = {
118859
118865
  tableHeadPlan: "方案",
118860
118866
  tableHeadAmount: "金额",
118861
118867
  tableHeadStatus: "状态",
118868
+ tableHeadUser: "用户",
118869
+ tableHeadSubscribed: "订阅日期",
118862
118870
  subscriberCountTotal: "共 {count} 位订阅者",
118863
118871
  previous: "上一页",
118864
118872
  pageLabel: "第 {page} 页",
@@ -179340,7 +179348,205 @@ const EmptyStats = ({ title = 'No data available' }) => {
179340
179348
  return (jsx("div", { className: "flex justify-center items-center h-full", children: jsx("p", { className: "text-gray-500 text-sm", children: title }) }));
179341
179349
  };
179342
179350
 
179343
- const COMPLETED_COLOR = '#ED8936';
179351
+ var COLLAPSIBLE_NAME = "Collapsible";
179352
+ var [createCollapsibleContext] = createContextScope$1(COLLAPSIBLE_NAME);
179353
+ var [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);
179354
+ var Collapsible$1 = React.forwardRef(
179355
+ (props, forwardedRef) => {
179356
+ const {
179357
+ __scopeCollapsible,
179358
+ open: openProp,
179359
+ defaultOpen,
179360
+ disabled,
179361
+ onOpenChange,
179362
+ ...collapsibleProps
179363
+ } = props;
179364
+ const [open, setOpen] = useControllableState$1({
179365
+ prop: openProp,
179366
+ defaultProp: defaultOpen ?? false,
179367
+ onChange: onOpenChange,
179368
+ caller: COLLAPSIBLE_NAME
179369
+ });
179370
+ return /* @__PURE__ */ jsx(
179371
+ CollapsibleProvider,
179372
+ {
179373
+ scope: __scopeCollapsible,
179374
+ disabled,
179375
+ contentId: useId$1(),
179376
+ open,
179377
+ onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
179378
+ children: /* @__PURE__ */ jsx(
179379
+ Primitive$2.div,
179380
+ {
179381
+ "data-state": getState$3(open),
179382
+ "data-disabled": disabled ? "" : void 0,
179383
+ ...collapsibleProps,
179384
+ ref: forwardedRef
179385
+ }
179386
+ )
179387
+ }
179388
+ );
179389
+ }
179390
+ );
179391
+ Collapsible$1.displayName = COLLAPSIBLE_NAME;
179392
+ var TRIGGER_NAME$3 = "CollapsibleTrigger";
179393
+ var CollapsibleTrigger$1 = React.forwardRef(
179394
+ (props, forwardedRef) => {
179395
+ const { __scopeCollapsible, ...triggerProps } = props;
179396
+ const context = useCollapsibleContext(TRIGGER_NAME$3, __scopeCollapsible);
179397
+ return /* @__PURE__ */ jsx(
179398
+ Primitive$2.button,
179399
+ {
179400
+ type: "button",
179401
+ "aria-controls": context.contentId,
179402
+ "aria-expanded": context.open || false,
179403
+ "data-state": getState$3(context.open),
179404
+ "data-disabled": context.disabled ? "" : void 0,
179405
+ disabled: context.disabled,
179406
+ ...triggerProps,
179407
+ ref: forwardedRef,
179408
+ onClick: composeEventHandlers$1(props.onClick, context.onOpenToggle)
179409
+ }
179410
+ );
179411
+ }
179412
+ );
179413
+ CollapsibleTrigger$1.displayName = TRIGGER_NAME$3;
179414
+ var CONTENT_NAME$4 = "CollapsibleContent";
179415
+ var CollapsibleContent$1 = React.forwardRef(
179416
+ (props, forwardedRef) => {
179417
+ const { forceMount, ...contentProps } = props;
179418
+ const context = useCollapsibleContext(CONTENT_NAME$4, props.__scopeCollapsible);
179419
+ return /* @__PURE__ */ jsx(Presence$2, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });
179420
+ }
179421
+ );
179422
+ CollapsibleContent$1.displayName = CONTENT_NAME$4;
179423
+ var CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {
179424
+ const { __scopeCollapsible, present, children, ...contentProps } = props;
179425
+ const context = useCollapsibleContext(CONTENT_NAME$4, __scopeCollapsible);
179426
+ const [isPresent, setIsPresent] = React.useState(present);
179427
+ const ref = React.useRef(null);
179428
+ const composedRefs = useComposedRefs$1(forwardedRef, ref);
179429
+ const heightRef = React.useRef(0);
179430
+ const height = heightRef.current;
179431
+ const widthRef = React.useRef(0);
179432
+ const width = widthRef.current;
179433
+ const isOpen = context.open || isPresent;
179434
+ const isMountAnimationPreventedRef = React.useRef(isOpen);
179435
+ const originalStylesRef = React.useRef(void 0);
179436
+ React.useEffect(() => {
179437
+ const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);
179438
+ return () => cancelAnimationFrame(rAF);
179439
+ }, []);
179440
+ useLayoutEffect2$1(() => {
179441
+ const node = ref.current;
179442
+ if (node) {
179443
+ originalStylesRef.current = originalStylesRef.current || {
179444
+ transitionDuration: node.style.transitionDuration,
179445
+ animationName: node.style.animationName
179446
+ };
179447
+ node.style.transitionDuration = "0s";
179448
+ node.style.animationName = "none";
179449
+ const rect = node.getBoundingClientRect();
179450
+ heightRef.current = rect.height;
179451
+ widthRef.current = rect.width;
179452
+ if (!isMountAnimationPreventedRef.current) {
179453
+ node.style.transitionDuration = originalStylesRef.current.transitionDuration;
179454
+ node.style.animationName = originalStylesRef.current.animationName;
179455
+ }
179456
+ setIsPresent(present);
179457
+ }
179458
+ }, [context.open, present]);
179459
+ return /* @__PURE__ */ jsx(
179460
+ Primitive$2.div,
179461
+ {
179462
+ "data-state": getState$3(context.open),
179463
+ "data-disabled": context.disabled ? "" : void 0,
179464
+ id: context.contentId,
179465
+ hidden: !isOpen,
179466
+ ...contentProps,
179467
+ ref: composedRefs,
179468
+ style: {
179469
+ [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,
179470
+ [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,
179471
+ ...props.style
179472
+ },
179473
+ children: isOpen && children
179474
+ }
179475
+ );
179476
+ });
179477
+ function getState$3(open) {
179478
+ return open ? "open" : "closed";
179479
+ }
179480
+ var Root$7 = Collapsible$1;
179481
+
179482
+ const Collapsible = Root$7;
179483
+ const CollapsibleTrigger = CollapsibleTrigger$1;
179484
+ const CollapsibleContent = CollapsibleContent$1;
179485
+
179486
+ const BAR_COLOR$1 = 'var(--color-amber-500, #f59e0b)';
179487
+ const ERROR_MESSAGES = {
179488
+ forbidden: 'Completion breakdown is not available for this learner.',
179489
+ not_enrolled: 'This learner is not enrolled in this course.',
179490
+ unavailable: 'Could not load the completion breakdown. Please try again later.',
179491
+ unauthorized: 'Completion breakdown is not available for this learner.',
179492
+ invalid_request: 'Completion breakdown is not available for this course.',
179493
+ unknown: 'Could not load the completion breakdown.',
179494
+ };
179495
+ // Backend values are already rounded to 2 decimals; show whole numbers
179496
+ // unless the value is fractional (e.g. 33.33).
179497
+ const formatPct = (value) => {
179498
+ const pct = value !== null && value !== void 0 ? value : 0;
179499
+ return `${Number.isInteger(pct) ? pct : pct.toFixed(2).replace(/\.?0+$/, '')}%`;
179500
+ };
179501
+ function CompletionBar({ value, label }) {
179502
+ const clamped = Math.min(Math.max(value, 0), 100);
179503
+ return (jsx("span", { className: "block h-1.5 w-full rounded-full bg-gray-200", role: "progressbar", "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": clamped, children: jsx("span", { className: "block h-1.5 rounded-full", style: { width: `${clamped}%`, backgroundColor: BAR_COLOR$1 } }) }));
179504
+ }
179505
+ function SubsectionRow({ block }) {
179506
+ return (jsxs("li", { className: "space-y-1 py-2", children: [jsxs("div", { className: "flex items-center justify-between gap-3", children: [jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-sm text-gray-700", children: [jsx("span", { className: "truncate", children: block.display_name }), block.special_exam_info ? (jsxs("span", { className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-gray-100 px-2 py-0.5 text-[11px] text-gray-600", children: [jsx(Clock, { className: "h-3 w-3", "aria-hidden": "true" }), block.special_exam_info.short_description] })) : null] }), jsx("span", { className: "shrink-0 text-xs font-medium text-gray-600", children: formatPct(block.completion_percentage) })] }), jsx(CompletionBar, { value: block.completion_percentage, label: `${block.display_name} completion` })] }));
179507
+ }
179508
+ function SectionRow({ block }) {
179509
+ var _a;
179510
+ const [open, setOpen] = useState(false);
179511
+ const subsections = (_a = block.children) !== null && _a !== void 0 ? _a : [];
179512
+ return (jsx(Collapsible, { open: open, onOpenChange: setOpen, asChild: true, children: jsxs("li", { className: "py-2.5", children: [jsxs(CollapsibleTrigger, { className: "flex w-full items-center gap-2 rounded text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-500 disabled:cursor-default", disabled: subsections.length === 0, children: [jsx(ChevronRight, { className: `h-4 w-4 shrink-0 text-gray-400 transition-transform ${open ? 'rotate-90' : ''} ${subsections.length === 0 ? 'invisible' : ''}`, "aria-hidden": "true" }), jsxs("span", { className: "block min-w-0 flex-1 space-y-1.5", children: [jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-sm font-medium text-gray-900", children: [jsx("span", { className: "truncate", children: block.display_name }), block.complete ? (jsx(CircleCheck, { className: "h-4 w-4 shrink-0 text-green-600", "aria-label": "Complete" })) : null] }), jsx("span", { className: "shrink-0 text-sm font-semibold text-gray-700", children: formatPct(block.completion_percentage) })] }), jsx(CompletionBar, { value: block.completion_percentage, label: `${block.display_name} completion` })] })] }), subsections.length > 0 ? (jsx(CollapsibleContent, { children: jsx("ul", { className: "ml-6 mt-1 divide-y divide-gray-100", children: subsections.map((subsection) => (jsx(SubsectionRow, { block: subsection }, subsection.id))) }) })) : null] }) }));
179513
+ }
179514
+ /**
179515
+ * Per-section completion for one learner in one course, from the DM
179516
+ * completion outline. Percentages come from the backend as-is.
179517
+ */
179518
+ function CourseCompletionBreakdown({ username, courseId, tenantKey, skip = false, }) {
179519
+ const { data, error, isLoading, isFetching, refetch } = useGetLearnerCourseOutlineQuery({ username, course_id: courseId, platform_key: tenantKey }, { skip: skip || !username || !courseId || !tenantKey });
179520
+ const sections = useMemo(() => (data ? getSections(data) : []), [data]);
179521
+ const resumePath = useMemo(() => {
179522
+ if (!data)
179523
+ return null;
179524
+ const resume = findResumeBlock(data);
179525
+ if (!resume || resume.id === data.id)
179526
+ return null;
179527
+ const entry = flattenOutline(data).find(({ block }) => block.id === resume.id);
179528
+ // Drop the course name; the modal header already shows it.
179529
+ return entry ? entry.path.slice(1).join(' › ') : null;
179530
+ }, [data]);
179531
+ const normalizedError = normalizeLearnerCompletionError(error);
179532
+ let body;
179533
+ if (isLoading || (isFetching && !data)) {
179534
+ body = jsx("p", { className: "py-4 text-sm text-gray-500", children: "Loading completion breakdown..." });
179535
+ }
179536
+ else if (normalizedError) {
179537
+ body = (jsxs("div", { className: "flex items-center justify-between gap-3 py-2", children: [jsx("p", { className: "text-sm text-gray-500", children: ERROR_MESSAGES[normalizedError.kind] }), normalizedError.retryable ? (jsx(Button$1, { variant: "outline", size: "sm", onClick: () => refetch(), disabled: isFetching, children: "Retry" })) : null] }));
179538
+ }
179539
+ else if (sections.length === 0) {
179540
+ body = jsx("p", { className: "py-2 text-sm text-gray-500", children: "No sections in this course yet." });
179541
+ }
179542
+ else {
179543
+ body = (jsxs(Fragment$1, { children: [resumePath ? (jsxs("p", { className: "text-xs text-gray-500", children: ["Last visited: ", jsx("span", { className: "font-medium text-gray-700", children: resumePath })] })) : null, jsx("ul", { className: "divide-y divide-[oklch(0.922_0_0)]", children: sections.map((section) => (jsx(SectionRow, { block: section.block }, section.id))) })] }));
179544
+ }
179545
+ return (jsxs("section", { className: "space-y-2 rounded-lg border p-4", style: { borderColor: 'oklch(.922 0 0)' }, "aria-labelledby": "completion-breakdown-heading", children: [jsxs("div", { children: [jsx("h4", { id: "completion-breakdown-heading", className: "text-sm font-semibold text-gray-900", children: "Completion breakdown" }), jsx("p", { className: "text-xs text-gray-500", children: "Progress through each section of this course." })] }), body] }));
179546
+ }
179547
+
179548
+ // Theme token (the same one bg-amber-500 resolves to), with Tailwind's default as fallback.
179549
+ const COMPLETED_COLOR = 'var(--color-amber-500, #f59e0b)';
179344
179550
  const REMAINING_COLOR = '#E5E7EB';
179345
179551
  const formatDate$1 = (value) => {
179346
179552
  if (!value)
@@ -179446,7 +179652,7 @@ function EnrolledUserProgressModal({ open, onOpenChange, username, userName, ema
179446
179652
  const passingPct = getPassingPct((_h = (_g = item === null || item === void 0 ? void 0 : item.edx_progress) === null || _g === void 0 ? void 0 : _g.grading_policy) === null || _h === void 0 ? void 0 : _h.grade_range);
179447
179653
  return (jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: jsxs(DialogContent, { className: "max-w-2xl max-h-[85vh] overflow-y-auto", "aria-label": "Enrolled user progress", children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { children: userName || username || 'Learner progress' }), jsxs(DialogDescription, { children: [email ? `${email} · ` : '', resolvedName || (isProgram ? 'Program progress' : 'Course progress')] })] }), loading ? (jsx("div", { className: "flex items-center justify-center py-12", children: jsx("div", { className: "text-sm text-gray-500", children: "Loading..." }) })) : !item ? (jsx(EmptyStats, { title: "No progress data available" })) : (jsxs("div", { className: "space-y-6", children: [jsxs("div", { className: "relative mx-auto", style: { width: 220, height: 220 }, children: [jsx(ResponsiveContainer, { width: "100%", height: "100%", children: jsx(PieChart, { children: jsxs(Pie, { data: pieData, dataKey: "value", cx: "50%", cy: "50%", innerRadius: 75, outerRadius: 100, startAngle: 90, endAngle: -270, stroke: "none", isAnimationActive: false, children: [jsx(Cell, { fill: COMPLETED_COLOR }), jsx(Cell, { fill: REMAINING_COLOR })] }) }) }), jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center pointer-events-none", children: [jsxs("span", { className: "text-3xl font-bold text-gray-700", children: [percentage, "%"] }), jsx("span", { className: "text-sm text-gray-500", children: "completed" })] })] }), jsxs("div", { className: "divide-y divide-[oklch(0.922_0_0)]", children: [jsx(DetailRow, { label: "Status", children: jsx("span", { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${((_j = item.completion) === null || _j === void 0 ? void 0 : _j.passed)
179448
179654
  ? 'bg-green-50 text-green-700'
179449
- : 'bg-gray-100 text-gray-600'}`, children: ((_k = item.completion) === null || _k === void 0 ? void 0 : _k.passed) ? 'Passed' : 'Not passed' }) }), jsx(DetailRow, { label: "Passed on", children: formatDate$1((_l = item.completion) === null || _l === void 0 ? void 0 : _l.passed_date) }), jsx(DetailRow, { label: "Time spent", children: item.time_spent || '—' }), jsx(DetailRow, { label: "Enrollment date", children: formatDate$1((_o = (_m = item.enrollment) === null || _m === void 0 ? void 0 : _m.started) !== null && _o !== void 0 ? _o : (_p = item.enrollment) === null || _p === void 0 ? void 0 : _p.created) })] }), ((_s = (_r = (_q = item.edx_progress) === null || _q === void 0 ? void 0 : _q.grading_policy) === null || _r === void 0 ? void 0 : _r.assignment_policies) === null || _s === void 0 ? void 0 : _s.length) ? (jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "rounded-lg border p-4", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsx("h4", { className: "text-sm font-semibold text-gray-900", children: "Grades" }), jsx("p", { className: "text-xs text-gray-500", children: "This represents the weighted grade against the grade needed to pass this course." }), jsx(GradeBar, { currentPct: currentGradePct, passingPct: passingPct })] }), jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 px-4 py-3", children: [jsx(TriangleAlert, { className: "mt-0.5 h-4 w-4 shrink-0 text-amber-600" }), jsxs("span", { className: "text-sm font-medium text-gray-800", children: ["A weighted grade of ", passingPct, "% is required to pass in this course"] })] }), jsxs("div", { className: "rounded-lg border p-4 space-y-3", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsx("h4", { className: "text-sm font-semibold text-gray-900", children: "Grade summary" }), jsx("div", { className: "overflow-x-auto", children: jsxs("table", { className: "w-full border-collapse text-sm", children: [jsx("thead", { children: jsxs("tr", { className: "bg-amber-50 text-[11px] uppercase tracking-wide text-gray-600", children: [jsx("th", { className: "px-3 py-2 text-left font-medium", children: "Assignment type" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Weight" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Grade" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Weighted grade" })] }) }), jsxs("tbody", { children: [gradeSummary === null || gradeSummary === void 0 ? void 0 : gradeSummary.rows.map((row, index) => (jsxs("tr", { className: index % 2 === 0 ? '' : 'bg-gray-50', children: [jsxs("td", { className: "px-3 py-2 text-gray-800", children: [row.type, row.footnote ? (jsx("sup", { className: "ml-0.5 text-amber-500", children: row.footnote })) : null] }), jsxs("td", { className: "px-3 py-2 text-right text-gray-700", children: [row.weightPct, "%"] }), jsxs("td", { className: "px-3 py-2 text-right text-gray-700", children: [row.gradePct, "%"] }), jsxs("td", { className: "px-3 py-2 text-right font-semibold text-amber-600", children: [row.weightedGradePct, "%"] })] }, row.type))), jsxs("tr", { className: "border-l-2 border-amber-400 bg-amber-50", children: [jsx("td", { className: "px-3 py-2 font-medium text-gray-800", colSpan: 3, children: "Current weighted grade summary" }), jsxs("td", { className: "px-3 py-2 text-right font-bold text-amber-600", children: [currentGradePct, "%"] })] })] })] }) }), gradeSummary && gradeSummary.footnotes.length > 0 ? (jsx("div", { className: "space-y-1", children: gradeSummary.footnotes.map((note, index) => (jsxs("p", { className: "text-xs text-gray-500", children: [jsx("sup", { className: "text-amber-500", children: index + 1 }), " ", note] }, note))) })) : null] })] })) : null] }))] }) }));
179655
+ : 'bg-gray-100 text-gray-600'}`, children: ((_k = item.completion) === null || _k === void 0 ? void 0 : _k.passed) ? 'Passed' : 'Not passed' }) }), jsx(DetailRow, { label: "Passed on", children: formatDate$1((_l = item.completion) === null || _l === void 0 ? void 0 : _l.passed_date) }), jsx(DetailRow, { label: "Time spent", children: item.time_spent || '—' }), jsx(DetailRow, { label: "Enrollment date", children: formatDate$1((_o = (_m = item.enrollment) === null || _m === void 0 ? void 0 : _m.started) !== null && _o !== void 0 ? _o : (_p = item.enrollment) === null || _p === void 0 ? void 0 : _p.created) })] }), !isProgram ? (jsx(CourseCompletionBreakdown, { username: username, courseId: normalizedId, tenantKey: tenantKey, skip: !open })) : null, ((_s = (_r = (_q = item.edx_progress) === null || _q === void 0 ? void 0 : _q.grading_policy) === null || _r === void 0 ? void 0 : _r.assignment_policies) === null || _s === void 0 ? void 0 : _s.length) ? (jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "rounded-lg border p-4", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsx("h4", { className: "text-sm font-semibold text-gray-900", children: "Grades" }), jsx("p", { className: "text-xs text-gray-500", children: "This represents the weighted grade against the grade needed to pass this course." }), jsx(GradeBar, { currentPct: currentGradePct, passingPct: passingPct })] }), jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 px-4 py-3", children: [jsx(TriangleAlert, { className: "mt-0.5 h-4 w-4 shrink-0 text-amber-600" }), jsxs("span", { className: "text-sm font-medium text-gray-800", children: ["A weighted grade of ", passingPct, "% is required to pass in this course"] })] }), jsxs("div", { className: "rounded-lg border p-4 space-y-3", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsx("h4", { className: "text-sm font-semibold text-gray-900", children: "Grade summary" }), jsx("div", { className: "overflow-x-auto", children: jsxs("table", { className: "w-full border-collapse text-sm", children: [jsx("thead", { children: jsxs("tr", { className: "bg-amber-50 text-[11px] uppercase tracking-wide text-gray-600", children: [jsx("th", { className: "px-3 py-2 text-left font-medium", children: "Assignment type" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Weight" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Grade" }), jsx("th", { className: "px-3 py-2 text-right font-medium", children: "Weighted grade" })] }) }), jsxs("tbody", { children: [gradeSummary === null || gradeSummary === void 0 ? void 0 : gradeSummary.rows.map((row, index) => (jsxs("tr", { className: index % 2 === 0 ? '' : 'bg-gray-50', children: [jsxs("td", { className: "px-3 py-2 text-gray-800", children: [row.type, row.footnote ? (jsx("sup", { className: "ml-0.5 text-amber-500", children: row.footnote })) : null] }), jsxs("td", { className: "px-3 py-2 text-right text-gray-700", children: [row.weightPct, "%"] }), jsxs("td", { className: "px-3 py-2 text-right text-gray-700", children: [row.gradePct, "%"] }), jsxs("td", { className: "px-3 py-2 text-right font-semibold text-amber-600", children: [row.weightedGradePct, "%"] })] }, row.type))), jsxs("tr", { className: "border-l-2 border-amber-400 bg-amber-50", children: [jsx("td", { className: "px-3 py-2 font-medium text-gray-800", colSpan: 3, children: "Current weighted grade summary" }), jsxs("td", { className: "px-3 py-2 text-right font-bold text-amber-600", children: [currentGradePct, "%"] })] })] })] }) }), gradeSummary && gradeSummary.footnotes.length > 0 ? (jsx("div", { className: "space-y-1", children: gradeSummary.footnotes.map((note, index) => (jsxs("p", { className: "text-xs text-gray-500", children: [jsx("sup", { className: "text-amber-500", children: index + 1 }), " ", note] }, note))) })) : null] })] })) : null] }))] }) }));
179450
179656
  }
179451
179657
  function DetailRow({ label, children }) {
179452
179658
  return (jsxs("div", { className: "flex items-center justify-between gap-4 py-2", children: [jsx("span", { className: "text-sm text-gray-500", children: label }), jsx("span", { className: "text-sm font-medium text-gray-900 text-right", children: children })] }));
@@ -181751,7 +181957,7 @@ function PreviousMonthButton(props) {
181751
181957
  * @group Components
181752
181958
  * @see https://daypicker.dev/guides/custom-components
181753
181959
  */
181754
- function Root$7(props) {
181960
+ function Root$6(props) {
181755
181961
  const { rootRef, ...rest } = props;
181756
181962
  return React__default.createElement("div", { ...rest, ref: rootRef });
181757
181963
  }
@@ -181859,7 +182065,7 @@ var components$1 = /*#__PURE__*/Object.freeze({
181859
182065
  NextMonthButton: NextMonthButton,
181860
182066
  Option: Option,
181861
182067
  PreviousMonthButton: PreviousMonthButton,
181862
- Root: Root$7,
182068
+ Root: Root$6,
181863
182069
  Select: Select,
181864
182070
  Week: Week,
181865
182071
  WeekNumber: WeekNumber,
@@ -183929,11 +184135,11 @@ var PopoverAnchor$1 = React.forwardRef(
183929
184135
  }
183930
184136
  );
183931
184137
  PopoverAnchor$1.displayName = ANCHOR_NAME$1;
183932
- var TRIGGER_NAME$3 = "PopoverTrigger";
184138
+ var TRIGGER_NAME$2 = "PopoverTrigger";
183933
184139
  var PopoverTrigger$1 = React.forwardRef(
183934
184140
  (props, forwardedRef) => {
183935
184141
  const { __scopePopover, ...triggerProps } = props;
183936
- const context = usePopoverContext(TRIGGER_NAME$3, __scopePopover);
184142
+ const context = usePopoverContext(TRIGGER_NAME$2, __scopePopover);
183937
184143
  const popperScope = usePopperScope$1(__scopePopover);
183938
184144
  const composedTriggerRef = useComposedRefs$1(forwardedRef, context.triggerRef);
183939
184145
  const trigger = /* @__PURE__ */ jsx(
@@ -183943,7 +184149,7 @@ var PopoverTrigger$1 = React.forwardRef(
183943
184149
  "aria-haspopup": "dialog",
183944
184150
  "aria-expanded": context.open,
183945
184151
  "aria-controls": context.contentId,
183946
- "data-state": getState$3(context.open),
184152
+ "data-state": getState$2(context.open),
183947
184153
  ...triggerProps,
183948
184154
  ref: composedTriggerRef,
183949
184155
  onClick: composeEventHandlers$2(props.onClick, context.onOpenToggle)
@@ -183952,7 +184158,7 @@ var PopoverTrigger$1 = React.forwardRef(
183952
184158
  return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(Anchor$3, { asChild: true, ...popperScope, children: trigger });
183953
184159
  }
183954
184160
  );
183955
- PopoverTrigger$1.displayName = TRIGGER_NAME$3;
184161
+ PopoverTrigger$1.displayName = TRIGGER_NAME$2;
183956
184162
  var PORTAL_NAME$2 = "PopoverPortal";
183957
184163
  var [PortalProvider$1, usePortalContext$1] = createPopoverContext(PORTAL_NAME$2, {
183958
184164
  forceMount: void 0
@@ -183963,20 +184169,20 @@ var PopoverPortal = (props) => {
183963
184169
  return /* @__PURE__ */ jsx(PortalProvider$1, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence$3, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Portal$7, { asChild: true, container, children }) }) });
183964
184170
  };
183965
184171
  PopoverPortal.displayName = PORTAL_NAME$2;
183966
- var CONTENT_NAME$4 = "PopoverContent";
184172
+ var CONTENT_NAME$3 = "PopoverContent";
183967
184173
  var PopoverContent$1 = React.forwardRef(
183968
184174
  (props, forwardedRef) => {
183969
- const portalContext = usePortalContext$1(CONTENT_NAME$4, props.__scopePopover);
184175
+ const portalContext = usePortalContext$1(CONTENT_NAME$3, props.__scopePopover);
183970
184176
  const { forceMount = portalContext.forceMount, ...contentProps } = props;
183971
- const context = usePopoverContext(CONTENT_NAME$4, props.__scopePopover);
184177
+ const context = usePopoverContext(CONTENT_NAME$3, props.__scopePopover);
183972
184178
  return /* @__PURE__ */ jsx(Presence$3, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });
183973
184179
  }
183974
184180
  );
183975
- PopoverContent$1.displayName = CONTENT_NAME$4;
184181
+ PopoverContent$1.displayName = CONTENT_NAME$3;
183976
184182
  var Slot = createSlot$1("PopoverContent.RemoveScroll");
183977
184183
  var PopoverContentModal = React.forwardRef(
183978
184184
  (props, forwardedRef) => {
183979
- const context = usePopoverContext(CONTENT_NAME$4, props.__scopePopover);
184185
+ const context = usePopoverContext(CONTENT_NAME$3, props.__scopePopover);
183980
184186
  const contentRef = React.useRef(null);
183981
184187
  const composedRefs = useComposedRefs$1(forwardedRef, contentRef);
183982
184188
  const isRightClickOutsideRef = React.useRef(false);
@@ -184016,7 +184222,7 @@ var PopoverContentModal = React.forwardRef(
184016
184222
  );
184017
184223
  var PopoverContentNonModal = React.forwardRef(
184018
184224
  (props, forwardedRef) => {
184019
- const context = usePopoverContext(CONTENT_NAME$4, props.__scopePopover);
184225
+ const context = usePopoverContext(CONTENT_NAME$3, props.__scopePopover);
184020
184226
  const hasInteractedOutsideRef = React.useRef(false);
184021
184227
  const hasPointerDownOutsideRef = React.useRef(false);
184022
184228
  return /* @__PURE__ */ jsx(
@@ -184068,7 +184274,7 @@ var PopoverContentImpl = React.forwardRef(
184068
184274
  onInteractOutside,
184069
184275
  ...contentProps
184070
184276
  } = props;
184071
- const context = usePopoverContext(CONTENT_NAME$4, __scopePopover);
184277
+ const context = usePopoverContext(CONTENT_NAME$3, __scopePopover);
184072
184278
  const popperScope = usePopperScope$1(__scopePopover);
184073
184279
  useFocusGuards();
184074
184280
  return /* @__PURE__ */ jsx(
@@ -184092,7 +184298,7 @@ var PopoverContentImpl = React.forwardRef(
184092
184298
  children: /* @__PURE__ */ jsx(
184093
184299
  Content$3,
184094
184300
  {
184095
- "data-state": getState$3(context.open),
184301
+ "data-state": getState$2(context.open),
184096
184302
  role: "dialog",
184097
184303
  id: context.contentId,
184098
184304
  ...popperScope,
@@ -184143,7 +184349,7 @@ var PopoverArrow = React.forwardRef(
184143
184349
  }
184144
184350
  );
184145
184351
  PopoverArrow.displayName = ARROW_NAME$2;
184146
- function getState$3(open) {
184352
+ function getState$2(open) {
184147
184353
  return open ? "open" : "closed";
184148
184354
  }
184149
184355
  var Root2$4 = Popover$1;
@@ -220897,7 +221103,7 @@ var Checkbox$1 = React.forwardRef(
220897
221103
  role: "checkbox",
220898
221104
  "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
220899
221105
  "aria-required": required,
220900
- "data-state": getState$2(checked),
221106
+ "data-state": getState$1(checked),
220901
221107
  "data-disabled": disabled ? "" : void 0,
220902
221108
  disabled,
220903
221109
  value,
@@ -220942,7 +221148,7 @@ var CheckboxIndicator = React.forwardRef(
220942
221148
  return /* @__PURE__ */ jsx(Presence$1, { present: forceMount || isIndeterminate(context.state) || context.state === true, children: /* @__PURE__ */ jsx(
220943
221149
  Primitive$3.span,
220944
221150
  {
220945
- "data-state": getState$2(context.state),
221151
+ "data-state": getState$1(context.state),
220946
221152
  "data-disabled": context.disabled ? "" : void 0,
220947
221153
  ...indicatorProps,
220948
221154
  ref: forwardedRef,
@@ -221008,14 +221214,14 @@ CheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;
221008
221214
  function isIndeterminate(checked) {
221009
221215
  return checked === "indeterminate";
221010
221216
  }
221011
- function getState$2(checked) {
221217
+ function getState$1(checked) {
221012
221218
  return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
221013
221219
  }
221014
- var Root$6 = Checkbox$1;
221220
+ var Root$5 = Checkbox$1;
221015
221221
  var Indicator$1 = CheckboxIndicator;
221016
221222
 
221017
- const Checkbox = React.forwardRef(({ className, ...props }, ref) => (jsx(Root$6, { ref: ref, className: cn("peer border-primary focus-visible:ring-ring h-4 w-4 shrink-0 rounded-sm border shadow-sm focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-blue-500 data-[state=checked]:text-white", className), ...props, children: jsx(Indicator$1, { className: cn("flex items-center justify-center text-current"), children: jsx(Check, { className: "h-4 w-4" }) }) })));
221018
- Checkbox.displayName = Root$6.displayName;
221223
+ const Checkbox = React.forwardRef(({ className, ...props }, ref) => (jsx(Root$5, { ref: ref, className: cn("peer border-primary focus-visible:ring-ring h-4 w-4 shrink-0 rounded-sm border shadow-sm focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-blue-500 data-[state=checked]:text-white", className), ...props, children: jsx(Indicator$1, { className: cn("flex items-center justify-center text-current"), children: jsx(Check, { className: "h-4 w-4" }) }) })));
221224
+ Checkbox.displayName = Root$5.displayName;
221019
221225
 
221020
221226
  function CoursesTab({ tenant, currentPage, itemsPerPage, hasManageUsersPermission = false, }) {
221021
221227
  var _a;
@@ -221989,141 +222195,6 @@ function RetrievedDocumentsButton({ sessionId = '', documents, className, label,
221989
222195
  }, "data-testid": "retrieved-documents-button", children: [jsx(FileText, { className: "h-4 w-4 text-blue-600" }), jsx("span", { children: label !== null && label !== void 0 ? label : t('retrievedDocumentsButton.title') })] }), jsx(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: jsxs(DialogContent, { className: "flex max-h-[80vh] flex-col gap-0 p-0 sm:max-w-[425px] md:max-w-[600px]", children: [jsx(DialogHeader, { className: "border-b border-gray-200 px-4 py-2", children: jsxs(DialogTitle, { className: "flex items-center gap-2 text-base font-medium text-[#646464]", children: [jsx(FileText, { className: "h-5 w-5 text-blue-600" }), t('retrievedDocumentsButton.title')] }) }), jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", "data-testid": "retrieved-documents-scroll", children: jsx(DocumentSidebar, { isModal: true, sessionId: sessionId, documents: documents }) })] }) })] }));
221990
222196
  }
221991
222197
 
221992
- var COLLAPSIBLE_NAME = "Collapsible";
221993
- var [createCollapsibleContext] = createContextScope$1(COLLAPSIBLE_NAME);
221994
- var [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);
221995
- var Collapsible$1 = React.forwardRef(
221996
- (props, forwardedRef) => {
221997
- const {
221998
- __scopeCollapsible,
221999
- open: openProp,
222000
- defaultOpen,
222001
- disabled,
222002
- onOpenChange,
222003
- ...collapsibleProps
222004
- } = props;
222005
- const [open, setOpen] = useControllableState$1({
222006
- prop: openProp,
222007
- defaultProp: defaultOpen ?? false,
222008
- onChange: onOpenChange,
222009
- caller: COLLAPSIBLE_NAME
222010
- });
222011
- return /* @__PURE__ */ jsx(
222012
- CollapsibleProvider,
222013
- {
222014
- scope: __scopeCollapsible,
222015
- disabled,
222016
- contentId: useId$1(),
222017
- open,
222018
- onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
222019
- children: /* @__PURE__ */ jsx(
222020
- Primitive$2.div,
222021
- {
222022
- "data-state": getState$1(open),
222023
- "data-disabled": disabled ? "" : void 0,
222024
- ...collapsibleProps,
222025
- ref: forwardedRef
222026
- }
222027
- )
222028
- }
222029
- );
222030
- }
222031
- );
222032
- Collapsible$1.displayName = COLLAPSIBLE_NAME;
222033
- var TRIGGER_NAME$2 = "CollapsibleTrigger";
222034
- var CollapsibleTrigger$1 = React.forwardRef(
222035
- (props, forwardedRef) => {
222036
- const { __scopeCollapsible, ...triggerProps } = props;
222037
- const context = useCollapsibleContext(TRIGGER_NAME$2, __scopeCollapsible);
222038
- return /* @__PURE__ */ jsx(
222039
- Primitive$2.button,
222040
- {
222041
- type: "button",
222042
- "aria-controls": context.contentId,
222043
- "aria-expanded": context.open || false,
222044
- "data-state": getState$1(context.open),
222045
- "data-disabled": context.disabled ? "" : void 0,
222046
- disabled: context.disabled,
222047
- ...triggerProps,
222048
- ref: forwardedRef,
222049
- onClick: composeEventHandlers$1(props.onClick, context.onOpenToggle)
222050
- }
222051
- );
222052
- }
222053
- );
222054
- CollapsibleTrigger$1.displayName = TRIGGER_NAME$2;
222055
- var CONTENT_NAME$3 = "CollapsibleContent";
222056
- var CollapsibleContent$1 = React.forwardRef(
222057
- (props, forwardedRef) => {
222058
- const { forceMount, ...contentProps } = props;
222059
- const context = useCollapsibleContext(CONTENT_NAME$3, props.__scopeCollapsible);
222060
- return /* @__PURE__ */ jsx(Presence$2, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });
222061
- }
222062
- );
222063
- CollapsibleContent$1.displayName = CONTENT_NAME$3;
222064
- var CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {
222065
- const { __scopeCollapsible, present, children, ...contentProps } = props;
222066
- const context = useCollapsibleContext(CONTENT_NAME$3, __scopeCollapsible);
222067
- const [isPresent, setIsPresent] = React.useState(present);
222068
- const ref = React.useRef(null);
222069
- const composedRefs = useComposedRefs$1(forwardedRef, ref);
222070
- const heightRef = React.useRef(0);
222071
- const height = heightRef.current;
222072
- const widthRef = React.useRef(0);
222073
- const width = widthRef.current;
222074
- const isOpen = context.open || isPresent;
222075
- const isMountAnimationPreventedRef = React.useRef(isOpen);
222076
- const originalStylesRef = React.useRef(void 0);
222077
- React.useEffect(() => {
222078
- const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);
222079
- return () => cancelAnimationFrame(rAF);
222080
- }, []);
222081
- useLayoutEffect2$1(() => {
222082
- const node = ref.current;
222083
- if (node) {
222084
- originalStylesRef.current = originalStylesRef.current || {
222085
- transitionDuration: node.style.transitionDuration,
222086
- animationName: node.style.animationName
222087
- };
222088
- node.style.transitionDuration = "0s";
222089
- node.style.animationName = "none";
222090
- const rect = node.getBoundingClientRect();
222091
- heightRef.current = rect.height;
222092
- widthRef.current = rect.width;
222093
- if (!isMountAnimationPreventedRef.current) {
222094
- node.style.transitionDuration = originalStylesRef.current.transitionDuration;
222095
- node.style.animationName = originalStylesRef.current.animationName;
222096
- }
222097
- setIsPresent(present);
222098
- }
222099
- }, [context.open, present]);
222100
- return /* @__PURE__ */ jsx(
222101
- Primitive$2.div,
222102
- {
222103
- "data-state": getState$1(context.open),
222104
- "data-disabled": context.disabled ? "" : void 0,
222105
- id: context.contentId,
222106
- hidden: !isOpen,
222107
- ...contentProps,
222108
- ref: composedRefs,
222109
- style: {
222110
- [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,
222111
- [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,
222112
- ...props.style
222113
- },
222114
- children: isOpen && children
222115
- }
222116
- );
222117
- });
222118
- function getState$1(open) {
222119
- return open ? "open" : "closed";
222120
- }
222121
- var Root$5 = Collapsible$1;
222122
-
222123
- const Collapsible = Root$5;
222124
- const CollapsibleTrigger = CollapsibleTrigger$1;
222125
- const CollapsibleContent = CollapsibleContent$1;
222126
-
222127
222198
  function getFriendlyToolName(toolName) {
222128
222199
  if (TOOL_NAME_MAP === null || TOOL_NAME_MAP === void 0 ? void 0 : TOOL_NAME_MAP[toolName])
222129
222200
  return TOOL_NAME_MAP[toolName];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iblai/iblai-js",
3
- "version": "2.21.0",
3
+ "version": "2.22.0",
4
4
  "description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
5
5
  "type": "module",
6
6
  "engines": {
@@ -76,10 +76,10 @@
76
76
  "axios": "1.13.6",
77
77
  "dotenv": "16.6.1",
78
78
  "winston": "3.19.0",
79
- "@iblai/data-layer": "1.19.1",
80
- "@iblai/web-containers": "1.28.0",
79
+ "@iblai/data-layer": "1.22.0",
80
+ "@iblai/web-containers": "1.29.0",
81
81
  "@iblai/mcp": "1.19.0",
82
- "@iblai/web-utils": "2.5.1"
82
+ "@iblai/web-utils": "2.6.0"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "@iblai/iblai-api": "4.166.0-ai",