@iblai/iblai-js 2.39.1 → 2.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -256448,6 +256448,35 @@ function trimTrailingSlashes(value) {
256448
256448
  end -= 1;
256449
256449
  return end === value.length ? value : value.slice(0, end);
256450
256450
  }
256451
+ /**
256452
+ * Point a backend media link at the DM mount it is actually served from. When
256453
+ * DM sits behind a path prefix on the host app (`https://os.ibl.ai/backend/dm`),
256454
+ * the backend builds media URLs from the proxied request and drops that prefix
256455
+ * (`https://os.ibl.ai/media/...`, or a bare `/media/...`), which 404s. Only
256456
+ * `/media/` links on the DM host are rewritten; everything else passes through.
256457
+ */
256458
+ function resolveDmMediaUrl(url, dmUrl) {
256459
+ if (!url || !dmUrl)
256460
+ return url;
256461
+ const isRootRelative = url.startsWith('/') && !url.startsWith('//');
256462
+ if (!isRootRelative && !/^https?:\/\//i.test(url))
256463
+ return url;
256464
+ let dm;
256465
+ let target;
256466
+ try {
256467
+ dm = new URL(dmUrl);
256468
+ target = new URL(url, dm.origin);
256469
+ }
256470
+ catch (_a) {
256471
+ return url;
256472
+ }
256473
+ // Host, not origin: behind a TLS-terminating proxy the backend may build http:// links.
256474
+ if (target.host !== dm.host || !target.pathname.startsWith('/media/'))
256475
+ return url;
256476
+ target.protocol = dm.protocol;
256477
+ target.pathname = `${trimTrailingSlashes(dm.pathname)}${target.pathname}`;
256478
+ return target.href;
256479
+ }
256451
256480
 
256452
256481
  // Pure logic behind the application form (questions) editor. No React here so
256453
256482
  // it stays unit testable. The backend validates schemas on save and remains
@@ -260860,6 +260889,7 @@ function AgentSettingsProvider({ children, ...value }) {
260860
260889
  value.rbacPermissions,
260861
260890
  value.executeGatedAction,
260862
260891
  value.visibilityOptions,
260892
+ value.dmUrl,
260863
260893
  ]);
260864
260894
  return jsx(AgentSettingsContext.Provider, { value: ctx, children: children });
260865
260895
  }
@@ -287685,7 +287715,7 @@ const ProjectFilesModal$1 = lazy(() => Promise.resolve().then(function () { retu
287685
287715
  const AddMentorToProjectModal$1 = lazy(() => Promise.resolve().then(function () { return addMentorToProjectModal; }).then((mod) => ({
287686
287716
  default: mod.AddMentorToProjectModal,
287687
287717
  })));
287688
- function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, stopGenerating, tenantKey, username, enableSafetyDisclaimer, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, isPreviewMode, setMessage, mentorId, mentorUniqueId, projectId, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, userIsStudent, isPublicRoute, navigateToProject, showExploreMentors = false, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, }) {
287718
+ function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, stopGenerating, tenantKey, username, enableSafetyDisclaimer, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, isPreviewMode, setMessage, mentorId, mentorUniqueId, projectId, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, userIsStudent, isPublicRoute, navigateToProject, showExploreMentors = false, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, dmUrl, }) {
287689
287719
  const [isInstructionsModalOpen, setIsInstructionsModalOpen] = useState(false);
287690
287720
  const [isFilesModalOpen, setIsFilesModalOpen] = useState(false);
287691
287721
  const [isAddMentorModalOpen, setIsAddMentorModalOpen] = useState(false);
@@ -287711,7 +287741,7 @@ function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreen
287711
287741
  jsxs("div", { className: "flex h-full w-full flex-col", "data-testid": "project-landing-page", children: [jsxs("div", { className: "scrollbar-none flex min-h-0 flex-1 flex-col justify-center-safe gap-5 overflow-y-auto px-2 pt-2 pb-4", children: [header, context] }), jsx("div", { className: "w-full shrink-0", children: composer })] })) : (
287712
287742
  // Desktop: one centred 640px column — header, disclaimer + composer, then
287713
287743
  // the project's files, instructions and agents.
287714
- jsxs("div", { className: "scrollbar-none flex h-full w-full flex-col items-center justify-center-safe overflow-y-auto px-4 py-6", "data-testid": "project-landing-page", children: [header, jsx("div", { className: "w-full max-w-[640px] shrink-0", children: composer }), jsx("div", { className: "mt-5 flex w-full max-w-[640px] shrink-0 flex-col gap-7", children: context })] })), isInstructionsModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectInstructionsModal$1, { isOpen: isInstructionsModalOpen, onClose: () => setIsInstructionsModalOpen(false), tenantKey: tenantKey, projectId: projectId, username: username }) })), isFilesModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectFilesModal$1, { isOpen: isFilesModalOpen, onClose: () => setIsFilesModalOpen(false), tenantKey: tenantKey, mentorId: mentorId, username: username, disabledResourceTypes: disabledResourceTypes, maxUploadSizeMb: maxUploadSizeMb, dropboxExtensions: dropboxExtensions }) })), isAddMentorModalOpen && (jsx(Suspense, { fallback: null, children: jsx(AddMentorToProjectModal$1, { isOpen: isAddMentorModalOpen, onClose: () => setIsAddMentorModalOpen(false), projectName: project.name, tenantKey: tenantKey, projectId: projectId, username: username, isPublicRoute: isPublicRoute }) }))] }));
287744
+ jsxs("div", { className: "scrollbar-none flex h-full w-full flex-col items-center justify-center-safe overflow-y-auto px-4 py-6", "data-testid": "project-landing-page", children: [header, jsx("div", { className: "w-full max-w-[640px] shrink-0", children: composer }), jsx("div", { className: "mt-5 flex w-full max-w-[640px] shrink-0 flex-col gap-7", children: context })] })), isInstructionsModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectInstructionsModal$1, { isOpen: isInstructionsModalOpen, onClose: () => setIsInstructionsModalOpen(false), tenantKey: tenantKey, projectId: projectId, username: username }) })), isFilesModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectFilesModal$1, { isOpen: isFilesModalOpen, onClose: () => setIsFilesModalOpen(false), tenantKey: tenantKey, mentorId: mentorId, username: username, disabledResourceTypes: disabledResourceTypes, maxUploadSizeMb: maxUploadSizeMb, dropboxExtensions: dropboxExtensions, dmUrl: dmUrl }) })), isAddMentorModalOpen && (jsx(Suspense, { fallback: null, children: jsx(AddMentorToProjectModal$1, { isOpen: isAddMentorModalOpen, onClose: () => setIsAddMentorModalOpen(false), projectName: project.name, tenantKey: tenantKey, projectId: projectId, username: username, isPublicRoute: isPublicRoute }) }))] }));
287715
287745
  }
287716
287746
 
287717
287747
  function MinimumMentorAlert({ open, onOpenChange }) {
@@ -288009,7 +288039,7 @@ function DatasetItem({ dataset, onSelect, isSelected, labels }) {
288009
288039
  const [isDeleteDatasetModalOpen, setIsDeleteDatasetModalOpen] = React__default.useState(false);
288010
288040
  const [isRetrainScheduleModalOpen, setIsRetrainScheduleModalOpen] = React__default.useState(false);
288011
288041
  const [isTrainOrDeleteModalOpen, setIsTrainOrDeleteModalOpen] = React__default.useState(false);
288012
- const { tenantKey, username } = useAgentSettings();
288042
+ const { tenantKey, username, dmUrl } = useAgentSettings();
288013
288043
  const [editTrainingDocument, { isLoading: isEditTrainingDocumentLoading }] = useEditTrainingDocumentMutation();
288014
288044
  const handleEditTrainingDocument = async (data, callback) => {
288015
288045
  try {
@@ -288055,7 +288085,7 @@ function DatasetItem({ dataset, onSelect, isSelected, labels }) {
288055
288085
  };
288056
288086
  return (jsxs(Fragment$1, { children: [jsxs(TableRow, { className: `border-b last:border-0 ${onSelect ? 'hover:bg-muted/50 cursor-pointer' : ''} ${isSelected ? 'bg-blue-50' : ''}`, onClick: onSelect ? () => onSelect(dataset) : undefined, children: [jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx(TableCell, { className: "max-w-[200px] truncate p-3 font-medium whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: ['document_name', 'url'],
288057
288087
  // @ts-ignore
288058
- permissions: (_a = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _a === void 0 ? void 0 : _a.field, children: () => (jsx("a", { href: dataset.url, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800 hover:underline", children: dataset.document_name || dataset.url })) }) }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300", children: jsx("p", { children: dataset.document_name || dataset.url }) })] }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: "document_type",
288088
+ permissions: (_a = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _a === void 0 ? void 0 : _a.field, children: () => (jsx("a", { href: resolveDmMediaUrl(dataset.url, dmUrl), target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800 hover:underline", children: dataset.document_name || dataset.url })) }) }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300", children: jsx("p", { children: dataset.document_name || dataset.url }) })] }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: "document_type",
288059
288089
  // @ts-ignore
288060
288090
  permissions: (_b = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _b === void 0 ? void 0 : _b.field, children: () => {
288061
288091
  var _a, _b;
@@ -289666,7 +289696,7 @@ const PROJECT_FILES_DATASET_LABELS = resolveDatasetsTabLabels({
289666
289696
  table: { emptyState: 'No files found' },
289667
289697
  });
289668
289698
  function ProjectFilesModal(props) {
289669
- return (jsx(AgentSettingsProvider, { tenantKey: props.tenantKey, mentorId: props.mentorId, username: props.username, enableRBAC: false, children: jsx(ProjectFilesModalInner, { ...props }) }));
289699
+ return (jsx(AgentSettingsProvider, { tenantKey: props.tenantKey, mentorId: props.mentorId, username: props.username, enableRBAC: false, dmUrl: props.dmUrl, children: jsx(ProjectFilesModalInner, { ...props }) }));
289670
289700
  }
289671
289701
  function ProjectFilesModalInner({ isOpen, onClose, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, }) {
289672
289702
  var _a;
@@ -288317,6 +288317,35 @@ function trimTrailingSlashes(value) {
288317
288317
  end -= 1;
288318
288318
  return end === value.length ? value : value.slice(0, end);
288319
288319
  }
288320
+ /**
288321
+ * Point a backend media link at the DM mount it is actually served from. When
288322
+ * DM sits behind a path prefix on the host app (`https://os.ibl.ai/backend/dm`),
288323
+ * the backend builds media URLs from the proxied request and drops that prefix
288324
+ * (`https://os.ibl.ai/media/...`, or a bare `/media/...`), which 404s. Only
288325
+ * `/media/` links on the DM host are rewritten; everything else passes through.
288326
+ */
288327
+ function resolveDmMediaUrl(url, dmUrl) {
288328
+ if (!url || !dmUrl)
288329
+ return url;
288330
+ const isRootRelative = url.startsWith('/') && !url.startsWith('//');
288331
+ if (!isRootRelative && !/^https?:\/\//i.test(url))
288332
+ return url;
288333
+ let dm;
288334
+ let target;
288335
+ try {
288336
+ dm = new URL(dmUrl);
288337
+ target = new URL(url, dm.origin);
288338
+ }
288339
+ catch (_a) {
288340
+ return url;
288341
+ }
288342
+ // Host, not origin: behind a TLS-terminating proxy the backend may build http:// links.
288343
+ if (target.host !== dm.host || !target.pathname.startsWith('/media/'))
288344
+ return url;
288345
+ target.protocol = dm.protocol;
288346
+ target.pathname = `${trimTrailingSlashes(dm.pathname)}${target.pathname}`;
288347
+ return target.href;
288348
+ }
288320
288349
 
288321
288350
  // Pure logic behind the application form (questions) editor. No React here so
288322
288351
  // it stays unit testable. The backend validates schemas on save and remains
@@ -292645,6 +292674,7 @@ function AgentSettingsProvider({ children, ...value }) {
292645
292674
  value.rbacPermissions,
292646
292675
  value.executeGatedAction,
292647
292676
  value.visibilityOptions,
292677
+ value.dmUrl,
292648
292678
  ]);
292649
292679
  return jsx(AgentSettingsContext.Provider, { value: ctx, children: children });
292650
292680
  }
@@ -307758,7 +307788,7 @@ const ProjectFilesModal$1 = lazy(() => Promise.resolve().then(function () { retu
307758
307788
  const AddMentorToProjectModal$1 = lazy(() => Promise.resolve().then(function () { return addMentorToProjectModal; }).then((mod) => ({
307759
307789
  default: mod.AddMentorToProjectModal,
307760
307790
  })));
307761
- function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, stopGenerating, tenantKey, username, enableSafetyDisclaimer, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, isPreviewMode, setMessage, mentorId, mentorUniqueId, projectId, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, userIsStudent, isPublicRoute, navigateToProject, showExploreMentors = false, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, }) {
307791
+ function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreenSharingClick, isScreenSharingModalOpen, onPhoneCallClick, stopGenerating, tenantKey, username, enableSafetyDisclaimer, enableWebBrowsing, isStreaming, updateSessionTools, setSessionTools, activeTools, screenSharing, deepResearch, studyMode, imageGeneration, codeInterpreter, promptsIsEnabled, isPreviewMode, setMessage, mentorId, mentorUniqueId, projectId, googleSlidesIsEnabled, googleDocumentIsEnabled, artifactsEnabled, userIsStudent, isPublicRoute, navigateToProject, showExploreMentors = false, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, dmUrl, }) {
307762
307792
  const [isInstructionsModalOpen, setIsInstructionsModalOpen] = useState(false);
307763
307793
  const [isFilesModalOpen, setIsFilesModalOpen] = useState(false);
307764
307794
  const [isAddMentorModalOpen, setIsAddMentorModalOpen] = useState(false);
@@ -307784,7 +307814,7 @@ function ProjectLandingPage({ project, mentorName, sessionId, onSubmit, onScreen
307784
307814
  jsxs("div", { className: "flex h-full w-full flex-col", "data-testid": "project-landing-page", children: [jsxs("div", { className: "scrollbar-none flex min-h-0 flex-1 flex-col justify-center-safe gap-5 overflow-y-auto px-2 pt-2 pb-4", children: [header, context] }), jsx("div", { className: "w-full shrink-0", children: composer })] })) : (
307785
307815
  // Desktop: one centred 640px column — header, disclaimer + composer, then
307786
307816
  // the project's files, instructions and agents.
307787
- jsxs("div", { className: "scrollbar-none flex h-full w-full flex-col items-center justify-center-safe overflow-y-auto px-4 py-6", "data-testid": "project-landing-page", children: [header, jsx("div", { className: "w-full max-w-[640px] shrink-0", children: composer }), jsx("div", { className: "mt-5 flex w-full max-w-[640px] shrink-0 flex-col gap-7", children: context })] })), isInstructionsModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectInstructionsModal$1, { isOpen: isInstructionsModalOpen, onClose: () => setIsInstructionsModalOpen(false), tenantKey: tenantKey, projectId: projectId, username: username }) })), isFilesModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectFilesModal$1, { isOpen: isFilesModalOpen, onClose: () => setIsFilesModalOpen(false), tenantKey: tenantKey, mentorId: mentorId, username: username, disabledResourceTypes: disabledResourceTypes, maxUploadSizeMb: maxUploadSizeMb, dropboxExtensions: dropboxExtensions }) })), isAddMentorModalOpen && (jsx(Suspense, { fallback: null, children: jsx(AddMentorToProjectModal$1, { isOpen: isAddMentorModalOpen, onClose: () => setIsAddMentorModalOpen(false), projectName: project.name, tenantKey: tenantKey, projectId: projectId, username: username, isPublicRoute: isPublicRoute }) }))] }));
307817
+ jsxs("div", { className: "scrollbar-none flex h-full w-full flex-col items-center justify-center-safe overflow-y-auto px-4 py-6", "data-testid": "project-landing-page", children: [header, jsx("div", { className: "w-full max-w-[640px] shrink-0", children: composer }), jsx("div", { className: "mt-5 flex w-full max-w-[640px] shrink-0 flex-col gap-7", children: context })] })), isInstructionsModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectInstructionsModal$1, { isOpen: isInstructionsModalOpen, onClose: () => setIsInstructionsModalOpen(false), tenantKey: tenantKey, projectId: projectId, username: username }) })), isFilesModalOpen && (jsx(Suspense, { fallback: null, children: jsx(ProjectFilesModal$1, { isOpen: isFilesModalOpen, onClose: () => setIsFilesModalOpen(false), tenantKey: tenantKey, mentorId: mentorId, username: username, disabledResourceTypes: disabledResourceTypes, maxUploadSizeMb: maxUploadSizeMb, dropboxExtensions: dropboxExtensions, dmUrl: dmUrl }) })), isAddMentorModalOpen && (jsx(Suspense, { fallback: null, children: jsx(AddMentorToProjectModal$1, { isOpen: isAddMentorModalOpen, onClose: () => setIsAddMentorModalOpen(false), projectName: project.name, tenantKey: tenantKey, projectId: projectId, username: username, isPublicRoute: isPublicRoute }) }))] }));
307788
307818
  }
307789
307819
 
307790
307820
  function MinimumMentorAlert({ open, onOpenChange }) {
@@ -308082,7 +308112,7 @@ function DatasetItem({ dataset, onSelect, isSelected, labels }) {
308082
308112
  const [isDeleteDatasetModalOpen, setIsDeleteDatasetModalOpen] = React__default.useState(false);
308083
308113
  const [isRetrainScheduleModalOpen, setIsRetrainScheduleModalOpen] = React__default.useState(false);
308084
308114
  const [isTrainOrDeleteModalOpen, setIsTrainOrDeleteModalOpen] = React__default.useState(false);
308085
- const { tenantKey, username } = useAgentSettings();
308115
+ const { tenantKey, username, dmUrl } = useAgentSettings();
308086
308116
  const [editTrainingDocument, { isLoading: isEditTrainingDocumentLoading }] = useEditTrainingDocumentMutation();
308087
308117
  const handleEditTrainingDocument = async (data, callback) => {
308088
308118
  try {
@@ -308128,7 +308158,7 @@ function DatasetItem({ dataset, onSelect, isSelected, labels }) {
308128
308158
  };
308129
308159
  return (jsxs(Fragment$1, { children: [jsxs(TableRow, { className: `border-b last:border-0 ${onSelect ? 'hover:bg-muted/50 cursor-pointer' : ''} ${isSelected ? 'bg-blue-50' : ''}`, onClick: onSelect ? () => onSelect(dataset) : undefined, children: [jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx(TableCell, { className: "max-w-[200px] truncate p-3 font-medium whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: ['document_name', 'url'],
308130
308160
  // @ts-ignore
308131
- permissions: (_a = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _a === void 0 ? void 0 : _a.field, children: () => (jsx("a", { href: dataset.url, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800 hover:underline", children: dataset.document_name || dataset.url })) }) }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300", children: jsx("p", { children: dataset.document_name || dataset.url }) })] }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: "document_type",
308161
+ permissions: (_a = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _a === void 0 ? void 0 : _a.field, children: () => (jsx("a", { href: resolveDmMediaUrl(dataset.url, dmUrl), target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800 hover:underline", children: dataset.document_name || dataset.url })) }) }) }), jsx(TooltipContent, { className: "bg-gray-700 px-3 py-2 text-sm font-medium whitespace-nowrap text-white shadow-sm transition-opacity duration-300", children: jsx("p", { children: dataset.document_name || dataset.url }) })] }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: jsx(WithFormPermissions, { name: "document_type",
308132
308162
  // @ts-ignore
308133
308163
  permissions: (_b = dataset === null || dataset === void 0 ? void 0 : dataset.permissions) === null || _b === void 0 ? void 0 : _b.field, children: () => {
308134
308164
  var _a, _b;
@@ -309739,7 +309769,7 @@ const PROJECT_FILES_DATASET_LABELS = resolveDatasetsTabLabels({
309739
309769
  table: { emptyState: 'No files found' },
309740
309770
  });
309741
309771
  function ProjectFilesModal(props) {
309742
- return (jsx(AgentSettingsProvider, { tenantKey: props.tenantKey, mentorId: props.mentorId, username: props.username, enableRBAC: false, children: jsx(ProjectFilesModalInner, { ...props }) }));
309772
+ return (jsx(AgentSettingsProvider, { tenantKey: props.tenantKey, mentorId: props.mentorId, username: props.username, enableRBAC: false, dmUrl: props.dmUrl, children: jsx(ProjectFilesModalInner, { ...props }) }));
309743
309773
  }
309744
309774
  function ProjectFilesModalInner({ isOpen, onClose, disabledResourceTypes, maxUploadSizeMb, dropboxExtensions, }) {
309745
309775
  var _a;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iblai/iblai-js",
3
- "version": "2.39.1",
3
+ "version": "2.40.0",
4
4
  "description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
5
5
  "type": "module",
6
6
  "engines": {
@@ -76,8 +76,8 @@
76
76
  "axios": "1.13.6",
77
77
  "dotenv": "16.6.1",
78
78
  "winston": "3.19.0",
79
- "@iblai/mcp": "1.30.0",
80
- "@iblai/web-containers": "1.43.1",
79
+ "@iblai/mcp": "1.31.0",
80
+ "@iblai/web-containers": "1.44.0",
81
81
  "@iblai/data-layer": "1.30.1",
82
82
  "@iblai/web-utils": "2.9.0"
83
83
  },