@iblai/iblai-js 2.28.1 → 2.29.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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { useRef, useEffect, useMemo, useCallback, useState, createContext, useContext, forwardRef, createElement as createElement$1, useLayoutEffect, useReducer, useImperativeHandle, isValidElement, Children, PureComponent, cloneElement, Component, useDebugValue, Fragment as Fragment$2, useId as useId$2, lazy, Suspense } from 'react';
|
|
3
3
|
import * as dataLayer from '@iblai/data-layer';
|
|
4
|
-
import { useGetCredentialsSchemaQuery, useGetLlmsQuery, useCreateSessionIdMutation, useTimeTrackingMutation, 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, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation, useListArtifactsQuery, useLazyGetSessionIdQuery, useGetAiSearchMentorsQuery, 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, 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, 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, splitHostPortInput, validateHostPort, useCreateVirtualMachineNetworkPolicyMutation, useUpdateVirtualMachineNetworkPolicyMutation, VIRTUAL_MACHINE_MAX_POLICY_HOSTS, getVirtualMachineApiError, useDeleteVirtualMachineNetworkPolicyMutation, extractBoundMentorIds, useCreateVirtualMachineSecretMutation, useUpdateVirtualMachineSecretMutation, VIRTUAL_MACHINE_SECRET_VALUE_MIN_LENGTH, VIRTUAL_MACHINE_ENV_VAR_PATTERN, useDeleteVirtualMachineSecretMutation, useGetIntegrationCredentialsQuery, useListVirtualMachineNetworkPoliciesQuery, useListVirtualMachineSecretsQuery, getVirtualMachineErrorStatus, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, USER_PROGRESS_DATA_POINTS, useResetTemplateMutation, useSendTestTemplateEmailMutation, useUpdateTemplateMutation, useGetTemplateDetailsQuery, USER_PROGRESS_SUMMARY_TYPE, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetLlmUsageTracesQuery, useGetLlmUsageObservationsQuery, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetAverageRatingQuery, useGetModelCostsQuery, useGetPerUserCostsQuery, useGetTenantCostQuery, useGetAgentCostQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useGetMentorPublicSettingsQuery, useGetReportsQuery, useCreateReportMutation, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListSubscribersQuery, useGetAuditLogsQuery, useGetPlatformAuditLogsQuery, PLATFORM_AUDIT_EVENT_TYPES, PLATFORM_AUDIT_ACTION_CODES, useGetMentorMemoriesQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useLazyGetPersonnalizedSearchQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetMentorSettingsQuery, useEditMentorJsonMutation, isVirtualMachineEgressNetworked, findUncoveredSecretHosts, VIRTUAL_MACHINE_MAX_SECRETS_PER_MENTOR, VIRTUAL_MACHINE_DEFAULT_BILLING, VIRTUAL_MACHINE_EGRESS_PROFILES, useEditMentorMutation, useGetClawMentorConfigQuery, useGetClawInstancesQuery, useGetAgentConfigQuery, useUpdateClawMentorConfigMutation, useCreateClawMentorConfigMutation, useDeleteClawMentorConfigMutation, usePushClawConfigMutation, useCreateClawInstanceMutation, useDeleteClawInstanceMutation, useUpdateAgentConfigMutation, useHealthCheckClawInstanceMutation, useTestConnectivityClawInstanceMutation, useUpdateClawInstanceMutation, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useCreateCheckoutMutation, useGetUserProjectsQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorCategoriesQuery, useCreateMentorMutation, useUpdateUserPlatformMetadataMutation, useGetApplicationStatusQuery, useListOwnApplicationsQuery, useGetApplicationFormQuery, useWithdrawApplicationMutation, useRenewApplicationMutation, useCreateApplicationDraftMutation, useSubmitApplicationMutation, useUpdateApplicationMutation, useUploadApplicationAttachmentMutation, useDeleteApplicationAttachmentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useGetPromptCategoriesQuery, useCreatePromptMutation, useDeletePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation } from '@iblai/data-layer';
|
|
4
|
+
import { useGetCredentialsSchemaQuery, useGetLlmsQuery, useCreateSessionIdMutation, useTimeTrackingMutation, 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, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation, useListArtifactsQuery, useLazyGetSessionIdQuery, useGetAiSearchMentorsQuery, useGetUserChatHistoryReportsQuery, USER_CHAT_HISTORY_REPORT_ACTIVE_STATES, useCreateUserChatHistoryReportMutation, useLazyGetDownloadReportFromURLQuery, useGetUserChatHistoryReportStatusQuery, userChatHistoryApiSlice, USER_CHAT_HISTORY_QUERY_KEYS, useGetUserChatHistoryQuery, useGetUserChatHistoryFilterQuery, useGetMentorsQuery, useGetUserChatHistorySessionQuery, useUserLlmUsageSummary, useUserLlmSpendOverTime, useUserLlmCostByModel, useUserLlmRecentActivity, USER_LLM_RECENT_ACTIVITY_PAGE_SIZE, useUserLlmTraceObservations, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetVectorDocumentsQuery, 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, 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, splitHostPortInput, validateHostPort, useCreateVirtualMachineNetworkPolicyMutation, useUpdateVirtualMachineNetworkPolicyMutation, VIRTUAL_MACHINE_MAX_POLICY_HOSTS, getVirtualMachineApiError, useDeleteVirtualMachineNetworkPolicyMutation, extractBoundMentorIds, useCreateVirtualMachineSecretMutation, useUpdateVirtualMachineSecretMutation, VIRTUAL_MACHINE_SECRET_VALUE_MIN_LENGTH, VIRTUAL_MACHINE_ENV_VAR_PATTERN, useDeleteVirtualMachineSecretMutation, useGetIntegrationCredentialsQuery, useListVirtualMachineNetworkPoliciesQuery, useListVirtualMachineSecretsQuery, getVirtualMachineErrorStatus, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, USER_PROGRESS_DATA_POINTS, useResetTemplateMutation, useSendTestTemplateEmailMutation, useUpdateTemplateMutation, useGetTemplateDetailsQuery, USER_PROGRESS_SUMMARY_TYPE, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetLlmUsageTracesQuery, useGetLlmUsageObservationsQuery, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetAverageRatingQuery, useGetModelCostsQuery, useGetPerUserCostsQuery, useGetTenantCostQuery, useGetAgentCostQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useGetMentorPublicSettingsQuery, useGetReportsQuery, useCreateReportMutation, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListSubscribersQuery, useGetAuditLogsQuery, useGetPlatformAuditLogsQuery, PLATFORM_AUDIT_EVENT_TYPES, PLATFORM_AUDIT_ACTION_CODES, useGetMentorMemoriesQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useLazyGetPersonnalizedSearchQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useGetMentorSettingsQuery, useEditMentorJsonMutation, isVirtualMachineEgressNetworked, findUncoveredSecretHosts, VIRTUAL_MACHINE_MAX_SECRETS_PER_MENTOR, VIRTUAL_MACHINE_DEFAULT_BILLING, VIRTUAL_MACHINE_EGRESS_PROFILES, useEditMentorMutation, useGetClawMentorConfigQuery, useGetClawInstancesQuery, useGetAgentConfigQuery, useUpdateClawMentorConfigMutation, useCreateClawMentorConfigMutation, useDeleteClawMentorConfigMutation, usePushClawConfigMutation, useCreateClawInstanceMutation, useDeleteClawInstanceMutation, useUpdateAgentConfigMutation, useHealthCheckClawInstanceMutation, useTestConnectivityClawInstanceMutation, useUpdateClawInstanceMutation, useGetAgentSkillResourcesQuery, useCreateAgentSkillResourceMutation, useUpdateAgentSkillResourceMutation, useUploadAgentSkillResourceAssetMutation, useDeleteAgentSkillResourceMutation, useGetMentorSkillAssignmentsQuery, useGetAgentSkillsQuery, useCreateMentorSkillAssignmentMutation, useUpdateMentorSkillAssignmentMutation, useDeleteMentorSkillAssignmentMutation, useCreateAgentSkillMutation, useUpdateAgentSkillMutation, useDeleteAgentSkillMutation, filterSlashSkills, useGetMentorSkillAssignmentsInfiniteQuery, MENTOR_SKILL_ASSIGNMENTS_PAGE_SIZE, useCreateCheckoutMutation, useGetUserProjectsQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useLazyGetConnectedServiceAuthUrlQuery, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorCategoriesQuery, useCreateMentorMutation, useUpdateUserPlatformMetadataMutation, useGetApplicationStatusQuery, useListOwnApplicationsQuery, useGetApplicationFormQuery, useWithdrawApplicationMutation, useRenewApplicationMutation, useCreateApplicationDraftMutation, useSubmitApplicationMutation, useUpdateApplicationMutation, useUploadApplicationAttachmentMutation, useDeleteApplicationAttachmentMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useGetPromptCategoriesQuery, useCreatePromptMutation, useDeletePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation } from '@iblai/data-layer';
|
|
5
5
|
import { useDispatch, useSelector } from 'react-redux';
|
|
6
6
|
import { selectSessionId, selectActiveChatMessages, useCachedSessionId, chatActions, LOCAL_STORAGE_KEYS, TimeTracker, selectRbacPermissions, useCurrentTenant, canViewOtherUsersChatHistory, isPureWatcher, getInitials, useTenantMetadata, useUsername, selectStreaming, isLoggedIn, TOOL_NAME_MAP, WRITE_TODOS_TOOL, WithPermissions, canWriteField, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, getTimeAgo, REQUIRED_ACTIONS_FOR_GROUPS, getVisibleAnalyticsTabs, canViewMonetizationAnalytics, getUserName as getUserName$2, formatRelativeTime as formatRelativeTime$2, ANONYMOUS_USERNAME, combineCSVData, WATCHER_HIDDEN_REPORTS, canViewPlatformAuditLogs, redirectToAuthSpaJoinTenant, redirectToAuthSpa, getAuthSpaJoinUrl, useOS, selectNumberOfActiveChatMessages, TOOLS, hasRemoteAiConfig, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, chatInputSliceActions, removeFile, WithFormPermissions, MENTOR_VISIBILITY } from '@iblai/web-utils';
|
|
7
7
|
import { toast } from 'sonner';
|
|
@@ -1943,6 +1943,16 @@ var advancedPlatformMembership$3 = {
|
|
|
1943
1943
|
switchEnabled: "enabled",
|
|
1944
1944
|
switchDisabled: "disabled"
|
|
1945
1945
|
};
|
|
1946
|
+
var advancedSeoDiscoverability$3 = {
|
|
1947
|
+
toastUpdateSuccess: "SEO discoverability setting updated successfully",
|
|
1948
|
+
toastUpdateError: "Failed to update SEO discoverability setting",
|
|
1949
|
+
label: "SEO Discoverability",
|
|
1950
|
+
infoAriaLabel: "More info about SEO discoverability",
|
|
1951
|
+
infoTooltip: "Make this organization's public course, program, and pathway pages crawlable by search engines and AI, and include them in the sitemap.",
|
|
1952
|
+
switchAriaLabel: "SEO discoverability",
|
|
1953
|
+
switchEnabled: "enabled",
|
|
1954
|
+
switchDisabled: "disabled"
|
|
1955
|
+
};
|
|
1946
1956
|
var advancedProviderConfig$3 = {
|
|
1947
1957
|
regionAriaLabel: "Provider Configuration",
|
|
1948
1958
|
sectionTitle: "Provider Configuration",
|
|
@@ -5512,7 +5522,10 @@ var profileIndex$3 = {
|
|
|
5512
5522
|
groupRecords: "Records",
|
|
5513
5523
|
descLlmUsagePreview: "Spend, tokens and requests across conversations.",
|
|
5514
5524
|
sectionFeatures: "Features",
|
|
5515
|
-
tooltipDisplayMentorAI: "Keeps the AI agent panel beside whatever you are working on, so you can ask questions without leaving the page."
|
|
5525
|
+
tooltipDisplayMentorAI: "Keeps the AI agent panel beside whatever you are working on, so you can ask questions without leaving the page.",
|
|
5526
|
+
tabOverview: "Overview",
|
|
5527
|
+
descOverview: "Your courses, conversations, AI usage and memory, all in one place.",
|
|
5528
|
+
descOverviewPreview: "Courses, conversations, AI usage and memory, all in one place."
|
|
5516
5529
|
};
|
|
5517
5530
|
var profileInviteUserContent$3 = {
|
|
5518
5531
|
inviteUsersTitle: "Invite Users",
|
|
@@ -8587,8 +8600,6 @@ var profileLlmUsage$3 = {
|
|
|
8587
8600
|
colCost: "Cost",
|
|
8588
8601
|
byModelTitle: "By model",
|
|
8589
8602
|
byModelSubtitle: "Share of your spend per model",
|
|
8590
|
-
byServiceTitle: "By service",
|
|
8591
|
-
byServiceSubtitle: "Where your spend comes from",
|
|
8592
8603
|
otherRow: "Other",
|
|
8593
8604
|
unknownModel: "Unknown model",
|
|
8594
8605
|
unknownService: "Other service",
|
|
@@ -8630,6 +8641,82 @@ var profileLlmUsage$3 = {
|
|
|
8630
8641
|
tryAgain: "Try again",
|
|
8631
8642
|
scopeUser: "Usage for {username}"
|
|
8632
8643
|
};
|
|
8644
|
+
var profileOverviewTab$3 = {
|
|
8645
|
+
scopeSelf: "Your activity across courses and AI agents, at a glance.",
|
|
8646
|
+
scopeUser: "Activity for {username}",
|
|
8647
|
+
refresh: "Refresh overview",
|
|
8648
|
+
unavailable: "Unavailable",
|
|
8649
|
+
kpiEnrolled: "Enrolled courses",
|
|
8650
|
+
kpiEnrolledSub: "{count} in progress",
|
|
8651
|
+
kpiEnrolledSubAll: "All time",
|
|
8652
|
+
kpiCompleted: "Completed courses",
|
|
8653
|
+
kpiCompletedSub: "{percent}% of enrolled",
|
|
8654
|
+
kpiProgress: "Average progress",
|
|
8655
|
+
kpiProgressSub: "Across enrolled courses",
|
|
8656
|
+
kpiTimeSpent: "Time spent",
|
|
8657
|
+
kpiTimeSpentSub: "Learning time, all courses",
|
|
8658
|
+
kpiConversations: "Conversations",
|
|
8659
|
+
kpiConversationsSub: "With AI agents",
|
|
8660
|
+
kpiConversationsLast: "Last one {when}",
|
|
8661
|
+
kpiSpend: "AI spend",
|
|
8662
|
+
kpiSpendSub: "Last 30 days",
|
|
8663
|
+
kpiRequests: "AI requests",
|
|
8664
|
+
kpiRequestsSub: "{tokens} tokens, last 30 days",
|
|
8665
|
+
kpiMemories: "Memories",
|
|
8666
|
+
kpiMemoriesSub: "Saved by the AI",
|
|
8667
|
+
kpiMemoriesSubOn: "Auto-capture on",
|
|
8668
|
+
kpiMemoriesSubOff: "Auto-capture off",
|
|
8669
|
+
recordsLabel: "Records",
|
|
8670
|
+
recordsCredentials: "{count, plural, one {# credential} other {# credentials}}",
|
|
8671
|
+
recordsPrograms: "{count, plural, one {# program} other {# programs}}",
|
|
8672
|
+
recordsPathways: "{count, plural, one {# pathway} other {# pathways}}",
|
|
8673
|
+
learningTitle: "Learning progress",
|
|
8674
|
+
learningSubtitle: "Where each enrolled course stands",
|
|
8675
|
+
learningError: "Course enrollments couldn't be loaded.",
|
|
8676
|
+
learningEmpty: "No course enrollments yet.",
|
|
8677
|
+
learningProgressUnavailable: "Progress details aren't available for this account.",
|
|
8678
|
+
moreCourses: "{count, plural, one {# more course in the gradebook} other {# more courses in the gradebook}}",
|
|
8679
|
+
legendCompleted: "Completed",
|
|
8680
|
+
legendInProgress: "In progress",
|
|
8681
|
+
legendNotStarted: "Not started",
|
|
8682
|
+
ringAria: "{completed} of {total} courses completed",
|
|
8683
|
+
viewProgress: "View progress for {name}",
|
|
8684
|
+
courseProgressAria: "{name}: {percent}% complete",
|
|
8685
|
+
courseCompleted: "Completed",
|
|
8686
|
+
coursePassed: "Passed",
|
|
8687
|
+
courseEnrolledOn: "Enrolled {date}",
|
|
8688
|
+
courseTimeSpent: "{duration} spent",
|
|
8689
|
+
enrollmentActive: "Active",
|
|
8690
|
+
enrollmentInactive: "Inactive",
|
|
8691
|
+
viewGradebook: "View gradebook",
|
|
8692
|
+
viewUsage: "View usage",
|
|
8693
|
+
viewHistory: "View history",
|
|
8694
|
+
viewMemory: "View memory",
|
|
8695
|
+
usageTitle: "AI usage",
|
|
8696
|
+
usageSubtitle: "Daily spend over the last 30 days",
|
|
8697
|
+
usageForbidden: "AI usage isn't available for this account.",
|
|
8698
|
+
usageError: "AI usage couldn't be loaded.",
|
|
8699
|
+
usageEmpty: "No AI usage in the last 30 days.",
|
|
8700
|
+
usageNoSpend: "No spend recorded in the last 30 days.",
|
|
8701
|
+
conversationsTitle: "Recent conversations",
|
|
8702
|
+
conversationsSubtitle: "Your latest exchanges with AI agents",
|
|
8703
|
+
conversationsSubtitlePreview: "Latest exchanges with AI agents",
|
|
8704
|
+
conversationsForbidden: "Conversations aren't available for this account.",
|
|
8705
|
+
conversationsError: "Conversations couldn't be loaded.",
|
|
8706
|
+
conversationsEmpty: "No conversations yet.",
|
|
8707
|
+
conversation: "Conversation",
|
|
8708
|
+
agent: "AI agent",
|
|
8709
|
+
messageCount: "{count, plural, one {# message} other {# messages}}",
|
|
8710
|
+
memoryTitle: "Memory",
|
|
8711
|
+
memorySubtitle: "What the AI remembers about you",
|
|
8712
|
+
memorySubtitlePreview: "What the AI remembers",
|
|
8713
|
+
memoryError: "Memories couldn't be loaded.",
|
|
8714
|
+
memoryEmpty: "No memories saved yet.",
|
|
8715
|
+
memoryAutoCapture: "Auto-capture",
|
|
8716
|
+
memoryUseInResponses: "Used in responses",
|
|
8717
|
+
stateOn: "On",
|
|
8718
|
+
stateOff: "Off"
|
|
8719
|
+
};
|
|
8633
8720
|
var virtualMachineHostInput$3 = {
|
|
8634
8721
|
listLabel: "Allowed Hosts",
|
|
8635
8722
|
removeHost: "Remove {host}",
|
|
@@ -8816,6 +8903,7 @@ var en = {
|
|
|
8816
8903
|
advancedExternalMapping: advancedExternalMapping$3,
|
|
8817
8904
|
advancedMemsearchConfig: advancedMemsearchConfig$3,
|
|
8818
8905
|
advancedPlatformMembership: advancedPlatformMembership$3,
|
|
8906
|
+
advancedSeoDiscoverability: advancedSeoDiscoverability$3,
|
|
8819
8907
|
advancedProviderConfig: advancedProviderConfig$3,
|
|
8820
8908
|
advancedRecommendationSystemPrompts: advancedRecommendationSystemPrompts$3,
|
|
8821
8909
|
advancedSmtp: advancedSmtp$3,
|
|
@@ -9090,6 +9178,7 @@ var en = {
|
|
|
9090
9178
|
analyticsLlmUsage: analyticsLlmUsage$3,
|
|
9091
9179
|
analyticsTraces: analyticsTraces$3,
|
|
9092
9180
|
profileLlmUsage: profileLlmUsage$3,
|
|
9181
|
+
profileOverviewTab: profileOverviewTab$3,
|
|
9093
9182
|
virtualMachineHostInput: virtualMachineHostInput$3,
|
|
9094
9183
|
virtualMachineAdminTab: virtualMachineAdminTab$3,
|
|
9095
9184
|
virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$3,
|
|
@@ -9510,6 +9599,16 @@ var advancedPlatformMembership$2 = {
|
|
|
9510
9599
|
switchEnabled: "activée",
|
|
9511
9600
|
switchDisabled: "désactivée"
|
|
9512
9601
|
};
|
|
9602
|
+
var advancedSeoDiscoverability$2 = {
|
|
9603
|
+
toastUpdateSuccess: "Paramètre de découvrabilité SEO mis à jour avec succès",
|
|
9604
|
+
toastUpdateError: "Échec de la mise à jour du paramètre de découvrabilité SEO",
|
|
9605
|
+
label: "Découvrabilité SEO",
|
|
9606
|
+
infoAriaLabel: "Plus d'informations sur la découvrabilité SEO",
|
|
9607
|
+
infoTooltip: "Rendre les pages publiques de cours, programmes et parcours de cette organisation explorables par les moteurs de recherche et l'IA, et les inclure dans le plan du site.",
|
|
9608
|
+
switchAriaLabel: "Découvrabilité SEO",
|
|
9609
|
+
switchEnabled: "activée",
|
|
9610
|
+
switchDisabled: "désactivée"
|
|
9611
|
+
};
|
|
9513
9612
|
var advancedProviderConfig$2 = {
|
|
9514
9613
|
regionAriaLabel: "Configuration du fournisseur",
|
|
9515
9614
|
sectionTitle: "Configuration du fournisseur",
|
|
@@ -13245,7 +13344,10 @@ var profileIndex$2 = {
|
|
|
13245
13344
|
groupRecords: "Dossiers",
|
|
13246
13345
|
descLlmUsagePreview: "Dépenses, jetons et requêtes dans les conversations.",
|
|
13247
13346
|
sectionFeatures: "Fonctionnalités",
|
|
13248
|
-
tooltipDisplayMentorAI: "Garde le panneau de l'agent IA à côté de ce que vous faites, pour poser des questions sans quitter la page."
|
|
13347
|
+
tooltipDisplayMentorAI: "Garde le panneau de l'agent IA à côté de ce que vous faites, pour poser des questions sans quitter la page.",
|
|
13348
|
+
tabOverview: "Vue d'ensemble",
|
|
13349
|
+
descOverview: "Vos cours, conversations, utilisation de l'IA et mémoire, réunis au même endroit.",
|
|
13350
|
+
descOverviewPreview: "Cours, conversations, utilisation de l'IA et mémoire, réunis au même endroit."
|
|
13249
13351
|
};
|
|
13250
13352
|
var profileInviteUserContent$2 = {
|
|
13251
13353
|
inviteUsersTitle: "Inviter des utilisateurs",
|
|
@@ -16154,8 +16256,6 @@ var profileLlmUsage$2 = {
|
|
|
16154
16256
|
colCost: "Coût",
|
|
16155
16257
|
byModelTitle: "Par modèle",
|
|
16156
16258
|
byModelSubtitle: "Part de vos dépenses par modèle",
|
|
16157
|
-
byServiceTitle: "Par service",
|
|
16158
|
-
byServiceSubtitle: "D'où viennent vos dépenses",
|
|
16159
16259
|
otherRow: "Autres",
|
|
16160
16260
|
unknownModel: "Modèle inconnu",
|
|
16161
16261
|
unknownService: "Autre service",
|
|
@@ -16197,6 +16297,82 @@ var profileLlmUsage$2 = {
|
|
|
16197
16297
|
tryAgain: "Réessayer",
|
|
16198
16298
|
scopeUser: "Utilisation de {username}"
|
|
16199
16299
|
};
|
|
16300
|
+
var profileOverviewTab$2 = {
|
|
16301
|
+
scopeSelf: "Votre activité dans les cours et avec les agents IA, en un coup d'œil.",
|
|
16302
|
+
scopeUser: "Activité de {username}",
|
|
16303
|
+
refresh: "Actualiser la vue d'ensemble",
|
|
16304
|
+
unavailable: "Indisponible",
|
|
16305
|
+
kpiEnrolled: "Cours suivis",
|
|
16306
|
+
kpiEnrolledSub: "{count} en cours",
|
|
16307
|
+
kpiEnrolledSubAll: "Depuis le début",
|
|
16308
|
+
kpiCompleted: "Cours terminés",
|
|
16309
|
+
kpiCompletedSub: "{percent}% des cours suivis",
|
|
16310
|
+
kpiProgress: "Progression moyenne",
|
|
16311
|
+
kpiProgressSub: "Sur l'ensemble des cours suivis",
|
|
16312
|
+
kpiTimeSpent: "Temps passé",
|
|
16313
|
+
kpiTimeSpentSub: "Temps d'apprentissage, tous cours confondus",
|
|
16314
|
+
kpiConversations: "Conversations",
|
|
16315
|
+
kpiConversationsSub: "Avec des agents IA",
|
|
16316
|
+
kpiConversationsLast: "La dernière {when}",
|
|
16317
|
+
kpiSpend: "Dépenses IA",
|
|
16318
|
+
kpiSpendSub: "30 derniers jours",
|
|
16319
|
+
kpiRequests: "Requêtes IA",
|
|
16320
|
+
kpiRequestsSub: "{tokens} jetons, 30 derniers jours",
|
|
16321
|
+
kpiMemories: "Souvenirs",
|
|
16322
|
+
kpiMemoriesSub: "Enregistrés par l'IA",
|
|
16323
|
+
kpiMemoriesSubOn: "Capture automatique activée",
|
|
16324
|
+
kpiMemoriesSubOff: "Capture automatique désactivée",
|
|
16325
|
+
recordsLabel: "Dossiers",
|
|
16326
|
+
recordsCredentials: "{count, plural, one {# certification} other {# certifications}}",
|
|
16327
|
+
recordsPrograms: "{count, plural, one {# programme} other {# programmes}}",
|
|
16328
|
+
recordsPathways: "{count, plural, one {# parcours} other {# parcours}}",
|
|
16329
|
+
learningTitle: "Progression d'apprentissage",
|
|
16330
|
+
learningSubtitle: "Où en est chaque cours suivi",
|
|
16331
|
+
learningError: "Impossible de charger les inscriptions aux cours.",
|
|
16332
|
+
learningEmpty: "Aucune inscription à un cours pour le moment.",
|
|
16333
|
+
learningProgressUnavailable: "Les détails de progression ne sont pas disponibles pour ce compte.",
|
|
16334
|
+
moreCourses: "{count, plural, one {# autre cours dans le carnet de notes} other {# autres cours dans le carnet de notes}}",
|
|
16335
|
+
legendCompleted: "Terminés",
|
|
16336
|
+
legendInProgress: "En cours",
|
|
16337
|
+
legendNotStarted: "Non commencés",
|
|
16338
|
+
ringAria: "{completed} cours terminés sur {total}",
|
|
16339
|
+
viewProgress: "Voir la progression de {name}",
|
|
16340
|
+
courseProgressAria: "{name} : {percent}% terminé",
|
|
16341
|
+
courseCompleted: "Terminé",
|
|
16342
|
+
coursePassed: "Réussi",
|
|
16343
|
+
courseEnrolledOn: "Inscrit le {date}",
|
|
16344
|
+
courseTimeSpent: "{duration} passées",
|
|
16345
|
+
enrollmentActive: "Active",
|
|
16346
|
+
enrollmentInactive: "Inactive",
|
|
16347
|
+
viewGradebook: "Voir le carnet de notes",
|
|
16348
|
+
viewUsage: "Voir l'utilisation",
|
|
16349
|
+
viewHistory: "Voir l'historique",
|
|
16350
|
+
viewMemory: "Voir la mémoire",
|
|
16351
|
+
usageTitle: "Utilisation de l'IA",
|
|
16352
|
+
usageSubtitle: "Dépenses quotidiennes sur les 30 derniers jours",
|
|
16353
|
+
usageForbidden: "L'utilisation de l'IA n'est pas disponible pour ce compte.",
|
|
16354
|
+
usageError: "Impossible de charger l'utilisation de l'IA.",
|
|
16355
|
+
usageEmpty: "Aucune utilisation de l'IA au cours des 30 derniers jours.",
|
|
16356
|
+
usageNoSpend: "Aucune dépense enregistrée au cours des 30 derniers jours.",
|
|
16357
|
+
conversationsTitle: "Conversations récentes",
|
|
16358
|
+
conversationsSubtitle: "Vos derniers échanges avec des agents IA",
|
|
16359
|
+
conversationsSubtitlePreview: "Derniers échanges avec des agents IA",
|
|
16360
|
+
conversationsForbidden: "Les conversations ne sont pas disponibles pour ce compte.",
|
|
16361
|
+
conversationsError: "Impossible de charger les conversations.",
|
|
16362
|
+
conversationsEmpty: "Aucune conversation pour le moment.",
|
|
16363
|
+
conversation: "Conversation",
|
|
16364
|
+
agent: "Agent IA",
|
|
16365
|
+
messageCount: "{count, plural, one {# message} other {# messages}}",
|
|
16366
|
+
memoryTitle: "Mémoire",
|
|
16367
|
+
memorySubtitle: "Ce que l'IA retient de vous",
|
|
16368
|
+
memorySubtitlePreview: "Ce que l'IA retient",
|
|
16369
|
+
memoryError: "Impossible de charger les souvenirs.",
|
|
16370
|
+
memoryEmpty: "Aucun souvenir enregistré pour le moment.",
|
|
16371
|
+
memoryAutoCapture: "Capture automatique",
|
|
16372
|
+
memoryUseInResponses: "Utilisée dans les réponses",
|
|
16373
|
+
stateOn: "Activé",
|
|
16374
|
+
stateOff: "Désactivé"
|
|
16375
|
+
};
|
|
16200
16376
|
var virtualMachineHostInput$2 = {
|
|
16201
16377
|
listLabel: "Hôtes autorisés",
|
|
16202
16378
|
removeHost: "Retirer {host}",
|
|
@@ -16383,6 +16559,7 @@ var fr = {
|
|
|
16383
16559
|
advancedExternalMapping: advancedExternalMapping$2,
|
|
16384
16560
|
advancedMemsearchConfig: advancedMemsearchConfig$2,
|
|
16385
16561
|
advancedPlatformMembership: advancedPlatformMembership$2,
|
|
16562
|
+
advancedSeoDiscoverability: advancedSeoDiscoverability$2,
|
|
16386
16563
|
advancedProviderConfig: advancedProviderConfig$2,
|
|
16387
16564
|
advancedRecommendationSystemPrompts: advancedRecommendationSystemPrompts$2,
|
|
16388
16565
|
advancedSmtp: advancedSmtp$2,
|
|
@@ -16657,6 +16834,7 @@ var fr = {
|
|
|
16657
16834
|
analyticsLlmUsage: analyticsLlmUsage$2,
|
|
16658
16835
|
analyticsTraces: analyticsTraces$2,
|
|
16659
16836
|
profileLlmUsage: profileLlmUsage$2,
|
|
16837
|
+
profileOverviewTab: profileOverviewTab$2,
|
|
16660
16838
|
virtualMachineHostInput: virtualMachineHostInput$2,
|
|
16661
16839
|
virtualMachineAdminTab: virtualMachineAdminTab$2,
|
|
16662
16840
|
virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$2,
|
|
@@ -17077,6 +17255,16 @@ var advancedPlatformMembership$1 = {
|
|
|
17077
17255
|
switchEnabled: "habilitado",
|
|
17078
17256
|
switchDisabled: "deshabilitado"
|
|
17079
17257
|
};
|
|
17258
|
+
var advancedSeoDiscoverability$1 = {
|
|
17259
|
+
toastUpdateSuccess: "Configuración de descubrimiento SEO actualizada correctamente",
|
|
17260
|
+
toastUpdateError: "Error al actualizar la configuración de descubrimiento SEO",
|
|
17261
|
+
label: "Descubrimiento SEO",
|
|
17262
|
+
infoAriaLabel: "Más información sobre el descubrimiento SEO",
|
|
17263
|
+
infoTooltip: "Hacer que las páginas públicas de cursos, programas y rutas de esta organización sean rastreables por los motores de búsqueda y la IA, e incluirlas en el mapa del sitio.",
|
|
17264
|
+
switchAriaLabel: "Descubrimiento SEO",
|
|
17265
|
+
switchEnabled: "habilitado",
|
|
17266
|
+
switchDisabled: "deshabilitado"
|
|
17267
|
+
};
|
|
17080
17268
|
var advancedProviderConfig$1 = {
|
|
17081
17269
|
regionAriaLabel: "Configuración del proveedor",
|
|
17082
17270
|
sectionTitle: "Configuración del proveedor",
|
|
@@ -20812,7 +21000,10 @@ var profileIndex$1 = {
|
|
|
20812
21000
|
groupRecords: "Registros",
|
|
20813
21001
|
descLlmUsagePreview: "Gasto, tokens y solicitudes en las conversaciones.",
|
|
20814
21002
|
sectionFeatures: "Funciones",
|
|
20815
|
-
tooltipDisplayMentorAI: "Mantiene el panel del agente de IA junto a lo que estés haciendo, para que puedas preguntar sin salir de la página."
|
|
21003
|
+
tooltipDisplayMentorAI: "Mantiene el panel del agente de IA junto a lo que estés haciendo, para que puedas preguntar sin salir de la página.",
|
|
21004
|
+
tabOverview: "Resumen",
|
|
21005
|
+
descOverview: "Tus cursos, conversaciones, uso de IA y memoria, todo en un solo lugar.",
|
|
21006
|
+
descOverviewPreview: "Cursos, conversaciones, uso de IA y memoria, todo en un solo lugar."
|
|
20816
21007
|
};
|
|
20817
21008
|
var profileInviteUserContent$1 = {
|
|
20818
21009
|
inviteUsersTitle: "Invitar usuarios",
|
|
@@ -23721,8 +23912,6 @@ var profileLlmUsage$1 = {
|
|
|
23721
23912
|
colCost: "Costo",
|
|
23722
23913
|
byModelTitle: "Por modelo",
|
|
23723
23914
|
byModelSubtitle: "Parte de tu gasto por modelo",
|
|
23724
|
-
byServiceTitle: "Por servicio",
|
|
23725
|
-
byServiceSubtitle: "De dónde proviene tu gasto",
|
|
23726
23915
|
otherRow: "Otros",
|
|
23727
23916
|
unknownModel: "Modelo desconocido",
|
|
23728
23917
|
unknownService: "Otro servicio",
|
|
@@ -23764,6 +23953,82 @@ var profileLlmUsage$1 = {
|
|
|
23764
23953
|
tryAgain: "Intentar de nuevo",
|
|
23765
23954
|
scopeUser: "Uso de {username}"
|
|
23766
23955
|
};
|
|
23956
|
+
var profileOverviewTab$1 = {
|
|
23957
|
+
scopeSelf: "Tu actividad en cursos y agentes de IA, de un vistazo.",
|
|
23958
|
+
scopeUser: "Actividad de {username}",
|
|
23959
|
+
refresh: "Actualizar resumen",
|
|
23960
|
+
unavailable: "No disponible",
|
|
23961
|
+
kpiEnrolled: "Cursos inscritos",
|
|
23962
|
+
kpiEnrolledSub: "{count} en curso",
|
|
23963
|
+
kpiEnrolledSubAll: "Desde siempre",
|
|
23964
|
+
kpiCompleted: "Cursos completados",
|
|
23965
|
+
kpiCompletedSub: "{percent}% de los inscritos",
|
|
23966
|
+
kpiProgress: "Progreso medio",
|
|
23967
|
+
kpiProgressSub: "En todos los cursos inscritos",
|
|
23968
|
+
kpiTimeSpent: "Tiempo dedicado",
|
|
23969
|
+
kpiTimeSpentSub: "Tiempo de aprendizaje, todos los cursos",
|
|
23970
|
+
kpiConversations: "Conversaciones",
|
|
23971
|
+
kpiConversationsSub: "Con agentes de IA",
|
|
23972
|
+
kpiConversationsLast: "La última {when}",
|
|
23973
|
+
kpiSpend: "Gasto en IA",
|
|
23974
|
+
kpiSpendSub: "Últimos 30 días",
|
|
23975
|
+
kpiRequests: "Solicitudes de IA",
|
|
23976
|
+
kpiRequestsSub: "{tokens} tokens, últimos 30 días",
|
|
23977
|
+
kpiMemories: "Memorias",
|
|
23978
|
+
kpiMemoriesSub: "Guardadas por la IA",
|
|
23979
|
+
kpiMemoriesSubOn: "Captura automática activada",
|
|
23980
|
+
kpiMemoriesSubOff: "Captura automática desactivada",
|
|
23981
|
+
recordsLabel: "Registros",
|
|
23982
|
+
recordsCredentials: "{count, plural, one {# credencial} other {# credenciales}}",
|
|
23983
|
+
recordsPrograms: "{count, plural, one {# programa} other {# programas}}",
|
|
23984
|
+
recordsPathways: "{count, plural, one {# itinerario} other {# itinerarios}}",
|
|
23985
|
+
learningTitle: "Progreso de aprendizaje",
|
|
23986
|
+
learningSubtitle: "Estado de cada curso inscrito",
|
|
23987
|
+
learningError: "No se pudieron cargar las inscripciones a cursos.",
|
|
23988
|
+
learningEmpty: "Aún no hay inscripciones a cursos.",
|
|
23989
|
+
learningProgressUnavailable: "Los detalles de progreso no están disponibles para esta cuenta.",
|
|
23990
|
+
moreCourses: "{count, plural, one {# curso más en el libro de calificaciones} other {# cursos más en el libro de calificaciones}}",
|
|
23991
|
+
legendCompleted: "Completados",
|
|
23992
|
+
legendInProgress: "En curso",
|
|
23993
|
+
legendNotStarted: "Sin empezar",
|
|
23994
|
+
ringAria: "{completed} de {total} cursos completados",
|
|
23995
|
+
viewProgress: "Ver el progreso de {name}",
|
|
23996
|
+
courseProgressAria: "{name}: {percent}% completado",
|
|
23997
|
+
courseCompleted: "Completado",
|
|
23998
|
+
coursePassed: "Aprobado",
|
|
23999
|
+
courseEnrolledOn: "Inscrito el {date}",
|
|
24000
|
+
courseTimeSpent: "{duration} dedicados",
|
|
24001
|
+
enrollmentActive: "Activa",
|
|
24002
|
+
enrollmentInactive: "Inactiva",
|
|
24003
|
+
viewGradebook: "Ver calificaciones",
|
|
24004
|
+
viewUsage: "Ver uso",
|
|
24005
|
+
viewHistory: "Ver historial",
|
|
24006
|
+
viewMemory: "Ver memoria",
|
|
24007
|
+
usageTitle: "Uso de IA",
|
|
24008
|
+
usageSubtitle: "Gasto diario en los últimos 30 días",
|
|
24009
|
+
usageForbidden: "El uso de IA no está disponible para esta cuenta.",
|
|
24010
|
+
usageError: "No se pudo cargar el uso de IA.",
|
|
24011
|
+
usageEmpty: "Sin uso de IA en los últimos 30 días.",
|
|
24012
|
+
usageNoSpend: "Sin gasto registrado en los últimos 30 días.",
|
|
24013
|
+
conversationsTitle: "Conversaciones recientes",
|
|
24014
|
+
conversationsSubtitle: "Tus últimos intercambios con agentes de IA",
|
|
24015
|
+
conversationsSubtitlePreview: "Últimos intercambios con agentes de IA",
|
|
24016
|
+
conversationsForbidden: "Las conversaciones no están disponibles para esta cuenta.",
|
|
24017
|
+
conversationsError: "No se pudieron cargar las conversaciones.",
|
|
24018
|
+
conversationsEmpty: "Aún no hay conversaciones.",
|
|
24019
|
+
conversation: "Conversación",
|
|
24020
|
+
agent: "Agente de IA",
|
|
24021
|
+
messageCount: "{count, plural, one {# mensaje} other {# mensajes}}",
|
|
24022
|
+
memoryTitle: "Memoria",
|
|
24023
|
+
memorySubtitle: "Lo que la IA recuerda de ti",
|
|
24024
|
+
memorySubtitlePreview: "Lo que la IA recuerda",
|
|
24025
|
+
memoryError: "No se pudieron cargar las memorias.",
|
|
24026
|
+
memoryEmpty: "Aún no hay memorias guardadas.",
|
|
24027
|
+
memoryAutoCapture: "Captura automática",
|
|
24028
|
+
memoryUseInResponses: "Usada en las respuestas",
|
|
24029
|
+
stateOn: "Activado",
|
|
24030
|
+
stateOff: "Desactivado"
|
|
24031
|
+
};
|
|
23767
24032
|
var virtualMachineHostInput$1 = {
|
|
23768
24033
|
listLabel: "Hosts permitidos",
|
|
23769
24034
|
removeHost: "Quitar {host}",
|
|
@@ -23950,6 +24215,7 @@ var es = {
|
|
|
23950
24215
|
advancedExternalMapping: advancedExternalMapping$1,
|
|
23951
24216
|
advancedMemsearchConfig: advancedMemsearchConfig$1,
|
|
23952
24217
|
advancedPlatformMembership: advancedPlatformMembership$1,
|
|
24218
|
+
advancedSeoDiscoverability: advancedSeoDiscoverability$1,
|
|
23953
24219
|
advancedProviderConfig: advancedProviderConfig$1,
|
|
23954
24220
|
advancedRecommendationSystemPrompts: advancedRecommendationSystemPrompts$1,
|
|
23955
24221
|
advancedSmtp: advancedSmtp$1,
|
|
@@ -24224,6 +24490,7 @@ var es = {
|
|
|
24224
24490
|
analyticsLlmUsage: analyticsLlmUsage$1,
|
|
24225
24491
|
analyticsTraces: analyticsTraces$1,
|
|
24226
24492
|
profileLlmUsage: profileLlmUsage$1,
|
|
24493
|
+
profileOverviewTab: profileOverviewTab$1,
|
|
24227
24494
|
virtualMachineHostInput: virtualMachineHostInput$1,
|
|
24228
24495
|
virtualMachineAdminTab: virtualMachineAdminTab$1,
|
|
24229
24496
|
virtualMachineNetworkPolicies: virtualMachineNetworkPolicies$1,
|
|
@@ -24644,6 +24911,16 @@ var advancedPlatformMembership = {
|
|
|
24644
24911
|
switchEnabled: "已启用",
|
|
24645
24912
|
switchDisabled: "已禁用"
|
|
24646
24913
|
};
|
|
24914
|
+
var advancedSeoDiscoverability = {
|
|
24915
|
+
toastUpdateSuccess: "SEO 可发现性设置已成功更新",
|
|
24916
|
+
toastUpdateError: "更新 SEO 可发现性设置失败",
|
|
24917
|
+
label: "SEO 可发现性",
|
|
24918
|
+
infoAriaLabel: "更多关于 SEO 可发现性的信息",
|
|
24919
|
+
infoTooltip: "使该组织的公开课程、项目和学习路径页面可被搜索引擎和 AI 抓取,并包含在站点地图中。",
|
|
24920
|
+
switchAriaLabel: "SEO 可发现性",
|
|
24921
|
+
switchEnabled: "已启用",
|
|
24922
|
+
switchDisabled: "已禁用"
|
|
24923
|
+
};
|
|
24647
24924
|
var advancedProviderConfig = {
|
|
24648
24925
|
regionAriaLabel: "提供商配置",
|
|
24649
24926
|
sectionTitle: "提供商配置",
|
|
@@ -28379,7 +28656,10 @@ var profileIndex = {
|
|
|
28379
28656
|
groupRecords: "记录",
|
|
28380
28657
|
descLlmUsagePreview: "各对话中的花费、令牌数和请求数。",
|
|
28381
28658
|
sectionFeatures: "功能",
|
|
28382
|
-
tooltipDisplayMentorAI: "让 AI 助手面板始终显示在当前页面旁边,无需离开页面即可提问。"
|
|
28659
|
+
tooltipDisplayMentorAI: "让 AI 助手面板始终显示在当前页面旁边,无需离开页面即可提问。",
|
|
28660
|
+
tabOverview: "概览",
|
|
28661
|
+
descOverview: "您的课程、对话、AI 用量和记忆,尽在一处。",
|
|
28662
|
+
descOverviewPreview: "课程、对话、AI 用量和记忆,尽在一处。"
|
|
28383
28663
|
};
|
|
28384
28664
|
var profileInviteUserContent = {
|
|
28385
28665
|
inviteUsersTitle: "邀请用户",
|
|
@@ -31288,8 +31568,6 @@ var profileLlmUsage = {
|
|
|
31288
31568
|
colCost: "花费",
|
|
31289
31569
|
byModelTitle: "按模型",
|
|
31290
31570
|
byModelSubtitle: "各模型占你花费的比例",
|
|
31291
|
-
byServiceTitle: "按服务",
|
|
31292
|
-
byServiceSubtitle: "你的花费来自哪里",
|
|
31293
31571
|
otherRow: "其他",
|
|
31294
31572
|
unknownModel: "未知模型",
|
|
31295
31573
|
unknownService: "其他服务",
|
|
@@ -31331,6 +31609,82 @@ var profileLlmUsage = {
|
|
|
31331
31609
|
tryAgain: "重试",
|
|
31332
31610
|
scopeUser: "{username} 的用量"
|
|
31333
31611
|
};
|
|
31612
|
+
var profileOverviewTab = {
|
|
31613
|
+
scopeSelf: "一览您在课程和 AI 代理中的活动。",
|
|
31614
|
+
scopeUser: "{username} 的活动",
|
|
31615
|
+
refresh: "刷新概览",
|
|
31616
|
+
unavailable: "不可用",
|
|
31617
|
+
kpiEnrolled: "已注册课程",
|
|
31618
|
+
kpiEnrolledSub: "{count} 门进行中",
|
|
31619
|
+
kpiEnrolledSubAll: "全部时间",
|
|
31620
|
+
kpiCompleted: "已完成课程",
|
|
31621
|
+
kpiCompletedSub: "占已注册课程的 {percent}%",
|
|
31622
|
+
kpiProgress: "平均进度",
|
|
31623
|
+
kpiProgressSub: "所有已注册课程",
|
|
31624
|
+
kpiTimeSpent: "学习时长",
|
|
31625
|
+
kpiTimeSpentSub: "所有课程的学习时间",
|
|
31626
|
+
kpiConversations: "对话",
|
|
31627
|
+
kpiConversationsSub: "与 AI 代理",
|
|
31628
|
+
kpiConversationsLast: "最近一次 {when}",
|
|
31629
|
+
kpiSpend: "AI 花费",
|
|
31630
|
+
kpiSpendSub: "最近 30 天",
|
|
31631
|
+
kpiRequests: "AI 请求",
|
|
31632
|
+
kpiRequestsSub: "{tokens} 个令牌,最近 30 天",
|
|
31633
|
+
kpiMemories: "记忆",
|
|
31634
|
+
kpiMemoriesSub: "由 AI 保存",
|
|
31635
|
+
kpiMemoriesSubOn: "自动捕获已开启",
|
|
31636
|
+
kpiMemoriesSubOff: "自动捕获已关闭",
|
|
31637
|
+
recordsLabel: "记录",
|
|
31638
|
+
recordsCredentials: "{count, plural, other {# 项证书}}",
|
|
31639
|
+
recordsPrograms: "{count, plural, other {# 个项目}}",
|
|
31640
|
+
recordsPathways: "{count, plural, other {# 条路径}}",
|
|
31641
|
+
learningTitle: "学习进度",
|
|
31642
|
+
learningSubtitle: "每门已注册课程的进展",
|
|
31643
|
+
learningError: "无法加载课程注册信息。",
|
|
31644
|
+
learningEmpty: "尚未注册任何课程。",
|
|
31645
|
+
learningProgressUnavailable: "此账户的进度详情不可用。",
|
|
31646
|
+
moreCourses: "{count, plural, other {成绩册中还有 # 门课程}}",
|
|
31647
|
+
legendCompleted: "已完成",
|
|
31648
|
+
legendInProgress: "进行中",
|
|
31649
|
+
legendNotStarted: "未开始",
|
|
31650
|
+
ringAria: "已完成 {total} 门课程中的 {completed} 门",
|
|
31651
|
+
viewProgress: "查看 {name} 的进度",
|
|
31652
|
+
courseProgressAria: "{name}:已完成 {percent}%",
|
|
31653
|
+
courseCompleted: "已完成",
|
|
31654
|
+
coursePassed: "已通过",
|
|
31655
|
+
courseEnrolledOn: "注册于 {date}",
|
|
31656
|
+
courseTimeSpent: "已学习 {duration}",
|
|
31657
|
+
enrollmentActive: "进行中",
|
|
31658
|
+
enrollmentInactive: "未激活",
|
|
31659
|
+
viewGradebook: "查看成绩册",
|
|
31660
|
+
viewUsage: "查看用量",
|
|
31661
|
+
viewHistory: "查看历史",
|
|
31662
|
+
viewMemory: "查看记忆",
|
|
31663
|
+
usageTitle: "AI 用量",
|
|
31664
|
+
usageSubtitle: "最近 30 天的每日花费",
|
|
31665
|
+
usageForbidden: "此账户的 AI 用量不可用。",
|
|
31666
|
+
usageError: "无法加载 AI 用量。",
|
|
31667
|
+
usageEmpty: "最近 30 天没有 AI 用量。",
|
|
31668
|
+
usageNoSpend: "最近 30 天没有记录到花费。",
|
|
31669
|
+
conversationsTitle: "最近对话",
|
|
31670
|
+
conversationsSubtitle: "您与 AI 代理的最新交流",
|
|
31671
|
+
conversationsSubtitlePreview: "与 AI 代理的最新交流",
|
|
31672
|
+
conversationsForbidden: "此账户的对话不可用。",
|
|
31673
|
+
conversationsError: "无法加载对话。",
|
|
31674
|
+
conversationsEmpty: "尚无对话。",
|
|
31675
|
+
conversation: "对话",
|
|
31676
|
+
agent: "AI 代理",
|
|
31677
|
+
messageCount: "{count, plural, other {# 条消息}}",
|
|
31678
|
+
memoryTitle: "记忆",
|
|
31679
|
+
memorySubtitle: "AI 对您的记忆",
|
|
31680
|
+
memorySubtitlePreview: "AI 的记忆",
|
|
31681
|
+
memoryError: "无法加载记忆。",
|
|
31682
|
+
memoryEmpty: "尚未保存任何记忆。",
|
|
31683
|
+
memoryAutoCapture: "自动捕获",
|
|
31684
|
+
memoryUseInResponses: "用于回复",
|
|
31685
|
+
stateOn: "开启",
|
|
31686
|
+
stateOff: "关闭"
|
|
31687
|
+
};
|
|
31334
31688
|
var virtualMachineHostInput = {
|
|
31335
31689
|
listLabel: "允许的主机",
|
|
31336
31690
|
removeHost: "移除 {host}",
|
|
@@ -31517,6 +31871,7 @@ var zh = {
|
|
|
31517
31871
|
advancedExternalMapping: advancedExternalMapping,
|
|
31518
31872
|
advancedMemsearchConfig: advancedMemsearchConfig,
|
|
31519
31873
|
advancedPlatformMembership: advancedPlatformMembership,
|
|
31874
|
+
advancedSeoDiscoverability: advancedSeoDiscoverability,
|
|
31520
31875
|
advancedProviderConfig: advancedProviderConfig,
|
|
31521
31876
|
advancedRecommendationSystemPrompts: advancedRecommendationSystemPrompts,
|
|
31522
31877
|
advancedSmtp: advancedSmtp,
|
|
@@ -31791,6 +32146,7 @@ var zh = {
|
|
|
31791
32146
|
analyticsLlmUsage: analyticsLlmUsage,
|
|
31792
32147
|
analyticsTraces: analyticsTraces,
|
|
31793
32148
|
profileLlmUsage: profileLlmUsage,
|
|
32149
|
+
profileOverviewTab: profileOverviewTab,
|
|
31794
32150
|
virtualMachineHostInput: virtualMachineHostInput,
|
|
31795
32151
|
virtualMachineAdminTab: virtualMachineAdminTab,
|
|
31796
32152
|
virtualMachineNetworkPolicies: virtualMachineNetworkPolicies,
|
|
@@ -33923,7 +34279,7 @@ const formatRelativeLocale = {
|
|
|
33923
34279
|
other: "P",
|
|
33924
34280
|
};
|
|
33925
34281
|
|
|
33926
|
-
const formatRelative = (token, _date, _baseDate, _options) =>
|
|
34282
|
+
const formatRelative$1 = (token, _date, _baseDate, _options) =>
|
|
33927
34283
|
formatRelativeLocale[token];
|
|
33928
34284
|
|
|
33929
34285
|
/**
|
|
@@ -34396,7 +34752,7 @@ const enUS = {
|
|
|
34396
34752
|
code: "en-US",
|
|
34397
34753
|
formatDistance: formatDistance$1,
|
|
34398
34754
|
formatLong: formatLong,
|
|
34399
|
-
formatRelative: formatRelative,
|
|
34755
|
+
formatRelative: formatRelative$1,
|
|
34400
34756
|
localize: localize,
|
|
34401
34757
|
match: match,
|
|
34402
34758
|
options: {
|
|
@@ -80240,7 +80596,7 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
80240
80596
|
*/
|
|
80241
80597
|
|
|
80242
80598
|
|
|
80243
|
-
const __iconNode$
|
|
80599
|
+
const __iconNode$2B = [
|
|
80244
80600
|
[
|
|
80245
80601
|
"path",
|
|
80246
80602
|
{
|
|
@@ -80249,7 +80605,7 @@ const __iconNode$2z = [
|
|
|
80249
80605
|
}
|
|
80250
80606
|
]
|
|
80251
80607
|
];
|
|
80252
|
-
const Activity = createLucideIcon("activity", __iconNode$
|
|
80608
|
+
const Activity = createLucideIcon("activity", __iconNode$2B);
|
|
80253
80609
|
|
|
80254
80610
|
/**
|
|
80255
80611
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80259,12 +80615,12 @@ const Activity = createLucideIcon("activity", __iconNode$2z);
|
|
|
80259
80615
|
*/
|
|
80260
80616
|
|
|
80261
80617
|
|
|
80262
|
-
const __iconNode$
|
|
80618
|
+
const __iconNode$2A = [
|
|
80263
80619
|
["path", { d: "M17 12H7", key: "16if0g" }],
|
|
80264
80620
|
["path", { d: "M19 18H5", key: "18s9l3" }],
|
|
80265
80621
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
80266
80622
|
];
|
|
80267
|
-
const AlignCenter = createLucideIcon("align-center", __iconNode$
|
|
80623
|
+
const AlignCenter = createLucideIcon("align-center", __iconNode$2A);
|
|
80268
80624
|
|
|
80269
80625
|
/**
|
|
80270
80626
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80274,12 +80630,12 @@ const AlignCenter = createLucideIcon("align-center", __iconNode$2y);
|
|
|
80274
80630
|
*/
|
|
80275
80631
|
|
|
80276
80632
|
|
|
80277
|
-
const __iconNode$
|
|
80633
|
+
const __iconNode$2z = [
|
|
80278
80634
|
["path", { d: "M15 12H3", key: "6jk70r" }],
|
|
80279
80635
|
["path", { d: "M17 18H3", key: "1amg6g" }],
|
|
80280
80636
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
80281
80637
|
];
|
|
80282
|
-
const AlignLeft = createLucideIcon("align-left", __iconNode$
|
|
80638
|
+
const AlignLeft = createLucideIcon("align-left", __iconNode$2z);
|
|
80283
80639
|
|
|
80284
80640
|
/**
|
|
80285
80641
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80289,12 +80645,12 @@ const AlignLeft = createLucideIcon("align-left", __iconNode$2x);
|
|
|
80289
80645
|
*/
|
|
80290
80646
|
|
|
80291
80647
|
|
|
80292
|
-
const __iconNode$
|
|
80648
|
+
const __iconNode$2y = [
|
|
80293
80649
|
["path", { d: "M21 12H9", key: "dn1m92" }],
|
|
80294
80650
|
["path", { d: "M21 18H7", key: "1ygte8" }],
|
|
80295
80651
|
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
|
80296
80652
|
];
|
|
80297
|
-
const AlignRight = createLucideIcon("align-right", __iconNode$
|
|
80653
|
+
const AlignRight = createLucideIcon("align-right", __iconNode$2y);
|
|
80298
80654
|
|
|
80299
80655
|
/**
|
|
80300
80656
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80304,12 +80660,12 @@ const AlignRight = createLucideIcon("align-right", __iconNode$2w);
|
|
|
80304
80660
|
*/
|
|
80305
80661
|
|
|
80306
80662
|
|
|
80307
|
-
const __iconNode$
|
|
80663
|
+
const __iconNode$2x = [
|
|
80308
80664
|
["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
|
|
80309
80665
|
["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
|
|
80310
80666
|
["path", { d: "M10 12h4", key: "a56b0p" }]
|
|
80311
80667
|
];
|
|
80312
|
-
const Archive = createLucideIcon("archive", __iconNode$
|
|
80668
|
+
const Archive = createLucideIcon("archive", __iconNode$2x);
|
|
80313
80669
|
|
|
80314
80670
|
/**
|
|
80315
80671
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80319,11 +80675,11 @@ const Archive = createLucideIcon("archive", __iconNode$2v);
|
|
|
80319
80675
|
*/
|
|
80320
80676
|
|
|
80321
80677
|
|
|
80322
|
-
const __iconNode$
|
|
80678
|
+
const __iconNode$2w = [
|
|
80323
80679
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
80324
80680
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
80325
80681
|
];
|
|
80326
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
80682
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$2w);
|
|
80327
80683
|
|
|
80328
80684
|
/**
|
|
80329
80685
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80333,11 +80689,11 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$2u);
|
|
|
80333
80689
|
*/
|
|
80334
80690
|
|
|
80335
80691
|
|
|
80336
|
-
const __iconNode$
|
|
80692
|
+
const __iconNode$2v = [
|
|
80337
80693
|
["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
|
|
80338
80694
|
["path", { d: "M19 12H5", key: "x3x0zl" }]
|
|
80339
80695
|
];
|
|
80340
|
-
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$
|
|
80696
|
+
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2v);
|
|
80341
80697
|
|
|
80342
80698
|
/**
|
|
80343
80699
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80347,11 +80703,11 @@ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$2t);
|
|
|
80347
80703
|
*/
|
|
80348
80704
|
|
|
80349
80705
|
|
|
80350
|
-
const __iconNode$
|
|
80706
|
+
const __iconNode$2u = [
|
|
80351
80707
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
80352
80708
|
["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
|
|
80353
80709
|
];
|
|
80354
|
-
const ArrowRight = createLucideIcon("arrow-right", __iconNode$
|
|
80710
|
+
const ArrowRight = createLucideIcon("arrow-right", __iconNode$2u);
|
|
80355
80711
|
|
|
80356
80712
|
/**
|
|
80357
80713
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80361,13 +80717,13 @@ const ArrowRight = createLucideIcon("arrow-right", __iconNode$2s);
|
|
|
80361
80717
|
*/
|
|
80362
80718
|
|
|
80363
80719
|
|
|
80364
|
-
const __iconNode$
|
|
80720
|
+
const __iconNode$2t = [
|
|
80365
80721
|
["path", { d: "m21 16-4 4-4-4", key: "f6ql7i" }],
|
|
80366
80722
|
["path", { d: "M17 20V4", key: "1ejh1v" }],
|
|
80367
80723
|
["path", { d: "m3 8 4-4 4 4", key: "11wl7u" }],
|
|
80368
80724
|
["path", { d: "M7 4v16", key: "1glfcx" }]
|
|
80369
80725
|
];
|
|
80370
|
-
const ArrowUpDown = createLucideIcon("arrow-up-down", __iconNode$
|
|
80726
|
+
const ArrowUpDown = createLucideIcon("arrow-up-down", __iconNode$2t);
|
|
80371
80727
|
|
|
80372
80728
|
/**
|
|
80373
80729
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80377,11 +80733,11 @@ const ArrowUpDown = createLucideIcon("arrow-up-down", __iconNode$2r);
|
|
|
80377
80733
|
*/
|
|
80378
80734
|
|
|
80379
80735
|
|
|
80380
|
-
const __iconNode$
|
|
80736
|
+
const __iconNode$2s = [
|
|
80381
80737
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
80382
80738
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
80383
80739
|
];
|
|
80384
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
80740
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$2s);
|
|
80385
80741
|
|
|
80386
80742
|
/**
|
|
80387
80743
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80391,7 +80747,7 @@ const ArrowUp = createLucideIcon("arrow-up", __iconNode$2q);
|
|
|
80391
80747
|
*/
|
|
80392
80748
|
|
|
80393
80749
|
|
|
80394
|
-
const __iconNode$
|
|
80750
|
+
const __iconNode$2r = [
|
|
80395
80751
|
[
|
|
80396
80752
|
"path",
|
|
80397
80753
|
{
|
|
@@ -80401,7 +80757,7 @@ const __iconNode$2p = [
|
|
|
80401
80757
|
],
|
|
80402
80758
|
["circle", { cx: "12", cy: "8", r: "6", key: "1vp47v" }]
|
|
80403
80759
|
];
|
|
80404
|
-
const Award = createLucideIcon("award", __iconNode$
|
|
80760
|
+
const Award = createLucideIcon("award", __iconNode$2r);
|
|
80405
80761
|
|
|
80406
80762
|
/**
|
|
80407
80763
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80411,11 +80767,11 @@ const Award = createLucideIcon("award", __iconNode$2p);
|
|
|
80411
80767
|
*/
|
|
80412
80768
|
|
|
80413
80769
|
|
|
80414
|
-
const __iconNode$
|
|
80770
|
+
const __iconNode$2q = [
|
|
80415
80771
|
["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }],
|
|
80416
80772
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
|
|
80417
80773
|
];
|
|
80418
|
-
const Ban = createLucideIcon("ban", __iconNode$
|
|
80774
|
+
const Ban = createLucideIcon("ban", __iconNode$2q);
|
|
80419
80775
|
|
|
80420
80776
|
/**
|
|
80421
80777
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80425,12 +80781,12 @@ const Ban = createLucideIcon("ban", __iconNode$2o);
|
|
|
80425
80781
|
*/
|
|
80426
80782
|
|
|
80427
80783
|
|
|
80428
|
-
const __iconNode$
|
|
80784
|
+
const __iconNode$2p = [
|
|
80429
80785
|
["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }],
|
|
80430
80786
|
["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }],
|
|
80431
80787
|
["path", { d: "M6 12h.01M18 12h.01", key: "113zkx" }]
|
|
80432
80788
|
];
|
|
80433
|
-
const Banknote = createLucideIcon("banknote", __iconNode$
|
|
80789
|
+
const Banknote = createLucideIcon("banknote", __iconNode$2p);
|
|
80434
80790
|
|
|
80435
80791
|
/**
|
|
80436
80792
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80440,7 +80796,7 @@ const Banknote = createLucideIcon("banknote", __iconNode$2n);
|
|
|
80440
80796
|
*/
|
|
80441
80797
|
|
|
80442
80798
|
|
|
80443
|
-
const __iconNode$
|
|
80799
|
+
const __iconNode$2o = [
|
|
80444
80800
|
["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
|
|
80445
80801
|
["path", { d: "M22 8c0-2.3-.8-4.3-2-6", key: "5bb3ad" }],
|
|
80446
80802
|
[
|
|
@@ -80452,7 +80808,7 @@ const __iconNode$2m = [
|
|
|
80452
80808
|
],
|
|
80453
80809
|
["path", { d: "M4 2C2.8 3.7 2 5.7 2 8", key: "tap9e0" }]
|
|
80454
80810
|
];
|
|
80455
|
-
const BellRing = createLucideIcon("bell-ring", __iconNode$
|
|
80811
|
+
const BellRing = createLucideIcon("bell-ring", __iconNode$2o);
|
|
80456
80812
|
|
|
80457
80813
|
/**
|
|
80458
80814
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80462,7 +80818,7 @@ const BellRing = createLucideIcon("bell-ring", __iconNode$2m);
|
|
|
80462
80818
|
*/
|
|
80463
80819
|
|
|
80464
80820
|
|
|
80465
|
-
const __iconNode$
|
|
80821
|
+
const __iconNode$2n = [
|
|
80466
80822
|
["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
|
|
80467
80823
|
[
|
|
80468
80824
|
"path",
|
|
@@ -80472,7 +80828,7 @@ const __iconNode$2l = [
|
|
|
80472
80828
|
}
|
|
80473
80829
|
]
|
|
80474
80830
|
];
|
|
80475
|
-
const Bell = createLucideIcon("bell", __iconNode$
|
|
80831
|
+
const Bell = createLucideIcon("bell", __iconNode$2n);
|
|
80476
80832
|
|
|
80477
80833
|
/**
|
|
80478
80834
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80482,13 +80838,13 @@ const Bell = createLucideIcon("bell", __iconNode$2l);
|
|
|
80482
80838
|
*/
|
|
80483
80839
|
|
|
80484
80840
|
|
|
80485
|
-
const __iconNode$
|
|
80841
|
+
const __iconNode$2m = [
|
|
80486
80842
|
[
|
|
80487
80843
|
"path",
|
|
80488
80844
|
{ d: "M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8", key: "mg9rjx" }
|
|
80489
80845
|
]
|
|
80490
80846
|
];
|
|
80491
|
-
const Bold$1 = createLucideIcon("bold", __iconNode$
|
|
80847
|
+
const Bold$1 = createLucideIcon("bold", __iconNode$2m);
|
|
80492
80848
|
|
|
80493
80849
|
/**
|
|
80494
80850
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80498,7 +80854,7 @@ const Bold$1 = createLucideIcon("bold", __iconNode$2k);
|
|
|
80498
80854
|
*/
|
|
80499
80855
|
|
|
80500
80856
|
|
|
80501
|
-
const __iconNode$
|
|
80857
|
+
const __iconNode$2l = [
|
|
80502
80858
|
["path", { d: "M12 7v14", key: "1akyts" }],
|
|
80503
80859
|
[
|
|
80504
80860
|
"path",
|
|
@@ -80508,7 +80864,7 @@ const __iconNode$2j = [
|
|
|
80508
80864
|
}
|
|
80509
80865
|
]
|
|
80510
80866
|
];
|
|
80511
|
-
const BookOpen = createLucideIcon("book-open", __iconNode$
|
|
80867
|
+
const BookOpen = createLucideIcon("book-open", __iconNode$2l);
|
|
80512
80868
|
|
|
80513
80869
|
/**
|
|
80514
80870
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80518,7 +80874,7 @@ const BookOpen = createLucideIcon("book-open", __iconNode$2j);
|
|
|
80518
80874
|
*/
|
|
80519
80875
|
|
|
80520
80876
|
|
|
80521
|
-
const __iconNode$
|
|
80877
|
+
const __iconNode$2k = [
|
|
80522
80878
|
["path", { d: "M12 8V4H8", key: "hb8ula" }],
|
|
80523
80879
|
["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
|
|
80524
80880
|
["path", { d: "M2 14h2", key: "vft8re" }],
|
|
@@ -80526,7 +80882,7 @@ const __iconNode$2i = [
|
|
|
80526
80882
|
["path", { d: "M15 13v2", key: "1xurst" }],
|
|
80527
80883
|
["path", { d: "M9 13v2", key: "rq6x2g" }]
|
|
80528
80884
|
];
|
|
80529
|
-
const Bot = createLucideIcon("bot", __iconNode$
|
|
80885
|
+
const Bot = createLucideIcon("bot", __iconNode$2k);
|
|
80530
80886
|
|
|
80531
80887
|
/**
|
|
80532
80888
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80536,11 +80892,11 @@ const Bot = createLucideIcon("bot", __iconNode$2i);
|
|
|
80536
80892
|
*/
|
|
80537
80893
|
|
|
80538
80894
|
|
|
80539
|
-
const __iconNode$
|
|
80895
|
+
const __iconNode$2j = [
|
|
80540
80896
|
["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
|
|
80541
80897
|
["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
|
|
80542
80898
|
];
|
|
80543
|
-
const Briefcase = createLucideIcon("briefcase", __iconNode$
|
|
80899
|
+
const Briefcase = createLucideIcon("briefcase", __iconNode$2j);
|
|
80544
80900
|
|
|
80545
80901
|
/**
|
|
80546
80902
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80550,7 +80906,7 @@ const Briefcase = createLucideIcon("briefcase", __iconNode$2h);
|
|
|
80550
80906
|
*/
|
|
80551
80907
|
|
|
80552
80908
|
|
|
80553
|
-
const __iconNode$
|
|
80909
|
+
const __iconNode$2i = [
|
|
80554
80910
|
["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
|
|
80555
80911
|
["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
|
|
80556
80912
|
["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
|
|
@@ -80559,7 +80915,7 @@ const __iconNode$2g = [
|
|
|
80559
80915
|
["path", { d: "M10 14h4", key: "kelpxr" }],
|
|
80560
80916
|
["path", { d: "M10 18h4", key: "1ulq68" }]
|
|
80561
80917
|
];
|
|
80562
|
-
const Building2 = createLucideIcon("building-2", __iconNode$
|
|
80918
|
+
const Building2 = createLucideIcon("building-2", __iconNode$2i);
|
|
80563
80919
|
|
|
80564
80920
|
/**
|
|
80565
80921
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80569,13 +80925,13 @@ const Building2 = createLucideIcon("building-2", __iconNode$2g);
|
|
|
80569
80925
|
*/
|
|
80570
80926
|
|
|
80571
80927
|
|
|
80572
|
-
const __iconNode$
|
|
80928
|
+
const __iconNode$2h = [
|
|
80573
80929
|
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
80574
80930
|
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
80575
80931
|
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
|
|
80576
80932
|
["path", { d: "M3 10h18", key: "8toen8" }]
|
|
80577
80933
|
];
|
|
80578
|
-
const Calendar$1 = createLucideIcon("calendar", __iconNode$
|
|
80934
|
+
const Calendar$1 = createLucideIcon("calendar", __iconNode$2h);
|
|
80579
80935
|
|
|
80580
80936
|
/**
|
|
80581
80937
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80585,7 +80941,7 @@ const Calendar$1 = createLucideIcon("calendar", __iconNode$2f);
|
|
|
80585
80941
|
*/
|
|
80586
80942
|
|
|
80587
80943
|
|
|
80588
|
-
const __iconNode$
|
|
80944
|
+
const __iconNode$2g = [
|
|
80589
80945
|
[
|
|
80590
80946
|
"path",
|
|
80591
80947
|
{
|
|
@@ -80595,7 +80951,7 @@ const __iconNode$2e = [
|
|
|
80595
80951
|
],
|
|
80596
80952
|
["circle", { cx: "12", cy: "13", r: "3", key: "1vg3eu" }]
|
|
80597
80953
|
];
|
|
80598
|
-
const Camera = createLucideIcon("camera", __iconNode$
|
|
80954
|
+
const Camera = createLucideIcon("camera", __iconNode$2g);
|
|
80599
80955
|
|
|
80600
80956
|
/**
|
|
80601
80957
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80605,11 +80961,11 @@ const Camera = createLucideIcon("camera", __iconNode$2e);
|
|
|
80605
80961
|
*/
|
|
80606
80962
|
|
|
80607
80963
|
|
|
80608
|
-
const __iconNode$
|
|
80964
|
+
const __iconNode$2f = [
|
|
80609
80965
|
["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
|
|
80610
80966
|
["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
|
|
80611
80967
|
];
|
|
80612
|
-
const CheckCheck = createLucideIcon("check-check", __iconNode$
|
|
80968
|
+
const CheckCheck = createLucideIcon("check-check", __iconNode$2f);
|
|
80613
80969
|
|
|
80614
80970
|
/**
|
|
80615
80971
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80619,8 +80975,8 @@ const CheckCheck = createLucideIcon("check-check", __iconNode$2d);
|
|
|
80619
80975
|
*/
|
|
80620
80976
|
|
|
80621
80977
|
|
|
80622
|
-
const __iconNode$
|
|
80623
|
-
const Check = createLucideIcon("check", __iconNode$
|
|
80978
|
+
const __iconNode$2e = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
80979
|
+
const Check = createLucideIcon("check", __iconNode$2e);
|
|
80624
80980
|
|
|
80625
80981
|
/**
|
|
80626
80982
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80630,8 +80986,8 @@ const Check = createLucideIcon("check", __iconNode$2c);
|
|
|
80630
80986
|
*/
|
|
80631
80987
|
|
|
80632
80988
|
|
|
80633
|
-
const __iconNode$
|
|
80634
|
-
const ChevronDown = createLucideIcon("chevron-down", __iconNode$
|
|
80989
|
+
const __iconNode$2d = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
80990
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$2d);
|
|
80635
80991
|
|
|
80636
80992
|
/**
|
|
80637
80993
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80641,11 +80997,11 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$2b);
|
|
|
80641
80997
|
*/
|
|
80642
80998
|
|
|
80643
80999
|
|
|
80644
|
-
const __iconNode$
|
|
81000
|
+
const __iconNode$2c = [
|
|
80645
81001
|
["path", { d: "m17 18-6-6 6-6", key: "1yerx2" }],
|
|
80646
81002
|
["path", { d: "M7 6v12", key: "1p53r6" }]
|
|
80647
81003
|
];
|
|
80648
|
-
const ChevronFirst = createLucideIcon("chevron-first", __iconNode$
|
|
81004
|
+
const ChevronFirst = createLucideIcon("chevron-first", __iconNode$2c);
|
|
80649
81005
|
|
|
80650
81006
|
/**
|
|
80651
81007
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80655,11 +81011,11 @@ const ChevronFirst = createLucideIcon("chevron-first", __iconNode$2a);
|
|
|
80655
81011
|
*/
|
|
80656
81012
|
|
|
80657
81013
|
|
|
80658
|
-
const __iconNode$
|
|
81014
|
+
const __iconNode$2b = [
|
|
80659
81015
|
["path", { d: "m7 18 6-6-6-6", key: "lwmzdw" }],
|
|
80660
81016
|
["path", { d: "M17 6v12", key: "1o0aio" }]
|
|
80661
81017
|
];
|
|
80662
|
-
const ChevronLast = createLucideIcon("chevron-last", __iconNode$
|
|
81018
|
+
const ChevronLast = createLucideIcon("chevron-last", __iconNode$2b);
|
|
80663
81019
|
|
|
80664
81020
|
/**
|
|
80665
81021
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80669,8 +81025,8 @@ const ChevronLast = createLucideIcon("chevron-last", __iconNode$29);
|
|
|
80669
81025
|
*/
|
|
80670
81026
|
|
|
80671
81027
|
|
|
80672
|
-
const __iconNode$
|
|
80673
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
81028
|
+
const __iconNode$2a = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
|
|
81029
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$2a);
|
|
80674
81030
|
|
|
80675
81031
|
/**
|
|
80676
81032
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80680,8 +81036,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$28);
|
|
|
80680
81036
|
*/
|
|
80681
81037
|
|
|
80682
81038
|
|
|
80683
|
-
const __iconNode$
|
|
80684
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
81039
|
+
const __iconNode$29 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
81040
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$29);
|
|
80685
81041
|
|
|
80686
81042
|
/**
|
|
80687
81043
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80691,8 +81047,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$27);
|
|
|
80691
81047
|
*/
|
|
80692
81048
|
|
|
80693
81049
|
|
|
80694
|
-
const __iconNode$
|
|
80695
|
-
const ChevronUp = createLucideIcon("chevron-up", __iconNode$
|
|
81050
|
+
const __iconNode$28 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
81051
|
+
const ChevronUp = createLucideIcon("chevron-up", __iconNode$28);
|
|
80696
81052
|
|
|
80697
81053
|
/**
|
|
80698
81054
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80702,11 +81058,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$26);
|
|
|
80702
81058
|
*/
|
|
80703
81059
|
|
|
80704
81060
|
|
|
80705
|
-
const __iconNode$
|
|
81061
|
+
const __iconNode$27 = [
|
|
80706
81062
|
["path", { d: "m11 17-5-5 5-5", key: "13zhaf" }],
|
|
80707
81063
|
["path", { d: "m18 17-5-5 5-5", key: "h8a8et" }]
|
|
80708
81064
|
];
|
|
80709
|
-
const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$
|
|
81065
|
+
const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$27);
|
|
80710
81066
|
|
|
80711
81067
|
/**
|
|
80712
81068
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80716,11 +81072,11 @@ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$25);
|
|
|
80716
81072
|
*/
|
|
80717
81073
|
|
|
80718
81074
|
|
|
80719
|
-
const __iconNode$
|
|
81075
|
+
const __iconNode$26 = [
|
|
80720
81076
|
["path", { d: "m6 17 5-5-5-5", key: "xnjwq" }],
|
|
80721
81077
|
["path", { d: "m13 17 5-5-5-5", key: "17xmmf" }]
|
|
80722
81078
|
];
|
|
80723
|
-
const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$
|
|
81079
|
+
const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$26);
|
|
80724
81080
|
|
|
80725
81081
|
/**
|
|
80726
81082
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80730,11 +81086,11 @@ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$24);
|
|
|
80730
81086
|
*/
|
|
80731
81087
|
|
|
80732
81088
|
|
|
80733
|
-
const __iconNode$
|
|
81089
|
+
const __iconNode$25 = [
|
|
80734
81090
|
["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
|
|
80735
81091
|
["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
|
|
80736
81092
|
];
|
|
80737
|
-
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$
|
|
81093
|
+
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$25);
|
|
80738
81094
|
|
|
80739
81095
|
/**
|
|
80740
81096
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80744,12 +81100,12 @@ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$23);
|
|
|
80744
81100
|
*/
|
|
80745
81101
|
|
|
80746
81102
|
|
|
80747
|
-
const __iconNode$
|
|
81103
|
+
const __iconNode$24 = [
|
|
80748
81104
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
80749
81105
|
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
80750
81106
|
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
80751
81107
|
];
|
|
80752
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
81108
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$24);
|
|
80753
81109
|
|
|
80754
81110
|
/**
|
|
80755
81111
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80759,11 +81115,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$22);
|
|
|
80759
81115
|
*/
|
|
80760
81116
|
|
|
80761
81117
|
|
|
80762
|
-
const __iconNode$
|
|
81118
|
+
const __iconNode$23 = [
|
|
80763
81119
|
["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
|
|
80764
81120
|
["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
|
|
80765
81121
|
];
|
|
80766
|
-
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$
|
|
81122
|
+
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$23);
|
|
80767
81123
|
|
|
80768
81124
|
/**
|
|
80769
81125
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80773,11 +81129,11 @@ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$21);
|
|
|
80773
81129
|
*/
|
|
80774
81130
|
|
|
80775
81131
|
|
|
80776
|
-
const __iconNode$
|
|
81132
|
+
const __iconNode$22 = [
|
|
80777
81133
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
80778
81134
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
80779
81135
|
];
|
|
80780
|
-
const CircleCheck = createLucideIcon("circle-check", __iconNode$
|
|
81136
|
+
const CircleCheck = createLucideIcon("circle-check", __iconNode$22);
|
|
80781
81137
|
|
|
80782
81138
|
/**
|
|
80783
81139
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80787,11 +81143,11 @@ const CircleCheck = createLucideIcon("circle-check", __iconNode$20);
|
|
|
80787
81143
|
*/
|
|
80788
81144
|
|
|
80789
81145
|
|
|
80790
|
-
const __iconNode$
|
|
81146
|
+
const __iconNode$21 = [
|
|
80791
81147
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
80792
81148
|
["path", { d: "M8 12h8", key: "1wcyev" }]
|
|
80793
81149
|
];
|
|
80794
|
-
const CircleMinus$1 = createLucideIcon("circle-minus", __iconNode$
|
|
81150
|
+
const CircleMinus$1 = createLucideIcon("circle-minus", __iconNode$21);
|
|
80795
81151
|
|
|
80796
81152
|
/**
|
|
80797
81153
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80801,11 +81157,11 @@ const CircleMinus$1 = createLucideIcon("circle-minus", __iconNode$1$);
|
|
|
80801
81157
|
*/
|
|
80802
81158
|
|
|
80803
81159
|
|
|
80804
|
-
const __iconNode$
|
|
81160
|
+
const __iconNode$20 = [
|
|
80805
81161
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
80806
81162
|
["rect", { x: "9", y: "9", width: "6", height: "6", rx: "1", key: "1ssd4o" }]
|
|
80807
81163
|
];
|
|
80808
|
-
const CircleStop = createLucideIcon("circle-stop", __iconNode$
|
|
81164
|
+
const CircleStop = createLucideIcon("circle-stop", __iconNode$20);
|
|
80809
81165
|
|
|
80810
81166
|
/**
|
|
80811
81167
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80815,12 +81171,12 @@ const CircleStop = createLucideIcon("circle-stop", __iconNode$1_);
|
|
|
80815
81171
|
*/
|
|
80816
81172
|
|
|
80817
81173
|
|
|
80818
|
-
const __iconNode$
|
|
81174
|
+
const __iconNode$1$ = [
|
|
80819
81175
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
80820
81176
|
["path", { d: "m15 9-6 6", key: "1uzhvr" }],
|
|
80821
81177
|
["path", { d: "m9 9 6 6", key: "z0biqf" }]
|
|
80822
81178
|
];
|
|
80823
|
-
const CircleX = createLucideIcon("circle-x", __iconNode$
|
|
81179
|
+
const CircleX = createLucideIcon("circle-x", __iconNode$1$);
|
|
80824
81180
|
|
|
80825
81181
|
/**
|
|
80826
81182
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80830,8 +81186,8 @@ const CircleX = createLucideIcon("circle-x", __iconNode$1Z);
|
|
|
80830
81186
|
*/
|
|
80831
81187
|
|
|
80832
81188
|
|
|
80833
|
-
const __iconNode$
|
|
80834
|
-
const Circle = createLucideIcon("circle", __iconNode$
|
|
81189
|
+
const __iconNode$1_ = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
|
|
81190
|
+
const Circle = createLucideIcon("circle", __iconNode$1_);
|
|
80835
81191
|
|
|
80836
81192
|
/**
|
|
80837
81193
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80841,7 +81197,7 @@ const Circle = createLucideIcon("circle", __iconNode$1Y);
|
|
|
80841
81197
|
*/
|
|
80842
81198
|
|
|
80843
81199
|
|
|
80844
|
-
const __iconNode$
|
|
81200
|
+
const __iconNode$1Z = [
|
|
80845
81201
|
["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
|
|
80846
81202
|
[
|
|
80847
81203
|
"path",
|
|
@@ -80855,7 +81211,7 @@ const __iconNode$1X = [
|
|
|
80855
81211
|
["path", { d: "M8 11h.01", key: "1dfujw" }],
|
|
80856
81212
|
["path", { d: "M8 16h.01", key: "18s6g9" }]
|
|
80857
81213
|
];
|
|
80858
|
-
const ClipboardList = createLucideIcon("clipboard-list", __iconNode$
|
|
81214
|
+
const ClipboardList = createLucideIcon("clipboard-list", __iconNode$1Z);
|
|
80859
81215
|
|
|
80860
81216
|
/**
|
|
80861
81217
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80865,11 +81221,11 @@ const ClipboardList = createLucideIcon("clipboard-list", __iconNode$1X);
|
|
|
80865
81221
|
*/
|
|
80866
81222
|
|
|
80867
81223
|
|
|
80868
|
-
const __iconNode$
|
|
81224
|
+
const __iconNode$1Y = [
|
|
80869
81225
|
["path", { d: "M12 6v6l4 2", key: "mmk7yg" }],
|
|
80870
81226
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
|
|
80871
81227
|
];
|
|
80872
|
-
const Clock = createLucideIcon("clock", __iconNode$
|
|
81228
|
+
const Clock = createLucideIcon("clock", __iconNode$1Y);
|
|
80873
81229
|
|
|
80874
81230
|
/**
|
|
80875
81231
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80879,12 +81235,12 @@ const Clock = createLucideIcon("clock", __iconNode$1W);
|
|
|
80879
81235
|
*/
|
|
80880
81236
|
|
|
80881
81237
|
|
|
80882
|
-
const __iconNode$
|
|
81238
|
+
const __iconNode$1X = [
|
|
80883
81239
|
["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
|
|
80884
81240
|
["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
|
|
80885
81241
|
["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
|
|
80886
81242
|
];
|
|
80887
|
-
const CodeXml = createLucideIcon("code-xml", __iconNode$
|
|
81243
|
+
const CodeXml = createLucideIcon("code-xml", __iconNode$1X);
|
|
80888
81244
|
|
|
80889
81245
|
/**
|
|
80890
81246
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80894,11 +81250,11 @@ const CodeXml = createLucideIcon("code-xml", __iconNode$1V);
|
|
|
80894
81250
|
*/
|
|
80895
81251
|
|
|
80896
81252
|
|
|
80897
|
-
const __iconNode$
|
|
81253
|
+
const __iconNode$1W = [
|
|
80898
81254
|
["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
|
|
80899
81255
|
["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
|
|
80900
81256
|
];
|
|
80901
|
-
const Code$1 = createLucideIcon("code", __iconNode$
|
|
81257
|
+
const Code$1 = createLucideIcon("code", __iconNode$1W);
|
|
80902
81258
|
|
|
80903
81259
|
/**
|
|
80904
81260
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80908,11 +81264,27 @@ const Code$1 = createLucideIcon("code", __iconNode$1U);
|
|
|
80908
81264
|
*/
|
|
80909
81265
|
|
|
80910
81266
|
|
|
80911
|
-
const __iconNode$
|
|
81267
|
+
const __iconNode$1V = [
|
|
81268
|
+
["circle", { cx: "8", cy: "8", r: "6", key: "3yglwk" }],
|
|
81269
|
+
["path", { d: "M18.09 10.37A6 6 0 1 1 10.34 18", key: "t5s6rm" }],
|
|
81270
|
+
["path", { d: "M7 6h1v4", key: "1obek4" }],
|
|
81271
|
+
["path", { d: "m16.71 13.88.7.71-2.82 2.82", key: "1rbuyh" }]
|
|
81272
|
+
];
|
|
81273
|
+
const Coins = createLucideIcon("coins", __iconNode$1V);
|
|
81274
|
+
|
|
81275
|
+
/**
|
|
81276
|
+
* @license lucide-react v0.528.0 - ISC
|
|
81277
|
+
*
|
|
81278
|
+
* This source code is licensed under the ISC license.
|
|
81279
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
81280
|
+
*/
|
|
81281
|
+
|
|
81282
|
+
|
|
81283
|
+
const __iconNode$1U = [
|
|
80912
81284
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
80913
81285
|
["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
|
|
80914
81286
|
];
|
|
80915
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
81287
|
+
const Copy = createLucideIcon("copy", __iconNode$1U);
|
|
80916
81288
|
|
|
80917
81289
|
/**
|
|
80918
81290
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80922,11 +81294,11 @@ const Copy = createLucideIcon("copy", __iconNode$1T);
|
|
|
80922
81294
|
*/
|
|
80923
81295
|
|
|
80924
81296
|
|
|
80925
|
-
const __iconNode$
|
|
81297
|
+
const __iconNode$1T = [
|
|
80926
81298
|
["rect", { width: "20", height: "14", x: "2", y: "5", rx: "2", key: "ynyp8z" }],
|
|
80927
81299
|
["line", { x1: "2", x2: "22", y1: "10", y2: "10", key: "1b3vmo" }]
|
|
80928
81300
|
];
|
|
80929
|
-
const CreditCard = createLucideIcon("credit-card", __iconNode$
|
|
81301
|
+
const CreditCard = createLucideIcon("credit-card", __iconNode$1T);
|
|
80930
81302
|
|
|
80931
81303
|
/**
|
|
80932
81304
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80936,12 +81308,12 @@ const CreditCard = createLucideIcon("credit-card", __iconNode$1S);
|
|
|
80936
81308
|
*/
|
|
80937
81309
|
|
|
80938
81310
|
|
|
80939
|
-
const __iconNode$
|
|
81311
|
+
const __iconNode$1S = [
|
|
80940
81312
|
["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
|
|
80941
81313
|
["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
|
|
80942
81314
|
["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
|
|
80943
81315
|
];
|
|
80944
|
-
const Database = createLucideIcon("database", __iconNode$
|
|
81316
|
+
const Database = createLucideIcon("database", __iconNode$1S);
|
|
80945
81317
|
|
|
80946
81318
|
/**
|
|
80947
81319
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80951,11 +81323,11 @@ const Database = createLucideIcon("database", __iconNode$1R);
|
|
|
80951
81323
|
*/
|
|
80952
81324
|
|
|
80953
81325
|
|
|
80954
|
-
const __iconNode$
|
|
81326
|
+
const __iconNode$1R = [
|
|
80955
81327
|
["line", { x1: "12", x2: "12", y1: "2", y2: "22", key: "7eqyqh" }],
|
|
80956
81328
|
["path", { d: "M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6", key: "1b0p4s" }]
|
|
80957
81329
|
];
|
|
80958
|
-
const DollarSign = createLucideIcon("dollar-sign", __iconNode$
|
|
81330
|
+
const DollarSign = createLucideIcon("dollar-sign", __iconNode$1R);
|
|
80959
81331
|
|
|
80960
81332
|
/**
|
|
80961
81333
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80965,7 +81337,7 @@ const DollarSign = createLucideIcon("dollar-sign", __iconNode$1Q);
|
|
|
80965
81337
|
*/
|
|
80966
81338
|
|
|
80967
81339
|
|
|
80968
|
-
const __iconNode$
|
|
81340
|
+
const __iconNode$1Q = [
|
|
80969
81341
|
["path", { d: "M11 20H2", key: "nlcfvz" }],
|
|
80970
81342
|
[
|
|
80971
81343
|
"path",
|
|
@@ -80978,7 +81350,7 @@ const __iconNode$1P = [
|
|
|
80978
81350
|
["path", { d: "M14 12h.01", key: "1jfl7z" }],
|
|
80979
81351
|
["path", { d: "M22 20h-3", key: "vhrsz" }]
|
|
80980
81352
|
];
|
|
80981
|
-
const DoorOpen = createLucideIcon("door-open", __iconNode$
|
|
81353
|
+
const DoorOpen = createLucideIcon("door-open", __iconNode$1Q);
|
|
80982
81354
|
|
|
80983
81355
|
/**
|
|
80984
81356
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -80988,12 +81360,12 @@ const DoorOpen = createLucideIcon("door-open", __iconNode$1P);
|
|
|
80988
81360
|
*/
|
|
80989
81361
|
|
|
80990
81362
|
|
|
80991
|
-
const __iconNode$
|
|
81363
|
+
const __iconNode$1P = [
|
|
80992
81364
|
["path", { d: "M12 15V3", key: "m9g1x1" }],
|
|
80993
81365
|
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
|
|
80994
81366
|
["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
|
|
80995
81367
|
];
|
|
80996
|
-
const Download = createLucideIcon("download", __iconNode$
|
|
81368
|
+
const Download = createLucideIcon("download", __iconNode$1P);
|
|
80997
81369
|
|
|
80998
81370
|
/**
|
|
80999
81371
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81003,12 +81375,12 @@ const Download = createLucideIcon("download", __iconNode$1O);
|
|
|
81003
81375
|
*/
|
|
81004
81376
|
|
|
81005
81377
|
|
|
81006
|
-
const __iconNode$
|
|
81378
|
+
const __iconNode$1O = [
|
|
81007
81379
|
["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
|
|
81008
81380
|
["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
|
|
81009
81381
|
["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
|
|
81010
81382
|
];
|
|
81011
|
-
const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$
|
|
81383
|
+
const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$1O);
|
|
81012
81384
|
|
|
81013
81385
|
/**
|
|
81014
81386
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81018,12 +81390,12 @@ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$1N);
|
|
|
81018
81390
|
*/
|
|
81019
81391
|
|
|
81020
81392
|
|
|
81021
|
-
const __iconNode$
|
|
81393
|
+
const __iconNode$1N = [
|
|
81022
81394
|
["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
|
|
81023
81395
|
["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
|
|
81024
81396
|
["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
|
|
81025
81397
|
];
|
|
81026
|
-
const Ellipsis = createLucideIcon("ellipsis", __iconNode$
|
|
81398
|
+
const Ellipsis = createLucideIcon("ellipsis", __iconNode$1N);
|
|
81027
81399
|
|
|
81028
81400
|
/**
|
|
81029
81401
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81033,12 +81405,12 @@ const Ellipsis = createLucideIcon("ellipsis", __iconNode$1M);
|
|
|
81033
81405
|
*/
|
|
81034
81406
|
|
|
81035
81407
|
|
|
81036
|
-
const __iconNode$
|
|
81408
|
+
const __iconNode$1M = [
|
|
81037
81409
|
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
81038
81410
|
["path", { d: "M10 14 21 3", key: "gplh6r" }],
|
|
81039
81411
|
["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
|
|
81040
81412
|
];
|
|
81041
|
-
const ExternalLink = createLucideIcon("external-link", __iconNode$
|
|
81413
|
+
const ExternalLink = createLucideIcon("external-link", __iconNode$1M);
|
|
81042
81414
|
|
|
81043
81415
|
/**
|
|
81044
81416
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81048,7 +81420,7 @@ const ExternalLink = createLucideIcon("external-link", __iconNode$1L);
|
|
|
81048
81420
|
*/
|
|
81049
81421
|
|
|
81050
81422
|
|
|
81051
|
-
const __iconNode$
|
|
81423
|
+
const __iconNode$1L = [
|
|
81052
81424
|
[
|
|
81053
81425
|
"path",
|
|
81054
81426
|
{
|
|
@@ -81066,7 +81438,7 @@ const __iconNode$1K = [
|
|
|
81066
81438
|
],
|
|
81067
81439
|
["path", { d: "m2 2 20 20", key: "1ooewy" }]
|
|
81068
81440
|
];
|
|
81069
|
-
const EyeOff = createLucideIcon("eye-off", __iconNode$
|
|
81441
|
+
const EyeOff = createLucideIcon("eye-off", __iconNode$1L);
|
|
81070
81442
|
|
|
81071
81443
|
/**
|
|
81072
81444
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81076,7 +81448,7 @@ const EyeOff = createLucideIcon("eye-off", __iconNode$1K);
|
|
|
81076
81448
|
*/
|
|
81077
81449
|
|
|
81078
81450
|
|
|
81079
|
-
const __iconNode$
|
|
81451
|
+
const __iconNode$1K = [
|
|
81080
81452
|
[
|
|
81081
81453
|
"path",
|
|
81082
81454
|
{
|
|
@@ -81086,7 +81458,7 @@ const __iconNode$1J = [
|
|
|
81086
81458
|
],
|
|
81087
81459
|
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
81088
81460
|
];
|
|
81089
|
-
const Eye = createLucideIcon("eye", __iconNode$
|
|
81461
|
+
const Eye = createLucideIcon("eye", __iconNode$1K);
|
|
81090
81462
|
|
|
81091
81463
|
/**
|
|
81092
81464
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81096,7 +81468,7 @@ const Eye = createLucideIcon("eye", __iconNode$1J);
|
|
|
81096
81468
|
*/
|
|
81097
81469
|
|
|
81098
81470
|
|
|
81099
|
-
const __iconNode$
|
|
81471
|
+
const __iconNode$1J = [
|
|
81100
81472
|
["path", { d: "M10 12v-1", key: "v7bkov" }],
|
|
81101
81473
|
["path", { d: "M10 18v-2", key: "1cjy8d" }],
|
|
81102
81474
|
["path", { d: "M10 7V6", key: "dljcrl" }],
|
|
@@ -81107,7 +81479,7 @@ const __iconNode$1I = [
|
|
|
81107
81479
|
],
|
|
81108
81480
|
["circle", { cx: "10", cy: "20", r: "2", key: "1xzdoj" }]
|
|
81109
81481
|
];
|
|
81110
|
-
const FileArchive = createLucideIcon("file-archive", __iconNode$
|
|
81482
|
+
const FileArchive = createLucideIcon("file-archive", __iconNode$1J);
|
|
81111
81483
|
|
|
81112
81484
|
/**
|
|
81113
81485
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81117,7 +81489,7 @@ const FileArchive = createLucideIcon("file-archive", __iconNode$1I);
|
|
|
81117
81489
|
*/
|
|
81118
81490
|
|
|
81119
81491
|
|
|
81120
|
-
const __iconNode$
|
|
81492
|
+
const __iconNode$1I = [
|
|
81121
81493
|
["path", { d: "M17.5 22h.5a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3", key: "rslqgf" }],
|
|
81122
81494
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81123
81495
|
[
|
|
@@ -81128,7 +81500,7 @@ const __iconNode$1H = [
|
|
|
81128
81500
|
}
|
|
81129
81501
|
]
|
|
81130
81502
|
];
|
|
81131
|
-
const FileAudio = createLucideIcon("file-audio", __iconNode$
|
|
81503
|
+
const FileAudio = createLucideIcon("file-audio", __iconNode$1I);
|
|
81132
81504
|
|
|
81133
81505
|
/**
|
|
81134
81506
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81138,13 +81510,13 @@ const FileAudio = createLucideIcon("file-audio", __iconNode$1H);
|
|
|
81138
81510
|
*/
|
|
81139
81511
|
|
|
81140
81512
|
|
|
81141
|
-
const __iconNode$
|
|
81513
|
+
const __iconNode$1H = [
|
|
81142
81514
|
["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
|
|
81143
81515
|
["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }],
|
|
81144
81516
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81145
81517
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z", key: "1mlx9k" }]
|
|
81146
81518
|
];
|
|
81147
|
-
const FileCode = createLucideIcon("file-code", __iconNode$
|
|
81519
|
+
const FileCode = createLucideIcon("file-code", __iconNode$1H);
|
|
81148
81520
|
|
|
81149
81521
|
/**
|
|
81150
81522
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81154,13 +81526,13 @@ const FileCode = createLucideIcon("file-code", __iconNode$1G);
|
|
|
81154
81526
|
*/
|
|
81155
81527
|
|
|
81156
81528
|
|
|
81157
|
-
const __iconNode$
|
|
81529
|
+
const __iconNode$1G = [
|
|
81158
81530
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
81159
81531
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81160
81532
|
["path", { d: "M12 18v-6", key: "17g6i2" }],
|
|
81161
81533
|
["path", { d: "m9 15 3 3 3-3", key: "1npd3o" }]
|
|
81162
81534
|
];
|
|
81163
|
-
const FileDown = createLucideIcon("file-down", __iconNode$
|
|
81535
|
+
const FileDown = createLucideIcon("file-down", __iconNode$1G);
|
|
81164
81536
|
|
|
81165
81537
|
/**
|
|
81166
81538
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81170,13 +81542,13 @@ const FileDown = createLucideIcon("file-down", __iconNode$1F);
|
|
|
81170
81542
|
*/
|
|
81171
81543
|
|
|
81172
81544
|
|
|
81173
|
-
const __iconNode$
|
|
81545
|
+
const __iconNode$1F = [
|
|
81174
81546
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
81175
81547
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81176
81548
|
["circle", { cx: "10", cy: "12", r: "2", key: "737tya" }],
|
|
81177
81549
|
["path", { d: "m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22", key: "wt3hpn" }]
|
|
81178
81550
|
];
|
|
81179
|
-
const FileImage = createLucideIcon("file-image", __iconNode$
|
|
81551
|
+
const FileImage = createLucideIcon("file-image", __iconNode$1F);
|
|
81180
81552
|
|
|
81181
81553
|
/**
|
|
81182
81554
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81186,7 +81558,7 @@ const FileImage = createLucideIcon("file-image", __iconNode$1E);
|
|
|
81186
81558
|
*/
|
|
81187
81559
|
|
|
81188
81560
|
|
|
81189
|
-
const __iconNode$
|
|
81561
|
+
const __iconNode$1E = [
|
|
81190
81562
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81191
81563
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z", key: "1mlx9k" }],
|
|
81192
81564
|
[
|
|
@@ -81197,7 +81569,7 @@ const __iconNode$1D = [
|
|
|
81197
81569
|
}
|
|
81198
81570
|
]
|
|
81199
81571
|
];
|
|
81200
|
-
const FilePlay = createLucideIcon("file-play", __iconNode$
|
|
81572
|
+
const FilePlay = createLucideIcon("file-play", __iconNode$1E);
|
|
81201
81573
|
|
|
81202
81574
|
/**
|
|
81203
81575
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81207,7 +81579,7 @@ const FilePlay = createLucideIcon("file-play", __iconNode$1D);
|
|
|
81207
81579
|
*/
|
|
81208
81580
|
|
|
81209
81581
|
|
|
81210
|
-
const __iconNode$
|
|
81582
|
+
const __iconNode$1D = [
|
|
81211
81583
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
81212
81584
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81213
81585
|
["path", { d: "M8 13h2", key: "yr2amv" }],
|
|
@@ -81215,7 +81587,7 @@ const __iconNode$1C = [
|
|
|
81215
81587
|
["path", { d: "M8 17h2", key: "2yhykz" }],
|
|
81216
81588
|
["path", { d: "M14 17h2", key: "10kma7" }]
|
|
81217
81589
|
];
|
|
81218
|
-
const FileSpreadsheet = createLucideIcon("file-spreadsheet", __iconNode$
|
|
81590
|
+
const FileSpreadsheet = createLucideIcon("file-spreadsheet", __iconNode$1D);
|
|
81219
81591
|
|
|
81220
81592
|
/**
|
|
81221
81593
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81225,14 +81597,14 @@ const FileSpreadsheet = createLucideIcon("file-spreadsheet", __iconNode$1C);
|
|
|
81225
81597
|
*/
|
|
81226
81598
|
|
|
81227
81599
|
|
|
81228
|
-
const __iconNode$
|
|
81600
|
+
const __iconNode$1C = [
|
|
81229
81601
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
81230
81602
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
|
|
81231
81603
|
["path", { d: "M10 9H8", key: "b1mrlr" }],
|
|
81232
81604
|
["path", { d: "M16 13H8", key: "t4e002" }],
|
|
81233
81605
|
["path", { d: "M16 17H8", key: "z1uh3a" }]
|
|
81234
81606
|
];
|
|
81235
|
-
const FileText = createLucideIcon("file-text", __iconNode$
|
|
81607
|
+
const FileText = createLucideIcon("file-text", __iconNode$1C);
|
|
81236
81608
|
|
|
81237
81609
|
/**
|
|
81238
81610
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81242,11 +81614,11 @@ const FileText = createLucideIcon("file-text", __iconNode$1B);
|
|
|
81242
81614
|
*/
|
|
81243
81615
|
|
|
81244
81616
|
|
|
81245
|
-
const __iconNode$
|
|
81617
|
+
const __iconNode$1B = [
|
|
81246
81618
|
["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
|
|
81247
81619
|
["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }]
|
|
81248
81620
|
];
|
|
81249
|
-
const File$1 = createLucideIcon("file", __iconNode$
|
|
81621
|
+
const File$1 = createLucideIcon("file", __iconNode$1B);
|
|
81250
81622
|
|
|
81251
81623
|
/**
|
|
81252
81624
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81256,7 +81628,7 @@ const File$1 = createLucideIcon("file", __iconNode$1A);
|
|
|
81256
81628
|
*/
|
|
81257
81629
|
|
|
81258
81630
|
|
|
81259
|
-
const __iconNode$
|
|
81631
|
+
const __iconNode$1A = [
|
|
81260
81632
|
[
|
|
81261
81633
|
"path",
|
|
81262
81634
|
{
|
|
@@ -81274,7 +81646,7 @@ const __iconNode$1z = [
|
|
|
81274
81646
|
["path", { d: "M3 5a2 2 0 0 0 2 2h3", key: "f2jnh7" }],
|
|
81275
81647
|
["path", { d: "M3 3v13a2 2 0 0 0 2 2h3", key: "k8epm1" }]
|
|
81276
81648
|
];
|
|
81277
|
-
const FolderTree = createLucideIcon("folder-tree", __iconNode$
|
|
81649
|
+
const FolderTree = createLucideIcon("folder-tree", __iconNode$1A);
|
|
81278
81650
|
|
|
81279
81651
|
/**
|
|
81280
81652
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81284,11 +81656,11 @@ const FolderTree = createLucideIcon("folder-tree", __iconNode$1z);
|
|
|
81284
81656
|
*/
|
|
81285
81657
|
|
|
81286
81658
|
|
|
81287
|
-
const __iconNode$
|
|
81659
|
+
const __iconNode$1z = [
|
|
81288
81660
|
["path", { d: "m12 14 4-4", key: "9kzdfg" }],
|
|
81289
81661
|
["path", { d: "M3.34 19a10 10 0 1 1 17.32 0", key: "19p75a" }]
|
|
81290
81662
|
];
|
|
81291
|
-
const Gauge = createLucideIcon("gauge", __iconNode$
|
|
81663
|
+
const Gauge = createLucideIcon("gauge", __iconNode$1z);
|
|
81292
81664
|
|
|
81293
81665
|
/**
|
|
81294
81666
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81298,14 +81670,14 @@ const Gauge = createLucideIcon("gauge", __iconNode$1y);
|
|
|
81298
81670
|
*/
|
|
81299
81671
|
|
|
81300
81672
|
|
|
81301
|
-
const __iconNode$
|
|
81673
|
+
const __iconNode$1y = [
|
|
81302
81674
|
["path", { d: "m14.5 12.5-8 8a2.119 2.119 0 1 1-3-3l8-8", key: "15492f" }],
|
|
81303
81675
|
["path", { d: "m16 16 6-6", key: "vzrcl6" }],
|
|
81304
81676
|
["path", { d: "m8 8 6-6", key: "18bi4p" }],
|
|
81305
81677
|
["path", { d: "m9 7 8 8", key: "5jnvq1" }],
|
|
81306
81678
|
["path", { d: "m21 11-8-8", key: "z4y7zo" }]
|
|
81307
81679
|
];
|
|
81308
|
-
const Gavel = createLucideIcon("gavel", __iconNode$
|
|
81680
|
+
const Gavel = createLucideIcon("gavel", __iconNode$1y);
|
|
81309
81681
|
|
|
81310
81682
|
/**
|
|
81311
81683
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81315,13 +81687,13 @@ const Gavel = createLucideIcon("gavel", __iconNode$1x);
|
|
|
81315
81687
|
*/
|
|
81316
81688
|
|
|
81317
81689
|
|
|
81318
|
-
const __iconNode$
|
|
81690
|
+
const __iconNode$1x = [
|
|
81319
81691
|
["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
|
|
81320
81692
|
["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
|
|
81321
81693
|
["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
|
|
81322
81694
|
["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
|
|
81323
81695
|
];
|
|
81324
|
-
const GitBranch = createLucideIcon("git-branch", __iconNode$
|
|
81696
|
+
const GitBranch = createLucideIcon("git-branch", __iconNode$1x);
|
|
81325
81697
|
|
|
81326
81698
|
/**
|
|
81327
81699
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81331,12 +81703,12 @@ const GitBranch = createLucideIcon("git-branch", __iconNode$1w);
|
|
|
81331
81703
|
*/
|
|
81332
81704
|
|
|
81333
81705
|
|
|
81334
|
-
const __iconNode$
|
|
81706
|
+
const __iconNode$1w = [
|
|
81335
81707
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
81336
81708
|
["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
|
|
81337
81709
|
["path", { d: "M2 12h20", key: "9i4pu4" }]
|
|
81338
81710
|
];
|
|
81339
|
-
const Globe = createLucideIcon("globe", __iconNode$
|
|
81711
|
+
const Globe = createLucideIcon("globe", __iconNode$1w);
|
|
81340
81712
|
|
|
81341
81713
|
/**
|
|
81342
81714
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81346,7 +81718,7 @@ const Globe = createLucideIcon("globe", __iconNode$1v);
|
|
|
81346
81718
|
*/
|
|
81347
81719
|
|
|
81348
81720
|
|
|
81349
|
-
const __iconNode$
|
|
81721
|
+
const __iconNode$1v = [
|
|
81350
81722
|
[
|
|
81351
81723
|
"path",
|
|
81352
81724
|
{
|
|
@@ -81357,7 +81729,7 @@ const __iconNode$1u = [
|
|
|
81357
81729
|
["path", { d: "M22 10v6", key: "1lu8f3" }],
|
|
81358
81730
|
["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
|
|
81359
81731
|
];
|
|
81360
|
-
const GraduationCap = createLucideIcon("graduation-cap", __iconNode$
|
|
81732
|
+
const GraduationCap = createLucideIcon("graduation-cap", __iconNode$1v);
|
|
81361
81733
|
|
|
81362
81734
|
/**
|
|
81363
81735
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81367,7 +81739,7 @@ const GraduationCap = createLucideIcon("graduation-cap", __iconNode$1u);
|
|
|
81367
81739
|
*/
|
|
81368
81740
|
|
|
81369
81741
|
|
|
81370
|
-
const __iconNode$
|
|
81742
|
+
const __iconNode$1u = [
|
|
81371
81743
|
["path", { d: "M14 18a2 2 0 0 0-4 0", key: "1v8fkw" }],
|
|
81372
81744
|
[
|
|
81373
81745
|
"path",
|
|
@@ -81380,7 +81752,7 @@ const __iconNode$1t = [
|
|
|
81380
81752
|
["circle", { cx: "17", cy: "18", r: "3", key: "82mm0e" }],
|
|
81381
81753
|
["circle", { cx: "7", cy: "18", r: "3", key: "lvkj7j" }]
|
|
81382
81754
|
];
|
|
81383
|
-
const HatGlasses = createLucideIcon("hat-glasses", __iconNode$
|
|
81755
|
+
const HatGlasses = createLucideIcon("hat-glasses", __iconNode$1u);
|
|
81384
81756
|
|
|
81385
81757
|
/**
|
|
81386
81758
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81390,13 +81762,13 @@ const HatGlasses = createLucideIcon("hat-glasses", __iconNode$1t);
|
|
|
81390
81762
|
*/
|
|
81391
81763
|
|
|
81392
81764
|
|
|
81393
|
-
const __iconNode$
|
|
81765
|
+
const __iconNode$1t = [
|
|
81394
81766
|
["path", { d: "M4 12h8", key: "17cfdx" }],
|
|
81395
81767
|
["path", { d: "M4 18V6", key: "1rz3zl" }],
|
|
81396
81768
|
["path", { d: "M12 18V6", key: "zqpxq5" }],
|
|
81397
81769
|
["path", { d: "m17 12 3-2v8", key: "1hhhft" }]
|
|
81398
81770
|
];
|
|
81399
|
-
const Heading1 = createLucideIcon("heading-1", __iconNode$
|
|
81771
|
+
const Heading1 = createLucideIcon("heading-1", __iconNode$1t);
|
|
81400
81772
|
|
|
81401
81773
|
/**
|
|
81402
81774
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81406,13 +81778,13 @@ const Heading1 = createLucideIcon("heading-1", __iconNode$1s);
|
|
|
81406
81778
|
*/
|
|
81407
81779
|
|
|
81408
81780
|
|
|
81409
|
-
const __iconNode$
|
|
81781
|
+
const __iconNode$1s = [
|
|
81410
81782
|
["path", { d: "M4 12h8", key: "17cfdx" }],
|
|
81411
81783
|
["path", { d: "M4 18V6", key: "1rz3zl" }],
|
|
81412
81784
|
["path", { d: "M12 18V6", key: "zqpxq5" }],
|
|
81413
81785
|
["path", { d: "M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1", key: "9jr5yi" }]
|
|
81414
81786
|
];
|
|
81415
|
-
const Heading2 = createLucideIcon("heading-2", __iconNode$
|
|
81787
|
+
const Heading2 = createLucideIcon("heading-2", __iconNode$1s);
|
|
81416
81788
|
|
|
81417
81789
|
/**
|
|
81418
81790
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81422,14 +81794,14 @@ const Heading2 = createLucideIcon("heading-2", __iconNode$1r);
|
|
|
81422
81794
|
*/
|
|
81423
81795
|
|
|
81424
81796
|
|
|
81425
|
-
const __iconNode$
|
|
81797
|
+
const __iconNode$1r = [
|
|
81426
81798
|
["path", { d: "M4 12h8", key: "17cfdx" }],
|
|
81427
81799
|
["path", { d: "M4 18V6", key: "1rz3zl" }],
|
|
81428
81800
|
["path", { d: "M12 18V6", key: "zqpxq5" }],
|
|
81429
81801
|
["path", { d: "M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2", key: "68ncm8" }],
|
|
81430
81802
|
["path", { d: "M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2", key: "1ejuhz" }]
|
|
81431
81803
|
];
|
|
81432
|
-
const Heading3 = createLucideIcon("heading-3", __iconNode$
|
|
81804
|
+
const Heading3 = createLucideIcon("heading-3", __iconNode$1r);
|
|
81433
81805
|
|
|
81434
81806
|
/**
|
|
81435
81807
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81439,12 +81811,12 @@ const Heading3 = createLucideIcon("heading-3", __iconNode$1q);
|
|
|
81439
81811
|
*/
|
|
81440
81812
|
|
|
81441
81813
|
|
|
81442
|
-
const __iconNode$
|
|
81814
|
+
const __iconNode$1q = [
|
|
81443
81815
|
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
81444
81816
|
["path", { d: "M3 3v5h5", key: "1xhq8a" }],
|
|
81445
81817
|
["path", { d: "M12 7v5l4 2", key: "1fdv2h" }]
|
|
81446
81818
|
];
|
|
81447
|
-
const History = createLucideIcon("history", __iconNode$
|
|
81819
|
+
const History = createLucideIcon("history", __iconNode$1q);
|
|
81448
81820
|
|
|
81449
81821
|
/**
|
|
81450
81822
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81454,12 +81826,12 @@ const History = createLucideIcon("history", __iconNode$1p);
|
|
|
81454
81826
|
*/
|
|
81455
81827
|
|
|
81456
81828
|
|
|
81457
|
-
const __iconNode$
|
|
81829
|
+
const __iconNode$1p = [
|
|
81458
81830
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2", key: "1m3agn" }],
|
|
81459
81831
|
["circle", { cx: "9", cy: "9", r: "2", key: "af1f0g" }],
|
|
81460
81832
|
["path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21", key: "1xmnt7" }]
|
|
81461
81833
|
];
|
|
81462
|
-
const Image$3 = createLucideIcon("image", __iconNode$
|
|
81834
|
+
const Image$3 = createLucideIcon("image", __iconNode$1p);
|
|
81463
81835
|
|
|
81464
81836
|
/**
|
|
81465
81837
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81469,7 +81841,7 @@ const Image$3 = createLucideIcon("image", __iconNode$1o);
|
|
|
81469
81841
|
*/
|
|
81470
81842
|
|
|
81471
81843
|
|
|
81472
|
-
const __iconNode$
|
|
81844
|
+
const __iconNode$1o = [
|
|
81473
81845
|
["polyline", { points: "22 12 16 12 14 15 10 15 8 12 2 12", key: "o97t9d" }],
|
|
81474
81846
|
[
|
|
81475
81847
|
"path",
|
|
@@ -81479,7 +81851,7 @@ const __iconNode$1n = [
|
|
|
81479
81851
|
}
|
|
81480
81852
|
]
|
|
81481
81853
|
];
|
|
81482
|
-
const Inbox = createLucideIcon("inbox", __iconNode$
|
|
81854
|
+
const Inbox = createLucideIcon("inbox", __iconNode$1o);
|
|
81483
81855
|
|
|
81484
81856
|
/**
|
|
81485
81857
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81489,12 +81861,12 @@ const Inbox = createLucideIcon("inbox", __iconNode$1n);
|
|
|
81489
81861
|
*/
|
|
81490
81862
|
|
|
81491
81863
|
|
|
81492
|
-
const __iconNode$
|
|
81864
|
+
const __iconNode$1n = [
|
|
81493
81865
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
81494
81866
|
["path", { d: "M12 16v-4", key: "1dtifu" }],
|
|
81495
81867
|
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
81496
81868
|
];
|
|
81497
|
-
const Info$3 = createLucideIcon("info", __iconNode$
|
|
81869
|
+
const Info$3 = createLucideIcon("info", __iconNode$1n);
|
|
81498
81870
|
|
|
81499
81871
|
/**
|
|
81500
81872
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81504,12 +81876,12 @@ const Info$3 = createLucideIcon("info", __iconNode$1m);
|
|
|
81504
81876
|
*/
|
|
81505
81877
|
|
|
81506
81878
|
|
|
81507
|
-
const __iconNode$
|
|
81879
|
+
const __iconNode$1m = [
|
|
81508
81880
|
["line", { x1: "19", x2: "10", y1: "4", y2: "4", key: "15jd3p" }],
|
|
81509
81881
|
["line", { x1: "14", x2: "5", y1: "20", y2: "20", key: "bu0au3" }],
|
|
81510
81882
|
["line", { x1: "15", x2: "9", y1: "4", y2: "20", key: "uljnxc" }]
|
|
81511
81883
|
];
|
|
81512
|
-
const Italic$1 = createLucideIcon("italic", __iconNode$
|
|
81884
|
+
const Italic$1 = createLucideIcon("italic", __iconNode$1m);
|
|
81513
81885
|
|
|
81514
81886
|
/**
|
|
81515
81887
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81519,7 +81891,7 @@ const Italic$1 = createLucideIcon("italic", __iconNode$1l);
|
|
|
81519
81891
|
*/
|
|
81520
81892
|
|
|
81521
81893
|
|
|
81522
|
-
const __iconNode$
|
|
81894
|
+
const __iconNode$1l = [
|
|
81523
81895
|
[
|
|
81524
81896
|
"path",
|
|
81525
81897
|
{
|
|
@@ -81529,7 +81901,7 @@ const __iconNode$1k = [
|
|
|
81529
81901
|
],
|
|
81530
81902
|
["circle", { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor", key: "w0ekpg" }]
|
|
81531
81903
|
];
|
|
81532
|
-
const KeyRound = createLucideIcon("key-round", __iconNode$
|
|
81904
|
+
const KeyRound = createLucideIcon("key-round", __iconNode$1l);
|
|
81533
81905
|
|
|
81534
81906
|
/**
|
|
81535
81907
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81539,7 +81911,7 @@ const KeyRound = createLucideIcon("key-round", __iconNode$1k);
|
|
|
81539
81911
|
*/
|
|
81540
81912
|
|
|
81541
81913
|
|
|
81542
|
-
const __iconNode$
|
|
81914
|
+
const __iconNode$1k = [
|
|
81543
81915
|
["path", { d: "M10 18v-7", key: "wt116b" }],
|
|
81544
81916
|
[
|
|
81545
81917
|
"path",
|
|
@@ -81553,7 +81925,7 @@ const __iconNode$1j = [
|
|
|
81553
81925
|
["path", { d: "M3 22h18", key: "8prr45" }],
|
|
81554
81926
|
["path", { d: "M6 18v-7", key: "1ivflk" }]
|
|
81555
81927
|
];
|
|
81556
|
-
const Landmark = createLucideIcon("landmark", __iconNode$
|
|
81928
|
+
const Landmark = createLucideIcon("landmark", __iconNode$1k);
|
|
81557
81929
|
|
|
81558
81930
|
/**
|
|
81559
81931
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -81563,7 +81935,7 @@ const Landmark = createLucideIcon("landmark", __iconNode$1j);
|
|
|
81563
81935
|
*/
|
|
81564
81936
|
|
|
81565
81937
|
|
|
81566
|
-
const __iconNode$
|
|
81938
|
+
const __iconNode$1j = [
|
|
81567
81939
|
[
|
|
81568
81940
|
"path",
|
|
81569
81941
|
{
|
|
@@ -81586,7 +81958,23 @@ const __iconNode$1i = [
|
|
|
81586
81958
|
}
|
|
81587
81959
|
]
|
|
81588
81960
|
];
|
|
81589
|
-
const Layers = createLucideIcon("layers", __iconNode$
|
|
81961
|
+
const Layers = createLucideIcon("layers", __iconNode$1j);
|
|
81962
|
+
|
|
81963
|
+
/**
|
|
81964
|
+
* @license lucide-react v0.528.0 - ISC
|
|
81965
|
+
*
|
|
81966
|
+
* This source code is licensed under the ISC license.
|
|
81967
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
81968
|
+
*/
|
|
81969
|
+
|
|
81970
|
+
|
|
81971
|
+
const __iconNode$1i = [
|
|
81972
|
+
["rect", { width: "7", height: "9", x: "3", y: "3", rx: "1", key: "10lvy0" }],
|
|
81973
|
+
["rect", { width: "7", height: "5", x: "14", y: "3", rx: "1", key: "16une8" }],
|
|
81974
|
+
["rect", { width: "7", height: "9", x: "14", y: "12", rx: "1", key: "1hutg5" }],
|
|
81975
|
+
["rect", { width: "7", height: "5", x: "3", y: "16", rx: "1", key: "ldoo1y" }]
|
|
81976
|
+
];
|
|
81977
|
+
const LayoutDashboard = createLucideIcon("layout-dashboard", __iconNode$1i);
|
|
81590
81978
|
|
|
81591
81979
|
/**
|
|
81592
81980
|
* @license lucide-react v0.528.0 - ISC
|
|
@@ -147212,7 +147600,7 @@ const Collapsible = Root$5;
|
|
|
147212
147600
|
const CollapsibleTrigger = CollapsibleTrigger$1;
|
|
147213
147601
|
const CollapsibleContent = CollapsibleContent$1;
|
|
147214
147602
|
|
|
147215
|
-
const BAR_COLOR$
|
|
147603
|
+
const BAR_COLOR$2 = 'var(--color-amber-500, #f59e0b)';
|
|
147216
147604
|
const ERROR_MESSAGES = {
|
|
147217
147605
|
forbidden: 'Completion breakdown is not available for this learner.',
|
|
147218
147606
|
not_enrolled: 'This learner is not enrolled in this course.',
|
|
@@ -147229,7 +147617,7 @@ const formatPct = (value) => {
|
|
|
147229
147617
|
};
|
|
147230
147618
|
function CompletionBar({ value, label }) {
|
|
147231
147619
|
const clamped = Math.min(Math.max(value, 0), 100);
|
|
147232
|
-
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$
|
|
147620
|
+
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$2 } }) }));
|
|
147233
147621
|
}
|
|
147234
147622
|
function SubsectionRow({ block }) {
|
|
147235
147623
|
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` })] }));
|
|
@@ -147275,7 +147663,7 @@ function CourseCompletionBreakdown({ username, courseId, tenantKey, skip = false
|
|
|
147275
147663
|
}
|
|
147276
147664
|
|
|
147277
147665
|
// Theme token (the same one bg-amber-500 resolves to), with Tailwind's default as fallback.
|
|
147278
|
-
const COMPLETED_COLOR = 'var(--color-amber-500, #f59e0b)';
|
|
147666
|
+
const COMPLETED_COLOR$1 = 'var(--color-amber-500, #f59e0b)';
|
|
147279
147667
|
const REMAINING_COLOR = '#E5E7EB';
|
|
147280
147668
|
const formatDate$2 = (value) => {
|
|
147281
147669
|
if (!value)
|
|
@@ -147379,7 +147767,7 @@ function EnrolledUserProgressModal({ open, onOpenChange, username, userName, ema
|
|
|
147379
147767
|
];
|
|
147380
147768
|
const currentGradePct = fractionToPct((_f = (_e = item === null || item === void 0 ? void 0 : item.edx_progress) === null || _e === void 0 ? void 0 : _e.course_grade) === null || _f === void 0 ? void 0 : _f.percent);
|
|
147381
147769
|
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);
|
|
147382
|
-
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$1, { 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)
|
|
147770
|
+
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$1 }), 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$1, { 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)
|
|
147383
147771
|
? 'bg-green-50 text-green-700'
|
|
147384
147772
|
: 'bg-gray-100 text-gray-600'}`, children: ((_k = item.completion) === null || _k === void 0 ? void 0 : _k.passed) ? 'Passed' : 'Not passed' }) }), jsx(DetailRow$1, { label: "Passed on", children: formatDate$2((_l = item.completion) === null || _l === void 0 ? void 0 : _l.passed_date) }), jsx(DetailRow$1, { label: "Time spent", children: item.time_spent || '—' }), jsx(DetailRow$1, { label: "Enrollment date", children: formatDate$2((_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] }))] }) }));
|
|
147385
147773
|
}
|
|
@@ -147580,10 +147968,10 @@ function GradebookCard({ row, icon: Icon, onClick, }) {
|
|
|
147580
147968
|
}
|
|
147581
147969
|
: undefined, "aria-label": clickable ? t('gradebookGradebookTab.viewProgressAriaLabel', { name: row.name }) : undefined, children: jsx(CardContent, { className: "p-4", children: jsxs("div", { className: "flex items-start justify-between gap-3", children: [jsxs("div", { className: "flex items-start gap-3 min-w-0", children: [jsx("div", { className: "flex-shrink-0 w-10 h-10 bg-gradient-to-br from-blue-500 to-blue-600 rounded-lg flex items-center justify-center", children: jsx(Icon, { className: "h-5 w-5 text-white", "aria-hidden": "true" }) }), jsxs("div", { className: "min-w-0", children: [jsx("h4", { className: "text-sm font-semibold text-gray-900 dark:text-gray-100 truncate", children: row.name }), row.subtitle && (jsxs("div", { className: "flex items-center gap-1.5 mt-1 text-xs text-gray-400", children: [jsx(Calendar$1, { className: "h-3 w-3" }), row.subtitle] })), row.id && (jsxs("div", { className: "flex items-center gap-1 mt-1 text-xs text-gray-400", children: [jsxs("span", { className: "flex-shrink-0", children: [t('gradebookGradebookTab.idLabel'), ":"] }), jsx("span", { onClick: (e) => e.stopPropagation(), onMouseDown: (e) => e.stopPropagation(), className: "min-w-0 truncate font-mono select-all cursor-text", title: row.id, children: row.id })] }))] })] }), row.badgeLabel && (jsx(Badge, { className: cn('flex-shrink-0', BADGE_TONE[(_a = row.badgeTone) !== null && _a !== void 0 ? _a : 'neutral']), children: row.badgeLabel }))] }) }) }));
|
|
147582
147970
|
}
|
|
147583
|
-
function GradebookList({ org, username, types }) {
|
|
147971
|
+
function GradebookList({ org, username, types, initialType }) {
|
|
147584
147972
|
var _a, _b, _c;
|
|
147585
147973
|
const t = useT();
|
|
147586
|
-
const [type, setType] = useState(types[0]);
|
|
147974
|
+
const [type, setType] = useState(initialType && types.includes(initialType) ? initialType : types[0]);
|
|
147587
147975
|
const [searchQuery, setSearchQuery] = useState('');
|
|
147588
147976
|
const [page, setPage] = useState(1);
|
|
147589
147977
|
const [selected, setSelected] = useState(null);
|
|
@@ -147603,8 +147991,8 @@ function GradebookList({ org, username, types }) {
|
|
|
147603
147991
|
setSelected(null);
|
|
147604
147992
|
}, username: username, email: selected === null || selected === void 0 ? void 0 : selected.email, contentId: (_b = selected === null || selected === void 0 ? void 0 : selected.contentId) !== null && _b !== void 0 ? _b : '', contentName: selected === null || selected === void 0 ? void 0 : selected.contentName, metric: (_c = selected === null || selected === void 0 ? void 0 : selected.metric) !== null && _c !== void 0 ? _c : 'course', tenantKey: org })] }));
|
|
147605
147993
|
}
|
|
147606
|
-
function GradebookTab({ org, username }) {
|
|
147607
|
-
return jsx(GradebookList, { org: org, username: username, types: GRADEBOOK_TYPES });
|
|
147994
|
+
function GradebookTab({ org, username, initialType }) {
|
|
147995
|
+
return (jsx(GradebookList, { org: org, username: username, types: GRADEBOOK_TYPES, initialType: initialType }));
|
|
147608
147996
|
}
|
|
147609
147997
|
const CREDENTIALS_TYPES = ['credentials'];
|
|
147610
147998
|
const SKILLS_TYPES = ['skills'];
|
|
@@ -240348,7 +240736,7 @@ function sharePercent(value, total) {
|
|
|
240348
240736
|
}
|
|
240349
240737
|
|
|
240350
240738
|
/** Single series, so the palette's lead hue; it clears 3:1 on white. */
|
|
240351
|
-
const BAR_COLOR = CHART_SERIES_COLORS[0];
|
|
240739
|
+
const BAR_COLOR$1 = CHART_SERIES_COLORS[0];
|
|
240352
240740
|
const PLOT_HEIGHT = 176;
|
|
240353
240741
|
const MAX_X_LABELS = 5;
|
|
240354
240742
|
/**
|
|
@@ -240397,7 +240785,7 @@ function SpendChart({ points, granularity, }) {
|
|
|
240397
240785
|
// The whole column slot is the hover target, not just the bar.
|
|
240398
240786
|
className: "flex h-full min-w-0 flex-1 items-end justify-center", onMouseEnter: () => setActive(index), children: jsx("div", { className: "w-full max-w-[24px] rounded-t-[4px] transition-opacity", style: {
|
|
240399
240787
|
height: point.totalCost > 0 ? `max(${height}%, 2px)` : 0,
|
|
240400
|
-
background: BAR_COLOR,
|
|
240788
|
+
background: BAR_COLOR$1,
|
|
240401
240789
|
opacity: active === null || isActive ? 1 : 0.45,
|
|
240402
240790
|
} }) }, point.date));
|
|
240403
240791
|
}) })] }), jsx("div", { className: "relative mt-2 h-4 text-[11px] text-gray-500 dark:text-gray-400", "aria-hidden": "true", children: points.map((point, index) => labelIndexes.has(index) ? (jsx("span", { className: "absolute whitespace-nowrap", style: index === 0
|
|
@@ -240410,6 +240798,20 @@ function SpendChart({ points, granularity, }) {
|
|
|
240410
240798
|
}, children: formatBucket(point.date, granularity) }, point.date)) : null) })] })] }), jsxs("table", { className: "sr-only", children: [jsx("caption", { children: t('profileLlmUsage.chartTableCaption') }), jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: t('profileLlmUsage.colPeriod') }), jsx("th", { scope: "col", children: t('profileLlmUsage.colCost') })] }) }), jsx("tbody", { children: points.map((point) => (jsxs("tr", { children: [jsx("td", { children: formatBucket(point.date, granularity) }), jsx("td", { children: formatCost$1(point.totalCost) })] }, point.date))) })] })] }));
|
|
240411
240799
|
}
|
|
240412
240800
|
|
|
240801
|
+
/**
|
|
240802
|
+
* Cost share per row as a labelled bar list — the Usage tab's "By model" and
|
|
240803
|
+
* "By service" cards, also reused by the profile Overview.
|
|
240804
|
+
*/
|
|
240805
|
+
function RankedBars$1({ rows, total, colorFor, }) {
|
|
240806
|
+
return (jsx("ul", { className: "flex flex-col gap-3", children: rows.map((row) => {
|
|
240807
|
+
const share = sharePercent(row.totalCost, total);
|
|
240808
|
+
return (jsxs("li", { className: "flex flex-col gap-1.5", children: [jsxs("div", { className: "flex items-baseline justify-between gap-3 text-[13px]", children: [jsxs("span", { className: "flex min-w-0 items-center gap-2 font-medium text-gray-900 dark:text-gray-100", children: [jsx("span", { className: "h-2 w-2 flex-shrink-0 rounded-[2px]", style: { background: colorFor(row) }, "aria-hidden": "true" }), jsx("span", { className: "truncate", title: row.label, children: row.label })] }), jsxs("span", { className: "whitespace-nowrap tabular-nums text-gray-700 dark:text-gray-300", children: [formatCost$1(row.totalCost), jsxs("span", { className: "text-gray-500 dark:text-gray-400", children: [" \u00B7 ", share, "%"] })] })] }), jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800", "aria-hidden": "true", children: jsx("div", { className: "h-full rounded-full", style: { width: `${Math.min(100, share)}%`, background: colorFor(row) } }) })] }, row.key));
|
|
240809
|
+
}) }));
|
|
240810
|
+
}
|
|
240811
|
+
function BreakdownSkeleton() {
|
|
240812
|
+
return (jsx("div", { className: "flex flex-col gap-4", children: [0, 1, 2, 3].map((i) => (jsxs("div", { className: "flex flex-col gap-2", children: [jsx(Skeleton, { className: "h-4 w-3/4" }), jsx(Skeleton, { className: "h-1.5 w-full" })] }, i))) }));
|
|
240813
|
+
}
|
|
240814
|
+
|
|
240413
240815
|
const RANGE_LABEL_KEYS = {
|
|
240414
240816
|
today: 'rangeToday',
|
|
240415
240817
|
'7d': 'range7d',
|
|
@@ -240429,11 +240831,11 @@ const CHART_SUBTITLE_KEYS = {
|
|
|
240429
240831
|
week: 'chartSubtitleWeek',
|
|
240430
240832
|
month: 'chartSubtitleMonth',
|
|
240431
240833
|
};
|
|
240432
|
-
const BREAKDOWN_ROWS = 5;
|
|
240834
|
+
const BREAKDOWN_ROWS$1 = 5;
|
|
240433
240835
|
const MODEL_BAR_COLOR = CHART_SERIES_COLORS[0];
|
|
240434
|
-
const CARD = 'rounded-xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-gray-950';
|
|
240836
|
+
const CARD$1 = 'rounded-xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-gray-950';
|
|
240435
240837
|
function Card({ title, subtitle, aside, children, className, bodyClassName, }) {
|
|
240436
|
-
return (jsxs("section", { className: cn(CARD, className), "aria-label": title, children: [jsxs("div", { className: "flex items-start justify-between gap-4 px-5 pt-5", children: [jsxs("div", { className: "min-w-0", children: [jsx("h4", { className: "text-[15px] font-semibold text-gray-900 dark:text-gray-100", children: title }), subtitle && (jsx("p", { className: "mt-0.5 text-[13px] text-gray-500 dark:text-gray-400", children: subtitle }))] }), aside] }), jsx("div", { className: cn('px-5 pb-5 pt-4', bodyClassName), children: children })] }));
|
|
240838
|
+
return (jsxs("section", { className: cn(CARD$1, className), "aria-label": title, children: [jsxs("div", { className: "flex items-start justify-between gap-4 px-5 pt-5", children: [jsxs("div", { className: "min-w-0", children: [jsx("h4", { className: "text-[15px] font-semibold text-gray-900 dark:text-gray-100", children: title }), subtitle && (jsx("p", { className: "mt-0.5 text-[13px] text-gray-500 dark:text-gray-400", children: subtitle }))] }), aside] }), jsx("div", { className: cn('px-5 pb-5 pt-4', bodyClassName), children: children })] }));
|
|
240437
240839
|
}
|
|
240438
240840
|
function RangeControl({ value, onChange, }) {
|
|
240439
240841
|
const t = useT();
|
|
@@ -240459,23 +240861,14 @@ function RangeControl({ value, onChange, }) {
|
|
|
240459
240861
|
: 'font-medium text-gray-600 hover:text-gray-900 dark:text-gray-300'), children: t(`profileLlmUsage.${RANGE_LABEL_KEYS[range]}`) }, range));
|
|
240460
240862
|
}) }));
|
|
240461
240863
|
}
|
|
240462
|
-
function StatTile({ label, value, sub, loading, }) {
|
|
240463
|
-
return (jsxs("div", { className: cn(CARD, 'flex flex-col gap-2 p-4'), children: [jsx("p", { className: "text-[13px] font-medium text-gray-500 dark:text-gray-400", children: label }), loading ? (jsxs(Fragment$1, { children: [jsx(Skeleton, { className: "h-7 w-24" }), jsx(Skeleton, { className: "h-4 w-20" })] })) : (jsxs(Fragment$1, { children: [jsx("p", { className: "text-[26px] font-semibold leading-tight tracking-tight text-gray-900 dark:text-gray-100", children: value }), jsx("p", { className: "min-h-[1rem] text-xs text-gray-500 tabular-nums dark:text-gray-400", children: sub })] }))] }));
|
|
240864
|
+
function StatTile$1({ label, value, sub, loading, }) {
|
|
240865
|
+
return (jsxs("div", { className: cn(CARD$1, 'flex flex-col gap-2 p-4'), children: [jsx("p", { className: "text-[13px] font-medium text-gray-500 dark:text-gray-400", children: label }), loading ? (jsxs(Fragment$1, { children: [jsx(Skeleton, { className: "h-7 w-24" }), jsx(Skeleton, { className: "h-4 w-20" })] })) : (jsxs(Fragment$1, { children: [jsx("p", { className: "text-[26px] font-semibold leading-tight tracking-tight text-gray-900 dark:text-gray-100", children: value }), jsx("p", { className: "min-h-[1rem] text-xs text-gray-500 tabular-nums dark:text-gray-400", children: sub })] }))] }));
|
|
240464
240866
|
}
|
|
240465
240867
|
function StateMessage({ icon, tone = 'neutral', title, body, action, }) {
|
|
240466
|
-
return (jsxs("div", { className: cn(CARD, 'flex flex-col items-center gap-3 px-6 py-14 text-center'), role: tone === 'error' ? 'alert' : undefined, children: [jsx("div", { className: cn('flex h-12 w-12 items-center justify-center rounded-xl', tone === 'error'
|
|
240868
|
+
return (jsxs("div", { className: cn(CARD$1, 'flex flex-col items-center gap-3 px-6 py-14 text-center'), role: tone === 'error' ? 'alert' : undefined, children: [jsx("div", { className: cn('flex h-12 w-12 items-center justify-center rounded-xl', tone === 'error'
|
|
240467
240869
|
? 'bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300'
|
|
240468
240870
|
: 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'), "aria-hidden": "true", children: icon }), jsx("h4", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: title }), jsx("p", { className: "max-w-sm text-sm leading-relaxed text-gray-500 dark:text-gray-400", children: body }), action] }));
|
|
240469
240871
|
}
|
|
240470
|
-
function RankedBars$1({ rows, total, colorFor, }) {
|
|
240471
|
-
return (jsx("ul", { className: "flex flex-col gap-3", children: rows.map((row) => {
|
|
240472
|
-
const share = sharePercent(row.totalCost, total);
|
|
240473
|
-
return (jsxs("li", { className: "flex flex-col gap-1.5", children: [jsxs("div", { className: "flex items-baseline justify-between gap-3 text-[13px]", children: [jsxs("span", { className: "flex min-w-0 items-center gap-2 font-medium text-gray-900 dark:text-gray-100", children: [jsx("span", { className: "h-2 w-2 flex-shrink-0 rounded-[2px]", style: { background: colorFor(row) }, "aria-hidden": "true" }), jsx("span", { className: "truncate", title: row.label, children: row.label })] }), jsxs("span", { className: "whitespace-nowrap tabular-nums text-gray-700 dark:text-gray-300", children: [formatCost$1(row.totalCost), jsxs("span", { className: "text-gray-500 dark:text-gray-400", children: [" \u00B7 ", share, "%"] })] })] }), jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800", "aria-hidden": "true", children: jsx("div", { className: "h-full rounded-full", style: { width: `${Math.min(100, share)}%`, background: colorFor(row) } }) })] }, row.key));
|
|
240474
|
-
}) }));
|
|
240475
|
-
}
|
|
240476
|
-
function BreakdownSkeleton() {
|
|
240477
|
-
return (jsx("div", { className: "flex flex-col gap-4", children: [0, 1, 2, 3].map((i) => (jsxs("div", { className: "flex flex-col gap-2", children: [jsx(Skeleton, { className: "h-4 w-3/4" }), jsx(Skeleton, { className: "h-1.5 w-full" })] }, i))) }));
|
|
240478
|
-
}
|
|
240479
240872
|
function SectionError() {
|
|
240480
240873
|
const t = useT();
|
|
240481
240874
|
return (jsxs("p", { className: "flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400", children: [jsx(CircleAlert, { className: "h-4 w-4 text-red-600", "aria-hidden": "true" }), t('profileLlmUsage.sectionError')] }));
|
|
@@ -240522,7 +240915,6 @@ function LlmUsageTab({ org, username, isOwnProfile = true }) {
|
|
|
240522
240915
|
const summary = useUserLlmUsageSummary(scope);
|
|
240523
240916
|
const spend = useUserLlmSpendOverTime({ ...scope, granularity });
|
|
240524
240917
|
const byModel = useUserLlmCostByModel({ ...scope, limit: 20 });
|
|
240525
|
-
const byService = useUserLlmCostByService(scope);
|
|
240526
240918
|
const activity = useUserLlmRecentActivity({
|
|
240527
240919
|
...scope,
|
|
240528
240920
|
page,
|
|
@@ -240538,7 +240930,6 @@ function LlmUsageTab({ org, username, isOwnProfile = true }) {
|
|
|
240538
240930
|
summary.refetch();
|
|
240539
240931
|
spend.refetch();
|
|
240540
240932
|
byModel.refetch();
|
|
240541
|
-
byService.refetch();
|
|
240542
240933
|
activity.refetch();
|
|
240543
240934
|
if (openTraceId)
|
|
240544
240935
|
steps.refetch();
|
|
@@ -240549,15 +240940,8 @@ function LlmUsageTab({ org, username, isOwnProfile = true }) {
|
|
|
240549
240940
|
label: row.model || t('profileLlmUsage.unknownModel'),
|
|
240550
240941
|
totalCost: row.totalCost,
|
|
240551
240942
|
count: row.count,
|
|
240552
|
-
})), BREAKDOWN_ROWS, t('profileLlmUsage.otherRow')), [byModel.models, t]);
|
|
240553
|
-
const serviceRows = useMemo(() => foldTail(byService.services.map((row, index) => ({
|
|
240554
|
-
key: row.service || `unknown-${index}`,
|
|
240555
|
-
label: row.service || t('profileLlmUsage.unknownService'),
|
|
240556
|
-
totalCost: row.totalCost,
|
|
240557
|
-
count: row.count,
|
|
240558
|
-
})), BREAKDOWN_ROWS, t('profileLlmUsage.otherRow')), [byService.services, t]);
|
|
240943
|
+
})), BREAKDOWN_ROWS$1, t('profileLlmUsage.otherRow')), [byModel.models, t]);
|
|
240559
240944
|
const modelTotal = modelRows.reduce((sum, row) => sum + row.totalCost, 0);
|
|
240560
|
-
const serviceTotal = serviceRows.reduce((sum, row) => sum + row.totalCost, 0);
|
|
240561
240945
|
const totals = summary.summary;
|
|
240562
240946
|
const periodLabel = t(`profileLlmUsage.${PERIOD_LABEL_KEYS[range]}`);
|
|
240563
240947
|
const next = widerRange(range);
|
|
@@ -240602,15 +240986,13 @@ function LlmUsageTab({ org, username, isOwnProfile = true }) {
|
|
|
240602
240986
|
}
|
|
240603
240987
|
else {
|
|
240604
240988
|
const loadingTotals = summary.isLoading || summary.isIdle;
|
|
240605
|
-
body = (jsxs(Fragment$1, { children: [jsxs("div", { className: "grid grid-cols-2 gap-3 xl:grid-cols-4", children: [jsx(StatTile, { label: t('profileLlmUsage.kpiSpend'), value: formatCost$1(totals === null || totals === void 0 ? void 0 : totals.totalCost), sub: periodLabel, loading: loadingTotals }), jsx(StatTile, { label: t('profileLlmUsage.kpiTokens'), value: formatCompact(totals === null || totals === void 0 ? void 0 : totals.totalTokens), sub: totals && totals.count > 0
|
|
240989
|
+
body = (jsxs(Fragment$1, { children: [jsxs("div", { className: "grid grid-cols-2 gap-3 xl:grid-cols-4", children: [jsx(StatTile$1, { label: t('profileLlmUsage.kpiSpend'), value: formatCost$1(totals === null || totals === void 0 ? void 0 : totals.totalCost), sub: periodLabel, loading: loadingTotals }), jsx(StatTile$1, { label: t('profileLlmUsage.kpiTokens'), value: formatCompact(totals === null || totals === void 0 ? void 0 : totals.totalTokens), sub: totals && totals.count > 0
|
|
240606
240990
|
? t('profileLlmUsage.kpiTokensSub', {
|
|
240607
240991
|
value: formatCompact(totals.totalTokens / totals.count),
|
|
240608
240992
|
})
|
|
240609
|
-
: undefined, loading: loadingTotals }), jsx(StatTile, { label: t('profileLlmUsage.kpiRequests'), value: formatInteger(totals === null || totals === void 0 ? void 0 : totals.count), sub: t('profileLlmUsage.kpiRequestsSub'), loading: loadingTotals }), jsx(StatTile, { label: t('profileLlmUsage.kpiAvgCost'), value: totals && totals.count > 0
|
|
240993
|
+
: undefined, loading: loadingTotals }), jsx(StatTile$1, { label: t('profileLlmUsage.kpiRequests'), value: formatInteger(totals === null || totals === void 0 ? void 0 : totals.count), sub: t('profileLlmUsage.kpiRequestsSub'), loading: loadingTotals }), jsx(StatTile$1, { label: t('profileLlmUsage.kpiAvgCost'), value: totals && totals.count > 0
|
|
240610
240994
|
? formatCost$1(totals.totalCost / totals.count, { precise: true })
|
|
240611
|
-
: '—', sub: t('profileLlmUsage.kpiAvgCostSub'), loading: loadingTotals })] }), jsx(Card, { title: t('profileLlmUsage.chartTitle'), subtitle: t(`profileLlmUsage.${CHART_SUBTITLE_KEYS[granularity]}`), aside: totals && (jsx("span", { className: "text-[15px] font-semibold tabular-nums text-gray-900 dark:text-gray-100", children: formatCost$1(totals.totalCost) })), bodyClassName: "pt-2", children: spend.isLoading || spend.isIdle ? (jsx(Skeleton, { className: "h-[220px] w-full" })) : spend.error ? (jsx(SectionError, {})) : series.length === 0 ? (jsx("p", { className: "py-10 text-center text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.chartNoData') })) : (jsx(SpendChart, { points: series, granularity: granularity })) }),
|
|
240612
|
-
// Colour follows the service, so "chat" is the same hue everywhere.
|
|
240613
|
-
colorFor: (row) => (row.isOther ? '#9ca3af' : colorForSeries(row.key)) })) })] }), jsxs("section", { className: cn(CARD, 'overflow-hidden'), "aria-labelledby": "llm-activity-heading", children: [jsxs("div", { className: "border-b border-gray-200 px-5 py-4 dark:border-gray-800", children: [jsx("h4", { id: "llm-activity-heading", className: "text-[15px] font-semibold text-gray-900 dark:text-gray-100", children: t('profileLlmUsage.activityTitle') }), jsx("p", { className: "mt-0.5 text-[13px] text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.activitySubtitle') })] }), activity.isLoading || activity.isIdle ? (jsx("div", { className: "flex flex-col gap-3 p-5", children: [0, 1, 2, 3].map((i) => (jsx(Skeleton, { className: "h-8 w-full" }, i))) })) : activity.error ? (jsx("div", { className: "p-5", children: jsx(SectionError, {}) })) : activity.isEmpty || activity.rows.length === 0 ? (jsx("p", { className: "p-5 text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.activityEmpty') })) : (jsxs(Fragment$1, { children: [jsx("div", { className: "overflow-x-auto", children: jsxs("table", { className: "w-full text-[13px]", children: [jsx("thead", { children: jsxs("tr", { className: "bg-gray-50 text-left text-gray-500 dark:bg-gray-900 dark:text-gray-400", children: [jsx("th", { scope: "col", className: "px-5 py-2.5 font-medium", children: t('profileLlmUsage.colWhen') }), jsx("th", { scope: "col", className: "px-3 py-2.5 font-medium", children: t('profileLlmUsage.colService') }), jsx("th", { scope: "col", className: "hidden px-3 py-2.5 font-medium md:table-cell", children: t('profileLlmUsage.colSession') }), jsx("th", { scope: "col", className: "px-3 py-2.5 text-right font-medium", children: t('profileLlmUsage.colLatency') }), jsx("th", { scope: "col", className: "px-3 py-2.5 text-right font-medium", children: t('profileLlmUsage.colCost') }), jsx("th", { scope: "col", className: "w-12 py-2.5 pl-2 pr-5", children: jsx("span", { className: "sr-only", children: t('profileLlmUsage.colDetails') }) })] }) }), jsx("tbody", { children: activity.rows.map((trace) => {
|
|
240995
|
+
: '—', sub: t('profileLlmUsage.kpiAvgCostSub'), loading: loadingTotals })] }), jsx(Card, { title: t('profileLlmUsage.chartTitle'), subtitle: t(`profileLlmUsage.${CHART_SUBTITLE_KEYS[granularity]}`), aside: totals && (jsx("span", { className: "text-[15px] font-semibold tabular-nums text-gray-900 dark:text-gray-100", children: formatCost$1(totals.totalCost) })), bodyClassName: "pt-2", children: spend.isLoading || spend.isIdle ? (jsx(Skeleton, { className: "h-[220px] w-full" })) : spend.error ? (jsx(SectionError, {})) : series.length === 0 ? (jsx("p", { className: "py-10 text-center text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.chartNoData') })) : (jsx(SpendChart, { points: series, granularity: granularity })) }), jsx(Card, { title: t('profileLlmUsage.byModelTitle'), subtitle: t('profileLlmUsage.byModelSubtitle'), children: byModel.isLoading || byModel.isIdle ? (jsx(BreakdownSkeleton, {})) : byModel.error ? (jsx(SectionError, {})) : modelRows.length === 0 ? (jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.breakdownEmpty') })) : (jsx(RankedBars$1, { rows: modelRows, total: modelTotal, colorFor: () => MODEL_BAR_COLOR })) }), jsxs("section", { className: cn(CARD$1, 'overflow-hidden'), "aria-labelledby": "llm-activity-heading", children: [jsxs("div", { className: "border-b border-gray-200 px-5 py-4 dark:border-gray-800", children: [jsx("h4", { id: "llm-activity-heading", className: "text-[15px] font-semibold text-gray-900 dark:text-gray-100", children: t('profileLlmUsage.activityTitle') }), jsx("p", { className: "mt-0.5 text-[13px] text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.activitySubtitle') })] }), activity.isLoading || activity.isIdle ? (jsx("div", { className: "flex flex-col gap-3 p-5", children: [0, 1, 2, 3].map((i) => (jsx(Skeleton, { className: "h-8 w-full" }, i))) })) : activity.error ? (jsx("div", { className: "p-5", children: jsx(SectionError, {}) })) : activity.isEmpty || activity.rows.length === 0 ? (jsx("p", { className: "p-5 text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.activityEmpty') })) : (jsxs(Fragment$1, { children: [jsx("div", { className: "overflow-x-auto", children: jsxs("table", { className: "w-full text-[13px]", children: [jsx("thead", { children: jsxs("tr", { className: "bg-gray-50 text-left text-gray-500 dark:bg-gray-900 dark:text-gray-400", children: [jsx("th", { scope: "col", className: "px-5 py-2.5 font-medium", children: t('profileLlmUsage.colWhen') }), jsx("th", { scope: "col", className: "px-3 py-2.5 font-medium", children: t('profileLlmUsage.colService') }), jsx("th", { scope: "col", className: "hidden px-3 py-2.5 font-medium md:table-cell", children: t('profileLlmUsage.colSession') }), jsx("th", { scope: "col", className: "px-3 py-2.5 text-right font-medium", children: t('profileLlmUsage.colLatency') }), jsx("th", { scope: "col", className: "px-3 py-2.5 text-right font-medium", children: t('profileLlmUsage.colCost') }), jsx("th", { scope: "col", className: "w-12 py-2.5 pl-2 pr-5", children: jsx("span", { className: "sr-only", children: t('profileLlmUsage.colDetails') }) })] }) }), jsx("tbody", { children: activity.rows.map((trace) => {
|
|
240614
240996
|
const open = trace.id === openTraceId;
|
|
240615
240997
|
const when = formatWhen(trace.timestamp);
|
|
240616
240998
|
const service = trace.name || t('profileLlmUsage.unknownService');
|
|
@@ -240632,16 +241014,602 @@ function LlmUsageTab({ org, username, isOwnProfile = true }) {
|
|
|
240632
241014
|
setPage((current) => current + 1);
|
|
240633
241015
|
}, children: [t('profileLlmUsage.next'), jsx(ChevronRight, { className: "h-4 w-4", "aria-hidden": "true" })] })] })] }))] }))] })] }));
|
|
240634
241016
|
}
|
|
240635
|
-
const isRefreshing = summary.isFetching ||
|
|
240636
|
-
spend.isFetching ||
|
|
240637
|
-
byModel.isFetching ||
|
|
240638
|
-
byService.isFetching ||
|
|
240639
|
-
activity.isFetching;
|
|
241017
|
+
const isRefreshing = summary.isFetching || spend.isFetching || byModel.isFetching || activity.isFetching;
|
|
240640
241018
|
return (jsxs("div", { className: "flex flex-col gap-5", "data-testid": "llm-usage-tab", children: [jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [jsx(RangeControl, { value: range, onChange: changeRange }), jsxs("div", { className: "flex items-center gap-3", children: [jsxs("span", { className: "inline-flex items-center gap-1.5 text-[13px] text-gray-500 dark:text-gray-400", children: [jsx(Lock, { className: "h-3.5 w-3.5", "aria-hidden": "true" }), isOwnProfile
|
|
240641
241019
|
? t('profileLlmUsage.scopeSelf')
|
|
240642
241020
|
: t('profileLlmUsage.scopeUser', { username })] }), jsx(Button$1, { variant: "outline", size: "icon", className: "h-9 w-9", onClick: refreshAll, disabled: isRefreshing, "aria-label": t('profileLlmUsage.refresh'), title: t('profileLlmUsage.refresh'), children: jsx(RefreshCw, { className: cn('h-4 w-4', isRefreshing && 'animate-spin'), "aria-hidden": "true" }) })] })] }), body] }));
|
|
240643
241021
|
}
|
|
240644
241022
|
|
|
241023
|
+
/** How many of each list the overview shows before pointing at the full tab. */
|
|
241024
|
+
const OVERVIEW_COURSE_LIMIT = 5;
|
|
241025
|
+
const OVERVIEW_CONVERSATION_LIMIT = 5;
|
|
241026
|
+
const OVERVIEW_MEMORY_LIMIT = 3;
|
|
241027
|
+
/** A course's completion as a whole percent clamped to 0–100. */
|
|
241028
|
+
function courseProgressPercent(course) {
|
|
241029
|
+
var _a;
|
|
241030
|
+
const raw = (_a = course.completion) === null || _a === void 0 ? void 0 : _a.completion_percentage;
|
|
241031
|
+
if (raw === undefined || raw === null || !Number.isFinite(raw))
|
|
241032
|
+
return 0;
|
|
241033
|
+
return Math.min(100, Math.max(0, Math.round(raw)));
|
|
241034
|
+
}
|
|
241035
|
+
/**
|
|
241036
|
+
* Done with a course: every block complete, or the course passed on grade —
|
|
241037
|
+
* a learner can pass without opening every page, and that still counts.
|
|
241038
|
+
*/
|
|
241039
|
+
function isCourseCompleted(course) {
|
|
241040
|
+
const completion = course.completion;
|
|
241041
|
+
if (!completion)
|
|
241042
|
+
return false;
|
|
241043
|
+
return completion.completed || completion.passed || courseProgressPercent(course) >= 100;
|
|
241044
|
+
}
|
|
241045
|
+
function summarizeLearning(courses) {
|
|
241046
|
+
let completed = 0;
|
|
241047
|
+
let inProgress = 0;
|
|
241048
|
+
let sum = 0;
|
|
241049
|
+
for (const course of courses) {
|
|
241050
|
+
const percent = courseProgressPercent(course);
|
|
241051
|
+
sum += percent;
|
|
241052
|
+
if (isCourseCompleted(course))
|
|
241053
|
+
completed += 1;
|
|
241054
|
+
else if (percent > 0)
|
|
241055
|
+
inProgress += 1;
|
|
241056
|
+
}
|
|
241057
|
+
const total = courses.length;
|
|
241058
|
+
return {
|
|
241059
|
+
total,
|
|
241060
|
+
completed,
|
|
241061
|
+
inProgress,
|
|
241062
|
+
notStarted: total - completed - inProgress,
|
|
241063
|
+
averageProgress: total ? Math.round(sum / total) : 0,
|
|
241064
|
+
};
|
|
241065
|
+
}
|
|
241066
|
+
const timeOf = (value) => {
|
|
241067
|
+
if (!value)
|
|
241068
|
+
return Number.NaN;
|
|
241069
|
+
return new Date(value).getTime();
|
|
241070
|
+
};
|
|
241071
|
+
/** Most recently enrolled first; courses without a usable date sink to the end. */
|
|
241072
|
+
function sortCoursesByRecency(courses) {
|
|
241073
|
+
return [...courses].sort((a, b) => {
|
|
241074
|
+
var _a, _b;
|
|
241075
|
+
const left = timeOf((_a = a.enrollment) === null || _a === void 0 ? void 0 : _a.created);
|
|
241076
|
+
const right = timeOf((_b = b.enrollment) === null || _b === void 0 ? void 0 : _b.created);
|
|
241077
|
+
if (Number.isNaN(left) && Number.isNaN(right))
|
|
241078
|
+
return 0;
|
|
241079
|
+
if (Number.isNaN(left))
|
|
241080
|
+
return 1;
|
|
241081
|
+
if (Number.isNaN(right))
|
|
241082
|
+
return -1;
|
|
241083
|
+
return right - left;
|
|
241084
|
+
});
|
|
241085
|
+
}
|
|
241086
|
+
/**
|
|
241087
|
+
* Furthest along first: completed courses, then in-progress ones by percent,
|
|
241088
|
+
* then those not started — most recent enrollment first within a tie.
|
|
241089
|
+
*/
|
|
241090
|
+
function sortCoursesByProgress(courses) {
|
|
241091
|
+
const stage = (course) => isCourseCompleted(course) ? 2 : courseProgressPercent(course) > 0 ? 1 : 0;
|
|
241092
|
+
const byRecency = sortCoursesByRecency(courses);
|
|
241093
|
+
return byRecency.sort((a, b) => {
|
|
241094
|
+
const stageDiff = stage(b) - stage(a);
|
|
241095
|
+
if (stageDiff)
|
|
241096
|
+
return stageDiff;
|
|
241097
|
+
return courseProgressPercent(b) - courseProgressPercent(a);
|
|
241098
|
+
});
|
|
241099
|
+
}
|
|
241100
|
+
/** Seconds as `2h 15m`, `45m`, `<1m`; a missing value is a dash. */
|
|
241101
|
+
function formatDuration(seconds) {
|
|
241102
|
+
if (seconds === null || seconds === undefined || !Number.isFinite(seconds) || seconds < 0) {
|
|
241103
|
+
return '—';
|
|
241104
|
+
}
|
|
241105
|
+
if (seconds === 0)
|
|
241106
|
+
return '0m';
|
|
241107
|
+
if (seconds < 60)
|
|
241108
|
+
return '<1m';
|
|
241109
|
+
const minutes = Math.round(seconds / 60);
|
|
241110
|
+
if (minutes < 60)
|
|
241111
|
+
return `${minutes}m`;
|
|
241112
|
+
const hours = Math.floor(minutes / 60);
|
|
241113
|
+
const rest = minutes % 60;
|
|
241114
|
+
return rest ? `${hours}h ${rest}m` : `${hours}h`;
|
|
241115
|
+
}
|
|
241116
|
+
/** `3 days ago`; empty for a missing or unparseable timestamp. */
|
|
241117
|
+
function formatRelative(iso) {
|
|
241118
|
+
if (!iso)
|
|
241119
|
+
return '';
|
|
241120
|
+
const date = new Date(iso);
|
|
241121
|
+
if (Number.isNaN(date.getTime()))
|
|
241122
|
+
return '';
|
|
241123
|
+
return formatDistanceToNow(date, { addSuffix: true });
|
|
241124
|
+
}
|
|
241125
|
+
function formatShortDate(iso) {
|
|
241126
|
+
if (!iso)
|
|
241127
|
+
return '—';
|
|
241128
|
+
const date = new Date(iso);
|
|
241129
|
+
if (Number.isNaN(date.getTime()))
|
|
241130
|
+
return '—';
|
|
241131
|
+
return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
|
|
241132
|
+
}
|
|
241133
|
+
/** Whole-percent share, guarding an empty denominator. */
|
|
241134
|
+
function percentOf(part, whole) {
|
|
241135
|
+
if (!whole || whole <= 0)
|
|
241136
|
+
return 0;
|
|
241137
|
+
return Math.round((part / whole) * 100);
|
|
241138
|
+
}
|
|
241139
|
+
|
|
241140
|
+
/** The AI figures on the overview are always the last 30 days. */
|
|
241141
|
+
const OVERVIEW_LLM_RANGE = '30d';
|
|
241142
|
+
/** Enough enrollments to count active ones without paging. */
|
|
241143
|
+
const OVERVIEW_ENROLLMENT_PAGE_SIZE = 50;
|
|
241144
|
+
/** Models fetched for the breakdown; the tab folds the tail into "Other". */
|
|
241145
|
+
const OVERVIEW_MODEL_LIMIT = 10;
|
|
241146
|
+
const statusOf$1 = (error) => error && typeof error === 'object' ? error.status : undefined;
|
|
241147
|
+
/**
|
|
241148
|
+
* Everything the Overview tab shows, read through the same endpoints the
|
|
241149
|
+
* individual tabs use so the two never disagree. Each section is requested
|
|
241150
|
+
* only when its tab is on this profile, and every request names the viewed
|
|
241151
|
+
* user, so an admin previewing someone else sees that person's activity.
|
|
241152
|
+
*/
|
|
241153
|
+
function useOverviewData(org, username, sections) {
|
|
241154
|
+
const isPreview = useIsProfilePreview(username);
|
|
241155
|
+
const currentUsername = useCurrentUsername();
|
|
241156
|
+
const hasScope = !!org && !!username;
|
|
241157
|
+
// ── Learning ───────────────────────────────────────────────────────────
|
|
241158
|
+
const learningSkip = !sections.learning || !hasScope;
|
|
241159
|
+
const enrolledQ = useGetUserEnrolledCoursesQuery({
|
|
241160
|
+
username,
|
|
241161
|
+
query: { page: 1, page_size: OVERVIEW_ENROLLMENT_PAGE_SIZE, platform_key: org },
|
|
241162
|
+
}, { skip: learningSkip });
|
|
241163
|
+
const learnerQ = useGetLearnerDetailsQuery({ username, platform_key: org, metrics: 'courses,time_spent' }, { skip: learningSkip });
|
|
241164
|
+
const programsQ = useGetUserEnrolledProgramsQuery([{ username, platformKey: org }], { skip: learningSkip });
|
|
241165
|
+
const pathwaysQ = useGetUserCatalogPathwaysQuery({ username, platform_key: org }, { skip: learningSkip });
|
|
241166
|
+
// ── Records: credentials are course records, so they follow the learning cards
|
|
241167
|
+
const credentialsQ = useGetUsersAsAssertionsQuery({ platformKey: org, userId: username, page: 1, pageSize: 1 }, { skip: learningSkip });
|
|
241168
|
+
// ── Conversations ──────────────────────────────────────────────────────
|
|
241169
|
+
const historyQ = useGetUserChatHistoryQuery({ org, userId: username, params: { page: 1, page_size: OVERVIEW_CONVERSATION_LIMIT } }, { skip: !sections.chatHistory || !hasScope });
|
|
241170
|
+
// ── AI usage ───────────────────────────────────────────────────────────
|
|
241171
|
+
const scope = { platformKey: org, username, date_filter: OVERVIEW_LLM_RANGE };
|
|
241172
|
+
const summaryQ = useUserLlmUsageSummary(scope, { skip: !sections.llmUsage });
|
|
241173
|
+
const spendQ = useUserLlmSpendOverTime({ ...scope, granularity: 'day' }, { skip: !sections.llmUsage });
|
|
241174
|
+
const byModelQ = useUserLlmCostByModel({ ...scope, limit: OVERVIEW_MODEL_LIMIT }, { skip: !sections.llmUsage });
|
|
241175
|
+
// ── Memory ─────────────────────────────────────────────────────────────
|
|
241176
|
+
// Addressed the way the Memory tab does it: your own feed by your username;
|
|
241177
|
+
// someone else's with the caller in the path and the viewed user as a param.
|
|
241178
|
+
const memoryParams = { page: 1, page_size: OVERVIEW_MEMORY_LIMIT };
|
|
241179
|
+
const memoriesQ = useGetGlobalMemoriesQuery(isPreview
|
|
241180
|
+
? { org, userId: currentUsername, params: { ...memoryParams, user_id: username } }
|
|
241181
|
+
: { org, userId: username, params: memoryParams }, { skip: !sections.memory || !hasScope || (isPreview && !currentUsername) });
|
|
241182
|
+
const memorySettingsQ = useGetUserMemorySettingsQuery({ org, userId: username }, { skip: !sections.memory || !hasScope });
|
|
241183
|
+
const learning = useMemo(() => {
|
|
241184
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
241185
|
+
const enrolled = (_b = (_a = enrolledQ.data) === null || _a === void 0 ? void 0 : _a.results) !== null && _b !== void 0 ? _b : [];
|
|
241186
|
+
const details = (_c = learnerQ.data) === null || _c === void 0 ? void 0 : _c.data;
|
|
241187
|
+
const courses = sortCoursesByProgress((_d = details === null || details === void 0 ? void 0 : details.courses) !== null && _d !== void 0 ? _d : []);
|
|
241188
|
+
const summary = learnerQ.isError || !details ? null : summarizeLearning(courses);
|
|
241189
|
+
const programs = programsQ.data;
|
|
241190
|
+
const pathways = pathwaysQ.data;
|
|
241191
|
+
return {
|
|
241192
|
+
enabled: sections.learning,
|
|
241193
|
+
isLoading: !learningSkip && (enrolledQ.isLoading || learnerQ.isLoading),
|
|
241194
|
+
isError: enrolledQ.isError,
|
|
241195
|
+
isProgressUnavailable: learnerQ.isError,
|
|
241196
|
+
enrolledCount: (_f = (_e = enrolledQ.data) === null || _e === void 0 ? void 0 : _e.count) !== null && _f !== void 0 ? _f : enrolled.length,
|
|
241197
|
+
enrolled,
|
|
241198
|
+
courses,
|
|
241199
|
+
summary,
|
|
241200
|
+
timeSpentSecs: (_h = (_g = details === null || details === void 0 ? void 0 : details.time_spent) === null || _g === void 0 ? void 0 : _g.total_time_spent_secs) !== null && _h !== void 0 ? _h : null,
|
|
241201
|
+
programsCount: programsQ.isError ? null : programs ? programs.length : null,
|
|
241202
|
+
pathwaysCount: pathwaysQ.isError ? null : pathways ? pathways.length : null,
|
|
241203
|
+
};
|
|
241204
|
+
}, [sections.learning, learningSkip, enrolledQ, learnerQ, programsQ, pathwaysQ]);
|
|
241205
|
+
const records = useMemo(() => {
|
|
241206
|
+
var _a, _b, _c;
|
|
241207
|
+
const assertions = credentialsQ.data;
|
|
241208
|
+
return {
|
|
241209
|
+
isLoading: !learningSkip && credentialsQ.isLoading,
|
|
241210
|
+
credentialsCount: credentialsQ.isError
|
|
241211
|
+
? null
|
|
241212
|
+
: assertions
|
|
241213
|
+
? ((_c = (_a = assertions.count) !== null && _a !== void 0 ? _a : (_b = assertions.data) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0)
|
|
241214
|
+
: null,
|
|
241215
|
+
};
|
|
241216
|
+
}, [learningSkip, credentialsQ]);
|
|
241217
|
+
const conversations = useMemo(() => {
|
|
241218
|
+
var _a, _b, _c, _d;
|
|
241219
|
+
return ({
|
|
241220
|
+
enabled: sections.chatHistory,
|
|
241221
|
+
isLoading: sections.chatHistory && historyQ.isLoading,
|
|
241222
|
+
isError: historyQ.isError,
|
|
241223
|
+
isForbidden: statusOf$1(historyQ.error) === 403,
|
|
241224
|
+
count: (_b = (_a = historyQ.data) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0,
|
|
241225
|
+
recent: (_d = (_c = historyQ.data) === null || _c === void 0 ? void 0 : _c.results) !== null && _d !== void 0 ? _d : [],
|
|
241226
|
+
});
|
|
241227
|
+
}, [sections.chatHistory, historyQ]);
|
|
241228
|
+
const usage = useMemo(() => ({
|
|
241229
|
+
enabled: sections.llmUsage,
|
|
241230
|
+
isLoading: summaryQ.isLoading || summaryQ.isIdle,
|
|
241231
|
+
error: summaryQ.error,
|
|
241232
|
+
isEmpty: summaryQ.isEmpty,
|
|
241233
|
+
summary: summaryQ.summary,
|
|
241234
|
+
points: spendQ.points,
|
|
241235
|
+
isSpendLoading: spendQ.isLoading || spendQ.isIdle,
|
|
241236
|
+
spendError: spendQ.error,
|
|
241237
|
+
models: byModelQ.models,
|
|
241238
|
+
isBreakdownLoading: byModelQ.isLoading || byModelQ.isIdle,
|
|
241239
|
+
breakdownError: byModelQ.error,
|
|
241240
|
+
}), [sections.llmUsage, summaryQ, spendQ, byModelQ]);
|
|
241241
|
+
const memory = useMemo(() => {
|
|
241242
|
+
var _a, _b, _c, _d, _e;
|
|
241243
|
+
return ({
|
|
241244
|
+
enabled: sections.memory,
|
|
241245
|
+
isLoading: sections.memory && memoriesQ.isLoading,
|
|
241246
|
+
isError: memoriesQ.isError,
|
|
241247
|
+
count: (_b = (_a = memoriesQ.data) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0,
|
|
241248
|
+
recent: (_d = (_c = memoriesQ.data) === null || _c === void 0 ? void 0 : _c.results) !== null && _d !== void 0 ? _d : [],
|
|
241249
|
+
settings: (_e = memorySettingsQ.data) !== null && _e !== void 0 ? _e : null,
|
|
241250
|
+
});
|
|
241251
|
+
}, [sections.memory, memoriesQ, memorySettingsQ]);
|
|
241252
|
+
const isRefreshing = enrolledQ.isFetching ||
|
|
241253
|
+
learnerQ.isFetching ||
|
|
241254
|
+
historyQ.isFetching ||
|
|
241255
|
+
summaryQ.isFetching ||
|
|
241256
|
+
spendQ.isFetching ||
|
|
241257
|
+
byModelQ.isFetching ||
|
|
241258
|
+
memoriesQ.isFetching;
|
|
241259
|
+
const refetch = () => {
|
|
241260
|
+
if (!learningSkip) {
|
|
241261
|
+
enrolledQ.refetch();
|
|
241262
|
+
learnerQ.refetch();
|
|
241263
|
+
}
|
|
241264
|
+
if (sections.chatHistory && hasScope)
|
|
241265
|
+
historyQ.refetch();
|
|
241266
|
+
if (sections.llmUsage) {
|
|
241267
|
+
summaryQ.refetch();
|
|
241268
|
+
spendQ.refetch();
|
|
241269
|
+
byModelQ.refetch();
|
|
241270
|
+
}
|
|
241271
|
+
if (sections.memory && hasScope)
|
|
241272
|
+
memoriesQ.refetch();
|
|
241273
|
+
};
|
|
241274
|
+
return { learning, records, conversations, usage, memory, isRefreshing, refetch };
|
|
241275
|
+
}
|
|
241276
|
+
|
|
241277
|
+
const CARD = 'rounded-xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-gray-950';
|
|
241278
|
+
// One hue, light → dark, for the ordered completion states; bars are the
|
|
241279
|
+
// profile's single-series blue. The "not started" share is the ring's track.
|
|
241280
|
+
const COMPLETED_COLOR = CHART_ORDINAL_RAMP[2];
|
|
241281
|
+
const IN_PROGRESS_COLOR = CHART_ORDINAL_RAMP[0];
|
|
241282
|
+
const BAR_COLOR = CHART_SERIES_COLORS[0];
|
|
241283
|
+
const RING_SIZE = 120;
|
|
241284
|
+
const RING_STROKE = 12;
|
|
241285
|
+
/** Rows kept in the model breakdown before the tail folds into "Other". */
|
|
241286
|
+
const BREAKDOWN_ROWS = 3;
|
|
241287
|
+
// ---------------------------------------------------------------------------
|
|
241288
|
+
// Building blocks
|
|
241289
|
+
// ---------------------------------------------------------------------------
|
|
241290
|
+
function StatTile({ icon: Icon, label, value, sub, loading, }) {
|
|
241291
|
+
return (jsxs("div", { className: cn(CARD, 'flex flex-col gap-2 p-4'), children: [jsxs("p", { className: "flex items-center gap-1.5 text-[13px] font-medium text-gray-500 dark:text-gray-400", children: [jsx(Icon, { className: "h-4 w-4 flex-shrink-0 text-gray-400", "aria-hidden": "true" }), jsx("span", { className: "truncate", children: label })] }), loading ? (jsxs(Fragment$1, { children: [jsx(Skeleton, { className: "h-7 w-24" }), jsx(Skeleton, { className: "h-4 w-20" })] })) : (jsxs(Fragment$1, { children: [jsx("p", { className: "text-[26px] font-semibold leading-tight tracking-tight text-gray-900 tabular-nums dark:text-gray-100", children: value }), jsx("p", { className: "min-h-[1rem] truncate text-xs text-gray-500 tabular-nums dark:text-gray-400", children: sub })] }))] }));
|
|
241292
|
+
}
|
|
241293
|
+
function ViewLink({ label, onClick }) {
|
|
241294
|
+
if (!onClick)
|
|
241295
|
+
return null;
|
|
241296
|
+
return (jsxs(Button$1, { variant: "ghost", size: "sm", onClick: onClick, className: "h-8 gap-1 px-2 text-[13px] font-medium text-blue-600 hover:bg-blue-50 hover:text-blue-700 dark:text-blue-400 dark:hover:bg-blue-950", children: [label, jsx(ArrowRight, { className: "h-3.5 w-3.5", "aria-hidden": "true" })] }));
|
|
241297
|
+
}
|
|
241298
|
+
function SectionCard$1({ title, subtitle, aside, action, children, className, bodyClassName, testId, }) {
|
|
241299
|
+
const headingId = useId$2();
|
|
241300
|
+
return (jsxs("section", { className: cn(CARD, className), "aria-labelledby": headingId, "data-testid": testId, children: [jsxs("div", { className: "flex flex-wrap items-start justify-between gap-x-4 gap-y-2 px-5 pt-5", children: [jsxs("div", { className: "min-w-0", children: [jsx("h4", { id: headingId, className: "text-[15px] font-semibold text-gray-900 dark:text-gray-100", children: title }), subtitle && (jsx("p", { className: "mt-0.5 text-[13px] text-gray-500 dark:text-gray-400", children: subtitle }))] }), (aside || action) && (jsxs("div", { className: "flex items-center gap-3", children: [aside, action] }))] }), jsx("div", { className: cn('px-5 pb-5 pt-4', bodyClassName), children: children })] }));
|
|
241301
|
+
}
|
|
241302
|
+
/** A section's empty or failed state, sized to the card it sits in. */
|
|
241303
|
+
function SectionMessage({ icon: Icon, tone = 'neutral', children, }) {
|
|
241304
|
+
return (jsxs("p", { className: "flex items-center justify-center gap-2 py-8 text-center text-sm text-gray-500 dark:text-gray-400", role: tone === 'error' ? 'alert' : undefined, children: [jsx(Icon, { className: cn('h-4 w-4 flex-shrink-0', tone === 'error' ? 'text-red-600' : 'text-gray-400'), "aria-hidden": "true" }), children] }));
|
|
241305
|
+
}
|
|
241306
|
+
function RecordChip({ icon: Icon, label, onClick, }) {
|
|
241307
|
+
const className = cn('inline-flex h-9 items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 text-[13px] font-medium text-gray-700', 'dark:border-gray-800 dark:bg-gray-950 dark:text-gray-300', onClick &&
|
|
241308
|
+
'transition-colors hover:bg-gray-50 hover:text-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 dark:hover:bg-gray-900');
|
|
241309
|
+
const body = (jsxs(Fragment$1, { children: [jsx(Icon, { className: "h-4 w-4 flex-shrink-0 text-gray-400", "aria-hidden": "true" }), label, onClick && jsx(ArrowRight, { className: "h-3.5 w-3.5 text-gray-400", "aria-hidden": "true" })] }));
|
|
241310
|
+
return onClick ? (jsx("button", { type: "button", onClick: onClick, className: className, children: body })) : (jsx("span", { className: className, children: body }));
|
|
241311
|
+
}
|
|
241312
|
+
function ProgressBar({ value, label }) {
|
|
241313
|
+
return (jsx("span", { role: "progressbar", "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": value, className: "block h-1.5 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800", children: jsx("span", { className: "block h-full rounded-full", style: { width: `${value}%`, background: BAR_COLOR } }) }));
|
|
241314
|
+
}
|
|
241315
|
+
function StatusPill({ on }) {
|
|
241316
|
+
const t = useT();
|
|
241317
|
+
return (jsxs("span", { className: cn('inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-semibold', on
|
|
241318
|
+
? 'bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300'
|
|
241319
|
+
: 'bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-300'), children: [jsx("span", { className: cn('h-1.5 w-1.5 rounded-full', on ? 'bg-green-600' : 'bg-gray-400'), "aria-hidden": "true" }), on ? t('profileOverviewTab.stateOn') : t('profileOverviewTab.stateOff')] }));
|
|
241320
|
+
}
|
|
241321
|
+
/**
|
|
241322
|
+
* Completed / in progress / not started as a ring, with the counts beside it
|
|
241323
|
+
* so the shares are never read from colour alone.
|
|
241324
|
+
*/
|
|
241325
|
+
function CompletionRing({ summary }) {
|
|
241326
|
+
const t = useT();
|
|
241327
|
+
const radius = (RING_SIZE - RING_STROKE) / 2;
|
|
241328
|
+
const circumference = 2 * Math.PI * radius;
|
|
241329
|
+
const share = (count) => (summary.total ? count / summary.total : 0);
|
|
241330
|
+
const completed = share(summary.completed);
|
|
241331
|
+
const inProgress = share(summary.inProgress);
|
|
241332
|
+
// A 2px breathing space between adjacent fills, only when there are two.
|
|
241333
|
+
const gap = [completed, inProgress, share(summary.notStarted)].filter((s) => s > 0).length > 1 ? 2 : 0;
|
|
241334
|
+
const arc = (fraction, offset, color) => (jsx("circle", { cx: RING_SIZE / 2, cy: RING_SIZE / 2, r: radius, fill: "none", stroke: color, strokeWidth: RING_STROKE, strokeDasharray: `${Math.max(0, fraction * circumference - gap)} ${circumference}`, strokeDashoffset: -(offset * circumference + gap / 2) }));
|
|
241335
|
+
const legend = [
|
|
241336
|
+
{
|
|
241337
|
+
key: 'completed',
|
|
241338
|
+
label: t('profileOverviewTab.legendCompleted'),
|
|
241339
|
+
count: summary.completed,
|
|
241340
|
+
swatch: COMPLETED_COLOR,
|
|
241341
|
+
},
|
|
241342
|
+
{
|
|
241343
|
+
key: 'inProgress',
|
|
241344
|
+
label: t('profileOverviewTab.legendInProgress'),
|
|
241345
|
+
count: summary.inProgress,
|
|
241346
|
+
swatch: IN_PROGRESS_COLOR,
|
|
241347
|
+
},
|
|
241348
|
+
{
|
|
241349
|
+
key: 'notStarted',
|
|
241350
|
+
label: t('profileOverviewTab.legendNotStarted'),
|
|
241351
|
+
count: summary.notStarted,
|
|
241352
|
+
swatch: '',
|
|
241353
|
+
},
|
|
241354
|
+
];
|
|
241355
|
+
return (jsxs("div", { className: "flex items-center gap-5", "data-testid": "completion-ring", children: [jsxs("div", { className: "relative flex-shrink-0", style: { width: RING_SIZE, height: RING_SIZE }, children: [jsxs("svg", { width: RING_SIZE, height: RING_SIZE, viewBox: `0 0 ${RING_SIZE} ${RING_SIZE}`, role: "img", "aria-label": t('profileOverviewTab.ringAria', {
|
|
241356
|
+
completed: summary.completed,
|
|
241357
|
+
total: summary.total,
|
|
241358
|
+
}), className: "-rotate-90", children: [jsx("circle", { cx: RING_SIZE / 2, cy: RING_SIZE / 2, r: radius, fill: "none", strokeWidth: RING_STROKE, className: "stroke-gray-100 dark:stroke-gray-800" }), inProgress > 0 && arc(inProgress, completed, IN_PROGRESS_COLOR), completed > 0 && arc(completed, 0, COMPLETED_COLOR)] }), jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center", "aria-hidden": "true", children: [jsxs("span", { className: "text-xl font-semibold leading-none tabular-nums text-gray-900 dark:text-gray-100", children: [summary.completed, jsxs("span", { className: "text-sm font-medium text-gray-400", children: ["/", summary.total] })] }), jsx("span", { className: "mt-1 text-[11px] text-gray-500 dark:text-gray-400", children: t('profileOverviewTab.legendCompleted') })] })] }), jsx("ul", { className: "space-y-1.5 text-[13px]", children: legend.map((row) => (jsxs("li", { className: "flex items-center gap-2", children: [jsx("span", { className: cn('h-2.5 w-2.5 flex-shrink-0 rounded-[2px]', !row.swatch && 'bg-gray-200 dark:bg-gray-700'), style: row.swatch ? { background: row.swatch } : undefined, "aria-hidden": "true" }), jsx("span", { className: "text-gray-600 dark:text-gray-300", children: row.label }), jsx("span", { className: "ml-auto pl-3 font-semibold tabular-nums text-gray-900 dark:text-gray-100", children: row.count })] }, row.key))) })] }));
|
|
241359
|
+
}
|
|
241360
|
+
function CourseRow({ course, onOpen }) {
|
|
241361
|
+
var _a, _b, _c;
|
|
241362
|
+
const t = useT();
|
|
241363
|
+
const name = course.name || course.course_id;
|
|
241364
|
+
const percent = courseProgressPercent(course);
|
|
241365
|
+
const completed = isCourseCompleted(course);
|
|
241366
|
+
return (jsx("li", { children: jsxs("button", { type: "button", onClick: onOpen, "aria-label": t('profileOverviewTab.viewProgress', { name }), className: "flex w-full flex-col gap-2 rounded-lg px-3 py-2.5 text-left transition-colors hover:bg-gray-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 dark:hover:bg-gray-900", children: [jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [jsx("span", { className: "min-w-0 truncate text-sm font-medium text-gray-900 dark:text-gray-100", title: name, children: name }), completed ? (jsxs("span", { className: "inline-flex flex-shrink-0 items-center gap-1 rounded-md bg-blue-50 px-1.5 py-0.5 text-[11px] font-semibold text-blue-700 dark:bg-blue-950 dark:text-blue-300", children: [jsx(CircleCheck, { className: "h-3 w-3", "aria-hidden": "true" }), ((_a = course.completion) === null || _a === void 0 ? void 0 : _a.passed) && !((_b = course.completion) === null || _b === void 0 ? void 0 : _b.completed)
|
|
241367
|
+
? t('profileOverviewTab.coursePassed')
|
|
241368
|
+
: t('profileOverviewTab.courseCompleted')] })) : (jsxs("span", { className: "flex-shrink-0 text-[13px] tabular-nums text-gray-700 dark:text-gray-300", children: [percent, "%"] }))] }), jsx(ProgressBar, { value: percent, label: t('profileOverviewTab.courseProgressAria', { name, percent }) }), jsxs("div", { className: "flex flex-wrap gap-x-3 gap-y-0.5 text-xs text-gray-500 dark:text-gray-400", children: [jsx("span", { children: t('profileOverviewTab.courseEnrolledOn', {
|
|
241369
|
+
date: formatShortDate((_c = course.enrollment) === null || _c === void 0 ? void 0 : _c.created),
|
|
241370
|
+
}) }), course.time_spent_secs > 0 && (jsx("span", { children: t('profileOverviewTab.courseTimeSpent', {
|
|
241371
|
+
duration: formatDuration(course.time_spent_secs),
|
|
241372
|
+
}) }))] })] }) }));
|
|
241373
|
+
}
|
|
241374
|
+
/** Enrollment-only row, for when per-course progress could not be read. */
|
|
241375
|
+
function EnrollmentRow({ course }) {
|
|
241376
|
+
const t = useT();
|
|
241377
|
+
const name = course.course_name || course.course_id;
|
|
241378
|
+
return (jsxs("li", { className: "flex items-center justify-between gap-3 px-3 py-2.5", children: [jsxs("div", { className: "min-w-0", children: [jsx("p", { className: "truncate text-sm font-medium text-gray-900 dark:text-gray-100", title: name, children: name }), jsx("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: t('profileOverviewTab.courseEnrolledOn', { date: formatShortDate(course.created) }) })] }), jsx("span", { className: cn('flex-shrink-0 rounded-md px-1.5 py-0.5 text-[11px] font-semibold', course.active
|
|
241379
|
+
? 'bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300'
|
|
241380
|
+
: 'bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-300'), children: course.active
|
|
241381
|
+
? t('profileOverviewTab.enrollmentActive')
|
|
241382
|
+
: t('profileOverviewTab.enrollmentInactive') })] }));
|
|
241383
|
+
}
|
|
241384
|
+
function ConversationRow({ session }) {
|
|
241385
|
+
var _a;
|
|
241386
|
+
const t = useT();
|
|
241387
|
+
const title = conversationTitle(session, t('profileOverviewTab.conversation'));
|
|
241388
|
+
const agent = session.mentor_name || t('profileOverviewTab.agent');
|
|
241389
|
+
const turns = (_a = session.message_count_human) !== null && _a !== void 0 ? _a : 0;
|
|
241390
|
+
const labels = useMemo(() => ({
|
|
241391
|
+
positive: t('chatHistoryChatHistoryTab.positive'),
|
|
241392
|
+
neutral: t('chatHistoryChatHistoryTab.neutral'),
|
|
241393
|
+
negative: t('chatHistoryChatHistoryTab.negative'),
|
|
241394
|
+
userSentiment: t('chatHistoryChatHistoryTab.userSentiment'),
|
|
241395
|
+
}), [t]);
|
|
241396
|
+
return (jsxs("li", { className: "flex items-start gap-3 py-3 first:pt-0 last:pb-0", "data-testid": "overview-conversation", children: [jsx("span", { className: "flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400", "aria-hidden": "true", children: jsx(Bot, { className: "h-4 w-4" }) }), jsxs("div", { className: "min-w-0 flex-1", children: [jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [jsx("span", { className: "min-w-0 truncate text-sm font-medium text-gray-900 dark:text-gray-100", title: title, children: title }), jsx("span", { className: "flex-shrink-0 text-xs text-gray-500 dark:text-gray-400", children: formatRelative(session.inserted_at) })] }), jsxs("p", { className: "mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400", children: [agent, turns > 0 && ` · ${t('profileOverviewTab.messageCount', { count: turns })}`] }), jsx(ConversationTopics, { topics: session.topics, className: "mt-1.5", leading: jsx(ConversationSentiment, { sentiment: session.sentiment, labels: labels, compact: true }) })] })] }));
|
|
241397
|
+
}
|
|
241398
|
+
function MemoryRow({ memory }) {
|
|
241399
|
+
const t = useT();
|
|
241400
|
+
return (jsxs("li", { className: "flex items-start gap-3 py-3 first:pt-0 last:pb-0", "data-testid": "overview-memory-row", children: [jsx("span", { className: "mt-0.5 flex-shrink-0", children: memory.is_auto_generated ? (jsx(Bot, { className: "h-4 w-4 text-blue-500", "aria-label": t('memoryMemoryTab.autoGeneratedMemoryAriaLabel') })) : (jsx(User, { className: "h-4 w-4 text-gray-400", "aria-label": t('memoryMemoryTab.manuallyAddedMemoryAriaLabel') })) }), jsxs("div", { className: "min-w-0 flex-1", children: [jsx("p", { className: "line-clamp-2 text-sm text-gray-800 dark:text-gray-200", children: memory.content }), jsxs("p", { className: "mt-1 text-xs text-gray-400", children: [formatShortDate(memory.created_at), memory.is_auto_generated && (jsx("span", { className: "ml-2 inline-flex items-center rounded-full bg-blue-50 px-1.5 py-0.5 text-[10px] font-medium text-blue-600", children: t('memoryMemoryTab.autoBadge') }))] })] })] }));
|
|
241401
|
+
}
|
|
241402
|
+
function MemorySettingsList({ settings }) {
|
|
241403
|
+
const t = useT();
|
|
241404
|
+
const rows = [
|
|
241405
|
+
{
|
|
241406
|
+
key: 'capture',
|
|
241407
|
+
label: t('profileOverviewTab.memoryAutoCapture'),
|
|
241408
|
+
on: settings.auto_capture_enabled,
|
|
241409
|
+
},
|
|
241410
|
+
{
|
|
241411
|
+
key: 'responses',
|
|
241412
|
+
label: t('profileOverviewTab.memoryUseInResponses'),
|
|
241413
|
+
on: settings.use_memory_in_responses,
|
|
241414
|
+
},
|
|
241415
|
+
];
|
|
241416
|
+
return (jsx("ul", { className: "space-y-2", children: rows.map((row) => (jsxs("li", { className: "flex items-center justify-between gap-3 rounded-lg border border-gray-200 px-3 py-2 text-[13px] dark:border-gray-800", children: [jsx("span", { className: "text-gray-700 dark:text-gray-300", children: row.label }), jsx(StatusPill, { on: row.on })] }, row.key))) }));
|
|
241417
|
+
}
|
|
241418
|
+
function ListSkeleton({ rows = 3, height = 'h-12' }) {
|
|
241419
|
+
return (jsx("div", { className: "flex flex-col gap-3", children: Array.from({ length: rows }, (_, i) => (jsx(Skeleton, { className: cn('w-full', height) }, i))) }));
|
|
241420
|
+
}
|
|
241421
|
+
/**
|
|
241422
|
+
* The profile "Overview" tab: a one-screen digest of the user's activity —
|
|
241423
|
+
* course enrollments and progress, conversations with AI agents, AI spend and
|
|
241424
|
+
* what the AI remembers — each card summarising one of the fuller tabs and
|
|
241425
|
+
* linking to it.
|
|
241426
|
+
*/
|
|
241427
|
+
function OverviewTab({ org, username, isOwnProfile = true, sections, onNavigate, availableTabs, }) {
|
|
241428
|
+
var _a, _b, _c, _d;
|
|
241429
|
+
const t = useT();
|
|
241430
|
+
const data = useOverviewData(org, username, sections);
|
|
241431
|
+
const { learning, records, conversations, usage, memory } = data;
|
|
241432
|
+
const [selectedCourse, setSelectedCourse] = useState(null);
|
|
241433
|
+
const open = (target) => onNavigate && (!availableTabs || availableTabs.includes(target.tab))
|
|
241434
|
+
? () => onNavigate(target)
|
|
241435
|
+
: undefined;
|
|
241436
|
+
const unavailable = t('profileOverviewTab.unavailable');
|
|
241437
|
+
const series = useMemo(() => buildSpendSeries(usage.points, OVERVIEW_LLM_RANGE), [usage.points]);
|
|
241438
|
+
const toRanked = (rows, fallback) => foldTail(rows.map((row, index) => ({
|
|
241439
|
+
key: row.label || `unknown-${index}`,
|
|
241440
|
+
label: row.label || fallback,
|
|
241441
|
+
totalCost: row.totalCost,
|
|
241442
|
+
count: row.count,
|
|
241443
|
+
})), BREAKDOWN_ROWS, t('profileLlmUsage.otherRow'));
|
|
241444
|
+
const modelRows = useMemo(() => toRanked(usage.models.map((row) => ({ ...row, label: row.model })), t('profileLlmUsage.unknownModel')),
|
|
241445
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
241446
|
+
[usage.models, t]);
|
|
241447
|
+
const sumCost = (rows) => rows.reduce((sum, row) => sum + row.totalCost, 0);
|
|
241448
|
+
// ── Tiles ──────────────────────────────────────────────────────────────
|
|
241449
|
+
const tiles = [];
|
|
241450
|
+
if (learning.enabled) {
|
|
241451
|
+
const summary = learning.summary;
|
|
241452
|
+
tiles.push(jsx(StatTile, { icon: GraduationCap, label: t('profileOverviewTab.kpiEnrolled'), value: learning.isError ? '—' : formatInteger(learning.enrolledCount), sub: learning.isError
|
|
241453
|
+
? unavailable
|
|
241454
|
+
: summary
|
|
241455
|
+
? t('profileOverviewTab.kpiEnrolledSub', { count: summary.inProgress })
|
|
241456
|
+
: t('profileOverviewTab.kpiEnrolledSubAll'), loading: learning.isLoading }, "enrolled"), jsx(StatTile, { icon: CircleCheck, label: t('profileOverviewTab.kpiCompleted'), value: summary ? formatInteger(summary.completed) : '—', sub: summary
|
|
241457
|
+
? t('profileOverviewTab.kpiCompletedSub', {
|
|
241458
|
+
percent: percentOf(summary.completed, summary.total),
|
|
241459
|
+
})
|
|
241460
|
+
: unavailable, loading: learning.isLoading }, "completed"), jsx(StatTile, { icon: TrendingUp, label: t('profileOverviewTab.kpiProgress'), value: summary ? `${summary.averageProgress}%` : '—', sub: summary ? t('profileOverviewTab.kpiProgressSub') : unavailable, loading: learning.isLoading }, "progress"), jsx(StatTile, { icon: Clock, label: t('profileOverviewTab.kpiTimeSpent'), value: learning.isProgressUnavailable ? '—' : formatDuration(learning.timeSpentSecs), sub: learning.isProgressUnavailable ? unavailable : t('profileOverviewTab.kpiTimeSpentSub'), loading: learning.isLoading }, "time"));
|
|
241461
|
+
}
|
|
241462
|
+
if (conversations.enabled) {
|
|
241463
|
+
const last = conversations.recent[0];
|
|
241464
|
+
tiles.push(jsx(StatTile, { icon: MessageSquare, label: t('profileOverviewTab.kpiConversations'), value: conversations.isError ? '—' : formatInteger(conversations.count), sub: conversations.isError
|
|
241465
|
+
? unavailable
|
|
241466
|
+
: last
|
|
241467
|
+
? t('profileOverviewTab.kpiConversationsLast', {
|
|
241468
|
+
when: formatRelative(last.inserted_at),
|
|
241469
|
+
})
|
|
241470
|
+
: t('profileOverviewTab.kpiConversationsSub'), loading: conversations.isLoading }, "conversations"));
|
|
241471
|
+
}
|
|
241472
|
+
if (usage.enabled) {
|
|
241473
|
+
const totals = usage.summary;
|
|
241474
|
+
const failed = !!usage.error;
|
|
241475
|
+
tiles.push(jsx(StatTile, { icon: Coins, label: t('profileOverviewTab.kpiSpend'), value: failed ? '—' : formatCost$1((_a = totals === null || totals === void 0 ? void 0 : totals.totalCost) !== null && _a !== void 0 ? _a : 0), sub: failed ? unavailable : t('profileOverviewTab.kpiSpendSub'), loading: usage.isLoading }, "spend"), jsx(StatTile, { icon: Zap, label: t('profileOverviewTab.kpiRequests'), value: failed ? '—' : formatInteger((_b = totals === null || totals === void 0 ? void 0 : totals.count) !== null && _b !== void 0 ? _b : 0), sub: failed
|
|
241476
|
+
? unavailable
|
|
241477
|
+
: t('profileOverviewTab.kpiRequestsSub', {
|
|
241478
|
+
tokens: formatCompact((_c = totals === null || totals === void 0 ? void 0 : totals.totalTokens) !== null && _c !== void 0 ? _c : 0),
|
|
241479
|
+
}), loading: usage.isLoading }, "requests"));
|
|
241480
|
+
}
|
|
241481
|
+
if (memory.enabled) {
|
|
241482
|
+
tiles.push(jsx(StatTile, { icon: Archive, label: t('profileOverviewTab.kpiMemories'), value: memory.isError ? '—' : formatInteger(memory.count), sub: memory.isError
|
|
241483
|
+
? unavailable
|
|
241484
|
+
: memory.settings
|
|
241485
|
+
? memory.settings.auto_capture_enabled
|
|
241486
|
+
? t('profileOverviewTab.kpiMemoriesSubOn')
|
|
241487
|
+
: t('profileOverviewTab.kpiMemoriesSubOff')
|
|
241488
|
+
: t('profileOverviewTab.kpiMemoriesSub'), loading: memory.isLoading }, "memories"));
|
|
241489
|
+
}
|
|
241490
|
+
// ── Records strip: course records, shown only where there is something ─
|
|
241491
|
+
const chips = [];
|
|
241492
|
+
if (learning.enabled && records.credentialsCount) {
|
|
241493
|
+
chips.push(jsx(RecordChip, { icon: Award, label: t('profileOverviewTab.recordsCredentials', { count: records.credentialsCount }), onClick: open({ tab: 'education', educationSubTab: 'credentials' }) }, "credentials"));
|
|
241494
|
+
}
|
|
241495
|
+
if (learning.enabled && learning.programsCount) {
|
|
241496
|
+
chips.push(jsx(RecordChip, { icon: Layers, label: t('profileOverviewTab.recordsPrograms', { count: learning.programsCount }), onClick: open({ tab: 'gradebook', gradebookType: 'programs' }) }, "programs"));
|
|
241497
|
+
}
|
|
241498
|
+
if (learning.enabled && learning.pathwaysCount) {
|
|
241499
|
+
chips.push(jsx(RecordChip, { icon: Route, label: t('profileOverviewTab.recordsPathways', { count: learning.pathwaysCount }), onClick: open({ tab: 'gradebook', gradebookType: 'pathways' }) }, "pathways"));
|
|
241500
|
+
}
|
|
241501
|
+
// ── Learning section ───────────────────────────────────────────────────
|
|
241502
|
+
let learningBody = null;
|
|
241503
|
+
if (learning.enabled) {
|
|
241504
|
+
const detailed = learning.courses;
|
|
241505
|
+
const shown = detailed.length ? detailed.slice(0, OVERVIEW_COURSE_LIMIT) : [];
|
|
241506
|
+
const fallback = detailed.length ? [] : learning.enrolled.slice(0, OVERVIEW_COURSE_LIMIT);
|
|
241507
|
+
const total = detailed.length ? detailed.length : learning.enrolledCount;
|
|
241508
|
+
const remaining = Math.max(0, total - (shown.length || fallback.length));
|
|
241509
|
+
if (learning.isLoading) {
|
|
241510
|
+
learningBody = (jsxs("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-[auto_minmax(0,1fr)]", children: [jsx(Skeleton, { className: "h-[120px] w-[260px] rounded-full" }), jsx(ListSkeleton, { rows: 3, height: "h-14" })] }));
|
|
241511
|
+
}
|
|
241512
|
+
else if (learning.isError) {
|
|
241513
|
+
learningBody = (jsx(SectionMessage, { icon: CircleAlert, tone: "error", children: t('profileOverviewTab.learningError') }));
|
|
241514
|
+
}
|
|
241515
|
+
else if (!shown.length && !fallback.length) {
|
|
241516
|
+
learningBody = (jsx(SectionMessage, { icon: GraduationCap, children: t('profileOverviewTab.learningEmpty') }));
|
|
241517
|
+
}
|
|
241518
|
+
else {
|
|
241519
|
+
learningBody = (jsxs("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-[auto_minmax(0,1fr)]", children: [learning.summary && jsx(CompletionRing, { summary: learning.summary }), jsxs("div", { className: "min-w-0", children: [learning.isProgressUnavailable && (jsxs("p", { className: "mb-2 flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400", children: [jsx(CircleAlert, { className: "h-3.5 w-3.5", "aria-hidden": "true" }), t('profileOverviewTab.learningProgressUnavailable')] })), jsxs("ul", { className: "-mx-3 divide-y divide-gray-100 dark:divide-gray-800", children: [shown.map((course) => (jsx(CourseRow, { course: course, onOpen: () => setSelectedCourse({ id: course.course_id, name: course.name }) }, course.course_id))), fallback.map((course) => (jsx(EnrollmentRow, { course: course }, course.course_id)))] }), remaining > 0 && (jsx("p", { className: "mt-3 text-xs text-gray-500 dark:text-gray-400", children: t('profileOverviewTab.moreCourses', { count: remaining }) }))] })] }));
|
|
241520
|
+
}
|
|
241521
|
+
}
|
|
241522
|
+
// ── AI usage section ───────────────────────────────────────────────────
|
|
241523
|
+
const usageErrorCopy = (error) => error.kind === 'forbidden' || error.kind === 'not_found'
|
|
241524
|
+
? t('profileOverviewTab.usageForbidden')
|
|
241525
|
+
: t('profileOverviewTab.usageError');
|
|
241526
|
+
let usageBody = null;
|
|
241527
|
+
if (usage.enabled) {
|
|
241528
|
+
if (usage.isLoading) {
|
|
241529
|
+
usageBody = (jsxs("div", { className: "flex flex-1 flex-col gap-5", children: [jsx(Skeleton, { className: "h-[200px] w-full" }), jsx("div", { className: "mt-auto", children: jsx(BreakdownSkeleton, {}) })] }));
|
|
241530
|
+
}
|
|
241531
|
+
else if (usage.error) {
|
|
241532
|
+
usageBody = (jsx(SectionMessage, { icon: CircleAlert, tone: "error", children: usageErrorCopy(usage.error) }));
|
|
241533
|
+
}
|
|
241534
|
+
else if (usage.isEmpty) {
|
|
241535
|
+
usageBody = (jsx(SectionMessage, { icon: Inbox, children: t('profileOverviewTab.usageEmpty') }));
|
|
241536
|
+
}
|
|
241537
|
+
else {
|
|
241538
|
+
let plot;
|
|
241539
|
+
// A message (no spend, failed series) centres in the room the chart
|
|
241540
|
+
// would have taken; the chart itself keeps its natural height.
|
|
241541
|
+
let plotIsMessage = true;
|
|
241542
|
+
if (usage.isSpendLoading) {
|
|
241543
|
+
plot = jsx(Skeleton, { className: "h-[200px] w-full" });
|
|
241544
|
+
}
|
|
241545
|
+
else if (usage.spendError) {
|
|
241546
|
+
plot = (jsx(SectionMessage, { icon: CircleAlert, tone: "error", children: usageErrorCopy(usage.spendError) }));
|
|
241547
|
+
}
|
|
241548
|
+
else if (series.every((point) => point.totalCost === 0)) {
|
|
241549
|
+
// Requests happened but none were billed: a flat chart on a $1 axis
|
|
241550
|
+
// looks broken, so say it instead.
|
|
241551
|
+
plot = jsx(SectionMessage, { icon: Inbox, children: t('profileOverviewTab.usageNoSpend') });
|
|
241552
|
+
}
|
|
241553
|
+
else {
|
|
241554
|
+
plot = jsx(SpendChart, { points: series, granularity: "day" });
|
|
241555
|
+
plotIsMessage = false;
|
|
241556
|
+
}
|
|
241557
|
+
const breakdown = (title, rows, colorFor, testId) => (jsxs("div", { className: "min-w-0", "data-testid": testId, children: [jsx("h5", { className: "mb-3 text-[13px] font-semibold text-gray-700 dark:text-gray-300", children: title }), usage.isBreakdownLoading ? (jsx(BreakdownSkeleton, {})) : usage.breakdownError ? (jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.sectionError') })) : rows.length === 0 ? (jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t('profileLlmUsage.breakdownEmpty') })) : (jsx(RankedBars$1, { rows: rows, total: sumCost(rows), colorFor: colorFor }))] }));
|
|
241558
|
+
// The breakdowns sit at the foot of the card, so when the card
|
|
241559
|
+
// stretches to match its neighbour the space opens between the plot
|
|
241560
|
+
// and the breakdowns rather than piling up under them.
|
|
241561
|
+
usageBody = (jsxs("div", { className: "flex flex-1 flex-col gap-5", children: [jsx("div", { className: cn(plotIsMessage && 'flex flex-1 items-center justify-center'), children: plot }), jsx("div", { className: "mt-auto border-t border-gray-100 pt-4 dark:border-gray-800", children: breakdown(t('profileLlmUsage.byModelTitle'), modelRows, () => BAR_COLOR, 'overview-usage-by-model') })] }));
|
|
241562
|
+
}
|
|
241563
|
+
}
|
|
241564
|
+
// ── Conversations section ──────────────────────────────────────────────
|
|
241565
|
+
let conversationsBody = null;
|
|
241566
|
+
if (conversations.enabled) {
|
|
241567
|
+
if (conversations.isLoading) {
|
|
241568
|
+
conversationsBody = jsx(ListSkeleton, { rows: 3 });
|
|
241569
|
+
}
|
|
241570
|
+
else if (conversations.isError) {
|
|
241571
|
+
conversationsBody = (jsx(SectionMessage, { icon: CircleAlert, tone: "error", children: conversations.isForbidden
|
|
241572
|
+
? t('profileOverviewTab.conversationsForbidden')
|
|
241573
|
+
: t('profileOverviewTab.conversationsError') }));
|
|
241574
|
+
}
|
|
241575
|
+
else if (conversations.recent.length === 0) {
|
|
241576
|
+
conversationsBody = (jsx(SectionMessage, { icon: MessageSquare, children: t('profileOverviewTab.conversationsEmpty') }));
|
|
241577
|
+
}
|
|
241578
|
+
else {
|
|
241579
|
+
conversationsBody = (jsx("ul", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: conversations.recent.slice(0, OVERVIEW_CONVERSATION_LIMIT).map((session) => (jsx(ConversationRow, { session: session }, session.id))) }));
|
|
241580
|
+
}
|
|
241581
|
+
}
|
|
241582
|
+
// ── Memory section ─────────────────────────────────────────────────────
|
|
241583
|
+
let memoryBody = null;
|
|
241584
|
+
if (memory.enabled) {
|
|
241585
|
+
let list;
|
|
241586
|
+
if (memory.isLoading) {
|
|
241587
|
+
list = jsx(ListSkeleton, { rows: 3 });
|
|
241588
|
+
}
|
|
241589
|
+
else if (memory.isError) {
|
|
241590
|
+
list = (jsx(SectionMessage, { icon: CircleAlert, tone: "error", children: t('profileOverviewTab.memoryError') }));
|
|
241591
|
+
}
|
|
241592
|
+
else if (memory.recent.length === 0) {
|
|
241593
|
+
list = jsx(SectionMessage, { icon: Archive, children: t('profileOverviewTab.memoryEmpty') });
|
|
241594
|
+
}
|
|
241595
|
+
else {
|
|
241596
|
+
list = (jsx("ul", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: memory.recent.slice(0, OVERVIEW_MEMORY_LIMIT).map((item) => (jsx(MemoryRow, { memory: item }, item.id))) }));
|
|
241597
|
+
}
|
|
241598
|
+
memoryBody = memory.settings ? (jsxs("div", { className: "grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,1fr)_260px]", children: [jsx("div", { className: "min-w-0", children: list }), jsx(MemorySettingsList, { settings: memory.settings })] })) : (list);
|
|
241599
|
+
}
|
|
241600
|
+
const twoUp = usage.enabled && conversations.enabled;
|
|
241601
|
+
return (jsxs("div", { className: "flex flex-col gap-5", "data-testid": "profile-overview-tab", children: [jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [jsx("p", { className: "text-[13px] text-gray-500 dark:text-gray-400", children: isOwnProfile
|
|
241602
|
+
? t('profileOverviewTab.scopeSelf')
|
|
241603
|
+
: t('profileOverviewTab.scopeUser', { username }) }), jsx(Button$1, { variant: "outline", size: "icon", className: "h-9 w-9", onClick: data.refetch, disabled: data.isRefreshing, "aria-label": t('profileOverviewTab.refresh'), title: t('profileOverviewTab.refresh'), children: jsx(RefreshCw, { className: cn('h-4 w-4', data.isRefreshing && 'animate-spin'), "aria-hidden": "true" }) })] }), tiles.length > 0 && (jsx("div", { className: "grid grid-cols-2 gap-3 md:grid-cols-4", "data-testid": "overview-tiles", children: tiles })), ((learning.enabled && records.isLoading) || chips.length > 0) && (jsx("div", { role: "group", "aria-label": t('profileOverviewTab.recordsLabel'), className: "flex flex-wrap gap-2", "data-testid": "overview-records", children: records.isLoading ? (jsxs(Fragment$1, { children: [jsx(Skeleton, { className: "h-9 w-32 rounded-lg" }), jsx(Skeleton, { className: "h-9 w-32 rounded-lg" })] })) : (chips) })), learning.enabled && (jsx(SectionCard$1, { title: t('profileOverviewTab.learningTitle'), subtitle: t('profileOverviewTab.learningSubtitle'), action: jsx(ViewLink, { label: t('profileOverviewTab.viewGradebook'), onClick: open({ tab: 'gradebook', gradebookType: 'courses' }) }), testId: "overview-learning", children: learningBody })), (usage.enabled || conversations.enabled) && (jsxs("div", { className: cn('grid grid-cols-1 gap-5', twoUp && 'xl:grid-cols-2'), children: [usage.enabled && (jsx(SectionCard$1, { title: t('profileOverviewTab.usageTitle'), subtitle: t('profileOverviewTab.usageSubtitle'), aside: usage.summary && !usage.error && !usage.isLoading ? (jsx("span", { className: "text-[15px] font-semibold tabular-nums text-gray-900 dark:text-gray-100", children: formatCost$1(usage.summary.totalCost) })) : null, action: jsx(ViewLink, { label: t('profileOverviewTab.viewUsage'), onClick: open({ tab: 'llmUsage' }) }), className: "flex flex-col", bodyClassName: "flex flex-1 flex-col pt-2", testId: "overview-usage", children: usageBody })), conversations.enabled && (jsx(SectionCard$1, { title: t('profileOverviewTab.conversationsTitle'), subtitle: isOwnProfile
|
|
241604
|
+
? t('profileOverviewTab.conversationsSubtitle')
|
|
241605
|
+
: t('profileOverviewTab.conversationsSubtitlePreview'), action: jsx(ViewLink, { label: t('profileOverviewTab.viewHistory'), onClick: open({ tab: 'chatHistory' }) }), testId: "overview-conversations", children: conversationsBody }))] })), memory.enabled && (jsx(SectionCard$1, { title: t('profileOverviewTab.memoryTitle'), subtitle: isOwnProfile
|
|
241606
|
+
? t('profileOverviewTab.memorySubtitle')
|
|
241607
|
+
: t('profileOverviewTab.memorySubtitlePreview'), action: jsx(ViewLink, { label: t('profileOverviewTab.viewMemory'), onClick: open({ tab: 'memory' }) }), testId: "overview-memory", children: memoryBody })), jsx(EnrolledUserProgressModal, { open: !!selectedCourse, onOpenChange: (isOpen) => {
|
|
241608
|
+
if (!isOpen)
|
|
241609
|
+
setSelectedCourse(null);
|
|
241610
|
+
}, username: username, contentId: (_d = selectedCourse === null || selectedCourse === void 0 ? void 0 : selectedCourse.id) !== null && _d !== void 0 ? _d : '', contentName: selectedCourse === null || selectedCourse === void 0 ? void 0 : selectedCourse.name, metric: "course", tenantKey: org })] }));
|
|
241611
|
+
}
|
|
241612
|
+
|
|
240645
241613
|
const tabId = (id, mobile) => (mobile ? `${id}-tab-mobile` : `${id}-tab`);
|
|
240646
241614
|
/** Arrow/Home/End handling for the tab variant, with automatic activation. */
|
|
240647
241615
|
function useTabKeyboard(items, onSelect, mobile) {
|
|
@@ -240749,6 +241717,7 @@ function setCoworkEnabled(enabled) {
|
|
|
240749
241717
|
}
|
|
240750
241718
|
|
|
240751
241719
|
const TAB_DESC_KEYS = {
|
|
241720
|
+
overview: 'descOverview',
|
|
240752
241721
|
basic: 'descBasic',
|
|
240753
241722
|
social: 'descSocial',
|
|
240754
241723
|
education: 'descEducation',
|
|
@@ -240764,6 +241733,7 @@ const TAB_DESC_KEYS = {
|
|
|
240764
241733
|
};
|
|
240765
241734
|
// Neutral variants (no "your") shown when previewing another user's profile.
|
|
240766
241735
|
const TAB_DESC_PREVIEW_KEYS = {
|
|
241736
|
+
overview: 'descOverviewPreview',
|
|
240767
241737
|
basic: 'descBasicPreview',
|
|
240768
241738
|
social: 'descSocialPreview',
|
|
240769
241739
|
education: 'descEducationPreview',
|
|
@@ -240775,10 +241745,12 @@ const TAB_DESC_PREVIEW_KEYS = {
|
|
|
240775
241745
|
chatHistory: 'descChatHistoryPreview',
|
|
240776
241746
|
llmUsage: 'descLlmUsagePreview',
|
|
240777
241747
|
};
|
|
241748
|
+
// Only these SPAs have courses, so only they get the Overview's learning cards.
|
|
241749
|
+
const COURSE_SPAS = ['lms', 'skills'];
|
|
240778
241750
|
const LABEL_CLASS = 'text-sm font-medium text-gray-700 dark:text-gray-300';
|
|
240779
241751
|
const FIELD_CLASS = 'h-10 w-full bg-white border-gray-300 text-sm text-gray-900 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-900 dark:border-gray-700 dark:text-gray-100';
|
|
240780
241752
|
const PRIMARY_BUTTON_CLASS = 'bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500 disabled:bg-blue-600/60';
|
|
240781
|
-
function Profile({ tenant, username, tenants, onClose, customization = {}, isAdmin = false, targetTab = 'basic', onAccountDeleted, enableMemoryTab = false, showLlmUsageTab = true, localLLMProps, currentSPA = '', }) {
|
|
241753
|
+
function Profile({ tenant, username, tenants, onClose, customization = {}, isAdmin = false, targetTab = 'basic', onAccountDeleted, enableMemoryTab = false, showLlmUsageTab = true, showOverviewTab = true, localLLMProps, currentSPA = '', }) {
|
|
240782
241754
|
var _a, _b, _c, _d, _e, _f;
|
|
240783
241755
|
const t = useT();
|
|
240784
241756
|
const { data: memsearchStatus, isError: isMemsearchStatusError } = useGetMemsearchStatusQuery({ org: tenant, userId: username }, { skip: !enableMemoryTab });
|
|
@@ -240806,8 +241778,20 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
240806
241778
|
const isLlmUsageVisible = showLlmUsageTab && !isPureWatcher(rbacPermissions, viewerTenant);
|
|
240807
241779
|
// Add Advanced tab only when in Tauri app (Local Models is provided and available)
|
|
240808
241780
|
const isAdvancedAvailable = (localLLMProps === null || localLLMProps === void 0 ? void 0 : localLLMProps.isAvailable) === true;
|
|
241781
|
+
const isCourseSpa = COURSE_SPAS.includes(currentSPA.toLowerCase());
|
|
240809
241782
|
const TABS = [
|
|
240810
241783
|
{ id: 'basic', label: t('profileIndex.tabBasic'), icon: User, group: 'profile' },
|
|
241784
|
+
// The digest of every other tab, right after the landing tab.
|
|
241785
|
+
...(showOverviewTab
|
|
241786
|
+
? [
|
|
241787
|
+
{
|
|
241788
|
+
id: 'overview',
|
|
241789
|
+
label: t('profileIndex.tabOverview'),
|
|
241790
|
+
icon: LayoutDashboard,
|
|
241791
|
+
group: 'profile',
|
|
241792
|
+
},
|
|
241793
|
+
]
|
|
241794
|
+
: []),
|
|
240811
241795
|
{ id: 'social', label: t('profileIndex.tabSocial'), icon: Globe, group: 'profile' },
|
|
240812
241796
|
...(isGradebookEnabled
|
|
240813
241797
|
? [
|
|
@@ -240919,6 +241903,9 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
240919
241903
|
items: TABS.filter((tab) => tab.group === group),
|
|
240920
241904
|
}));
|
|
240921
241905
|
const [activeTab, setActiveTab] = useState(targetTab);
|
|
241906
|
+
// Content type the Gradebook opens on when the Overview sends the user
|
|
241907
|
+
// there; cleared again whenever a tab is picked from the navigation.
|
|
241908
|
+
const [gradebookType, setGradebookType] = useState();
|
|
240922
241909
|
const [isHovering, setIsHovering] = useState(false);
|
|
240923
241910
|
const fileInputRef = useRef(null);
|
|
240924
241911
|
// Dialog states for education and experience
|
|
@@ -240926,6 +241913,20 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
240926
241913
|
const [isExperienceDialogOpen, setIsExperienceDialogOpen] = useState(false);
|
|
240927
241914
|
const [educationSubTab, setEducationSubTab] = useState('education');
|
|
240928
241915
|
const [experienceSubTab, setExperienceSubTab] = useState('experience');
|
|
241916
|
+
const selectTab = (id) => {
|
|
241917
|
+
setGradebookType(undefined);
|
|
241918
|
+
setActiveTab(id);
|
|
241919
|
+
};
|
|
241920
|
+
// The Overview's links land on the exact sub-view: a Gradebook content
|
|
241921
|
+
// type or an Education sub-tab. A tab this profile lacks is ignored.
|
|
241922
|
+
const openFromOverview = (target) => {
|
|
241923
|
+
if (!TABS.some((tab) => tab.id === target.tab))
|
|
241924
|
+
return;
|
|
241925
|
+
if (target.educationSubTab)
|
|
241926
|
+
setEducationSubTab(target.educationSubTab);
|
|
241927
|
+
setGradebookType(target.gradebookType);
|
|
241928
|
+
setActiveTab(target.tab);
|
|
241929
|
+
};
|
|
240929
241930
|
const { basicForm, socialForm, isUserMetadataLoading, userMetadata, handleProfileImageUpload, isUploadingProfileImage, userMetadataEdx, isUserMetadataEdxLoading, FACEBOOK_URL_PREFIX, X_URL_PREFIX, LINKEDIN_URL_PREFIX, handleSocialLinkChange, socialValidators, basicValidators, } = useProfile(username, { platformKey: tenant });
|
|
240930
241931
|
useEffect(() => {
|
|
240931
241932
|
const firstInput = document.getElementById('fullName');
|
|
@@ -241023,7 +242024,7 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
241023
242024
|
return (jsxs(Fragment$1, { children: [jsxs("div", { className: "relative mb-0", children: [jsx("div", { className: "pointer-events-none absolute inset-y-0 left-2 flex items-center", "aria-hidden": "true", children: jsx("div", { className: cn('flex h-7 w-7 items-center justify-center rounded-md text-white', badge.className), children: jsx("span", { className: cn('font-bold', badge.textClassName), children: badge.text }) }) }), jsx(Input, { id: id, className: cn(FIELD_CLASS, 'pl-12'), placeholder: placeholder, value: field.state.value, onChange: (e) => handleSocialLinkChange(e.target.value, field.handleChange, prefix), disabled: socialForm.state.isSubmitting || isReadOnly })] }), jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: ((_a = field.state.meta.errors) === null || _a === void 0 ? void 0 : _a.length) ? 'alert' : undefined, "aria-live": "polite", children: field.state.meta.errors })] }));
|
|
241024
242025
|
},
|
|
241025
242026
|
})] }));
|
|
241026
|
-
return (jsxs(SettingsShell, { sidebarHeader: sidebarHeader, sidebarNav: jsx(SettingsSidebarNav, { groups: navGroups, activeId: activeTab, onSelect:
|
|
242027
|
+
return (jsxs(SettingsShell, { sidebarHeader: sidebarHeader, sidebarNav: jsx(SettingsSidebarNav, { groups: navGroups, activeId: activeTab, onSelect: selectTab, variant: "tabs", ariaLabel: t('profileIndex.ariaProfileTabs') }), mobileHeader: mobileHeader, mobileNav: jsx(SettingsMobileNav, { groups: navGroups, activeId: activeTab, onSelect: selectTab, variant: "tabs", ariaLabel: t('profileIndex.ariaProfileTabsMobile') }),
|
|
241027
242028
|
// Render the tab's label rather than the id — every label is already
|
|
241028
242029
|
// cased correctly.
|
|
241029
242030
|
title: (_f = (_e = TABS.find((tab) => tab.id === activeTab)) === null || _e === void 0 ? void 0 : _e.label) !== null && _f !== void 0 ? _f : activeTab, description: tabDescription(activeTab), panelProps: {
|
|
@@ -241035,7 +242036,15 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
241035
242036
|
// The education tab will handle refetching
|
|
241036
242037
|
} }), jsx(ExperienceDialog, { open: isExperienceDialogOpen, onOpenChange: setIsExperienceDialogOpen, experience: undefined, org: tenant, username: username, onComplete: () => {
|
|
241037
242038
|
// The experience tab will handle refetching
|
|
241038
|
-
} }), jsx(ToastProvider, {})] }), children: [activeTab === '
|
|
242039
|
+
} }), jsx(ToastProvider, {})] }), children: [showOverviewTab && activeTab === 'overview' && (jsx(OverviewTab, { org: tenant, username: username, isOwnProfile: !isReadOnly,
|
|
242040
|
+
// Each card mirrors a tab, so a card only appears where its tab does;
|
|
242041
|
+
// the learning cards also need an SPA that has courses at all.
|
|
242042
|
+
sections: {
|
|
242043
|
+
learning: isCourseSpa,
|
|
242044
|
+
chatHistory: isChatHistoryVisible,
|
|
242045
|
+
llmUsage: isLlmUsageVisible,
|
|
242046
|
+
memory: isMemoryEnabled,
|
|
242047
|
+
}, availableTabs: TABS.map((tab) => tab.id), onNavigate: openFromOverview })), activeTab === 'basic' && (jsxs("form", { onSubmit: (formEvent) => {
|
|
241039
242048
|
formEvent.preventDefault();
|
|
241040
242049
|
formEvent.stopPropagation();
|
|
241041
242050
|
if (isReadOnly)
|
|
@@ -241102,7 +242111,9 @@ function Profile({ tenant, username, tenants, onClose, customization = {}, isAdm
|
|
|
241102
242111
|
prefix: X_URL_PREFIX,
|
|
241103
242112
|
badge: { className: 'bg-black', text: 'X', textClassName: 'text-sm' },
|
|
241104
242113
|
validator: socialValidators.x,
|
|
241105
|
-
})] })), activeTab === 'education' && (jsxs(Tabs, { value: educationSubTab, onValueChange: setEducationSubTab, className: "space-y-4", children: [jsxs("div", { className: "flex items-center justify-between gap-3", children: [jsxs(TabsList, { children: [jsx(TabsTrigger, { value: "education", children: t('profileIndex.tabEducation') }), jsx(TabsTrigger, { value: "credentials", children: t('gradebookGradebookTab.typeCredentials') }), jsx(TabsTrigger, { value: "skills", children: t('gradebookGradebookTab.typeSkills') })] }), headerAddButton] }), jsx(TabsContent, { value: "education", children: jsx(EducationTab, { org: tenant, username: username }) }), jsx(TabsContent, { value: "credentials", children: jsx(CredentialsList, { org: tenant, username: username }) }), jsx(TabsContent, { value: "skills", children: jsx(SkillsList, { org: tenant, username: username }) })] })), activeTab === 'gradebook' && jsx(GradebookTab
|
|
242114
|
+
})] })), activeTab === 'education' && (jsxs(Tabs, { value: educationSubTab, onValueChange: setEducationSubTab, className: "space-y-4", children: [jsxs("div", { className: "flex items-center justify-between gap-3", children: [jsxs(TabsList, { children: [jsx(TabsTrigger, { value: "education", children: t('profileIndex.tabEducation') }), jsx(TabsTrigger, { value: "credentials", children: t('gradebookGradebookTab.typeCredentials') }), jsx(TabsTrigger, { value: "skills", children: t('gradebookGradebookTab.typeSkills') })] }), headerAddButton] }), jsx(TabsContent, { value: "education", children: jsx(EducationTab, { org: tenant, username: username }) }), jsx(TabsContent, { value: "credentials", children: jsx(CredentialsList, { org: tenant, username: username }) }), jsx(TabsContent, { value: "skills", children: jsx(SkillsList, { org: tenant, username: username }) })] })), activeTab === 'gradebook' && (jsx(GradebookTab
|
|
242115
|
+
// Remount on a new preselection so the picker starts there.
|
|
242116
|
+
, { org: tenant, username: username, initialType: gradebookType }, gradebookType !== null && gradebookType !== void 0 ? gradebookType : 'courses')), activeTab === 'experience' && (jsxs(Tabs, { value: experienceSubTab, onValueChange: setExperienceSubTab, className: "space-y-4", children: [jsxs("div", { className: "flex items-center justify-between gap-3", children: [jsxs(TabsList, { children: [jsx(TabsTrigger, { value: "experience", children: t('profileIndex.tabExperience') }), jsx(TabsTrigger, { value: "resume", children: t('profileIndex.tabResume') })] }), headerAddButton] }), jsx(TabsContent, { value: "experience", children: jsx(ExperienceTab, { org: tenant, username: username }) }), jsx(TabsContent, { value: "resume", children: jsx(ResumeTab, { org: tenant, username: username }) })] })), activeTab === 'purchases' && jsx(PurchasesTab, { org: tenant, username: username }), activeTab === 'memory' && jsx(MemoryTab, { org: tenant, username: username }), activeTab === 'privacy' && jsx(ChatPrivacyTab, { org: tenant, username: username }), isChatHistoryVisible && activeTab === 'chatHistory' && (jsx(ChatHistoryTab, { org: tenant, username: username })), isLlmUsageVisible && activeTab === 'llmUsage' && (jsx(LlmUsageTab, { org: tenant, username: username, isOwnProfile: !isReadOnly })), !isReadOnly && activeTab === 'security' && (jsx(Security, { app: currentSPA || '', email: (userMetadata === null || userMetadata === void 0 ? void 0 : userMetadata.email) || '', platformKey: tenant, onAccountDeleted: onAccountDeleted })), activeTab === 'advanced' && localLLMProps && (jsx("div", { className: "space-y-6", children: jsx(LocalModelsContent, { isAvailable: localLLMProps.isAvailable, state: localLLMProps.state, ollamaStatus: localLLMProps.ollamaStatus, systemMemory: localLLMProps.systemMemory, isUsingFoundry: localLLMProps.isUsingFoundry, foundryModels: localLLMProps.foundryModels, selectedFoundryModel: localLLMProps.selectedFoundryModel, foundryStatus: localLLMProps.foundryStatus, onStartDownload: localLLMProps.onStartDownload, onCancelDownload: localLLMProps.onCancelDownload, onInstallOllama: localLLMProps.onInstallOllama, onStopManager: localLLMProps.onStopManager, onInstallFoundry: localLLMProps.onInstallFoundry, onCheckStatus: localLLMProps.onCheckStatus, onResetState: localLLMProps.onResetState, onSelectFoundryModel: localLLMProps.onSelectFoundryModel }) }))] }));
|
|
241106
242117
|
}
|
|
241107
242118
|
|
|
241108
242119
|
function CSVEditor({ csvData, onSave, onCancel }) {
|
|
@@ -249922,6 +250933,38 @@ const PlatformMembershipContent = ({ platformKey, authURL, }) => {
|
|
|
249922
250933
|
return (jsxs("div", { className: "flex items-center justify-between rounded-lg border px-6 py-6", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-[#646464]", children: t('advancedPlatformMembership.publicRegistrationLabel') }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { "aria-label": t('advancedPlatformMembership.infoAriaLabel'), className: "hidden sm:block", children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "rounded-lg bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300 z-50", children: jsx("p", { children: t('advancedPlatformMembership.infoTooltip') }) })] }) }), (membershipData === null || membershipData === void 0 ? void 0 : membershipData.allow_self_linking) && (jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { onClick: handleCopyToClipboard, "aria-label": t('advancedPlatformMembership.copyAriaLabel'), className: "cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800 p-1 rounded transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1", children: jsx(Copy, { className: "h-4 w-4 text-gray-400 hover:text-blue-500" }) }), jsx(TooltipContent, { className: "rounded-lg bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300 z-50", children: jsx("p", { children: t('advancedPlatformMembership.copyTooltip') }) })] }) }))] }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Switch, { checked: membershipData === null || membershipData === void 0 ? void 0 : membershipData.allow_self_linking, onCheckedChange: handleToggleMembership, disabled: isUpdating, "aria-label": `${t('advancedPlatformMembership.switchAriaLabel')} ${(membershipData === null || membershipData === void 0 ? void 0 : membershipData.allow_self_linking) ? t('advancedPlatformMembership.switchEnabled') : t('advancedPlatformMembership.switchDisabled')}`, className: "cursor-pointer data-[state=checked]:bg-blue-500" }), isUpdating && (jsx("div", { className: "w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full animate-spin" }))] })] }));
|
|
249923
250934
|
};
|
|
249924
250935
|
|
|
250936
|
+
/**
|
|
250937
|
+
* Toggles the tenant's SEO discoverability (`allow_seo_discoverability`) on the
|
|
250938
|
+
* platform membership config — the same config the public endpoint exposes, so
|
|
250939
|
+
* apps and the sitemap can tell which tenants opted in. Rendered under Public
|
|
250940
|
+
* Registration in the Advanced settings.
|
|
250941
|
+
*/
|
|
250942
|
+
const PlatformSeoDiscoverabilityContent = ({ platformKey, }) => {
|
|
250943
|
+
var _a;
|
|
250944
|
+
const t = useT();
|
|
250945
|
+
const [updatePlatformMembership, { isLoading: isUpdating }] = useUpdatePlatformMembershipMutation();
|
|
250946
|
+
const { data: membershipData, isLoading: isLoadingMembership } = useGetPlatformMembershipQuery({
|
|
250947
|
+
platform_key: platformKey,
|
|
250948
|
+
});
|
|
250949
|
+
const handleToggle = async (checked) => {
|
|
250950
|
+
try {
|
|
250951
|
+
await updatePlatformMembership({
|
|
250952
|
+
platform_key: platformKey,
|
|
250953
|
+
allow_seo_discoverability: checked,
|
|
250954
|
+
}).unwrap();
|
|
250955
|
+
toast.success(t('advancedSeoDiscoverability.toastUpdateSuccess'));
|
|
250956
|
+
}
|
|
250957
|
+
catch (error) {
|
|
250958
|
+
console.error(JSON.stringify(error));
|
|
250959
|
+
toast.error(t('advancedSeoDiscoverability.toastUpdateError'));
|
|
250960
|
+
}
|
|
250961
|
+
};
|
|
250962
|
+
if (isLoadingMembership) {
|
|
250963
|
+
return (jsx("div", { className: "rounded-lg border px-6 py-6", style: { borderColor: 'oklch(.922 0 0)' }, children: jsx("div", { className: "animate-pulse", children: jsxs("div", { className: "flex items-center justify-between", children: [jsx("div", { className: "h-4 bg-gray-200 rounded w-1/3" }), jsx("div", { className: "h-6 w-11 bg-gray-200 rounded" })] }) }) }));
|
|
250964
|
+
}
|
|
250965
|
+
return (jsxs("div", { className: "flex items-center justify-between rounded-lg border px-6 py-6", style: { borderColor: 'oklch(.922 0 0)' }, children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-sm font-medium text-[#646464]", children: t('advancedSeoDiscoverability.label') }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { "aria-label": t('advancedSeoDiscoverability.infoAriaLabel'), className: "hidden sm:block", children: jsx(Info$3, { className: "h-4 w-4 text-gray-400" }) }), jsx(TooltipContent, { className: "rounded-lg bg-gray-700 px-3 py-2 text-sm font-medium text-white shadow-sm transition-opacity duration-300 z-50 max-w-xs", children: jsx("p", { children: t('advancedSeoDiscoverability.infoTooltip') }) })] }) })] }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Switch, { checked: (_a = membershipData === null || membershipData === void 0 ? void 0 : membershipData.allow_seo_discoverability) !== null && _a !== void 0 ? _a : false, onCheckedChange: handleToggle, disabled: isUpdating, "aria-label": `${t('advancedSeoDiscoverability.switchAriaLabel')} ${(membershipData === null || membershipData === void 0 ? void 0 : membershipData.allow_seo_discoverability) ? t('advancedSeoDiscoverability.switchEnabled') : t('advancedSeoDiscoverability.switchDisabled')}`, className: "cursor-pointer data-[state=checked]:bg-blue-500" }), isUpdating && (jsx("div", { className: "w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full animate-spin" }))] })] }));
|
|
250966
|
+
};
|
|
250967
|
+
|
|
249925
250968
|
/**
|
|
249926
250969
|
* Paste-tolerant: a copied address brings a scheme, a path and often a `www.`
|
|
249927
250970
|
* with it, and a typed one may carry capitals. The backend takes only a
|
|
@@ -252163,7 +253206,7 @@ function AdvancedTab({ platformKey, username, currentSPA, authURL, currentPlatfo
|
|
|
252163
253206
|
await handleToggleSetting(metadataItem.slug, currentValue);
|
|
252164
253207
|
}, disabled: isUpdatingTenantMetadata, "aria-label": `${metadataItem.label} ${currentValue ? t('advancedAdvanced.enabled') : t('advancedAdvanced.disabled')}`, className: "cursor-pointer data-[state=checked]:bg-blue-500" }), isUpdatingTenantMetadata && (jsx("div", { className: "w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full animate-spin" }))] })) })] }, metadataItem.slug));
|
|
252165
253208
|
}) })] }, spa)));
|
|
252166
|
-
})()), jsx(StartScreenContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(ContentViewWrapper, { currentSPA: currentSPA, spas: ['mentor'], children: jsx(ChatAreaWidth, { chatAreaSize: metadata === null || metadata === void 0 ? void 0 : metadata.chat_area_size, isUpdating: isUpdatingTenantMetadata, onUpdate: handleChatAreaSizeUpdate, onError: handleChatAreaSizeError }) }), jsx(AuthSpaCustomizationContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(AdvancedCssContent, { platformKey: platformKey, currentSPA: currentSPA || '' }), jsx(RecommendationSystemPromptsContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(StudentMentorCreationContent, { platformKey: platformKey }), jsx(ChatPrivacyContent, { platformKey: platformKey, username: username }), jsx(MemsearchConfigContent, { platformKey: platformKey, userId: username }), jsx(PlatformMembershipContent, { platformKey: platformKey, authURL: authURL }), jsx(CustomDomainsContent, { platformKey: platformKey, username: username, currentSPA: currentSPA || '', currentPlatformBaseDomain: currentPlatformBaseDomain || '' }), jsx(SmtpContent, { platformKey: platformKey }), (currentSPA === null || currentSPA === void 0 ? void 0 : currentSPA.includes('skills')) && (jsxs(Fragment$1, { children: [jsx(ProviderConfigContent, { platformKey: platformKey, username: username }), jsx(ExternalMappingContent, { platformKey: platformKey, username: username })] }))] }) }));
|
|
253209
|
+
})()), jsx(StartScreenContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(ContentViewWrapper, { currentSPA: currentSPA, spas: ['mentor'], children: jsx(ChatAreaWidth, { chatAreaSize: metadata === null || metadata === void 0 ? void 0 : metadata.chat_area_size, isUpdating: isUpdatingTenantMetadata, onUpdate: handleChatAreaSizeUpdate, onError: handleChatAreaSizeError }) }), jsx(AuthSpaCustomizationContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(AdvancedCssContent, { platformKey: platformKey, currentSPA: currentSPA || '' }), jsx(RecommendationSystemPromptsContent, { platformKey: platformKey, currentSPA: currentSPA }), jsx(StudentMentorCreationContent, { platformKey: platformKey }), jsx(ChatPrivacyContent, { platformKey: platformKey, username: username }), jsx(MemsearchConfigContent, { platformKey: platformKey, userId: username }), jsx(PlatformMembershipContent, { platformKey: platformKey, authURL: authURL }), jsx(PlatformSeoDiscoverabilityContent, { platformKey: platformKey }), jsx(CustomDomainsContent, { platformKey: platformKey, username: username, currentSPA: currentSPA || '', currentPlatformBaseDomain: currentPlatformBaseDomain || '' }), jsx(SmtpContent, { platformKey: platformKey }), (currentSPA === null || currentSPA === void 0 ? void 0 : currentSPA.includes('skills')) && (jsxs(Fragment$1, { children: [jsx(ProviderConfigContent, { platformKey: platformKey, username: username }), jsx(ExternalMappingContent, { platformKey: platformKey, username: username })] }))] }) }));
|
|
252167
253210
|
}
|
|
252168
253211
|
|
|
252169
253212
|
function StripeConnect({ platformKey }) {
|