@powerhousedao/connect 6.2.2-dev.76 → 6.2.2-dev.78

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.
Files changed (88) hide show
  1. package/dist/{AddDriveModal-Bw0YuxZg.js → AddDriveModal-Q-Ffh5XA.js} +4 -4
  2. package/dist/{AddDriveModal-Bw0YuxZg.js.map → AddDriveModal-Q-Ffh5XA.js.map} +1 -1
  3. package/dist/{ClearStorageModal-tXyJ2dGV.js → ClearStorageModal-rKAE3cvA.js} +4 -4
  4. package/dist/{ClearStorageModal-tXyJ2dGV.js.map → ClearStorageModal-rKAE3cvA.js.map} +1 -1
  5. package/dist/{ConfirmDocumentUpgradeModal-9AaaQJTs.js → ConfirmDocumentUpgradeModal-FUOhZsk7.js} +4 -4
  6. package/dist/{ConfirmDocumentUpgradeModal-9AaaQJTs.js.map → ConfirmDocumentUpgradeModal-FUOhZsk7.js.map} +1 -1
  7. package/dist/{CookiesPolicyModal-CQ-zHJdw.js → CookiesPolicyModal-BpyPPyxS.js} +3 -3
  8. package/dist/{CookiesPolicyModal-CQ-zHJdw.js.map → CookiesPolicyModal-BpyPPyxS.js.map} +1 -1
  9. package/dist/{CreateDocumentModal-NNi4p6EI.js → CreateDocumentModal-C45W8J0V.js} +3 -3
  10. package/dist/{CreateDocumentModal-NNi4p6EI.js.map → CreateDocumentModal-C45W8J0V.js.map} +1 -1
  11. package/dist/{DebugSettingsModal-CE3uHISS.js → DebugSettingsModal-f7mphH92.js} +6 -6
  12. package/dist/{DebugSettingsModal-CE3uHISS.js.map → DebugSettingsModal-f7mphH92.js.map} +1 -1
  13. package/dist/{DeleteDriveModal-C7fnXMsR.js → DeleteDriveModal-Dug84t1j.js} +4 -4
  14. package/dist/{DeleteDriveModal-C7fnXMsR.js.map → DeleteDriveModal-Dug84t1j.js.map} +1 -1
  15. package/dist/{DeleteItemModal-BK_Y8Thj.js → DeleteItemModal-mMzy3V8o.js} +4 -4
  16. package/dist/{DeleteItemModal-BK_Y8Thj.js.map → DeleteItemModal-mMzy3V8o.js.map} +1 -1
  17. package/dist/{DisclaimerModal-DJPHCnFY.js → DisclaimerModal-DvpD5dPM.js} +3 -3
  18. package/dist/{DisclaimerModal-DJPHCnFY.js.map → DisclaimerModal-DvpD5dPM.js.map} +1 -1
  19. package/dist/{DocumentVersionUnsupportedModal-tBHLK6b1.js → DocumentVersionUnsupportedModal-C3Q0V75l.js} +3 -3
  20. package/dist/{DocumentVersionUnsupportedModal-tBHLK6b1.js.map → DocumentVersionUnsupportedModal-C3Q0V75l.js.map} +1 -1
  21. package/dist/{DownloadDocumentWithErrorsModal-sWu46HVB.js → DownloadDocumentWithErrorsModal-IKl0ljQb.js} +3 -3
  22. package/dist/{DownloadDocumentWithErrorsModal-sWu46HVB.js.map → DownloadDocumentWithErrorsModal-IKl0ljQb.js.map} +1 -1
  23. package/dist/{DriveAuthRequiredModal-D3IPAst0.js → DriveAuthRequiredModal-Cw9eCAQ_.js} +4 -4
  24. package/dist/{DriveAuthRequiredModal-D3IPAst0.js.map → DriveAuthRequiredModal-Cw9eCAQ_.js.map} +1 -1
  25. package/dist/{DriveSettingsModal-7OKx8foy.js → DriveSettingsModal-C6-mRQiv.js} +3 -3
  26. package/dist/{DriveSettingsModal-7OKx8foy.js.map → DriveSettingsModal-C6-mRQiv.js.map} +1 -1
  27. package/dist/{InspectorModal-BV9QR1MZ.js → InspectorModal-C2usotS-.js} +6 -6
  28. package/dist/{InspectorModal-BV9QR1MZ.js.map → InspectorModal-C2usotS-.js.map} +1 -1
  29. package/dist/{LoginModal-Cd2wGgG4.js → LoginModal-CybbOm3N.js} +4 -4
  30. package/dist/{LoginModal-Cd2wGgG4.js.map → LoginModal-CybbOm3N.js.map} +1 -1
  31. package/dist/{MissingPackageModal-DyP2-Ojb.js → MissingPackageModal-C7usWVHQ.js} +3 -3
  32. package/dist/{MissingPackageModal-DyP2-Ojb.js.map → MissingPackageModal-C7usWVHQ.js.map} +1 -1
  33. package/dist/{OpenFileDocumentsModal-DQ0Slw9y.js → OpenFileDocumentsModal-e_TKIuB4.js} +4 -4
  34. package/dist/{OpenFileDocumentsModal-DQ0Slw9y.js.map → OpenFileDocumentsModal-e_TKIuB4.js.map} +1 -1
  35. package/dist/{SettingsModal-Dk-Kp4kl.js → SettingsModal-DbIlDH70.js} +274 -8
  36. package/dist/SettingsModal-DbIlDH70.js.map +1 -0
  37. package/dist/{UpgradeDriveModal-wo5oO9mg.js → UpgradeDriveModal-_8t9slxQ.js} +3 -3
  38. package/dist/{UpgradeDriveModal-wo5oO9mg.js.map → UpgradeDriveModal-_8t9slxQ.js.map} +1 -1
  39. package/dist/{app-loader-VDeDZD5T.js → app-loader-Cl4p5jBL.js} +302 -408
  40. package/dist/app-loader-Cl4p5jBL.js.map +1 -0
  41. package/dist/app-loader-x1CpaZj-.js +4 -0
  42. package/dist/build-info-BIPBq41n.js +28 -0
  43. package/dist/build-info-BIPBq41n.js.map +1 -0
  44. package/dist/components-DYfZ0Q9B.js +4 -0
  45. package/dist/{connect.config-C-b_Yhd6.js → connect.config-ZWoeCSit.js} +6 -5
  46. package/dist/connect.config-ZWoeCSit.js.map +1 -0
  47. package/dist/{connection-state-KCa1yljA.js → connection-state-CedmAXd-.js} +4 -4
  48. package/dist/{connection-state-KCa1yljA.js.map → connection-state-CedmAXd-.js.map} +1 -1
  49. package/dist/cookie-banner-CTxjAKt4.js +70 -0
  50. package/dist/cookie-banner-CTxjAKt4.js.map +1 -0
  51. package/dist/{reload-connect-toast-DDQEupCN.js → i18n-CWO0vYVd.js} +5 -30
  52. package/dist/i18n-CWO0vYVd.js.map +1 -0
  53. package/dist/load-D_5q8fky.js +131 -0
  54. package/dist/load-D_5q8fky.js.map +1 -0
  55. package/dist/main.js +1 -1
  56. package/dist/{pglite-seed-DRXPe7p-.js → pglite-seed-B7bWZwVg.js} +4 -4
  57. package/dist/{pglite-seed-DRXPe7p-.js.map → pglite-seed-B7bWZwVg.js.map} +1 -1
  58. package/dist/preferences-store-CUBzmf5F.js +104 -0
  59. package/dist/preferences-store-CUBzmf5F.js.map +1 -0
  60. package/dist/{pwa-manifest-link-CG8UajMz.js → pwa-manifest-link-DIgOSo2Q.js} +3 -3
  61. package/dist/{pwa-manifest-link-CG8UajMz.js.map → pwa-manifest-link-DIgOSo2Q.js.map} +1 -1
  62. package/dist/{reactor-Dn5J8dOX.js → reactor-Dp-5PAKA.js} +8 -8
  63. package/dist/{reactor-Dn5J8dOX.js.map → reactor-Dp-5PAKA.js.map} +1 -1
  64. package/dist/{registerServiceWorker-Bn1KWmk0.js → registerServiceWorker-lSZgPKiH.js} +5 -5
  65. package/dist/{registerServiceWorker-Bn1KWmk0.js.map → registerServiceWorker-lSZgPKiH.js.map} +1 -1
  66. package/dist/sentry-QXKgQmr2.js +15 -0
  67. package/dist/sentry-QXKgQmr2.js.map +1 -0
  68. package/dist/start-connect.js +1 -1
  69. package/dist/style.css +143 -0
  70. package/dist/{toast-CO6ChlzE.js → toast-BXIGd4Eb.js} +3 -3
  71. package/dist/{toast-CO6ChlzE.js.map → toast-BXIGd4Eb.js.map} +1 -1
  72. package/dist/{use-renown-login-BtGljnB4.js → use-renown-login-Cf3va6u_.js} +3 -3
  73. package/dist/{use-renown-login-BtGljnB4.js.map → use-renown-login-Cf3va6u_.js.map} +1 -1
  74. package/package.json +12 -11
  75. package/public/powerhouse.config.json +9 -1
  76. package/style.css +1 -0
  77. package/dist/SettingsModal-Dk-Kp4kl.js.map +0 -1
  78. package/dist/app-loader-BffxIMi7.js +0 -4
  79. package/dist/app-loader-VDeDZD5T.js.map +0 -1
  80. package/dist/build-info-B8kMAY35.js +0 -18
  81. package/dist/build-info-B8kMAY35.js.map +0 -1
  82. package/dist/components-jBXd290x.js +0 -5
  83. package/dist/connect.config-C-b_Yhd6.js.map +0 -1
  84. package/dist/load-DUCtfMW3.js +0 -100
  85. package/dist/load-DUCtfMW3.js.map +0 -1
  86. package/dist/package-ZLxXINym.js +0 -132
  87. package/dist/package-ZLxXINym.js.map +0 -1
  88. package/dist/reload-connect-toast-DDQEupCN.js.map +0 -1
@@ -1,26 +1,29 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6a224997-414f-5c96-97a5-27ace9783f59")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f20d7330-c3fe-5c88-baef-ea4af0179c28")}catch(e){}}();
3
3
  import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
4
4
  import { c as idbError } from "./pglite-major-B39aOEiE.js";
5
5
  import { n as cloneFileData, r as migrateIdb } from "./pglite-migrate-core-Boxqqx-c.js";
6
- import { i as i18n, n as setSentryModule } from "./reload-connect-toast-DDQEupCN.js";
7
- import { a as defaultPHDocumentEditorConfig, i as defaultPHAppConfig, r as connectConfig } from "./connect.config-C-b_Yhd6.js";
8
- import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-KCa1yljA.js";
9
- import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-Bn1KWmk0.js";
10
- import { n as dismissToast, r as toast, t as ToastContainer } from "./toast-CO6ChlzE.js";
11
- import { t as useOpenRenownLogin } from "./use-renown-login-BtGljnB4.js";
6
+ import { a as defaultPHDocumentEditorConfig, i as defaultPHAppConfig, r as connectConfig } from "./connect.config-ZWoeCSit.js";
7
+ import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-CedmAXd-.js";
8
+ import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-lSZgPKiH.js";
9
+ import { t as setSentryModule } from "./sentry-QXKgQmr2.js";
10
+ import { i as useIsEmbedded, r as getIsEmbedded, t as useAcceptedCookies } from "./preferences-store-CUBzmf5F.js";
11
+ import { n as dismissToast, r as toast, t as ToastContainer } from "./toast-BXIGd4Eb.js";
12
+ import { t as useOpenRenownLogin } from "./use-renown-login-Cf3va6u_.js";
12
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
- import { Trans, useTranslation } from "react-i18next";
14
+ import { useTranslation } from "react-i18next";
14
15
  import React, { StrictMode, Suspense, createElement, lazy, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
15
16
  import { DriveCollectionId, RenownWalletProvider, addFileWithProgress, getRevisionFromDate, initTheme, logout, setPHAppConfig, setPHDocumentEditorConfig, setRevisionHistoryVisible, setSelectedDrive, setSelectedNode, showPHModal, useAppModuleById, useConnectionStates, useDefaultAppModule, useDocumentById, useDocumentModelModuleById, useDocumentOperations, useDocumentVersionStatus, useDrives, useEditorModuleById, useEditorPreloader, useFallbackEditorModule, useIsAddDriveEnabled, useNodeParentFolderById, usePHModal, usePackageDiscoveryService, useReactorClientModule, useRevisionHistoryVisible, useSelectedDocument, useSelectedDocumentId, useSelectedDriveSafe, useSelectedFolder, useSelectedTimelineItem, useSyncList, useTheme, useUser, useVetraPackageManager, useVetraPackages } from "@powerhousedao/reactor-browser";
16
17
  import { childLogger } from "document-model";
17
- import { ConnectSidebar, ConnectTooltipProvider, CookieBanner, DefaultEditorLoader, DriveAuthGate, DropZoneWrapper, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, LogoAnimation, PackageInstallModal, RevisionHistory, SidebarAddDriveItem, SidebarItem, UploadFileListContainer, formatFileSize, mapProgressStageToStatus, useEns } from "@powerhousedao/design-system/connect";
18
- import { z } from "zod";
18
+ import { ConnectSidebar, ConnectTooltipProvider, DefaultEditorLoader, DriveAuthGate, DropZoneWrapper, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, LogoAnimation, PackageInstallModal, RevisionHistory, SidebarAddDriveItem, SidebarItem, UploadFileListContainer, formatFileSize, mapProgressStageToStatus, useEns } from "@powerhousedao/design-system/connect";
19
19
  import { Outlet, RouterProvider, createBrowserRouter, createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from "react-router-dom";
20
20
  import { useHotkeys } from "react-hotkeys-hook";
21
21
  import { Icon, Modal, PowerhouseButton } from "@powerhousedao/design-system";
22
22
  import { ErrorBoundary } from "react-error-boundary";
23
+ import { z } from "zod";
23
24
  import { GenericDriveExplorer } from "@powerhousedao/powerhouse-vetra-packages/editors";
25
+ import { createReactorMcpProvider } from "@powerhousedao/reactor-mcp/tools";
26
+ import { ReactorChatFab } from "@powerhousedao/reactor-browser/ai";
24
27
  import { twMerge } from "tailwind-merge";
25
28
  import { mockAdapter } from "@renown/sdk/wallet/mock";
26
29
  import { privyAdapter } from "@renown/sdk/wallet/privy";
@@ -153,17 +156,17 @@ function initLaunchQueueFileHandling() {
153
156
  //#endregion
154
157
  //#region src/utils/open-file-uploads.ts
155
158
  let uploads = [];
156
- const listeners$3 = /* @__PURE__ */ new Set();
159
+ const listeners$1 = /* @__PURE__ */ new Set();
157
160
  function notifyUploadListeners() {
158
- for (const listener of listeners$3) listener();
161
+ for (const listener of listeners$1) listener();
159
162
  }
160
163
  function getOpenFileUploads() {
161
164
  return uploads;
162
165
  }
163
166
  function subscribeOpenFileUploads(cb) {
164
- listeners$3.add(cb);
167
+ listeners$1.add(cb);
165
168
  return () => {
166
- listeners$3.delete(cb);
169
+ listeners$1.delete(cb);
167
170
  };
168
171
  }
169
172
  function removeOpenFileUpload(id) {
@@ -260,18 +263,18 @@ function runOpenFileImports(args) {
260
263
  //#endregion
261
264
  //#region src/components/migration-status.ts
262
265
  let current = null;
263
- const listeners$2 = /* @__PURE__ */ new Set();
266
+ const listeners = /* @__PURE__ */ new Set();
264
267
  function setMigrationStatus(status) {
265
268
  current = status;
266
- for (const l of listeners$2) l();
269
+ for (const l of listeners) l();
267
270
  }
268
271
  function getMigrationStatus() {
269
272
  return current;
270
273
  }
271
274
  function subscribeMigrationStatus(cb) {
272
- listeners$2.add(cb);
275
+ listeners.add(cb);
273
276
  return () => {
274
- listeners$2.delete(cb);
277
+ listeners.delete(cb);
275
278
  };
276
279
  }
277
280
  //#endregion
@@ -390,312 +393,6 @@ async function migrateAllIfNeeded() {
390
393
  });
391
394
  }
392
395
  //#endregion
393
- //#region src/hooks/useAcceptedCookies.ts
394
- const ACCEPTED_COOKIES_KEY_STORAGE = `${connectConfig.routerBasename}:acceptedCookies`;
395
- const listeners$1 = /* @__PURE__ */ new Set();
396
- let cookies = getInitial$1();
397
- function getInitial$1() {
398
- try {
399
- const value = localStorage.getItem(ACCEPTED_COOKIES_KEY_STORAGE);
400
- return value ? JSON.parse(value) : {
401
- analytics: false,
402
- marketing: false,
403
- functional: false
404
- };
405
- } catch {
406
- return {
407
- analytics: false,
408
- marketing: false,
409
- functional: false
410
- };
411
- }
412
- }
413
- function getCookies() {
414
- return cookies;
415
- }
416
- function setCookies(setter) {
417
- cookies = setter(cookies);
418
- localStorage.setItem(ACCEPTED_COOKIES_KEY_STORAGE, JSON.stringify(cookies));
419
- listeners$1.forEach((fn) => fn());
420
- }
421
- function subscribe$1(fn) {
422
- listeners$1.add(fn);
423
- return () => listeners$1.delete(fn);
424
- }
425
- const useAcceptedCookies = () => {
426
- return [useSyncExternalStore(subscribe$1, getCookies, getCookies), setCookies];
427
- };
428
- //#endregion
429
- //#region src/services/openpanel/buffer.ts
430
- const buffer = [];
431
- let errorHandler;
432
- function defaultOnError(err) {
433
- console.warn("[useOpenPanelAnalytics] track failed:", err);
434
- }
435
- /**
436
- * Forward a single event to the active client, swallowing any throw.
437
- *
438
- * The outer try/catch handles synchronous throws from `client.track`; the
439
- * inner `.catch()` handles rejected promises. Both are needed because
440
- * `Promise.resolve(x).catch()` cannot catch a throw from evaluating `x`.
441
- */
442
- function forward(client, name, props) {
443
- try {
444
- Promise.resolve(client.track(name, props)).catch((err) => (errorHandler ?? defaultOnError)(err));
445
- } catch (err) {
446
- (errorHandler ?? defaultOnError)(err);
447
- }
448
- }
449
- /**
450
- * Drain the pre-init buffer in FIFO order through `client.track`, then forward
451
- * subsequent events directly. Called once from `getOpenPanelClient()`.
452
- */
453
- function drainOpenPanelBuffer(client, onError) {
454
- errorHandler = onError;
455
- const pending = buffer.splice(0, buffer.length);
456
- for (const [name, props] of pending) forward(client, name, props);
457
- }
458
- /**
459
- * Clear the buffer and reset the active client. Buffered pre-consent events
460
- * are discarded so they are not replayed if the user later re-accepts.
461
- */
462
- function clearOpenPanelBuffer() {
463
- buffer.length = 0;
464
- errorHandler = void 0;
465
- }
466
- //#endregion
467
- //#region src/services/openpanel/client.ts
468
- let client;
469
- /**
470
- * Returns the cached `OpenPanel` singleton, building it on first call.
471
- *
472
- * When `config.clientId` is empty it returns `undefined` without importing
473
- * `@openpanel/web`, so the bundler can tree-shake the SDK out of production.
474
- */
475
- async function getOpenPanelClient(config) {
476
- if (!config.clientId) return;
477
- if (client) return client;
478
- const { OpenPanel: OpenPanelClass } = await import("@openpanel/web");
479
- client = new OpenPanelClass({
480
- clientId: config.clientId,
481
- ...config.apiUrl ? { apiUrl: config.apiUrl } : {},
482
- trackScreenViews: true,
483
- trackOutgoingLinks: true
484
- });
485
- client.setGlobalProperties({ app: "connect" });
486
- drainOpenPanelBuffer(client);
487
- return client;
488
- }
489
- /**
490
- * Clears the cached singleton and the pre-init buffer. Call on consent
491
- * revocation or during tests; buffered events are discarded, not replayed.
492
- */
493
- function resetOpenPanelClient() {
494
- client = void 0;
495
- clearOpenPanelBuffer();
496
- }
497
- //#endregion
498
- //#region src/services/openpanel/events.json
499
- var events_default = [
500
- {
501
- "documentType": "powerhouse/document-drive",
502
- "actionTypes": [
503
- "ADD_FOLDER",
504
- "DELETE_NODE",
505
- "ADD_FILE",
506
- "UPDATE_FILE",
507
- "COPY_NODE",
508
- "MOVE_NODE",
509
- "SET_DRIVE_NAME",
510
- "SET_DRIVE_ICON"
511
- ]
512
- },
513
- {
514
- "documentType": "powerhouse/document-model",
515
- "actionTypes": [
516
- "SET_MODEL_NAME",
517
- "SET_MODEL_ID",
518
- "ADD_MODULE",
519
- "DELETE_MODULE",
520
- "ADD_OPERATION",
521
- "DELETE_OPERATION"
522
- ]
523
- },
524
- {
525
- "documentType": "powerhouse/reactor-drive",
526
- "actionTypes": [
527
- "ADD_FOLDER",
528
- "REMOVE_FOLDER",
529
- "UPDATE_FOLDER"
530
- ]
531
- }
532
- ];
533
- //#endregion
534
- //#region src/services/openpanel/events.ts
535
- const EventMappingSchema = z.object({
536
- documentType: z.string().min(1),
537
- actionTypes: z.array(z.string().min(1)).min(1),
538
- alias: z.string().optional()
539
- }).strict();
540
- const EventMappingsSchema = z.array(EventMappingSchema).readonly();
541
- /**
542
- * Parses and validates the event mapping table, returning the validated array
543
- * and an O(1) lookup map. Accepts a `raw` override for tests. Throws on zod
544
- * failures and on duplicate `(documentType, actionType)` pairs.
545
- */
546
- function loadEvents(raw = events_default) {
547
- const result = EventMappingsSchema.safeParse(raw);
548
- if (!result.success) throw new Error(`Invalid OpenPanel events.json: ${result.error.message}`);
549
- const mappings = result.data;
550
- const lookupMap = /* @__PURE__ */ new Map();
551
- for (const mapping of mappings) {
552
- let inner = lookupMap.get(mapping.documentType);
553
- if (!inner) {
554
- inner = /* @__PURE__ */ new Map();
555
- lookupMap.set(mapping.documentType, inner);
556
- }
557
- for (const actionType of mapping.actionTypes) {
558
- if (inner.has(actionType)) throw new Error(`Duplicate OpenPanel event mapping for ${mapping.documentType}/${actionType}`);
559
- inner.set(actionType, mapping);
560
- }
561
- }
562
- return {
563
- mappings,
564
- lookupMap
565
- };
566
- }
567
- const { mappings: defaultMappings, lookupMap: defaultLookupMap } = loadEvents();
568
- /** Validated mapping array from the bundled events.json. */
569
- const eventMappings = defaultMappings;
570
- /** O(1) lookup map: documentType → actionType → mapping. */
571
- const eventLookupMap = defaultLookupMap;
572
- /**
573
- * Normalizes a document type into a safe event-name segment: lowercased, `/`
574
- * replaced with `.`, and any character outside `[a-z0-9._-]` stripped.
575
- * e.g. `powerhouse/document-drive` → `powerhouse.document-drive`.
576
- */
577
- function normalize(documentType) {
578
- return documentType.toLowerCase().replace(/\//g, ".").replace(/[^a-z0-9._-]/g, "");
579
- }
580
- /**
581
- * Derives the OpenPanel event name: `mapping.alias` when present, otherwise
582
- * `${normalize(documentType)}.${actionType.toLowerCase()}`.
583
- */
584
- function deriveEventName(mapping, op) {
585
- if (mapping.alias) return mapping.alias;
586
- return `${normalize(op.context.documentType)}.${op.operation.action.type.toLowerCase()}`;
587
- }
588
- /**
589
- * Builds the default properties attached to every OpenPanel event. The `app`
590
- * property is stamped globally by the client, not here.
591
- */
592
- function buildDefaultProperties(op) {
593
- return {
594
- documentType: op.context.documentType,
595
- actionType: op.operation.action.type,
596
- documentId: op.context.documentId,
597
- scope: op.context.scope,
598
- branch: op.context.branch
599
- };
600
- }
601
- //#endregion
602
- //#region src/services/openpanel/processor.ts
603
- /**
604
- * Read-only reactor `IProcessor` that translates matching document operations
605
- * into OpenPanel analytics events. Operations whose `(documentType, actionType)`
606
- * pair is absent from the lookup map are skipped; per-operation errors are
607
- * routed to `onError` and never thrown back to the manager.
608
- */
609
- var OpenPanelProcessor = class {
610
- constructor(client, lookupMap, onError = (err) => console.warn("[OpenPanelProcessor] Error tracking event:", err)) {
611
- this.client = client;
612
- this.lookupMap = lookupMap;
613
- this.onError = onError;
614
- }
615
- async onOperations(operations) {
616
- for (const op of operations) {
617
- const inner = this.lookupMap.get(op.context.documentType);
618
- if (!inner) continue;
619
- const mapping = inner.get(op.operation.action.type);
620
- if (!mapping) continue;
621
- const name = deriveEventName(mapping, op);
622
- const payload = buildDefaultProperties(op);
623
- try {
624
- await this.client.track(name, payload);
625
- } catch (err) {
626
- this.onError(err, op);
627
- }
628
- }
629
- }
630
- onDisconnect() {
631
- this.client.flush?.();
632
- return Promise.resolve();
633
- }
634
- };
635
- //#endregion
636
- //#region src/services/openpanel/factory.ts
637
- /**
638
- * Returns a `ProcessorFactory` that, for each drive, creates a single
639
- * `OpenPanelProcessor` record whose `filter.documentType` is the union of all
640
- * document types present in the event mapping table.
641
- */
642
- function createOpenPanelProcessorFactory(config) {
643
- return function openPanelProcessorFactory(_driveHeader) {
644
- const documentType = Array.from(config.events.lookupMap.keys());
645
- return [{
646
- processor: new OpenPanelProcessor(config.client, config.events.lookupMap, config.onError),
647
- filter: { documentType },
648
- startFrom: config.startFrom ?? "current"
649
- }];
650
- };
651
- }
652
- //#endregion
653
- //#region src/hooks/useIsEmbedded.ts
654
- /**
655
- * Detects whether Connect is being rendered inside another app (e.g. inside
656
- * an iframe in the vetra-cli drive editor). When `?embed=1` is present in the
657
- * URL, chrome that doesn't make sense in the embedded context — the cookie
658
- * banner, the outer sidebar — is suppressed.
659
- */
660
- function getIsEmbedded() {
661
- if (typeof window === "undefined") return false;
662
- try {
663
- const value = new URLSearchParams(window.location.search).get("embed");
664
- return value !== null && value !== "0" && value !== "false";
665
- } catch {
666
- return false;
667
- }
668
- }
669
- function useIsEmbedded() {
670
- return getIsEmbedded();
671
- }
672
- const COOKIE_BANNER_KEY_STORAGE = `${connectConfig.routerBasename}:display-cookie-banner`;
673
- const listeners = /* @__PURE__ */ new Set();
674
- let bannerShown = getInitial();
675
- function getInitial() {
676
- if (getIsEmbedded()) return false;
677
- try {
678
- return localStorage.getItem(COOKIE_BANNER_KEY_STORAGE) !== "false";
679
- } catch (error) {
680
- console.error(error);
681
- return true;
682
- }
683
- }
684
- function getCookieBannerState() {
685
- return bannerShown;
686
- }
687
- function setCookieBannerState(state) {
688
- bannerShown = state;
689
- localStorage.setItem(COOKIE_BANNER_KEY_STORAGE, JSON.stringify(state));
690
- }
691
- function subscribe(fn) {
692
- listeners.add(fn);
693
- return () => listeners.delete(fn);
694
- }
695
- const useCookieBanner = () => {
696
- return [useSyncExternalStore(subscribe, getCookieBannerState, getCookieBannerState), setCookieBannerState];
697
- };
698
- //#endregion
699
396
  //#region src/hooks/useFailedInstallations.ts
700
397
  const emptyArray$1 = [];
701
398
  function useFailedInstallations() {
@@ -766,6 +463,44 @@ function useInitSentry() {
766
463
  }, [analytics]);
767
464
  }
768
465
  //#endregion
466
+ //#region src/services/openpanel/buffer.ts
467
+ const buffer = [];
468
+ let errorHandler;
469
+ function defaultOnError(err) {
470
+ console.warn("[useOpenPanelAnalytics] track failed:", err);
471
+ }
472
+ /**
473
+ * Forward a single event to the active client, swallowing any throw.
474
+ *
475
+ * The outer try/catch handles synchronous throws from `client.track`; the
476
+ * inner `.catch()` handles rejected promises. Both are needed because
477
+ * `Promise.resolve(x).catch()` cannot catch a throw from evaluating `x`.
478
+ */
479
+ function forward(client, name, props) {
480
+ try {
481
+ Promise.resolve(client.track(name, props)).catch((err) => (errorHandler ?? defaultOnError)(err));
482
+ } catch (err) {
483
+ (errorHandler ?? defaultOnError)(err);
484
+ }
485
+ }
486
+ /**
487
+ * Drain the pre-init buffer in FIFO order through `client.track`, then forward
488
+ * subsequent events directly. Called once from `getOpenPanelClient()`.
489
+ */
490
+ function drainOpenPanelBuffer(client, onError) {
491
+ errorHandler = onError;
492
+ const pending = buffer.splice(0, buffer.length);
493
+ for (const [name, props] of pending) forward(client, name, props);
494
+ }
495
+ /**
496
+ * Clear the buffer and reset the active client. Buffered pre-consent events
497
+ * are discarded so they are not replayed if the user later re-accepts.
498
+ */
499
+ function clearOpenPanelBuffer() {
500
+ buffer.length = 0;
501
+ errorHandler = void 0;
502
+ }
503
+ //#endregion
769
504
  //#region src/hooks/usePendingInstallations.ts
770
505
  const emptyArray = [];
771
506
  function usePendingInstallations() {
@@ -1045,6 +780,192 @@ const Analytics = () => {
1045
780
  return null;
1046
781
  };
1047
782
  //#endregion
783
+ //#region src/services/openpanel/client.ts
784
+ let client;
785
+ /**
786
+ * Returns the cached `OpenPanel` singleton, building it on first call.
787
+ *
788
+ * When `config.clientId` is empty it returns `undefined` without importing
789
+ * `@openpanel/web`, so the bundler can tree-shake the SDK out of production.
790
+ */
791
+ async function getOpenPanelClient(config) {
792
+ if (!config.clientId) return;
793
+ if (client) return client;
794
+ const { OpenPanel: OpenPanelClass } = await import("@openpanel/web");
795
+ client = new OpenPanelClass({
796
+ clientId: config.clientId,
797
+ ...config.apiUrl ? { apiUrl: config.apiUrl } : {},
798
+ trackScreenViews: true,
799
+ trackOutgoingLinks: true
800
+ });
801
+ client.setGlobalProperties({ app: "connect" });
802
+ drainOpenPanelBuffer(client);
803
+ return client;
804
+ }
805
+ /**
806
+ * Clears the cached singleton and the pre-init buffer. Call on consent
807
+ * revocation or during tests; buffered events are discarded, not replayed.
808
+ */
809
+ function resetOpenPanelClient() {
810
+ client = void 0;
811
+ clearOpenPanelBuffer();
812
+ }
813
+ //#endregion
814
+ //#region src/services/openpanel/events.json
815
+ var events_default = [
816
+ {
817
+ "documentType": "powerhouse/document-drive",
818
+ "actionTypes": [
819
+ "ADD_FOLDER",
820
+ "DELETE_NODE",
821
+ "ADD_FILE",
822
+ "UPDATE_FILE",
823
+ "COPY_NODE",
824
+ "MOVE_NODE",
825
+ "SET_DRIVE_NAME",
826
+ "SET_DRIVE_ICON"
827
+ ]
828
+ },
829
+ {
830
+ "documentType": "powerhouse/document-model",
831
+ "actionTypes": [
832
+ "SET_MODEL_NAME",
833
+ "SET_MODEL_ID",
834
+ "ADD_MODULE",
835
+ "DELETE_MODULE",
836
+ "ADD_OPERATION",
837
+ "DELETE_OPERATION"
838
+ ]
839
+ },
840
+ {
841
+ "documentType": "powerhouse/reactor-drive",
842
+ "actionTypes": [
843
+ "ADD_FOLDER",
844
+ "REMOVE_FOLDER",
845
+ "UPDATE_FOLDER"
846
+ ]
847
+ }
848
+ ];
849
+ //#endregion
850
+ //#region src/services/openpanel/events.ts
851
+ const EventMappingSchema = z.object({
852
+ documentType: z.string().min(1),
853
+ actionTypes: z.array(z.string().min(1)).min(1),
854
+ alias: z.string().optional()
855
+ }).strict();
856
+ const EventMappingsSchema = z.array(EventMappingSchema).readonly();
857
+ /**
858
+ * Parses and validates the event mapping table, returning the validated array
859
+ * and an O(1) lookup map. Accepts a `raw` override for tests. Throws on zod
860
+ * failures and on duplicate `(documentType, actionType)` pairs.
861
+ */
862
+ function loadEvents(raw = events_default) {
863
+ const result = EventMappingsSchema.safeParse(raw);
864
+ if (!result.success) throw new Error(`Invalid OpenPanel events.json: ${result.error.message}`);
865
+ const mappings = result.data;
866
+ const lookupMap = /* @__PURE__ */ new Map();
867
+ for (const mapping of mappings) {
868
+ let inner = lookupMap.get(mapping.documentType);
869
+ if (!inner) {
870
+ inner = /* @__PURE__ */ new Map();
871
+ lookupMap.set(mapping.documentType, inner);
872
+ }
873
+ for (const actionType of mapping.actionTypes) {
874
+ if (inner.has(actionType)) throw new Error(`Duplicate OpenPanel event mapping for ${mapping.documentType}/${actionType}`);
875
+ inner.set(actionType, mapping);
876
+ }
877
+ }
878
+ return {
879
+ mappings,
880
+ lookupMap
881
+ };
882
+ }
883
+ const { mappings: defaultMappings, lookupMap: defaultLookupMap } = loadEvents();
884
+ /** Validated mapping array from the bundled events.json. */
885
+ const eventMappings = defaultMappings;
886
+ /** O(1) lookup map: documentType → actionType → mapping. */
887
+ const eventLookupMap = defaultLookupMap;
888
+ /**
889
+ * Normalizes a document type into a safe event-name segment: lowercased, `/`
890
+ * replaced with `.`, and any character outside `[a-z0-9._-]` stripped.
891
+ * e.g. `powerhouse/document-drive` → `powerhouse.document-drive`.
892
+ */
893
+ function normalize(documentType) {
894
+ return documentType.toLowerCase().replace(/\//g, ".").replace(/[^a-z0-9._-]/g, "");
895
+ }
896
+ /**
897
+ * Derives the OpenPanel event name: `mapping.alias` when present, otherwise
898
+ * `${normalize(documentType)}.${actionType.toLowerCase()}`.
899
+ */
900
+ function deriveEventName(mapping, op) {
901
+ if (mapping.alias) return mapping.alias;
902
+ return `${normalize(op.context.documentType)}.${op.operation.action.type.toLowerCase()}`;
903
+ }
904
+ /**
905
+ * Builds the default properties attached to every OpenPanel event. The `app`
906
+ * property is stamped globally by the client, not here.
907
+ */
908
+ function buildDefaultProperties(op) {
909
+ return {
910
+ documentType: op.context.documentType,
911
+ actionType: op.operation.action.type,
912
+ documentId: op.context.documentId,
913
+ scope: op.context.scope,
914
+ branch: op.context.branch
915
+ };
916
+ }
917
+ //#endregion
918
+ //#region src/services/openpanel/processor.ts
919
+ /**
920
+ * Read-only reactor `IProcessor` that translates matching document operations
921
+ * into OpenPanel analytics events. Operations whose `(documentType, actionType)`
922
+ * pair is absent from the lookup map are skipped; per-operation errors are
923
+ * routed to `onError` and never thrown back to the manager.
924
+ */
925
+ var OpenPanelProcessor = class {
926
+ constructor(client, lookupMap, onError = (err) => console.warn("[OpenPanelProcessor] Error tracking event:", err)) {
927
+ this.client = client;
928
+ this.lookupMap = lookupMap;
929
+ this.onError = onError;
930
+ }
931
+ async onOperations(operations) {
932
+ for (const op of operations) {
933
+ const inner = this.lookupMap.get(op.context.documentType);
934
+ if (!inner) continue;
935
+ const mapping = inner.get(op.operation.action.type);
936
+ if (!mapping) continue;
937
+ const name = deriveEventName(mapping, op);
938
+ const payload = buildDefaultProperties(op);
939
+ try {
940
+ await this.client.track(name, payload);
941
+ } catch (err) {
942
+ this.onError(err, op);
943
+ }
944
+ }
945
+ }
946
+ onDisconnect() {
947
+ this.client.flush?.();
948
+ return Promise.resolve();
949
+ }
950
+ };
951
+ //#endregion
952
+ //#region src/services/openpanel/factory.ts
953
+ /**
954
+ * Returns a `ProcessorFactory` that, for each drive, creates a single
955
+ * `OpenPanelProcessor` record whose `filter.documentType` is the union of all
956
+ * document types present in the event mapping table.
957
+ */
958
+ function createOpenPanelProcessorFactory(config) {
959
+ return function openPanelProcessorFactory(_driveHeader) {
960
+ const documentType = Array.from(config.events.lookupMap.keys());
961
+ return [{
962
+ processor: new OpenPanelProcessor(config.client, config.events.lookupMap, config.onError),
963
+ filter: { documentType },
964
+ startFrom: config.startFrom ?? "current"
965
+ }];
966
+ };
967
+ }
968
+ //#endregion
1048
969
  //#region src/components/openpanel-traits.ts
1049
970
  /**
1050
971
  * Builds the OpenPanel identity traits from a renown User.
@@ -1275,6 +1196,30 @@ const SentryProvider = ({ children }) => {
1275
1196
  return children;
1276
1197
  };
1277
1198
  //#endregion
1199
+ //#region src/components/reactor-chat.tsx
1200
+ /**
1201
+ * Resolves the reactor tool descriptors for the chat agent from the
1202
+ * browser's live reactor client. Built lazily at send time so the reactor
1203
+ * (and its SharedWorker) do not need to be ready at render time.
1204
+ */
1205
+ function getReactorTools() {
1206
+ const ph = window.ph;
1207
+ const client = ph?.reactorClient;
1208
+ if (!client) return Promise.reject(/* @__PURE__ */ new Error("The reactor client is not available yet. Try again shortly."));
1209
+ const syncManager = ph?.reactorClientModule?.reactorModule?.syncModule?.syncManager;
1210
+ return createReactorMcpProvider({
1211
+ client,
1212
+ syncManager
1213
+ }).then((provider) => Object.values(provider.tools).map((tool) => ({
1214
+ ...tool,
1215
+ inputSchema: tool.inputSchema ?? {}
1216
+ })));
1217
+ }
1218
+ /** Connect's bottom-right AI chat FAB, bound to the browser reactor. */
1219
+ function ConnectReactorChatFab() {
1220
+ return /* @__PURE__ */ jsx(ReactorChatFab, { getTools: getReactorTools });
1221
+ }
1222
+ //#endregion
1278
1223
  //#region src/components/missing-model-banner.tsx
1279
1224
  const reasonLabels = {
1280
1225
  "no-registry": "No package registry is configured.",
@@ -1562,6 +1507,7 @@ const App = () => {
1562
1507
  }, []);
1563
1508
  return /* @__PURE__ */ jsx(SentryProvider, { children: /* @__PURE__ */ jsxs(RenownWalletProviders, { children: [
1564
1509
  /* @__PURE__ */ jsx(ToastContainer, { position: "bottom-right" }),
1510
+ connectConfig.aiAssistantEnabled && /* @__PURE__ */ jsx(ConnectReactorChatFab, {}),
1565
1511
  /* @__PURE__ */ jsx(MissingModelBanner, {}),
1566
1512
  /* @__PURE__ */ jsx(Router, {}),
1567
1513
  /* @__PURE__ */ jsx(OpenFileUploadList, {}),
@@ -1571,64 +1517,6 @@ const App = () => {
1571
1517
  ] }) });
1572
1518
  };
1573
1519
  //#endregion
1574
- //#region src/components/cookie-banner.tsx
1575
- const isCookieAccepted = (cookies, id) => {
1576
- return cookies.some((cookie) => cookie.id === id && cookie.value);
1577
- };
1578
- const CookieBanner$1 = () => {
1579
- const { t } = useTranslation(void 0, {
1580
- useSuspense: true,
1581
- i18n
1582
- });
1583
- const [showBanner, setShowBanner] = useCookieBanner();
1584
- const [, setAcceptedCookies] = useAcceptedCookies();
1585
- const cookiesInput = [{
1586
- id: "analytics-cookie",
1587
- label: t("cookieBanner.cookies.analytics"),
1588
- value: true
1589
- }];
1590
- const handleAccept = (cookies) => {
1591
- setShowBanner(false);
1592
- if (isCookieAccepted(cookies, "analytics-cookie")) setAcceptedCookies((acceptedCookies) => ({
1593
- ...acceptedCookies,
1594
- analytics: true
1595
- }));
1596
- };
1597
- const handleReject = () => {
1598
- setShowBanner(false);
1599
- setAcceptedCookies(() => ({
1600
- analytics: false,
1601
- functional: false,
1602
- marketing: false
1603
- }));
1604
- };
1605
- if (!showBanner) return null;
1606
- return /* @__PURE__ */ jsxs("div", {
1607
- className: "absolute inset-0 z-10000 backdrop-blur-sm",
1608
- children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-primary opacity-15" }), /* @__PURE__ */ jsx("div", {
1609
- className: "absolute inset-x-0 bottom-0 flex justify-center bg-background px-10 pt-10 pb-16 shadow-lg",
1610
- children: /* @__PURE__ */ jsx(CookieBanner, {
1611
- className: "max-w-[1024px]",
1612
- cookies: cookiesInput,
1613
- onSubmit: handleAccept,
1614
- onReject: handleReject,
1615
- submitLabel: t("cookieBanner.accept"),
1616
- rejectLabel: t("cookieBanner.reject"),
1617
- children: /* @__PURE__ */ jsx("p", {
1618
- className: "font-semibold text-muted-foreground",
1619
- children: /* @__PURE__ */ jsx(Trans, {
1620
- i18nKey: "cookieBanner.message",
1621
- components: { a: /* @__PURE__ */ jsx("a", {
1622
- onClick: () => showPHModal({ type: "cookiesPolicy" }),
1623
- className: "cursor-pointer text-foreground hover:underline"
1624
- }, "cookieBanner.message-link") }
1625
- }, "cookieBanner.message")
1626
- })
1627
- })
1628
- })]
1629
- });
1630
- };
1631
- //#endregion
1632
1520
  //#region src/components/drive-icon.tsx
1633
1521
  function DriveIcon({ drive }) {
1634
1522
  const remotes = useSyncList();
@@ -2152,20 +2040,20 @@ const MigrationBanner = () => {
2152
2040
  };
2153
2041
  //#endregion
2154
2042
  //#region src/components/modal/modals-container.tsx
2155
- const AddDriveModal$1 = lazy(() => import("./AddDriveModal-Bw0YuxZg.js").then((m) => ({ default: m.AddDriveModal })));
2156
- const ClearStorageModal = lazy(() => import("./ClearStorageModal-tXyJ2dGV.js").then((m) => ({ default: m.ClearStorageModal })));
2157
- const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-CQ-zHJdw.js").then((m) => ({ default: m.CookiesPolicyModal })));
2158
- const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-NNi4p6EI.js").then((m) => ({ default: m.CreateDocumentModal })));
2159
- const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-CE3uHISS.js").then((m) => ({ default: m.DebugSettingsModal })));
2160
- const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-C7fnXMsR.js").then((m) => ({ default: m.DeleteDriveModal })));
2161
- const DeleteItemModal = lazy(() => import("./DeleteItemModal-BK_Y8Thj.js").then((m) => ({ default: m.DeleteItemModal })));
2162
- const DisclaimerModal = lazy(() => import("./DisclaimerModal-DJPHCnFY.js").then((m) => ({ default: m.DisclaimerModal })));
2163
- const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-7OKx8foy.js").then((m) => ({ default: m.DriveSettingsModal })));
2164
- const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-sWu46HVB.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
2165
- const DocumentVersionUnsupportedModal = lazy(() => import("./DocumentVersionUnsupportedModal-tBHLK6b1.js").then((m) => ({ default: m.DocumentVersionUnsupportedModal })));
2166
- const ConfirmDocumentUpgradeModal = lazy(() => import("./ConfirmDocumentUpgradeModal-9AaaQJTs.js").then((m) => ({ default: m.ConfirmDocumentUpgradeModal })));
2167
- const SettingsModal$1 = lazy(() => import("./SettingsModal-Dk-Kp4kl.js").then((m) => ({ default: m.SettingsModal })));
2168
- const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-wo5oO9mg.js").then((m) => ({ default: m.UpgradeDriveModal })));
2043
+ const AddDriveModal$1 = lazy(() => import("./AddDriveModal-Q-Ffh5XA.js").then((m) => ({ default: m.AddDriveModal })));
2044
+ const ClearStorageModal = lazy(() => import("./ClearStorageModal-rKAE3cvA.js").then((m) => ({ default: m.ClearStorageModal })));
2045
+ const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-BpyPPyxS.js").then((m) => ({ default: m.CookiesPolicyModal })));
2046
+ const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-C45W8J0V.js").then((m) => ({ default: m.CreateDocumentModal })));
2047
+ const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-f7mphH92.js").then((m) => ({ default: m.DebugSettingsModal })));
2048
+ const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-Dug84t1j.js").then((m) => ({ default: m.DeleteDriveModal })));
2049
+ const DeleteItemModal = lazy(() => import("./DeleteItemModal-mMzy3V8o.js").then((m) => ({ default: m.DeleteItemModal })));
2050
+ const DisclaimerModal = lazy(() => import("./DisclaimerModal-DvpD5dPM.js").then((m) => ({ default: m.DisclaimerModal })));
2051
+ const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-C6-mRQiv.js").then((m) => ({ default: m.DriveSettingsModal })));
2052
+ const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-IKl0ljQb.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
2053
+ const DocumentVersionUnsupportedModal = lazy(() => import("./DocumentVersionUnsupportedModal-C3Q0V75l.js").then((m) => ({ default: m.DocumentVersionUnsupportedModal })));
2054
+ const ConfirmDocumentUpgradeModal = lazy(() => import("./ConfirmDocumentUpgradeModal-FUOhZsk7.js").then((m) => ({ default: m.ConfirmDocumentUpgradeModal })));
2055
+ const SettingsModal$1 = lazy(() => import("./SettingsModal-DbIlDH70.js").then((m) => ({ default: m.SettingsModal })));
2056
+ const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-_8t9slxQ.js").then((m) => ({ default: m.UpgradeDriveModal })));
2169
2057
  const modalComponents = {
2170
2058
  addDrive: AddDriveModal$1,
2171
2059
  clearStorage: ClearStorageModal,
@@ -2179,13 +2067,13 @@ const modalComponents = {
2179
2067
  downloadDocumentWithErrors: DownloadDocumentWithErrorsModal,
2180
2068
  documentVersionUnsupported: DocumentVersionUnsupportedModal,
2181
2069
  confirmDocumentUpgrade: ConfirmDocumentUpgradeModal,
2182
- inspector: lazy(() => import("./InspectorModal-BV9QR1MZ.js").then((m) => ({ default: m.InspectorModal }))),
2070
+ inspector: lazy(() => import("./InspectorModal-C2usotS-.js").then((m) => ({ default: m.InspectorModal }))),
2183
2071
  settings: SettingsModal$1,
2184
2072
  upgradeDrive: UpgradeDriveModal,
2185
- missingPackage: lazy(() => import("./MissingPackageModal-DyP2-Ojb.js").then((m) => ({ default: m.ConnectMissingPackageModal }))),
2186
- driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-D3IPAst0.js").then((m) => ({ default: m.DriveAuthRequiredModal }))),
2187
- openFileDocuments: lazy(() => import("./OpenFileDocumentsModal-DQ0Slw9y.js").then((m) => ({ default: m.OpenFileDocumentsModal }))),
2188
- login: lazy(() => import("./LoginModal-Cd2wGgG4.js").then((m) => ({ default: m.LoginModal })))
2073
+ missingPackage: lazy(() => import("./MissingPackageModal-C7usWVHQ.js").then((m) => ({ default: m.ConnectMissingPackageModal }))),
2074
+ driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-Cw9eCAQ_.js").then((m) => ({ default: m.DriveAuthRequiredModal }))),
2075
+ openFileDocuments: lazy(() => import("./OpenFileDocumentsModal-e_TKIuB4.js").then((m) => ({ default: m.OpenFileDocumentsModal }))),
2076
+ login: lazy(() => import("./LoginModal-CybbOm3N.js").then((m) => ({ default: m.LoginModal })))
2189
2077
  };
2190
2078
  const ModalsContainer = lazy(() => {
2191
2079
  return Promise.resolve({ default: () => {
@@ -2224,8 +2112,9 @@ const ServiceWorkerUpdatePrompt = () => {
2224
2112
  };
2225
2113
  //#endregion
2226
2114
  //#region src/components/app-loader.tsx
2115
+ const CookieBanner$1 = lazy(() => import("./cookie-banner-CTxjAKt4.js").then((m) => ({ default: m.CookieBanner })));
2227
2116
  const AppLoader = (props) => {
2228
- const Load = lazy(() => import("./load-DUCtfMW3.js").then((m) => m.loadComponent(props.localPackage)));
2117
+ const Load = lazy(() => import("./load-D_5q8fky.js").then((m) => m.loadComponent(props.localPackage)));
2229
2118
  return /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsxs(ErrorBoundary$1, {
2230
2119
  fallbackRender: (props) => /* @__PURE__ */ jsx(AppSkeleton, { children: /* @__PURE__ */ jsx(DetailedFallback, { ...props }) }),
2231
2120
  resetKeys: [props.localPackage],
@@ -2239,9 +2128,14 @@ const AppLoader = (props) => {
2239
2128
  children: /* @__PURE__ */ jsx(App, {})
2240
2129
  })
2241
2130
  }),
2242
- /* @__PURE__ */ jsx(Suspense, {
2243
- name: "CookieBanner",
2244
- children: /* @__PURE__ */ jsx(CookieBanner$1, {})
2131
+ /* @__PURE__ */ jsx(ErrorBoundary$1, {
2132
+ variant: "silent",
2133
+ loggerContext: ["Connect", "CookieBanner"],
2134
+ children: /* @__PURE__ */ jsx(Suspense, {
2135
+ fallback: null,
2136
+ name: "CookieBanner",
2137
+ children: /* @__PURE__ */ jsx(CookieBanner$1, {})
2138
+ })
2245
2139
  }),
2246
2140
  /* @__PURE__ */ jsx(Suspense, {
2247
2141
  name: "ModalsContainer",
@@ -2254,7 +2148,7 @@ const AppLoader = (props) => {
2254
2148
  }) });
2255
2149
  };
2256
2150
  //#endregion
2257
- export { getPendingImportFiles as _, DocumentEditor as a, App as c, DocumentEditorContainer as d, OpenPanel as f, clearPendingImportFiles as g, runOpenFileImports as h, Root as i, AppContainer as l, AppSkeleton as m, Sidebar as n, DriveIcon as o, Analytics as p, Router as r, CookieBanner$1 as s, AppLoader as t, EditorLoader as u, pendingFileKey as v, subscribePendingImportFiles as y };
2151
+ export { pendingFileKey as _, DocumentEditor as a, AppContainer as c, OpenPanel as d, Analytics as f, getPendingImportFiles as g, clearPendingImportFiles as h, Root as i, EditorLoader as l, runOpenFileImports as m, Sidebar as n, DriveIcon as o, AppSkeleton as p, Router as r, App as s, AppLoader as t, DocumentEditorContainer as u, subscribePendingImportFiles as v };
2258
2152
 
2259
- //# sourceMappingURL=app-loader-VDeDZD5T.js.map
2260
- //# debugId=6a224997-414f-5c96-97a5-27ace9783f59
2153
+ //# sourceMappingURL=app-loader-Cl4p5jBL.js.map
2154
+ //# debugId=f20d7330-c3fe-5c88-baef-ea4af0179c28