@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., /platforms/{pk}/projects, /platforms/{pk}/mentors/*",
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. : /platforms/{pk}/projects, /platforms/{pk}/mentors/*",
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: "ej., /platforms/{pk}/projects, /platforms/{pk}/mentors/*",
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: "例如:/platforms/{pk}/projects, /platforms/{pk}/mentors/*",
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.4",
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.1",
70
- "@iblai/data-layer": "1.9.4",
71
- "@iblai/web-containers": "1.15.2",
72
- "@iblai/web-utils": "1.13.3"
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",