@iblai/iblai-js 1.26.4 → 1.26.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default, { useState, useEffect, forwardRef, createElement as createElement$3, useLayoutEffect, createContext, useContext, useMemo, useCallback, useReducer, useRef, useImperativeHandle, isValidElement, Children, PureComponent, cloneElement, Component as Component$1, useId as useId$2, useDebugValue, lazy, Suspense } from 'react';
|
|
4
4
|
import * as dataLayer from '@iblai/data-layer';
|
|
5
|
-
import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, isPoliciesResponse, platformApiSlice, featureTags, useLazyGetRbacTeamsAccessListQuery, useCreateRbacTeamsAccessMutation, useGetRbacGroupsQuery, usePlatformUserGroupsQuery, useCreateRbacGroupMutation, useUpdateRbacGroupMutation, useDeleteRbacGroupMutation, useCreatePlatformUserGroupMutation, useUpdatePlatformUserGroupMutation, useDeletePlatformUserGroupMutation, useGetRbacGroupDetailsQuery, useGetPlatformUserGroupDetailsQuery, useGetRbacPermissionsMutation, useGetRbacRolesQuery, useCreateRbacRoleMutation, useUpdateRbacRoleMutation, useDeleteRbacRoleMutation, useGetRbacRoleDetailsQuery, useGetRbacActionsDefinitionQuery, useGetRbacPoliciesQuery, useCreateRbacPolicyMutation, useUpdateRbacPolicyMutation, useDeleteRbacPolicyMutation, useGetRbacPolicyDetailsQuery, useGetWatchedGroupsQuery, useCreateWatchedGroupMutation, useUpdateWatchedGroupMutation, useDeleteWatchedGroupMutation, useAddWatchedUserMutation, useRemoveWatchedUserMutation, useAddWatcherMutation, useUpdateWatcherMutation, useDeleteWatcherMutation, useGetWatchedUsersQuery, useGetWatchersQuery, WATCHER_NOTIFICATION_EVENTS, WATCHER_NOTIFICATION_EVENT_LABELS, useDeleteApiKeyMutation, useGetApiKeysQuery, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useGetLlmsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, useGetCustomDomainsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useUpdateTenantMetadataMutation, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetCustomMentorsQuery, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useGetAiSearchMentorsQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useGetVectorDocumentsQuery, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useDeleteMentorMemoryMutation, useUpdateMentorMemoryMutation, useCreateMentorMemoryMutation, useLazyGetConnectedServiceAuthUrlQuery, useStarMentorMutation, useUnstarMentorMutation, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, useGetVoicesQuery, useGetVoiceQuery, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, useGetMentorPublicSettingsQuery, useGetChatHistoryFilterQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation } from '@iblai/data-layer';
|
|
5
|
+
import { useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useGetLearnerDetailsQuery, useGetUserEnrolledCoursesQuery, useGetUserEnrolledProgramsQuery, useGetUserCatalogPathwaysQuery, useGetUsersAsAssertionsQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useUpdateUserRoleMutation, useUpdateUserStatusMutation, useUpdatePlatformUserRoleWithPoliciesMutation, usePlatformUsersQuery, 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, useDeleteApiKeyMutation, useGetApiKeysQuery, useCreateApiKeyMutation, useCreateLLMCredentialMutation, useGetCredentialsSchemaQuery, useGetMaskedLLMCredentialsQuery, useGetLlmsQuery, useDeleteIntegrationCredentialMutation, useDeleteCredentialMutation, useCreateIntegrationCredentialMutation, useGetIntegrationCredentialsSchemaQuery, useGetMaskedIntegrationCredentialsQuery, useGetAccountBillingInfoQuery, useUpdateAutoRechargeInfoMutation, useTriggerAutoRechargeMutation, useCreateStripeCustomerPortalMutation, useSetPlatformConfigurationsMutation, useGetPlatformConfigurationsQuery, useUpdatePlatformMembershipMutation, useGetPlatformMembershipQuery, useGetCustomDomainsQuery, useCreateCustomDomainMutation, useDeleteCustomDomainMutation, useGetStudentMentorCreationStatusQuery, useSetStudentMentorCreationStatusMutation, coreApiSlice, recommendationPromptTypeEnum, useGetRecommendedPromptsListQuery, useCreateRecommendedPromptMutation, useUpdateRecommendedPromptMutation, useDeleteRecommendedPromptMutation, useLazyGetPublicPlatformImageAssetFileUrlQuery, useUpdateTenantMetadataMutation, useCreatePlatformImageAssetMutation, useGetProviderConfigQuery, useCreateProviderConfigMutation, useDeleteProviderConfigMutation, useGetExternalMappingQuery, useGetCredentialsListQuery, useCreateExternalMappingMutation, useDeleteExternalMappingMutation, useGetMemsearchConfigQuery, useUpdateMemsearchConfigMutation, useGetCustomMentorsQuery, useGetStripeConnectStatusQuery, useStartStripeConnectOnboardingMutation, useLazyGetStripeConnectDashboardQuery, useGetAiSearchMentorsQuery, useListPaywallsQuery, useListPricesQuery, useCreatePriceMutation, useUpdatePriceMutation, useDeletePriceMutation, useGetPaywallConfigQuery, useEnablePaywallMutation, useUpdatePaywallMutation, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useUpdateUserProjectMutation, useGetTrainingDocumentsQuery, useGetVectorDocumentsQuery, useGetMentorMemoriesListQuery, useGetMemoryCategoriesAdminQuery, useDeleteMentorMemoryMutation, useUpdateMentorMemoryMutation, useCreateMentorMemoryMutation, useLazyGetConnectedServiceAuthUrlQuery, useStarMentorMutation, useUnstarMentorMutation, useCreateUserProjectMutation, useDeleteUserProjectMutation, useGetUserProjectDetailsQuery, useEditTrainingDocumentMutation, useAddTrainingDocumentMutation, useLazyGetCredentialsQuery, useGetMentorSettingsQuery, useEditMentorMutation, useUploadLightLogoMutation, useUploadDarkLogoMutation, useUpdatePlatformInfoMutation, LOGO_ENDPOINTS, useCreateEvalDatasetMutation, useAddEvalDatasetItemsMutation, useUploadEvalDatasetCsvMutation, useDeleteEvalDatasetItemMutation, useListEvalDatasetItemsQuery, evalTotalPages, useListEvalDatasetsQuery, useGetUserProjectsQuery, useCreateSessionIdMutation, useGetMentorCategoriesQuery, useDeleteMentorMutation, useForkMentorMutation, useGetToolsQuery, useLazyGetMCPServersQuery, useOauthFindMutation, useLazyStartOAuthFlowQuery, useCreateMCPServerMutation, usePartialUpdateMCPServerMutation, useCreateMCPServerConnectionMutation, usePatchMCPServerConnectionMutation, useGetConnectedServicesQuery, useGetMCPServersQuery, useGetMCPServerConnectionsQuery, useUpdateMCPServerMutation, useDeleteMCPServerMutation, useEditMentorJsonMutation, useDisconnectServiceMutation, useGetPromptCategoriesQuery, PRIVACY_ACTIONS, PRIVACY_ENTITY_TYPES, useGetVoicesQuery, useGetVoiceQuery, useGetCallConfigurationsQuery, useCreateCallConfigurationMutation, useUpdateCallConfigurationMutation, useGetMentorPublicSettingsQuery, useGetChatHistoryFilterQuery, useGetChatHistoryQuery, useGetMentorSummariesQuery, useGetConversationMemoriesQuery, useCreateLtiMentorMutation, useUpdateLtiMentorMutation, useGetLtiMentorsQuery, useCreateLtiKeyMutation, useUpdateLtiKeyMutation, useDeleteLtiKeyMutation, useGetLtiKeysQuery, useCreateLtiToolMutation, useUpdateLtiToolMutation, useGetLtiToolsQuery, useGetPlatformInfoQuery, useCreatePromptMutation, useGetPromptsSearchQuery, useUpdatePromptMutation, useCreateRedirectTokenMutation, useGetShareableLinkQuery, useCreateShareableLinkMutation, useUpdateShareableLinkMutation, useCreateDisclaimerMutation, useUpdateDisclaimerMutation, useGetDisclaimersQuery, useUpdateRbacMentorAccessMutation, useGetRbacMentorAccessListQuery, useStartEvalRunMutation, useEvaluateEvalRunMutation, useGetEvalRunQuery, useDeleteEvalScoreMutation, useListEvalRunJudgesQuery, useCreateEvalScoreMutation, useDeleteEvalRunMutation, useExportEvalRunMutation, useListEvalRunsQuery, useLazyGetEvalRunQuery, evaluationsApiSlice, EVALUATIONS_TAGS, useGetPersonnalizedMentorsQuery, useCreateCallCredentialsMutation, useGetGuidedPromptsQuery, useUpdateChatSessionSharedMutation, useUpdateMessageFeedbackMutation, useLazyGetPromptsSearchQuery, useLazyGetGuidedPromptsQuery, useGetPublicMentorsQuery, useGetPeriodicAgentsQuery, useGetPeriodicAgentLogsListQuery, useCreatePeriodicAgentMutation, useDeletePeriodicAgentMutation, useDeletePromptMutation, useDeleteTrainingDocumentMutation, useGetTrainingDocumentRetrainScheduleQuery, useCreateTrainingDocumentRetrainScheduleMutation, useCreateMemoryCategoryMutation, useUpdateMemoryCategoryMutation, useDeleteMemoryCategoryMutation, useUpdateArtifactMutation, useLazyGetArtifactVersionQuery, useLazyListArtifactVersionsQuery, useSetCurrentVersionMutation, useListArtifactVersionsQuery, useLazyGetArtifactQuery, useLazyListArtifactsQuery, useEditSessionMutation } from '@iblai/data-layer';
|
|
6
6
|
import { getInitials, useTenantMetadata, WithPermissions, useStripeUpgrade, openExternalUrl, CHAT_AREA_SIZE, isAlphaNumeric32, checkRbacPermission, selectNumberOfActiveChatMessages, useUsername, selectStreaming, isLoggedIn, TOOLS, isSafariBrowser, useShowAttachment, useShowVoiceCall, useShowVoiceRecorder, useMentorSettings, selectShowingSharedChat, selectRbacPermissions, useShowFreeTrialDialog, useEmbedMode, chatInputSliceSelectors, useResponsive, useAccessingPublicRoute, useVisitingTenant, useModelFileUploadCapabilities, useChatFileUpload, useVoiceChat, selectAttachedFiles, MENTOR_CHAT_DOCUMENTS_EXTENSIONS, removeFile, chatInputSliceActions, chatActions, WithFormPermissions, useTenantContext, TimeTracker, advancedTabsProperties, defaultSessionIds, ANONYMOUS_USERNAME as ANONYMOUS_USERNAME$2, redirectToAuthSpaJoinTenant, selectActiveTab, useAxdToken, useWelcomeMessage, markdownToPlainText, useCachedSessionId, use402ErrorCheck, selectTokenEnabled, selectToken, useServiceWorker, useUserAgreement, useAdvancedChat, sendMessageToParentWebsite, useMentorTools, useFileDragDrop, eventBus, RemoteEvents, selectEnableChatActionsPopup, advancedTabs, isInIframe, getAuthSpaJoinUrl, addMessage, clearFiles, MENTOR_VISIBILITY } from '@iblai/web-utils';
|
|
7
7
|
import { useDispatch, useSelector } from 'react-redux';
|
|
8
8
|
import { toast } from 'sonner';
|
|
@@ -100512,6 +100512,28 @@ var resourceModalWebsiteCrawlModal$3 = {
|
|
|
100512
100512
|
submit: "Submit",
|
|
100513
100513
|
formBeingSubmitted: "Form is being submitted"
|
|
100514
100514
|
};
|
|
100515
|
+
var resourcePicker$3 = {
|
|
100516
|
+
title: "Select Resource",
|
|
100517
|
+
description: "Browse the resource tree and pick the path to grant access to.",
|
|
100518
|
+
breadcrumbLabel: "Resource path breadcrumbs",
|
|
100519
|
+
breadcrumbRoot: "root",
|
|
100520
|
+
loading: "Loading resources…",
|
|
100521
|
+
loadFailed: "Failed to load resources",
|
|
100522
|
+
retry: "Retry",
|
|
100523
|
+
collectionsHeading: "Nested collections ({count})",
|
|
100524
|
+
noCollections: "No nested collections available",
|
|
100525
|
+
terminalBadge: "Grant target",
|
|
100526
|
+
terminalHint: "This collection can only be granted as a whole — individual items cannot be selected. Use \"Use this path\" to select it.",
|
|
100527
|
+
searchFieldLabel: "Search field",
|
|
100528
|
+
searchPlaceholder: "Search value (optional)",
|
|
100529
|
+
itemsHeading: "Items ({count}) — click to drill in",
|
|
100530
|
+
noItems: "No items found",
|
|
100531
|
+
searchFailed: "Failed to load items",
|
|
100532
|
+
currentPathLabel: "Selected resource path",
|
|
100533
|
+
stopHint: "You can stop at any level — the current path is a valid policy resource.",
|
|
100534
|
+
cancel: "Cancel",
|
|
100535
|
+
selectPath: "Use this path"
|
|
100536
|
+
};
|
|
100515
100537
|
var retrievedDocumentsButton$3 = {
|
|
100516
100538
|
title: "Retrieved Documents"
|
|
100517
100539
|
};
|
|
@@ -101170,7 +101192,7 @@ var tabsPoliciestab$3 = {
|
|
|
101170
101192
|
searchRolesPlaceholder: "Type to search roles...",
|
|
101171
101193
|
fieldResources: "Resources",
|
|
101172
101194
|
removeResourceLabel: "Remove resource {resource}",
|
|
101173
|
-
resourceInputPlaceholder: "e.g., /
|
|
101195
|
+
resourceInputPlaceholder: "e.g., /projects, /mentors/*",
|
|
101174
101196
|
addResourceLabel: "Add resource",
|
|
101175
101197
|
resourceHint: "Press Enter or click + to add. Supports wildcards and path parameters",
|
|
101176
101198
|
fieldUsers: "Users",
|
|
@@ -101189,7 +101211,9 @@ var tabsPoliciestab$3 = {
|
|
|
101189
101211
|
policyCreated: "Policy created",
|
|
101190
101212
|
operationFailed: "Operation failed",
|
|
101191
101213
|
policyDeleted: "Policy deleted",
|
|
101192
|
-
deleteFailed: "Delete failed"
|
|
101214
|
+
deleteFailed: "Delete failed",
|
|
101215
|
+
browseResources: "Browse",
|
|
101216
|
+
browseResourcesLabel: "Browse resources"
|
|
101193
101217
|
};
|
|
101194
101218
|
var tabsPrivacyTab$3 = {
|
|
101195
101219
|
moreInfo: "More info",
|
|
@@ -102366,6 +102390,7 @@ var en = {
|
|
|
102366
102390
|
resourceModalLocalFileUploadModal: resourceModalLocalFileUploadModal$3,
|
|
102367
102391
|
resourceModalUrlUploadModal: resourceModalUrlUploadModal$3,
|
|
102368
102392
|
resourceModalWebsiteCrawlModal: resourceModalWebsiteCrawlModal$3,
|
|
102393
|
+
resourcePicker: resourcePicker$3,
|
|
102369
102394
|
retrievedDocumentsButton: retrievedDocumentsButton$3,
|
|
102370
102395
|
richTextEditor: richTextEditor$3,
|
|
102371
102396
|
safetyTabLabels: safetyTabLabels$3,
|
|
@@ -106116,6 +106141,28 @@ var resourceModalWebsiteCrawlModal$2 = {
|
|
|
106116
106141
|
submit: "Soumettre",
|
|
106117
106142
|
formBeingSubmitted: "Le formulaire est en cours d'envoi"
|
|
106118
106143
|
};
|
|
106144
|
+
var resourcePicker$2 = {
|
|
106145
|
+
title: "Sélectionner une ressource",
|
|
106146
|
+
description: "Parcourez l'arborescence des ressources et choisissez le chemin auquel accorder l'accès.",
|
|
106147
|
+
breadcrumbLabel: "Fil d'Ariane du chemin de ressource",
|
|
106148
|
+
breadcrumbRoot: "racine",
|
|
106149
|
+
loading: "Chargement des ressources…",
|
|
106150
|
+
loadFailed: "Échec du chargement des ressources",
|
|
106151
|
+
retry: "Réessayer",
|
|
106152
|
+
collectionsHeading: "Collections imbriquées ({count})",
|
|
106153
|
+
noCollections: "Aucune collection imbriquée disponible",
|
|
106154
|
+
terminalBadge: "Cible de permission",
|
|
106155
|
+
terminalHint: "Cette collection ne peut être accordée que dans son ensemble — impossible de sélectionner des éléments individuels. Utilisez « Utiliser ce chemin » pour la sélectionner.",
|
|
106156
|
+
searchFieldLabel: "Champ de recherche",
|
|
106157
|
+
searchPlaceholder: "Valeur de recherche (facultatif)",
|
|
106158
|
+
itemsHeading: "Éléments ({count}) — cliquez pour explorer",
|
|
106159
|
+
noItems: "Aucun élément trouvé",
|
|
106160
|
+
searchFailed: "Échec du chargement des éléments",
|
|
106161
|
+
currentPathLabel: "Chemin de ressource sélectionné",
|
|
106162
|
+
stopHint: "Vous pouvez vous arrêter à n'importe quel niveau — le chemin actuel est une ressource de politique valide.",
|
|
106163
|
+
cancel: "Annuler",
|
|
106164
|
+
selectPath: "Utiliser ce chemin"
|
|
106165
|
+
};
|
|
106119
106166
|
var retrievedDocumentsButton$2 = {
|
|
106120
106167
|
title: "Documents récupérés"
|
|
106121
106168
|
};
|
|
@@ -106774,7 +106821,7 @@ var tabsPoliciestab$2 = {
|
|
|
106774
106821
|
searchRolesPlaceholder: "Taper pour rechercher des rôles...",
|
|
106775
106822
|
fieldResources: "Ressources",
|
|
106776
106823
|
removeResourceLabel: "Supprimer la ressource {resource}",
|
|
106777
|
-
resourceInputPlaceholder: "ex. : /
|
|
106824
|
+
resourceInputPlaceholder: "ex. : /projects, /mentors/*",
|
|
106778
106825
|
addResourceLabel: "Ajouter une ressource",
|
|
106779
106826
|
resourceHint: "Appuyez sur Entrée ou cliquez sur + pour ajouter. Prend en charge les caractères génériques et les paramètres de chemin",
|
|
106780
106827
|
fieldUsers: "Utilisateurs",
|
|
@@ -106793,7 +106840,9 @@ var tabsPoliciestab$2 = {
|
|
|
106793
106840
|
policyCreated: "Politique créée",
|
|
106794
106841
|
operationFailed: "Opération échouée",
|
|
106795
106842
|
policyDeleted: "Politique supprimée",
|
|
106796
|
-
deleteFailed: "Suppression échouée"
|
|
106843
|
+
deleteFailed: "Suppression échouée",
|
|
106844
|
+
browseResources: "Parcourir",
|
|
106845
|
+
browseResourcesLabel: "Parcourir les ressources"
|
|
106797
106846
|
};
|
|
106798
106847
|
var tabsPrivacyTab$2 = {
|
|
106799
106848
|
moreInfo: "Plus d'informations",
|
|
@@ -107970,6 +108019,7 @@ var fr = {
|
|
|
107970
108019
|
resourceModalLocalFileUploadModal: resourceModalLocalFileUploadModal$2,
|
|
107971
108020
|
resourceModalUrlUploadModal: resourceModalUrlUploadModal$2,
|
|
107972
108021
|
resourceModalWebsiteCrawlModal: resourceModalWebsiteCrawlModal$2,
|
|
108022
|
+
resourcePicker: resourcePicker$2,
|
|
107973
108023
|
retrievedDocumentsButton: retrievedDocumentsButton$2,
|
|
107974
108024
|
richTextEditor: richTextEditor$2,
|
|
107975
108025
|
safetyTabLabels: safetyTabLabels$2,
|
|
@@ -111720,6 +111770,28 @@ var resourceModalWebsiteCrawlModal$1 = {
|
|
|
111720
111770
|
submit: "Enviar",
|
|
111721
111771
|
formBeingSubmitted: "El formulario se está enviando"
|
|
111722
111772
|
};
|
|
111773
|
+
var resourcePicker$1 = {
|
|
111774
|
+
title: "Seleccionar recurso",
|
|
111775
|
+
description: "Explora el árbol de recursos y elige la ruta a la que conceder acceso.",
|
|
111776
|
+
breadcrumbLabel: "Ruta de navegación del recurso",
|
|
111777
|
+
breadcrumbRoot: "raíz",
|
|
111778
|
+
loading: "Cargando recursos…",
|
|
111779
|
+
loadFailed: "Error al cargar los recursos",
|
|
111780
|
+
retry: "Reintentar",
|
|
111781
|
+
collectionsHeading: "Colecciones anidadas ({count})",
|
|
111782
|
+
noCollections: "No hay colecciones anidadas disponibles",
|
|
111783
|
+
terminalBadge: "Objetivo de permiso",
|
|
111784
|
+
terminalHint: "Esta colección solo puede concederse en su totalidad — no se pueden seleccionar elementos individuales. Usa «Usar esta ruta» para seleccionarla.",
|
|
111785
|
+
searchFieldLabel: "Campo de búsqueda",
|
|
111786
|
+
searchPlaceholder: "Valor de búsqueda (opcional)",
|
|
111787
|
+
itemsHeading: "Elementos ({count}) — haz clic para explorar",
|
|
111788
|
+
noItems: "No se encontraron elementos",
|
|
111789
|
+
searchFailed: "Error al cargar los elementos",
|
|
111790
|
+
currentPathLabel: "Ruta de recurso seleccionada",
|
|
111791
|
+
stopHint: "Puedes detenerte en cualquier nivel — la ruta actual es un recurso de política válido.",
|
|
111792
|
+
cancel: "Cancelar",
|
|
111793
|
+
selectPath: "Usar esta ruta"
|
|
111794
|
+
};
|
|
111723
111795
|
var retrievedDocumentsButton$1 = {
|
|
111724
111796
|
title: "Documentos recuperados"
|
|
111725
111797
|
};
|
|
@@ -112378,7 +112450,7 @@ var tabsPoliciestab$1 = {
|
|
|
112378
112450
|
searchRolesPlaceholder: "Escriba para buscar roles...",
|
|
112379
112451
|
fieldResources: "Recursos",
|
|
112380
112452
|
removeResourceLabel: "Eliminar recurso {resource}",
|
|
112381
|
-
resourceInputPlaceholder: "
|
|
112453
|
+
resourceInputPlaceholder: "e.j., /projects, /mentors/*",
|
|
112382
112454
|
addResourceLabel: "Agregar recurso",
|
|
112383
112455
|
resourceHint: "Presione Intro o haga clic en + para agregar. Compatible con comodines y parámetros de ruta",
|
|
112384
112456
|
fieldUsers: "Usuarios",
|
|
@@ -112397,7 +112469,9 @@ var tabsPoliciestab$1 = {
|
|
|
112397
112469
|
policyCreated: "Política creada",
|
|
112398
112470
|
operationFailed: "Operación fallida",
|
|
112399
112471
|
policyDeleted: "Política eliminada",
|
|
112400
|
-
deleteFailed: "Error al eliminar"
|
|
112472
|
+
deleteFailed: "Error al eliminar",
|
|
112473
|
+
browseResources: "Explorar",
|
|
112474
|
+
browseResourcesLabel: "Explorar recursos"
|
|
112401
112475
|
};
|
|
112402
112476
|
var tabsPrivacyTab$1 = {
|
|
112403
112477
|
moreInfo: "Más información",
|
|
@@ -113574,6 +113648,7 @@ var es = {
|
|
|
113574
113648
|
resourceModalLocalFileUploadModal: resourceModalLocalFileUploadModal$1,
|
|
113575
113649
|
resourceModalUrlUploadModal: resourceModalUrlUploadModal$1,
|
|
113576
113650
|
resourceModalWebsiteCrawlModal: resourceModalWebsiteCrawlModal$1,
|
|
113651
|
+
resourcePicker: resourcePicker$1,
|
|
113577
113652
|
retrievedDocumentsButton: retrievedDocumentsButton$1,
|
|
113578
113653
|
richTextEditor: richTextEditor$1,
|
|
113579
113654
|
safetyTabLabels: safetyTabLabels$1,
|
|
@@ -117324,6 +117399,28 @@ var resourceModalWebsiteCrawlModal = {
|
|
|
117324
117399
|
submit: "提交",
|
|
117325
117400
|
formBeingSubmitted: "表单正在提交"
|
|
117326
117401
|
};
|
|
117402
|
+
var resourcePicker = {
|
|
117403
|
+
title: "选择资源",
|
|
117404
|
+
description: "浏览资源树并选择要授予访问权限的路径。",
|
|
117405
|
+
breadcrumbLabel: "资源路径导航",
|
|
117406
|
+
breadcrumbRoot: "根",
|
|
117407
|
+
loading: "正在加载资源…",
|
|
117408
|
+
loadFailed: "加载资源失败",
|
|
117409
|
+
retry: "重试",
|
|
117410
|
+
collectionsHeading: "嵌套集合({count})",
|
|
117411
|
+
noCollections: "没有可用的嵌套集合",
|
|
117412
|
+
terminalBadge: "授权目标",
|
|
117413
|
+
terminalHint: "此集合只能整体授权,无法选择其中的单个条目。请使用“使用此路径”进行选择。",
|
|
117414
|
+
searchFieldLabel: "搜索字段",
|
|
117415
|
+
searchPlaceholder: "搜索值(可选)",
|
|
117416
|
+
itemsHeading: "条目({count})— 点击深入",
|
|
117417
|
+
noItems: "未找到条目",
|
|
117418
|
+
searchFailed: "加载条目失败",
|
|
117419
|
+
currentPathLabel: "已选资源路径",
|
|
117420
|
+
stopHint: "您可以在任意层级停止 — 当前路径即为有效的策略资源。",
|
|
117421
|
+
cancel: "取消",
|
|
117422
|
+
selectPath: "使用此路径"
|
|
117423
|
+
};
|
|
117327
117424
|
var retrievedDocumentsButton = {
|
|
117328
117425
|
title: "已检索文档"
|
|
117329
117426
|
};
|
|
@@ -117982,7 +118079,7 @@ var tabsPoliciestab = {
|
|
|
117982
118079
|
searchRolesPlaceholder: "输入以搜索角色...",
|
|
117983
118080
|
fieldResources: "资源",
|
|
117984
118081
|
removeResourceLabel: "移除资源 {resource}",
|
|
117985
|
-
resourceInputPlaceholder: "例如:/
|
|
118082
|
+
resourceInputPlaceholder: "例如:/projects, /mentors/*",
|
|
117986
118083
|
addResourceLabel: "添加资源",
|
|
117987
118084
|
resourceHint: "按 Enter 或点击 + 添加。支持通配符和路径参数",
|
|
117988
118085
|
fieldUsers: "用户",
|
|
@@ -118001,7 +118098,9 @@ var tabsPoliciestab = {
|
|
|
118001
118098
|
policyCreated: "策略已创建",
|
|
118002
118099
|
operationFailed: "操作失败",
|
|
118003
118100
|
policyDeleted: "策略已删除",
|
|
118004
|
-
deleteFailed: "删除失败"
|
|
118101
|
+
deleteFailed: "删除失败",
|
|
118102
|
+
browseResources: "浏览",
|
|
118103
|
+
browseResourcesLabel: "浏览资源"
|
|
118005
118104
|
};
|
|
118006
118105
|
var tabsPrivacyTab = {
|
|
118007
118106
|
moreInfo: "更多信息",
|
|
@@ -119178,6 +119277,7 @@ var zh = {
|
|
|
119178
119277
|
resourceModalLocalFileUploadModal: resourceModalLocalFileUploadModal,
|
|
119179
119278
|
resourceModalUrlUploadModal: resourceModalUrlUploadModal,
|
|
119180
119279
|
resourceModalWebsiteCrawlModal: resourceModalWebsiteCrawlModal,
|
|
119280
|
+
resourcePicker: resourcePicker,
|
|
119181
119281
|
retrievedDocumentsButton: retrievedDocumentsButton,
|
|
119182
119282
|
richTextEditor: richTextEditor,
|
|
119183
119283
|
safetyTabLabels: safetyTabLabels,
|
|
@@ -177458,6 +177558,76 @@ function RolesTab({ tenant }) {
|
|
|
177458
177558
|
return (jsxs("div", { className: "mt-4", children: [jsxs("div", { className: "flex justify-between items-center gap-1 mb-6", children: [jsxs("div", { className: "relative max-w-sm", children: [jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: t('tabsRolestab.searchRolesPlaceholder'), "aria-label": t('tabsRolestab.searchRolesAriaLabel'), className: "pl-10 pr-10 focus:ring-blue-500 focus:border-blue-500 h-[35px]" }), isLoading && (jsx(LoaderCircle, { "data-testid": "search-spinner", className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400 animate-spin", "aria-hidden": "true" }))] }), jsx(Button$1, { onClick: openNew, "aria-label": t('tabsRolestab.newRoleAriaLabel'), className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white h-[35px]", children: t('tabsRolestab.newRoleButton') })] }), isLoading && (jsx("div", { className: "flex justify-center items-center h-64", children: jsx("div", { className: "py-8 text-center text-sm text-gray-500 dark:text-gray-400", children: t('tabsRolestab.loading') }) })), isError && (jsx("div", { className: "py-8 text-center text-sm text-red-500", children: t('tabsRolestab.failedToLoadRoles') })), !isLoading && !isError && (jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-x-auto", children: jsxs("table", { className: "w-full text-sm", children: [jsx("thead", { className: "bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600", children: jsxs("tr", { children: [jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400", children: t('tabsRolestab.nameHeader') }), jsx("th", { className: "px-6 py-3 text-right font-medium text-gray-500 dark:text-gray-400 w-[100px]" })] }) }), jsxs("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-600", children: [roles.map((r) => (jsxs("tr", { children: [jsx("td", { className: "px-6 py-4 text-gray-900 dark:text-gray-100 text-sm", children: r.name }), jsx("td", { className: "px-6 py-4", children: jsxs("div", { className: "flex gap-2 justify-end", children: [jsx(Button$1, { variant: "ghost", size: "sm", onClick: () => openEdit(r), disabled: deletingRoleId === r.id, "aria-label": t('tabsRolestab.editRoleAriaLabel', { name: r.name }), children: jsx(Pencil, { className: "h-4 w-4", "aria-hidden": "true" }) }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { tabIndex: 0, children: jsx(Button$1, { variant: "ghost", size: "sm", onClick: () => onDelete(r), className: "text-red-600 hover:text-red-700", disabled: deletingRoleId === r.id || r.is_internal, "aria-label": t('tabsRolestab.deleteRoleAriaLabel', { name: r.name }), children: deletingRoleId === r.id ? (jsx(LoaderCircle, { className: "h-4 w-4 animate-spin", "aria-hidden": "true" })) : (jsx(Trash2, { className: "h-4 w-4", "aria-hidden": "true" })) }) }) }), r.is_internal && (jsx(TooltipContent, { children: jsx("p", { children: t('tabsRolestab.cannotDeleteInternalRoles') }) }))] }) })] }) })] }, r.id))), roles.length === 0 && (jsx("tr", { children: jsx("td", { colSpan: 2, className: "px-6 py-8 text-center text-gray-500 dark:text-gray-400", children: t('tabsRolestab.noRolesFound') }) }))] })] }) })), !isLoading && !isError && (jsx(AdvancedPagination, { variant: "footer", className: "-mx-6 -mb-6 mt-4 rounded-b-lg", totalPages: totalPages, currentPage: page, onPageChange: (newPage) => handlePageChange(newPage), totalCount: data === null || data === void 0 ? void 0 : data.count, itemsPerPage: 10, itemLabel: "roles" })), jsx(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: jsxs(DialogContent, { "aria-describedby": undefined, className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: editing ? t('tabsRolestab.editRoleTitle') : t('tabsRolestab.newRoleTitle') }) }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { htmlFor: "r-name", children: t('tabsRolestab.roleNameLabel') }), jsx(Input, { id: "r-name", value: form.name, onChange: (e) => setForm({ ...form, name: e.target.value }), placeholder: t('tabsRolestab.enterRoleNamePlaceholder'), required: true })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { htmlFor: "r-actions", children: t('tabsRolestab.actionsLabel') }), jsxs("div", { className: "space-y-2", children: [actions.length > 0 && (jsx("div", { className: "flex flex-wrap gap-2 p-2 border border-gray-200 dark:border-gray-700 rounded-md bg-gray-50 dark:bg-gray-800", children: actions.map((action, index) => (jsxs(Badge, { variant: "secondary", className: "px-2 py-1 flex items-center gap-1 font-mono text-xs", children: [jsx("span", { children: action }), jsx("button", { type: "button", onClick: () => removeAction(action), className: "ml-1 hover:text-red-600", "aria-label": t('tabsRolestab.removeActionAriaLabel', { action }), children: jsx(X$2, { className: "h-3 w-3" }) })] }, index))) })), jsx(ActionsCombobox, { selected: actions, onSelect: addActionKey }), jsxs("div", { className: "flex gap-2", children: [jsx(Input, { id: "r-actions", value: actionInput, onChange: (e) => setActionInput(e.target.value), onKeyDown: handleActionKeyDown, placeholder: t('tabsRolestab.customActionPlaceholder'), className: "flex-1 font-mono text-sm" }), jsx(Button$1, { type: "button", variant: "outline", size: "sm", onClick: addAction, disabled: !actionInput.trim(), "aria-label": t('tabsRolestab.addActionAriaLabel'), children: jsx(Plus, { className: "h-4 w-4" }) })] }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t('tabsRolestab.actionsHelpText') })] })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { htmlFor: "r-data-actions", children: t('tabsRolestab.dataActionsLabel') }), jsxs("div", { className: "space-y-2", children: [dataActions.length > 0 && (jsx("div", { className: "flex flex-wrap gap-2 p-2 border border-gray-200 dark:border-gray-700 rounded-md bg-gray-50 dark:bg-gray-800", children: dataActions.map((action, index) => (jsxs(Badge, { variant: "secondary", className: "px-2 py-1 flex items-center gap-1 font-mono text-xs", children: [jsx("span", { children: action }), jsx("button", { type: "button", onClick: () => removeDataAction(action), className: "ml-1 hover:text-red-600", "aria-label": t('tabsRolestab.removeDataActionAriaLabel', { action }), children: jsx(X$2, { className: "h-3 w-3" }) })] }, index))) })), jsxs("div", { className: "flex gap-2", children: [jsx(Input, { id: "r-data-actions", value: dataActionInput, onChange: (e) => setDataActionInput(e.target.value), onKeyDown: handleDataActionKeyDown, placeholder: t('tabsRolestab.dataActionPlaceholder'), className: "flex-1 font-mono text-sm" }), jsx(Button$1, { type: "button", variant: "outline", size: "sm", onClick: addDataAction, disabled: !dataActionInput.trim(), "aria-label": t('tabsRolestab.addDataActionAriaLabel'), children: jsx(Plus, { className: "h-4 w-4" }) })] }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t('tabsRolestab.dataActionsHelpText') })] })] })] }), jsxs(DialogFooter, { className: "mt-6 gap-1.5", children: [jsx(Button$1, { variant: "outline", onClick: () => setIsOpen(false), children: t('tabsRolestab.cancel') }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { tabIndex: 0, className: "", children: jsx(Button$1, { onClick: onSubmit, disabled: !!editing && (roleDetails === null || roleDetails === void 0 ? void 0 : roleDetails.is_internal), className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white w-full", children: editing ? t('tabsRolestab.saveRole') : t('tabsRolestab.createRole') }) }) }), editing && (roleDetails === null || roleDetails === void 0 ? void 0 : roleDetails.is_internal) && (jsx(TooltipContent, { children: jsx("p", { children: t('tabsRolestab.cannotEditInternalRoles') }) }))] }) })] })] }) })] }));
|
|
177459
177559
|
}
|
|
177460
177560
|
|
|
177561
|
+
/**
|
|
177562
|
+
* Walks the RBAC resource-discovery tree so users can build a policy resource
|
|
177563
|
+
* path interactively instead of typing it by hand. Starts at "/", renders
|
|
177564
|
+
* entity nodes as drill-down collection cards and collection nodes as a
|
|
177565
|
+
* searchable entity list, and lets the user confirm the current path at any
|
|
177566
|
+
* level (intermediate paths are valid policy targets).
|
|
177567
|
+
*/
|
|
177568
|
+
function ResourcePickerModal({ open, onOpenChange, tenant, onSelect, }) {
|
|
177569
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
177570
|
+
const t = useT();
|
|
177571
|
+
const [path, setPath] = useState('/');
|
|
177572
|
+
const [searchQp, setSearchQp] = useState(null);
|
|
177573
|
+
const [searchValue, setSearchValue] = useState('');
|
|
177574
|
+
const [debouncedSearchValue, setDebouncedSearchValue] = useState('');
|
|
177575
|
+
// Start from the root every time the picker is opened.
|
|
177576
|
+
useEffect(() => {
|
|
177577
|
+
if (open) {
|
|
177578
|
+
setPath('/');
|
|
177579
|
+
setSearchQp(null);
|
|
177580
|
+
setSearchValue('');
|
|
177581
|
+
setDebouncedSearchValue('');
|
|
177582
|
+
}
|
|
177583
|
+
}, [open]);
|
|
177584
|
+
// Search state belongs to a single collection node — clear it on navigation.
|
|
177585
|
+
useEffect(() => {
|
|
177586
|
+
setSearchQp(null);
|
|
177587
|
+
setSearchValue('');
|
|
177588
|
+
setDebouncedSearchValue('');
|
|
177589
|
+
}, [path]);
|
|
177590
|
+
useEffect(() => {
|
|
177591
|
+
const handler = setTimeout(() => setDebouncedSearchValue(searchValue.trim()), 300);
|
|
177592
|
+
return () => clearTimeout(handler);
|
|
177593
|
+
}, [searchValue]);
|
|
177594
|
+
const { currentData: node, isFetching: isDiscoveryLoading, isError: isDiscoveryError, refetch: refetchDiscovery, } = useGetRbacResourceDiscoveryQuery({ path, platformKey: tenant }, { skip: !open });
|
|
177595
|
+
const entityNode = (node === null || node === void 0 ? void 0 : node.node_type) === 'entity' ? node : null;
|
|
177596
|
+
const collectionNode = (node === null || node === void 0 ? void 0 : node.node_type) === 'collection' ? node : null;
|
|
177597
|
+
const effectiveSearchQp = (_c = (_a = searchQp !== null && searchQp !== void 0 ? searchQp : collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.default_search_qp) !== null && _a !== void 0 ? _a : (_b = collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.search_qps) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : null;
|
|
177598
|
+
// The backend may prefix list_url with the /dm gateway segment; the data
|
|
177599
|
+
// layer already targets the DM service base URL, so strip it.
|
|
177600
|
+
const listUrl = (_e = (_d = collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.list_url) === null || _d === void 0 ? void 0 : _d.replace(/^\/dm(?=\/)/, '')) !== null && _e !== void 0 ? _e : '';
|
|
177601
|
+
const { currentData: listData, isFetching: isListLoading, isError: isListError, } = useGetRbacResourceListQuery({
|
|
177602
|
+
listUrl,
|
|
177603
|
+
searchParams: effectiveSearchQp && debouncedSearchValue
|
|
177604
|
+
? { [effectiveSearchQp]: debouncedSearchValue }
|
|
177605
|
+
: {},
|
|
177606
|
+
resultFields: (_f = collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.result_fields) !== null && _f !== void 0 ? _f : null,
|
|
177607
|
+
}, { skip: !open || !(collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.list_url) });
|
|
177608
|
+
// The path confirmed on select: prefer the server-echoed resource_path for
|
|
177609
|
+
// the loaded node, fall back to the client-built path while loading.
|
|
177610
|
+
const currentResourcePath = (_g = node === null || node === void 0 ? void 0 : node.resource_path) !== null && _g !== void 0 ? _g : path;
|
|
177611
|
+
// Breadcrumb prefixes: "/" then one crumb per segment ("/mentors/", "/mentors/6/", …).
|
|
177612
|
+
const crumbs = useMemo(() => {
|
|
177613
|
+
const segments = path.split('/').filter(Boolean);
|
|
177614
|
+
return segments.map((segment, index) => ({
|
|
177615
|
+
label: segment,
|
|
177616
|
+
path: `/${segments.slice(0, index + 1).join('/')}/`,
|
|
177617
|
+
}));
|
|
177618
|
+
}, [path]);
|
|
177619
|
+
function confirmSelection() {
|
|
177620
|
+
onSelect(currentResourcePath);
|
|
177621
|
+
onOpenChange(false);
|
|
177622
|
+
}
|
|
177623
|
+
return (jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: jsxs(DialogContent, { className: "max-w-2xl max-h-[85vh] flex flex-col", children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { children: t('resourcePicker.title') }), jsx(DialogDescription, { children: t('resourcePicker.description') })] }), jsxs("nav", { "aria-label": t('resourcePicker.breadcrumbLabel'), className: "flex flex-wrap items-center gap-1", children: [jsxs(Button$1, { type: "button", variant: crumbs.length === 0 ? 'secondary' : 'ghost', size: "sm", className: "h-7 px-2 font-mono text-xs", onClick: () => setPath('/'), children: [t('resourcePicker.breadcrumbRoot'), " /"] }), crumbs.map((crumb, index) => (jsxs("span", { className: "flex items-center gap-1", children: [jsx(ChevronRight, { className: "h-3 w-3 text-gray-400", "aria-hidden": "true" }), jsxs(Button$1, { type: "button", variant: index === crumbs.length - 1 ? 'secondary' : 'ghost', size: "sm", className: "h-7 px-2 font-mono text-xs", onClick: () => setPath(crumb.path), children: [crumb.label, "/"] })] }, crumb.path)))] }), jsxs("div", { className: "flex-1 min-h-[200px] overflow-y-auto pr-1", children: [isDiscoveryLoading && (jsxs("div", { className: "flex justify-center items-center h-40", role: "status", children: [jsx(LoaderCircle, { className: "h-6 w-6 animate-spin text-gray-400", "aria-hidden": "true" }), jsx("span", { className: "sr-only", children: t('resourcePicker.loading') })] })), !isDiscoveryLoading && isDiscoveryError && (jsxs("div", { className: "py-8 text-center text-sm text-red-500 space-y-2", children: [jsx("p", { children: t('resourcePicker.loadFailed') }), jsx(Button$1, { type: "button", variant: "outline", size: "sm", onClick: () => refetchDiscovery(), children: t('resourcePicker.retry') })] })), !isDiscoveryLoading && entityNode && (jsxs("div", { className: "space-y-2", children: [jsx("p", { className: "text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400", children: t('resourcePicker.collectionsHeading', {
|
|
177624
|
+
count: entityNode.collections.length,
|
|
177625
|
+
}) }), entityNode.collections.length === 0 && (jsx("p", { className: "py-6 text-center text-sm text-gray-500 dark:text-gray-400", children: t('resourcePicker.noCollections') })), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2", children: entityNode.collections.map((collection) => (jsxs("button", { type: "button", onClick: () => setPath(collection.path), className: "text-left p-3 min-w-0 border border-gray-200 dark:border-gray-700 rounded-md hover:border-blue-400 hover:bg-blue-50/50 dark:hover:bg-blue-900/10 transition-colors", children: [jsxs("span", { className: "flex items-center gap-2", children: [jsxs("span", { className: "font-mono text-sm font-medium text-blue-600 dark:text-blue-400", children: [collection.type, "/"] }), collection.collection_only && (jsxs(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 gap-1", children: [jsx(Lock, { className: "h-2.5 w-2.5", "aria-hidden": "true" }), t('resourcePicker.terminalBadge')] }))] }), jsx("span", { className: "block mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: collection.help })] }, collection.path))) })] })), !isDiscoveryLoading && collectionNode && !collectionNode.list_url && (jsx("div", { className: "py-8 px-4 text-center text-sm text-gray-600 dark:text-gray-300 border border-dashed border-gray-300 dark:border-gray-600 rounded-md", children: t('resourcePicker.terminalHint') })), !isDiscoveryLoading && collectionNode && collectionNode.list_url && (jsxs("div", { className: "space-y-3", children: [jsxs("div", { className: "flex gap-2", children: [collectionNode.search_qps.length > 0 && (jsxs(Select$1, { value: effectiveSearchQp !== null && effectiveSearchQp !== void 0 ? effectiveSearchQp : undefined, onValueChange: (value) => setSearchQp(value), children: [jsx(SelectTrigger, { className: "w-[160px] shrink-0", "aria-label": t('resourcePicker.searchFieldLabel'), children: jsx(SelectValue, {}) }), jsx(SelectContent, { children: collectionNode.search_qps.map((qp) => (jsx(SelectItem, { value: qp, children: qp }, qp))) })] })), jsxs("div", { className: "relative flex-1", children: [jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400", "aria-hidden": "true" }), jsx(Input, { value: searchValue, onChange: (e) => setSearchValue(e.target.value), placeholder: t('resourcePicker.searchPlaceholder'), "aria-label": t('resourcePicker.searchPlaceholder'), className: "pl-10" }), isListLoading && (jsx(LoaderCircle, { className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400 animate-spin", "aria-hidden": "true" }))] })] }), isListError && (jsx("p", { className: "py-6 text-center text-sm text-red-500", children: t('resourcePicker.searchFailed') })), !isListError && listData && (jsxs("div", { className: "space-y-2", children: [jsx("p", { className: "text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400", children: t('resourcePicker.itemsHeading', { count: listData.items.length }) }), listData.items.length === 0 && !isListLoading && (jsx("p", { className: "py-6 text-center text-sm text-gray-500 dark:text-gray-400", children: t('resourcePicker.noItems') })), jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2", children: listData.items.map((item) => {
|
|
177626
|
+
var _a, _b;
|
|
177627
|
+
return (jsxs("button", { type: "button", onClick: () => setPath(`${collectionNode.resource_path}${item.pk}/`), className: "text-left p-3 min-w-0 border border-gray-200 dark:border-gray-700 rounded-md hover:border-blue-400 hover:bg-blue-50/50 dark:hover:bg-blue-900/10 transition-colors", children: [jsx("span", { title: item.name, className: "block truncate text-sm font-medium text-gray-900 dark:text-gray-100", children: item.name }), jsxs("span", { className: "block mt-0.5 font-mono text-xs text-gray-500 dark:text-gray-400", children: [(_b = (_a = collectionNode.result_fields) === null || _a === void 0 ? void 0 : _a.pk) !== null && _b !== void 0 ? _b : 'id', " = ", String(item.pk)] })] }, String(item.pk)));
|
|
177628
|
+
}) })] }))] }))] }), jsxs(DialogFooter, { className: "flex-col sm:flex-row sm:items-center gap-2 border-t border-gray-200 dark:border-gray-700 pt-4", children: [jsxs("div", { className: "flex-1 min-w-0 text-left", children: [jsx("p", { className: "text-[10px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400", children: t('resourcePicker.currentPathLabel') }), jsx("p", { className: "font-mono text-sm text-green-600 dark:text-green-400 truncate", children: currentResourcePath }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t('resourcePicker.stopHint') })] }), jsx(Button$1, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: t('resourcePicker.cancel') }), jsx(Button$1, { type: "button", onClick: confirmSelection, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white", children: t('resourcePicker.selectPath') })] })] }) }));
|
|
177629
|
+
}
|
|
177630
|
+
|
|
177461
177631
|
function PoliciesTab({ tenant }) {
|
|
177462
177632
|
const t = useT();
|
|
177463
177633
|
const [page, setPage] = useState(1);
|
|
@@ -177509,6 +177679,7 @@ function PoliciesTab({ tenant }) {
|
|
|
177509
177679
|
const [showUserSearch, setShowUserSearch] = useState(false);
|
|
177510
177680
|
const [showGroupSearch, setShowGroupSearch] = useState(false);
|
|
177511
177681
|
const [deletingPolicyId, setDeletingPolicyId] = useState(null);
|
|
177682
|
+
const [isResourcePickerOpen, setIsResourcePickerOpen] = useState(false);
|
|
177512
177683
|
const { currentData: policyDetails } = useGetRbacPolicyDetailsQuery({ id: editingPolicyId, platform_key: tenant }, { skip: !editingPolicyId });
|
|
177513
177684
|
// Debounce role search and query the roles endpoint with the search term
|
|
177514
177685
|
useEffect(() => {
|
|
@@ -177638,6 +177809,11 @@ function PoliciesTab({ tenant }) {
|
|
|
177638
177809
|
setResourceInput('');
|
|
177639
177810
|
}
|
|
177640
177811
|
}
|
|
177812
|
+
function addPickedResource(resourcePath) {
|
|
177813
|
+
if (!resources.includes(resourcePath)) {
|
|
177814
|
+
setResources((prev) => [...prev, resourcePath]);
|
|
177815
|
+
}
|
|
177816
|
+
}
|
|
177641
177817
|
function removeResource(resource) {
|
|
177642
177818
|
setResources(resources.filter((r) => r !== resource));
|
|
177643
177819
|
}
|
|
@@ -177742,7 +177918,7 @@ function PoliciesTab({ tenant }) {
|
|
|
177742
177918
|
setForm({ ...form, roleId: role.id, roleName: role.name });
|
|
177743
177919
|
setRoleSearch('');
|
|
177744
177920
|
setShowRoleSearch(false);
|
|
177745
|
-
}, className: "w-full text-left px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 flex flex-col", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: role.name }), role.description && (jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: role.description }))] }, role.id))) }))] })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { htmlFor: "p-res", children: t('tabsPoliciestab.fieldResources') }), jsxs("div", { className: "space-y-2", children: [resources.length > 0 && (jsx("div", { className: "flex flex-wrap gap-2 p-2 border border-gray-200 dark:border-gray-700 rounded-md bg-gray-50 dark:bg-gray-800", children: resources.map((resource, index) => (jsxs(Badge, { variant: "secondary", className: "px-2 py-1 flex items-center gap-1 font-mono text-xs", children: [jsx("span", { children: resource }), jsx("button", { type: "button", onClick: () => removeResource(resource), className: "ml-1 hover:text-red-600", "aria-label": t('tabsPoliciestab.removeResourceLabel', { resource }), children: jsx(X$2, { className: "h-3 w-3" }) })] }, index))) })), jsxs("div", { className: "flex gap-2", children: [jsx(Input, { id: "p-res", value: resourceInput, onChange: (e) => setResourceInput(e.target.value), onKeyDown: handleResourceKeyDown, placeholder: t('tabsPoliciestab.resourceInputPlaceholder'), className: "flex-1 font-mono text-sm" }), jsx(Button$1, { type: "button", variant: "outline", size: "sm", onClick: addResource, disabled: !resourceInput.trim(), "aria-label": t('tabsPoliciestab.addResourceLabel'), children: jsx(Plus, { className: "h-4 w-4" }) })] }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t('tabsPoliciestab.resourceHint') })] })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { children: t('tabsPoliciestab.fieldUsers') }), jsxs("div", { className: "space-y-2", children: [selectedUsers.length > 0 ? (jsx("div", { className: "space-y-2 max-h-32 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-md p-2", children: selectedUsers.map((user) => (jsxs("div", { className: "flex items-center justify-between bg-gray-50 dark:bg-gray-800 p-2 rounded-md", children: [jsxs("div", { className: "flex flex-col", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: user.name }), jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: user.email })] }), jsx(Button$1, { type: "button", variant: "ghost", size: "sm", onClick: () => removeUser(user.id), className: "h-8 w-8 p-0 text-red-600 hover:text-red-700 hover:bg-red-50 dark:hover:bg-red-900/20", "aria-label": t('tabsPoliciestab.removeUserLabel', { name: user.name }), children: jsx(X$2, { className: "h-4 w-4" }) })] }, user.id))) })) : (jsx("div", { className: "text-sm text-gray-500 dark:text-gray-400 p-3 text-center border border-dashed border-gray-300 dark:border-gray-600 rounded-md", children: t('tabsPoliciestab.noUsersAdded') })), jsxs("div", { className: "relative", children: [jsx(Input, { value: userSearch, onChange: (e) => {
|
|
177921
|
+
}, className: "w-full text-left px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 flex flex-col", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: role.name }), role.description && (jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: role.description }))] }, role.id))) }))] })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { htmlFor: "p-res", children: t('tabsPoliciestab.fieldResources') }), jsxs("div", { className: "space-y-2", children: [resources.length > 0 && (jsx("div", { className: "flex flex-wrap gap-2 p-2 border border-gray-200 dark:border-gray-700 rounded-md bg-gray-50 dark:bg-gray-800", children: resources.map((resource, index) => (jsxs(Badge, { variant: "secondary", className: "px-2 py-1 flex items-center gap-1 font-mono text-xs", children: [jsx("span", { children: resource }), jsx("button", { type: "button", onClick: () => removeResource(resource), className: "ml-1 hover:text-red-600", "aria-label": t('tabsPoliciestab.removeResourceLabel', { resource }), children: jsx(X$2, { className: "h-3 w-3" }) })] }, index))) })), jsxs("div", { className: "flex gap-2", children: [jsx(Input, { id: "p-res", value: resourceInput, onChange: (e) => setResourceInput(e.target.value), onKeyDown: handleResourceKeyDown, placeholder: t('tabsPoliciestab.resourceInputPlaceholder'), className: "flex-1 font-mono text-sm" }), jsx(Button$1, { type: "button", variant: "outline", size: "sm", onClick: addResource, disabled: !resourceInput.trim(), "aria-label": t('tabsPoliciestab.addResourceLabel'), children: jsx(Plus, { className: "h-4 w-4" }) }), jsxs(Button$1, { type: "button", variant: "outline", size: "sm", onClick: () => setIsResourcePickerOpen(true), "aria-label": t('tabsPoliciestab.browseResourcesLabel'), children: [jsx(FolderTree, { className: "h-4 w-4 mr-1", "aria-hidden": "true" }), t('tabsPoliciestab.browseResources')] })] }), jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t('tabsPoliciestab.resourceHint') })] })] }), jsxs("div", { className: "grid gap-1.5", children: [jsx(Label$1, { children: t('tabsPoliciestab.fieldUsers') }), jsxs("div", { className: "space-y-2", children: [selectedUsers.length > 0 ? (jsx("div", { className: "space-y-2 max-h-32 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-md p-2", children: selectedUsers.map((user) => (jsxs("div", { className: "flex items-center justify-between bg-gray-50 dark:bg-gray-800 p-2 rounded-md", children: [jsxs("div", { className: "flex flex-col", children: [jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: user.name }), jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: user.email })] }), jsx(Button$1, { type: "button", variant: "ghost", size: "sm", onClick: () => removeUser(user.id), className: "h-8 w-8 p-0 text-red-600 hover:text-red-700 hover:bg-red-50 dark:hover:bg-red-900/20", "aria-label": t('tabsPoliciestab.removeUserLabel', { name: user.name }), children: jsx(X$2, { className: "h-4 w-4" }) })] }, user.id))) })) : (jsx("div", { className: "text-sm text-gray-500 dark:text-gray-400 p-3 text-center border border-dashed border-gray-300 dark:border-gray-600 rounded-md", children: t('tabsPoliciestab.noUsersAdded') })), jsxs("div", { className: "relative", children: [jsx(Input, { value: userSearch, onChange: (e) => {
|
|
177746
177922
|
setUserSearch(e.target.value);
|
|
177747
177923
|
setShowUserSearch(e.target.value.length > 0);
|
|
177748
177924
|
}, onFocus: () => setShowUserSearch(userSearch.length > 0), placeholder: t('tabsPoliciestab.searchUsersPlaceholder') }), showUserSearch && availableUsers.length > 0 && (jsx("div", { className: "absolute top-full left-0 right-0 mt-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-md shadow-lg max-h-48 overflow-y-auto z-50", children: availableUsers.map((user) => (jsxs("button", { type: "button", onClick: () => addUser({
|
|
@@ -177757,7 +177933,7 @@ function PoliciesTab({ tenant }) {
|
|
|
177757
177933
|
name: group.name,
|
|
177758
177934
|
}), className: "w-full text-left px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700", children: jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: group.name }) }, group.id))) }))] })] })] })] }), jsxs(DialogFooter, { className: "mt-6", children: [jsx(Button$1, { variant: "outline", onClick: () => setIsOpen(false), children: t('tabsPoliciestab.cancel') }), jsx(TooltipProvider, { children: jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { tabIndex: 0, children: jsx(Button$1, { onClick: onSubmit, disabled: policyDetails === null || policyDetails === void 0 ? void 0 : policyDetails.is_internal, className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white", children: editing
|
|
177759
177935
|
? t('tabsPoliciestab.savePolicy')
|
|
177760
|
-
: t('tabsPoliciestab.createPolicy') }) }) }), editing && (policyDetails === null || policyDetails === void 0 ? void 0 : policyDetails.is_internal) && (jsx(TooltipContent, { children: jsx("p", { children: t('tabsPoliciestab.cannotEditInternal') }) }))] }) })] })] }) })] }));
|
|
177936
|
+
: t('tabsPoliciestab.createPolicy') }) }) }), editing && (policyDetails === null || policyDetails === void 0 ? void 0 : policyDetails.is_internal) && (jsx(TooltipContent, { children: jsx("p", { children: t('tabsPoliciestab.cannotEditInternal') }) }))] }) })] })] }) }), jsx(ResourcePickerModal, { open: isResourcePickerOpen, onOpenChange: setIsResourcePickerOpen, tenant: tenant, onSelect: addPickedResource })] }));
|
|
177761
177937
|
}
|
|
177762
177938
|
|
|
177763
177939
|
const PAGE_SIZE$7 = 10;
|
|
@@ -136,6 +136,41 @@
|
|
|
136
136
|
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
/* ============================================
|
|
140
|
+
ANIMATION VARIABLE REGISTRATION
|
|
141
|
+
============================================ */
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* tw-animate-css leaves its slide-in/out translate variables unregistered, so they
|
|
145
|
+
* inherit. Content portalled into an animating dialog panel (see
|
|
146
|
+
* FloatingPortalContainerContext) becomes a DOM descendant of it and picks up the
|
|
147
|
+
* panel's translate values, making dropdowns slide in from the panel's direction.
|
|
148
|
+
* Registering them with `inherits: false` stops the leak at the panel boundary.
|
|
149
|
+
*
|
|
150
|
+
* Upstream fixed this in tw-animate-css 1.3.1; these registrations are identical to
|
|
151
|
+
* theirs, so consumers on older versions are covered and a bump is a no-op.
|
|
152
|
+
*/
|
|
153
|
+
@property --tw-enter-translate-x {
|
|
154
|
+
syntax: '*';
|
|
155
|
+
inherits: false;
|
|
156
|
+
initial-value: 0;
|
|
157
|
+
}
|
|
158
|
+
@property --tw-exit-translate-x {
|
|
159
|
+
syntax: '*';
|
|
160
|
+
inherits: false;
|
|
161
|
+
initial-value: 0;
|
|
162
|
+
}
|
|
163
|
+
@property --tw-enter-translate-y {
|
|
164
|
+
syntax: '*';
|
|
165
|
+
inherits: false;
|
|
166
|
+
initial-value: 0;
|
|
167
|
+
}
|
|
168
|
+
@property --tw-exit-translate-y {
|
|
169
|
+
syntax: '*';
|
|
170
|
+
inherits: false;
|
|
171
|
+
initial-value: 0;
|
|
172
|
+
}
|
|
173
|
+
|
|
139
174
|
/* ============================================
|
|
140
175
|
UTILITY CLASSES - BACKGROUNDS
|
|
141
176
|
============================================ */
|
|
@@ -136,6 +136,41 @@
|
|
|
136
136
|
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
/* ============================================
|
|
140
|
+
ANIMATION VARIABLE REGISTRATION
|
|
141
|
+
============================================ */
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* tw-animate-css leaves its slide-in/out translate variables unregistered, so they
|
|
145
|
+
* inherit. Content portalled into an animating dialog panel (see
|
|
146
|
+
* FloatingPortalContainerContext) becomes a DOM descendant of it and picks up the
|
|
147
|
+
* panel's translate values, making dropdowns slide in from the panel's direction.
|
|
148
|
+
* Registering them with `inherits: false` stops the leak at the panel boundary.
|
|
149
|
+
*
|
|
150
|
+
* Upstream fixed this in tw-animate-css 1.3.1; these registrations are identical to
|
|
151
|
+
* theirs, so consumers on older versions are covered and a bump is a no-op.
|
|
152
|
+
*/
|
|
153
|
+
@property --tw-enter-translate-x {
|
|
154
|
+
syntax: '*';
|
|
155
|
+
inherits: false;
|
|
156
|
+
initial-value: 0;
|
|
157
|
+
}
|
|
158
|
+
@property --tw-exit-translate-x {
|
|
159
|
+
syntax: '*';
|
|
160
|
+
inherits: false;
|
|
161
|
+
initial-value: 0;
|
|
162
|
+
}
|
|
163
|
+
@property --tw-enter-translate-y {
|
|
164
|
+
syntax: '*';
|
|
165
|
+
inherits: false;
|
|
166
|
+
initial-value: 0;
|
|
167
|
+
}
|
|
168
|
+
@property --tw-exit-translate-y {
|
|
169
|
+
syntax: '*';
|
|
170
|
+
inherits: false;
|
|
171
|
+
initial-value: 0;
|
|
172
|
+
}
|
|
173
|
+
|
|
139
174
|
/* ============================================
|
|
140
175
|
UTILITY CLASSES - BACKGROUNDS
|
|
141
176
|
============================================ */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iblai/iblai-js",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.6",
|
|
4
4
|
"description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -66,10 +66,10 @@
|
|
|
66
66
|
"axios": "1.13.6",
|
|
67
67
|
"dotenv": "16.6.1",
|
|
68
68
|
"winston": "3.19.0",
|
|
69
|
-
"@iblai/mcp": "1.8.
|
|
70
|
-
"@iblai/
|
|
71
|
-
"@iblai/
|
|
72
|
-
"@iblai/web-utils": "1.13.
|
|
69
|
+
"@iblai/mcp": "1.8.2",
|
|
70
|
+
"@iblai/web-containers": "1.15.4",
|
|
71
|
+
"@iblai/data-layer": "1.9.5",
|
|
72
|
+
"@iblai/web-utils": "1.13.4"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"@radix-ui/react-dialog": "^1.1.7",
|