@powerhousedao/connect 6.0.0-dev.109 → 6.0.0-dev.110

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.
@@ -3,8 +3,12 @@ import { addDrive, addRemoteDrive, closePHModal, setSelectedDrive, useDriveEdito
3
3
  import { AddDriveModal as AddDriveModal$1 } from "@powerhousedao/design-system/connect";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { t } from "i18next";
6
- import { requestPublicDriveFromReactor } from "document-drive";
7
6
  //#region src/components/modal/modals/AddDriveModal.tsx
7
+ async function requestPublicDriveFromReactor(url, headers) {
8
+ const response = await fetch(url, { headers: headers ?? {} });
9
+ if (!response.ok) throw new Error(`HTTP ${response.status}`);
10
+ return await response.json();
11
+ }
8
12
  function AddDriveModal() {
9
13
  const open = usePHModal()?.type === "addDrive";
10
14
  const user = useUser();
@@ -81,4 +85,4 @@ function AddDriveModal() {
81
85
  //#endregion
82
86
  export { AddDriveModal };
83
87
 
84
- //# sourceMappingURL=AddDriveModal-K9jmTp6w.js.map
88
+ //# sourceMappingURL=AddDriveModal-A2SuEFot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddDriveModal-A2SuEFot.js","names":["ConnectAddLocalDriveModal"],"sources":["../src/components/modal/modals/AddDriveModal.tsx"],"sourcesContent":["import { toast } from \"@powerhousedao/connect/services\";\nimport type {\n AddLocalDriveInput,\n AddRemoteDriveInput,\n} from \"@powerhousedao/design-system/connect\";\nimport { AddDriveModal as ConnectAddLocalDriveModal } from \"@powerhousedao/design-system/connect\";\nimport {\n addDrive,\n addRemoteDrive,\n closePHModal,\n setSelectedDrive,\n useDriveEditorModules,\n usePHModal,\n useRenown,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\n\nasync function requestPublicDriveFromReactor(\n url: string,\n headers?: Record<string, string>,\n): Promise<{ id: string; name: string }> {\n const response = await fetch(url, { headers: headers ?? {} });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n return (await response.json()) as { id: string; name: string };\n}\n\nexport function AddDriveModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"addDrive\";\n const user = useUser();\n const renown = useRenown();\n const driveEditorModules = useDriveEditorModules();\n const onAddLocalDrive = async (data: AddLocalDriveInput) => {\n try {\n const app = driveEditorModules?.find((a) => a.id === data.appId);\n const newDrive = await addDrive(\n {\n id: \"\",\n slug: \"\",\n global: {\n name: data.name,\n icon: null,\n },\n local: {\n availableOffline: data.availableOffline,\n sharingType: data.sharingType.toLowerCase(),\n listeners: [],\n triggers: [],\n },\n },\n app?.id,\n );\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n if (!newDrive) {\n return;\n }\n\n setSelectedDrive(newDrive);\n } catch (e) {\n console.error(e);\n }\n };\n\n const onAddRemoteDrive = async (data: AddRemoteDriveInput) => {\n try {\n const driveId = await addRemoteDrive(data.url, data.id);\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n setSelectedDrive(driveId);\n } catch (e) {\n console.error(e);\n }\n };\n async function onAddLocalDriveSubmit(data: AddLocalDriveInput) {\n await onAddLocalDrive(data);\n closePHModal();\n }\n\n async function onAddRemoteDriveSubmit(data: AddRemoteDriveInput) {\n await onAddRemoteDrive(data);\n closePHModal();\n }\n\n const ready = !!driveEditorModules?.length;\n\n return (\n <ConnectAddLocalDriveModal\n open={open && ready}\n onAddLocalDrive={onAddLocalDriveSubmit}\n onAddRemoteDrive={onAddRemoteDriveSubmit}\n requestPublicDrive={async (url: string) => {\n try {\n if (user) {\n const authToken = await renown?.getBearerToken?.({\n expiresIn: 10,\n aud: url,\n });\n return requestPublicDriveFromReactor(url, {\n Authorization: `Bearer ${authToken}`,\n });\n }\n return requestPublicDriveFromReactor(url);\n } catch (error) {\n console.error(error);\n return requestPublicDriveFromReactor(url);\n }\n }}\n onOpenChange={(status) => {\n if (!status) return closePHModal();\n }}\n appOptions={\n driveEditorModules?.map((pkg) => ({\n id: pkg.id,\n name: pkg.name,\n driveEditor: pkg.id,\n })) || []\n }\n />\n );\n}\n"],"mappings":";;;;;;AAkBA,eAAe,8BACb,KACA,SACuC;CACvC,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC;AAC7D,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,QAAQ,SAAS,SAAS;AAE5C,QAAQ,MAAM,SAAS,MAAM;;AAG/B,SAAgB,gBAAgB;CAE9B,MAAM,OADU,YAAY,EACN,SAAS;CAC/B,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAW;CAC1B,MAAM,qBAAqB,uBAAuB;CAClD,MAAM,kBAAkB,OAAO,SAA6B;AAC1D,MAAI;GACF,MAAM,MAAM,oBAAoB,MAAM,MAAM,EAAE,OAAO,KAAK,MAAM;GAChE,MAAM,WAAW,MAAM,SACrB;IACE,IAAI;IACJ,MAAM;IACN,QAAQ;KACN,MAAM,KAAK;KACX,MAAM;KACP;IACD,OAAO;KACL,kBAAkB,KAAK;KACvB,aAAa,KAAK,YAAY,aAAa;KAC3C,WAAW,EAAE;KACb,UAAU,EAAE;KACb;IACF,EACD,KAAK,GACN;AAED,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,OAAI,CAAC,SACH;AAGF,oBAAiB,SAAS;WACnB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAIpB,MAAM,mBAAmB,OAAO,SAA8B;AAC5D,MAAI;GACF,MAAM,UAAU,MAAM,eAAe,KAAK,KAAK,KAAK,GAAG;AAEvD,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,oBAAiB,QAAQ;WAClB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAGpB,eAAe,sBAAsB,MAA0B;AAC7D,QAAM,gBAAgB,KAAK;AAC3B,gBAAc;;CAGhB,eAAe,uBAAuB,MAA2B;AAC/D,QAAM,iBAAiB,KAAK;AAC5B,gBAAc;;CAGhB,MAAM,QAAQ,CAAC,CAAC,oBAAoB;AAEpC,QACE,oBAACA,iBAAD;EACE,MAAM,QAAQ;EACd,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB,OAAO,QAAgB;AACzC,OAAI;AACF,QAAI,KAKF,QAAO,8BAA8B,KAAK,EACxC,eAAe,UALC,MAAM,QAAQ,iBAAiB;KAC/C,WAAW;KACX,KAAK;KACN,CAAC,IAGD,CAAC;AAEJ,WAAO,8BAA8B,IAAI;YAClC,OAAO;AACd,YAAQ,MAAM,MAAM;AACpB,WAAO,8BAA8B,IAAI;;;EAG7C,eAAe,WAAW;AACxB,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,YACE,oBAAoB,KAAK,SAAS;GAChC,IAAI,IAAI;GACR,MAAM,IAAI;GACV,aAAa,IAAI;GAClB,EAAE,IAAI,EAAE;EAEX,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DriveSettingsModal-DxMjOsLg.js","names":["ConnectDriveSettingsModal"],"sources":["../src/components/modal/modals/DriveSettingsModal.tsx"],"sourcesContent":["import { DriveSettingsModal as ConnectDriveSettingsModal } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n driveCollectionId,\n renameDrive,\n setDriveAvailableOffline,\n setDriveSharingType,\n showPHModal,\n useDriveById,\n usePHModal,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport type { SharingType } from \"document-drive\";\nimport { useMemo } from \"react\";\n\nexport function DriveSettingsModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"driveSettings\";\n const driveId = open ? phModal.driveId : undefined;\n const [drive] = useDriveById(driveId);\n const remotes = useSyncList();\n\n const isRemoteDrive = useMemo(() => {\n return remotes.some(\n (remote) =>\n remote.collectionId === driveCollectionId(\"main\", drive.header.id),\n );\n }, [remotes, drive]);\n\n if (!driveId || !drive) {\n return null;\n }\n\n async function onRenameDrive(drive: DocumentDriveDocument, newName: string) {\n await renameDrive(drive.header.id, newName);\n }\n\n async function onChangeSharingType(\n drive: DocumentDriveDocument,\n newSharingType: SharingType,\n ) {\n await setDriveSharingType(drive.header.id, newSharingType);\n }\n\n async function onChangeAvailableOffline(\n drive: DocumentDriveDocument,\n newAvailableOffline: boolean,\n ) {\n await setDriveAvailableOffline(drive.header.id, newAvailableOffline);\n }\n\n return (\n <ConnectDriveSettingsModal\n drive={drive}\n sharingType={isRemoteDrive ? \"PUBLIC\" : \"LOCAL\"}\n availableOffline={!isRemoteDrive}\n open={open}\n onRenameDrive={onRenameDrive}\n onDeleteDrive={() => showPHModal({ type: \"deleteDrive\", driveId })}\n onChangeAvailableOffline={onChangeAvailableOffline}\n onChangeSharingType={onChangeSharingType}\n onOpenChange={(status) => {\n if (!status) return closePHModal();\n }}\n />\n );\n}\n"],"mappings":";;;;;AAgBA,SAAgB,qBAAqB;CACnC,MAAM,UAAU,YAAY;CAC5B,MAAM,OAAO,SAAS,SAAS;CAC/B,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAA;CACzC,MAAM,CAAC,SAAS,aAAa,QAAQ;CACrC,MAAM,UAAU,aAAa;CAE7B,MAAM,gBAAgB,cAAc;AAClC,SAAO,QAAQ,MACZ,WACC,OAAO,iBAAiB,kBAAkB,QAAQ,MAAM,OAAO,GAAG,CACrE;IACA,CAAC,SAAS,MAAM,CAAC;AAEpB,KAAI,CAAC,WAAW,CAAC,MACf,QAAO;CAGT,eAAe,cAAc,OAA8B,SAAiB;AAC1E,QAAM,YAAY,MAAM,OAAO,IAAI,QAAQ;;CAG7C,eAAe,oBACb,OACA,gBACA;AACA,QAAM,oBAAoB,MAAM,OAAO,IAAI,eAAe;;CAG5D,eAAe,yBACb,OACA,qBACA;AACA,QAAM,yBAAyB,MAAM,OAAO,IAAI,oBAAoB;;AAGtE,QACE,oBAACA,sBAAD;EACS;EACP,aAAa,gBAAgB,WAAW;EACxC,kBAAkB,CAAC;EACb;EACS;EACf,qBAAqB,YAAY;GAAE,MAAM;GAAe;GAAS,CAAC;EACxC;EACL;EACrB,eAAe,WAAW;AACxB,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,CAAA"}
1
+ {"version":3,"file":"DriveSettingsModal-DxMjOsLg.js","names":["ConnectDriveSettingsModal"],"sources":["../src/components/modal/modals/DriveSettingsModal.tsx"],"sourcesContent":["import { DriveSettingsModal as ConnectDriveSettingsModal } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n driveCollectionId,\n renameDrive,\n setDriveAvailableOffline,\n setDriveSharingType,\n showPHModal,\n useDriveById,\n usePHModal,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport type { SharingType } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport function DriveSettingsModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"driveSettings\";\n const driveId = open ? phModal.driveId : undefined;\n const [drive] = useDriveById(driveId);\n const remotes = useSyncList();\n\n const isRemoteDrive = useMemo(() => {\n return remotes.some(\n (remote) =>\n remote.collectionId === driveCollectionId(\"main\", drive.header.id),\n );\n }, [remotes, drive]);\n\n if (!driveId || !drive) {\n return null;\n }\n\n async function onRenameDrive(drive: DocumentDriveDocument, newName: string) {\n await renameDrive(drive.header.id, newName);\n }\n\n async function onChangeSharingType(\n drive: DocumentDriveDocument,\n newSharingType: SharingType,\n ) {\n await setDriveSharingType(drive.header.id, newSharingType);\n }\n\n async function onChangeAvailableOffline(\n drive: DocumentDriveDocument,\n newAvailableOffline: boolean,\n ) {\n await setDriveAvailableOffline(drive.header.id, newAvailableOffline);\n }\n\n return (\n <ConnectDriveSettingsModal\n drive={drive}\n sharingType={isRemoteDrive ? \"PUBLIC\" : \"LOCAL\"}\n availableOffline={!isRemoteDrive}\n open={open}\n onRenameDrive={onRenameDrive}\n onDeleteDrive={() => showPHModal({ type: \"deleteDrive\", driveId })}\n onChangeAvailableOffline={onChangeAvailableOffline}\n onChangeSharingType={onChangeSharingType}\n onOpenChange={(status) => {\n if (!status) return closePHModal();\n }}\n />\n );\n}\n"],"mappings":";;;;;AAgBA,SAAgB,qBAAqB;CACnC,MAAM,UAAU,YAAY;CAC5B,MAAM,OAAO,SAAS,SAAS;CAC/B,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAA;CACzC,MAAM,CAAC,SAAS,aAAa,QAAQ;CACrC,MAAM,UAAU,aAAa;CAE7B,MAAM,gBAAgB,cAAc;AAClC,SAAO,QAAQ,MACZ,WACC,OAAO,iBAAiB,kBAAkB,QAAQ,MAAM,OAAO,GAAG,CACrE;IACA,CAAC,SAAS,MAAM,CAAC;AAEpB,KAAI,CAAC,WAAW,CAAC,MACf,QAAO;CAGT,eAAe,cAAc,OAA8B,SAAiB;AAC1E,QAAM,YAAY,MAAM,OAAO,IAAI,QAAQ;;CAG7C,eAAe,oBACb,OACA,gBACA;AACA,QAAM,oBAAoB,MAAM,OAAO,IAAI,eAAe;;CAG5D,eAAe,yBACb,OACA,qBACA;AACA,QAAM,yBAAyB,MAAM,OAAO,IAAI,oBAAoB;;AAGtE,QACE,oBAACA,sBAAD;EACS;EACP,aAAa,gBAAgB,WAAW;EACxC,kBAAkB,CAAC;EACb;EACS;EACf,qBAAqB,YAAY;GAAE,MAAM;GAAe;GAAS,CAAC;EACxC;EACL;EACrB,eAAe,WAAW;AACxB,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { t as connectConfig } from "./connect.config-CUbxYkCy.js";
2
2
  import { t as toast$1 } from "./toast-iD-70hL8.js";
3
3
  import { t as useRegistryPackages } from "./useRegistryPackages-Ctlhv061.js";
4
- import { t as package_default } from "./package-BwM2UjEs.js";
4
+ import { t as package_default } from "./package-Bzx97qsS.js";
5
5
  import { closePHModal, deleteDrive, setSelectedDrive, showPHModal, useDrives, usePHModal, useVetraPackageManager } from "@powerhousedao/reactor-browser";
6
6
  import { useCallback, useMemo, useState } from "react";
7
7
  import { About, DangerZone, DefaultEditor, PackageManager, SettingsModal as SettingsModal$1 } from "@powerhousedao/design-system/connect";
@@ -150,4 +150,4 @@ const SettingsModal = () => {
150
150
  //#endregion
151
151
  export { SettingsModal };
152
152
 
153
- //# sourceMappingURL=SettingsModal-C_csYrYH.js.map
153
+ //# sourceMappingURL=SettingsModal-Cpxrw-MV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsModal-C_csYrYH.js","names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"sources":["../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { packageJson } from \"@powerhousedao/connect/utils\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\n\nexport const About: React.FC = () => {\n return (\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={handleDeleteDrive}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const { registryPackageList, updateRegistryPackageStatus } =\n useRegistryPackages();\n\n async function handleInstall(packageName: string) {\n if (!packageManager) return;\n\n const result = await packageManager.addPackage(packageName);\n if (result.type === \"success\") {\n updateRegistryPackageStatus(packageName, \"registry-install\");\n toast(`Package \"${packageName}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n toast(`Failed to install \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n toast(`Failed to uninstall \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex h-full flex-1 flex-col\">\n <PackageManager\n mutable={true}\n registryPackageList={registryPackageList}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import { Icon } from \"@powerhousedao/design-system\";\nimport { SettingsModal as SettingsModalV2 } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n function onRefresh() {\n window.location.reload();\n }\n\n const tabs = useMemo(\n () => [\n {\n id: \"package-manager\",\n icon: <Icon name=\"PackageManager\" size={12} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <Icon name=\"Edit\" size={12} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <Icon name=\"Danger\" size={12} className=\"text-red-900\" />,\n label: <span className=\"text-red-900\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <Icon name=\"QuestionSquare\" size={12} />,\n label: \"About\",\n content: About,\n },\n ],\n [onRefresh],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsModal-Cpxrw-MV.js","names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"sources":["../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { packageJson } from \"@powerhousedao/connect/utils\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\n\nexport const About: React.FC = () => {\n return (\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={handleDeleteDrive}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const { registryPackageList, updateRegistryPackageStatus } =\n useRegistryPackages();\n\n async function handleInstall(packageName: string) {\n if (!packageManager) return;\n\n const result = await packageManager.addPackage(packageName);\n if (result.type === \"success\") {\n updateRegistryPackageStatus(packageName, \"registry-install\");\n toast(`Package \"${packageName}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n toast(`Failed to install \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n toast(`Failed to uninstall \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex h-full flex-1 flex-col\">\n <PackageManager\n mutable={true}\n registryPackageList={registryPackageList}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import { Icon } from \"@powerhousedao/design-system\";\nimport { SettingsModal as SettingsModalV2 } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n function onRefresh() {\n window.location.reload();\n }\n\n const tabs = useMemo(\n () => [\n {\n id: \"package-manager\",\n icon: <Icon name=\"PackageManager\" size={12} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <Icon name=\"Edit\" size={12} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <Icon name=\"Danger\" size={12} className=\"text-red-900\" />,\n label: <span className=\"text-red-900\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <Icon name=\"QuestionSquare\" size={12} />,\n label: \"About\",\n content: About,\n },\n ],\n [onRefresh],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n />\n );\n};\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as connectConfig } from "./connect.config-CUbxYkCy.js";
2
2
  import { t as toast } from "./toast-iD-70hL8.js";
3
- import { t as package_default } from "./package-BwM2UjEs.js";
3
+ import { t as package_default } from "./package-Bzx97qsS.js";
4
4
  import { n as createReactor } from "./reactor-DFtKxPCt.js";
5
5
  import { useUser } from "@powerhousedao/reactor-browser";
6
6
  import { logger } from "document-model";
@@ -102,4 +102,4 @@ async function loadComponent(localPackage) {
102
102
  //#endregion
103
103
  export { loadComponent };
104
104
 
105
- //# sourceMappingURL=load-BFNMXxji.js.map
105
+ //# sourceMappingURL=load-CMOsYmLi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-BFNMXxji.js","names":["packageJson"],"sources":["../src/components/reload-connect-toast.tsx","../src/hooks/useCheckLatestVersion.ts","../src/hooks/utils.ts","../src/store/user.ts","../src/components/load.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\n\nexport const ReloadConnectToast = () => {\n const { t } = useTranslation();\n\n return (\n <div>\n <p className=\"font-medium\">{t(\"notifications.reloadApp\")}</p>\n <button\n onClick={() => location.reload()}\n className=\"underline decoration-solid underline-offset-2\"\n >\n {t(\"common.reloadConnect\")} 🔄\n </button>\n </div>\n );\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { isLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { logger } from \"document-model\";\nimport { createElement, useEffect } from \"react\";\nimport { ReloadConnectToast } from \"../components/reload-connect-toast.js\";\n\nexport const useCheckLatestVersion = () => {\n async function checkLatestVersion() {\n const result = await isLatestVersion();\n if (result === null) return;\n // ignore dev/staging versions\n if (result.isLatest || result.currentVersion.includes(\"-\")) {\n return true;\n }\n\n if (\n import.meta.env.MODE === \"development\" ||\n connectConfig.studioMode ||\n !connectConfig.warnOutdatedApp\n ) {\n logger.warn(\n \"Connect is outdated: \\nCurrent: @currentVersion\\nLatest: @latestVersion\",\n result.currentVersion,\n result.latestVersion,\n );\n } else {\n toast(createElement(ReloadConnectToast), {\n type: \"connect-warning\",\n toastId: \"outdated-app\",\n autoClose: false,\n });\n }\n }\n\n useEffect(() => {\n checkLatestVersion().catch(console.error);\n }, []);\n};\n","import { packageJson } from \"../utils/package-json.js\";\n\nexport const isMac = window.navigator.appVersion.includes(\"Mac\");\n\nconst urlBranchMap: Record<string, string> = {\n \"staging/makerdao\": \"deployments/staging/makerdao\",\n \"staging/arbitrum\": \"arb-ltip\",\n \"staging/powerhouse\": \"staging\",\n makerdao: \"deployments/makerdao\",\n arbitrum: \"deployments/arbitrum\",\n arbgrants: \"deployments/arbitrum\",\n localhost: \"develop\",\n};\n\nconst getGithubLinkFromUrl = () => {\n const githubLink = \"https://raw.githubusercontent.com/powerhouse-inc/connect\";\n const url = window.location.href;\n\n const env = Object.keys(urlBranchMap).find((env) => url.includes(env));\n const value = env ? urlBranchMap[env] : undefined;\n if (!value) {\n return undefined;\n } else {\n return `${githubLink}/${value}/package.json`;\n }\n};\n\nconst fetchLatestVersion = async () => {\n const link = getGithubLinkFromUrl();\n if (!link) {\n return undefined;\n }\n const result = await fetch(link);\n const data = (await result.json()) as { version: string };\n const { version } = data;\n return version;\n};\n\nexport const isLatestVersion = async () => {\n const currentVersion = packageJson.version;\n const deployed = await fetchLatestVersion();\n\n if (deployed) {\n return {\n isLatest: deployed === currentVersion,\n currentVersion,\n latestVersion: deployed,\n };\n }\n\n return null;\n};\n","import { useUser } from \"@powerhousedao/reactor-browser\";\nimport type { User as SentryUser } from \"@sentry/react\";\nimport { setUser as setSentryUser } from \"@sentry/react\";\nimport { useEffect } from \"react\";\n\nexport function useSetSentryUser() {\n const user = useUser();\n useEffect(() => {\n let sentryUser: SentryUser | null = null;\n if (user) {\n // saves the user info except the credential\n const { credential, ...rest } = user;\n sentryUser = { id: rest.did, username: rest.ens?.name, ...rest };\n }\n setSentryUser(sentryUser);\n }, [user]);\n}\n","import { useCheckLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport \"@powerhousedao/connect/i18n\";\nimport { createReactor, useSetSentryUser } from \"@powerhousedao/connect/store\";\nimport type { VetraPackage } from \"@powerhousedao/reactor-browser\";\nimport { type ReactNode } from \"react\";\n\nexport async function loadComponent(localPackage?: VetraPackage) {\n await createReactor(localPackage);\n return {\n default: ({ children }: { children?: ReactNode }) => {\n useSetSentryUser();\n useCheckLatestVersion();\n return children;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAEA,MAAa,2BAA2B;CACtC,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,KAAD;EAAG,WAAU;YAAe,EAAE,0BAA0B;EAAK,CAAA,EAC7D,qBAAC,UAAD;EACE,eAAe,SAAS,QAAQ;EAChC,WAAU;YAFZ,CAIG,EAAE,uBAAuB,EAAC,MACpB;IACL,EAAA,CAAA;;;;ACPV,MAAa,8BAA8B;CACzC,eAAe,qBAAqB;EAClC,MAAM,SAAS,MAAM,iBAAiB;AACtC,MAAI,WAAW,KAAM;AAErB,MAAI,OAAO,YAAY,OAAO,eAAe,SAAS,IAAI,CACxD,QAAO;AAGT,MACE,OAAO,KAAK,IAAI,SAAS,iBACzB,cAAc,cACd,CAAC,cAAc,gBAEf,QAAO,KACL,2EACA,OAAO,gBACP,OAAO,cACR;MAED,OAAM,cAAc,mBAAmB,EAAE;GACvC,MAAM;GACN,SAAS;GACT,WAAW;GACZ,CAAC;;AAIN,iBAAgB;AACd,sBAAoB,CAAC,MAAM,QAAQ,MAAM;IACxC,EAAE,CAAC;;ACnCa,OAAO,UAAU,WAAW,SAAS,MAAM;AAEhE,MAAM,eAAuC;CAC3C,oBAAoB;CACpB,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,UAAU;CACV,WAAW;CACX,WAAW;CACZ;AAED,MAAM,6BAA6B;CACjC,MAAM,aAAa;CACnB,MAAM,MAAM,OAAO,SAAS;CAE5B,MAAM,MAAM,OAAO,KAAK,aAAa,CAAC,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAC;CACtE,MAAM,QAAQ,MAAM,aAAa,OAAO,KAAA;AACxC,KAAI,CAAC,MACH;KAEA,QAAO,GAAG,WAAW,GAAG,MAAM;;AAIlC,MAAM,qBAAqB,YAAY;CACrC,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,KACH;CAIF,MAAM,EAAE,YADM,OADC,MAAM,MAAM,KAAK,EACL,MAAM;AAEjC,QAAO;;AAGT,MAAa,kBAAkB,YAAY;CACzC,MAAM,iBAAiBA,gBAAY;CACnC,MAAM,WAAW,MAAM,oBAAoB;AAE3C,KAAI,SACF,QAAO;EACL,UAAU,aAAa;EACvB;EACA,eAAe;EAChB;AAGH,QAAO;;;;AC7CT,SAAgB,mBAAmB;CACjC,MAAM,OAAO,SAAS;AACtB,iBAAgB;EACd,IAAI,aAAgC;AACpC,MAAI,MAAM;GAER,MAAM,EAAE,YAAY,GAAG,SAAS;AAChC,gBAAa;IAAE,IAAI,KAAK;IAAK,UAAU,KAAK,KAAK;IAAM,GAAG;IAAM;;AAElE,UAAc,WAAW;IACxB,CAAC,KAAK,CAAC;;;;ACTZ,eAAsB,cAAc,cAA6B;AAC/D,OAAM,cAAc,aAAa;AACjC,QAAO,EACL,UAAU,EAAE,eAAyC;AACnD,oBAAkB;AAClB,yBAAuB;AACvB,SAAO;IAEV"}
1
+ {"version":3,"file":"load-CMOsYmLi.js","names":["packageJson"],"sources":["../src/components/reload-connect-toast.tsx","../src/hooks/useCheckLatestVersion.ts","../src/hooks/utils.ts","../src/store/user.ts","../src/components/load.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\n\nexport const ReloadConnectToast = () => {\n const { t } = useTranslation();\n\n return (\n <div>\n <p className=\"font-medium\">{t(\"notifications.reloadApp\")}</p>\n <button\n onClick={() => location.reload()}\n className=\"underline decoration-solid underline-offset-2\"\n >\n {t(\"common.reloadConnect\")} 🔄\n </button>\n </div>\n );\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { isLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { logger } from \"document-model\";\nimport { createElement, useEffect } from \"react\";\nimport { ReloadConnectToast } from \"../components/reload-connect-toast.js\";\n\nexport const useCheckLatestVersion = () => {\n async function checkLatestVersion() {\n const result = await isLatestVersion();\n if (result === null) return;\n // ignore dev/staging versions\n if (result.isLatest || result.currentVersion.includes(\"-\")) {\n return true;\n }\n\n if (\n import.meta.env.MODE === \"development\" ||\n connectConfig.studioMode ||\n !connectConfig.warnOutdatedApp\n ) {\n logger.warn(\n \"Connect is outdated: \\nCurrent: @currentVersion\\nLatest: @latestVersion\",\n result.currentVersion,\n result.latestVersion,\n );\n } else {\n toast(createElement(ReloadConnectToast), {\n type: \"connect-warning\",\n toastId: \"outdated-app\",\n autoClose: false,\n });\n }\n }\n\n useEffect(() => {\n checkLatestVersion().catch(console.error);\n }, []);\n};\n","import { packageJson } from \"../utils/package-json.js\";\n\nexport const isMac = window.navigator.appVersion.includes(\"Mac\");\n\nconst urlBranchMap: Record<string, string> = {\n \"staging/makerdao\": \"deployments/staging/makerdao\",\n \"staging/arbitrum\": \"arb-ltip\",\n \"staging/powerhouse\": \"staging\",\n makerdao: \"deployments/makerdao\",\n arbitrum: \"deployments/arbitrum\",\n arbgrants: \"deployments/arbitrum\",\n localhost: \"develop\",\n};\n\nconst getGithubLinkFromUrl = () => {\n const githubLink = \"https://raw.githubusercontent.com/powerhouse-inc/connect\";\n const url = window.location.href;\n\n const env = Object.keys(urlBranchMap).find((env) => url.includes(env));\n const value = env ? urlBranchMap[env] : undefined;\n if (!value) {\n return undefined;\n } else {\n return `${githubLink}/${value}/package.json`;\n }\n};\n\nconst fetchLatestVersion = async () => {\n const link = getGithubLinkFromUrl();\n if (!link) {\n return undefined;\n }\n const result = await fetch(link);\n const data = (await result.json()) as { version: string };\n const { version } = data;\n return version;\n};\n\nexport const isLatestVersion = async () => {\n const currentVersion = packageJson.version;\n const deployed = await fetchLatestVersion();\n\n if (deployed) {\n return {\n isLatest: deployed === currentVersion,\n currentVersion,\n latestVersion: deployed,\n };\n }\n\n return null;\n};\n","import { useUser } from \"@powerhousedao/reactor-browser\";\nimport type { User as SentryUser } from \"@sentry/react\";\nimport { setUser as setSentryUser } from \"@sentry/react\";\nimport { useEffect } from \"react\";\n\nexport function useSetSentryUser() {\n const user = useUser();\n useEffect(() => {\n let sentryUser: SentryUser | null = null;\n if (user) {\n // saves the user info except the credential\n const { credential, ...rest } = user;\n sentryUser = { id: rest.did, username: rest.ens?.name, ...rest };\n }\n setSentryUser(sentryUser);\n }, [user]);\n}\n","import { useCheckLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport \"@powerhousedao/connect/i18n\";\nimport { createReactor, useSetSentryUser } from \"@powerhousedao/connect/store\";\nimport type { VetraPackage } from \"@powerhousedao/reactor-browser\";\nimport { type ReactNode } from \"react\";\n\nexport async function loadComponent(localPackage?: VetraPackage) {\n await createReactor(localPackage);\n return {\n default: ({ children }: { children?: ReactNode }) => {\n useSetSentryUser();\n useCheckLatestVersion();\n return children;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAEA,MAAa,2BAA2B;CACtC,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,KAAD;EAAG,WAAU;YAAe,EAAE,0BAA0B;EAAK,CAAA,EAC7D,qBAAC,UAAD;EACE,eAAe,SAAS,QAAQ;EAChC,WAAU;YAFZ,CAIG,EAAE,uBAAuB,EAAC,MACpB;IACL,EAAA,CAAA;;;;ACPV,MAAa,8BAA8B;CACzC,eAAe,qBAAqB;EAClC,MAAM,SAAS,MAAM,iBAAiB;AACtC,MAAI,WAAW,KAAM;AAErB,MAAI,OAAO,YAAY,OAAO,eAAe,SAAS,IAAI,CACxD,QAAO;AAGT,MACE,OAAO,KAAK,IAAI,SAAS,iBACzB,cAAc,cACd,CAAC,cAAc,gBAEf,QAAO,KACL,2EACA,OAAO,gBACP,OAAO,cACR;MAED,OAAM,cAAc,mBAAmB,EAAE;GACvC,MAAM;GACN,SAAS;GACT,WAAW;GACZ,CAAC;;AAIN,iBAAgB;AACd,sBAAoB,CAAC,MAAM,QAAQ,MAAM;IACxC,EAAE,CAAC;;ACnCa,OAAO,UAAU,WAAW,SAAS,MAAM;AAEhE,MAAM,eAAuC;CAC3C,oBAAoB;CACpB,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,UAAU;CACV,WAAW;CACX,WAAW;CACZ;AAED,MAAM,6BAA6B;CACjC,MAAM,aAAa;CACnB,MAAM,MAAM,OAAO,SAAS;CAE5B,MAAM,MAAM,OAAO,KAAK,aAAa,CAAC,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAC;CACtE,MAAM,QAAQ,MAAM,aAAa,OAAO,KAAA;AACxC,KAAI,CAAC,MACH;KAEA,QAAO,GAAG,WAAW,GAAG,MAAM;;AAIlC,MAAM,qBAAqB,YAAY;CACrC,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,KACH;CAIF,MAAM,EAAE,YADM,OADC,MAAM,MAAM,KAAK,EACL,MAAM;AAEjC,QAAO;;AAGT,MAAa,kBAAkB,YAAY;CACzC,MAAM,iBAAiBA,gBAAY;CACnC,MAAM,WAAW,MAAM,oBAAoB;AAE3C,KAAI,SACF,QAAO;EACL,UAAU,aAAa;EACvB;EACA,eAAe;EAChB;AAGH,QAAO;;;;AC7CT,SAAgB,mBAAmB;CACjC,MAAM,OAAO,SAAS;AACtB,iBAAgB;EACd,IAAI,aAAgC;AACpC,MAAI,MAAM;GAER,MAAM,EAAE,YAAY,GAAG,SAAS;AAChC,gBAAa;IAAE,IAAI,KAAK;IAAK,UAAU,KAAK,KAAK;IAAM,GAAG;IAAM;;AAElE,UAAc,WAAW;IACxB,CAAC,KAAK,CAAC;;;;ACTZ,eAAsB,cAAc,cAA6B;AAC/D,OAAM,cAAc,aAAa;AACjC,QAAO,EACL,UAAU,EAAE,eAAyC;AACnD,oBAAkB;AAClB,yBAAuB;AACvB,SAAO;IAEV"}
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as AppLoader } from "./sidebar-BsGPzoQu.js";
1
+ import { t as AppLoader } from "./sidebar-CFPiUu1q.js";
2
2
  import { createRoot } from "react-dom/client";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region main.tsx
@@ -2,7 +2,7 @@
2
2
  var package_default = {
3
3
  name: "@powerhousedao/connect",
4
4
  productName: "Powerhouse-Connect",
5
- version: "6.0.0-dev.109",
5
+ version: "6.0.0-dev.110",
6
6
  description: "Powerhouse Connect",
7
7
  main: "dist/index.html",
8
8
  type: "module",
@@ -69,7 +69,6 @@ var package_default = {
69
69
  "@powerhousedao/document-engineering": "catalog:",
70
70
  "@renown/sdk": "workspace:*",
71
71
  "@sentry/react": "^10.17.0",
72
- "document-drive": "workspace:*",
73
72
  "document-model": "workspace:*",
74
73
  "graphql": "catalog:",
75
74
  "graphql-request": "catalog:",
@@ -107,4 +106,4 @@ var package_default = {
107
106
  //#endregion
108
107
  export { package_default as t };
109
108
 
110
- //# sourceMappingURL=package-BwM2UjEs.js.map
109
+ //# sourceMappingURL=package-Bzx97qsS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-Bzx97qsS.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -403,7 +403,7 @@ function ErrorBoundary$1(props) {
403
403
  }
404
404
  //#endregion
405
405
  //#region src/components/modal/modals-container.tsx
406
- const AddDriveModal$1 = lazy(() => import("./AddDriveModal-K9jmTp6w.js").then((m) => ({ default: m.AddDriveModal })));
406
+ const AddDriveModal$1 = lazy(() => import("./AddDriveModal-A2SuEFot.js").then((m) => ({ default: m.AddDriveModal })));
407
407
  const ClearStorageModal = lazy(() => import("./ClearStorageModal-OOREyYYr.js").then((m) => ({ default: m.ClearStorageModal })));
408
408
  const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-Gae1QuhA.js").then((m) => ({ default: m.CookiesPolicyModal })));
409
409
  const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-5i6rmv3C.js").then((m) => ({ default: m.CreateDocumentModal })));
@@ -413,7 +413,7 @@ const DeleteItemModal = lazy(() => import("./DeleteItemModal-CkWegLlh.js").then(
413
413
  const DisclaimerModal = lazy(() => import("./DisclaimerModal-CCnvwoB5.js").then((m) => ({ default: m.DisclaimerModal })));
414
414
  const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-DxMjOsLg.js").then((m) => ({ default: m.DriveSettingsModal })));
415
415
  const ExportDocumentWithErrorsModal = lazy(() => import("./ExportDocumentWithErrorsModal-hgliF8Gy.js").then((m) => ({ default: m.ExportDocumentWithErrorsModal })));
416
- const SettingsModal$1 = lazy(() => import("./SettingsModal-C_csYrYH.js").then((m) => ({ default: m.SettingsModal })));
416
+ const SettingsModal$1 = lazy(() => import("./SettingsModal-Cpxrw-MV.js").then((m) => ({ default: m.SettingsModal })));
417
417
  const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-DldcNCaT.js").then((m) => ({ default: m.UpgradeDriveModal })));
418
418
  const modalComponents = {
419
419
  addDrive: AddDriveModal$1,
@@ -449,7 +449,7 @@ const ModalsContainer = lazy(async () => {
449
449
  //#endregion
450
450
  //#region src/components/app-loader.tsx
451
451
  const AppLoader = (props) => {
452
- const Load = lazy(() => import("./load-BFNMXxji.js").then((m) => m.loadComponent(props.localPackage)));
452
+ const Load = lazy(() => import("./load-CMOsYmLi.js").then((m) => m.loadComponent(props.localPackage)));
453
453
  return /* @__PURE__ */ jsxs(StrictMode, { children: [
454
454
  /* @__PURE__ */ jsx(Suspense, {
455
455
  fallback: /* @__PURE__ */ jsx(AppSkeleton, {}),
@@ -470,11 +470,6 @@ const AppLoader = (props) => {
470
470
  ] });
471
471
  };
472
472
  //#endregion
473
- //#region src/context/processor-manager.old.tsx
474
- function ProcessorManagerProvider({ children }) {
475
- return /* @__PURE__ */ jsx(Fragment, { children });
476
- }
477
- //#endregion
478
473
  //#region src/context/sentry-provider.tsx
479
474
  const SentryProvider = ({ children }) => {
480
475
  useInitSentry();
@@ -497,14 +492,14 @@ const App = () => {
497
492
  if (import.meta.env.MODE === "development") window.documentEditorDebugTools = new DocumentEditorDebugTools();
498
493
  else serviceWorkerManager.registerServiceWorker(false);
499
494
  }, []);
500
- return /* @__PURE__ */ jsx(SentryProvider, { children: /* @__PURE__ */ jsx(WagmiContext, { children: /* @__PURE__ */ jsxs(ProcessorManagerProvider, { children: [
495
+ return /* @__PURE__ */ jsx(SentryProvider, { children: /* @__PURE__ */ jsxs(WagmiContext, { children: [
501
496
  /* @__PURE__ */ jsx(ToastContainer, {
502
497
  position: "bottom-right",
503
498
  containerId: "connect"
504
499
  }),
505
500
  /* @__PURE__ */ jsx(Router, {}),
506
501
  /* @__PURE__ */ jsx(Analytics, {})
507
- ] }) }) });
502
+ ] }) });
508
503
  };
509
504
  //#endregion
510
505
  //#region src/components/cookie-banner.tsx
@@ -1149,4 +1144,4 @@ function Sidebar() {
1149
1144
  //#endregion
1150
1145
  export { AppLoader as t };
1151
1146
 
1152
- //# sourceMappingURL=sidebar-BsGPzoQu.js.map
1147
+ //# sourceMappingURL=sidebar-CFPiUu1q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-CFPiUu1q.js","names":["listeners","getInitial","subscribe","logger","logger","ErrorBoundary","ReactErrorBoundary","AddDriveModal","CreateDocumentModal","DriveSettingsModal","SettingsModal","ErrorBoundary","CookieBanner","CookieBanner","PHCookieBanner","ErrorBoundary","ErrorBoundary","ErrorBoundary"],"sources":["../src/hooks/useAcceptedCookies.ts","../src/hooks/useCookieBanner.ts","../src/hooks/useInitSentry.ts","../src/hooks/useUndoRedoShortcuts.ts","../src/components/analytics.tsx","../src/utils/browser.ts","../src/utils/document-editor-debug-tools.ts","../src/components/app-skeleton.tsx","../src/components/error-boundary.tsx","../src/components/modal/modals-container.tsx","../src/components/app-loader.tsx","../src/context/sentry-provider.tsx","../src/components/app.tsx","../src/components/cookie-banner.tsx","../src/components/document-editor-container.tsx","../src/components/editor-loader.tsx","../src/components/drive-editor-container.tsx","../src/components/drive-icon.tsx","../src/components/editors.tsx","../src/components/root.tsx","../src/pages/content.tsx","../src/pages/demo/atlas-import.tsx","../src/components/router.tsx","../src/components/sidebar.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useSyncExternalStore } from \"react\";\n\nconst namespace = connectConfig.routerBasename;\n\nconst ACCEPTED_COOKIES_KEY_STORAGE = `${namespace}:acceptedCookies`;\n\nexport interface AcceptedCookies {\n analytics: boolean;\n marketing: boolean;\n functional: boolean;\n}\n\nconst listeners = new Set<() => void>();\n\nlet cookies: AcceptedCookies = getInitial();\n\nfunction getInitial(): AcceptedCookies {\n try {\n const value = localStorage.getItem(ACCEPTED_COOKIES_KEY_STORAGE);\n return value\n ? (JSON.parse(value) as AcceptedCookies)\n : { analytics: false, marketing: false, functional: false };\n } catch {\n return { analytics: false, marketing: false, functional: false };\n }\n}\n\nfunction getCookies(): AcceptedCookies {\n return cookies;\n}\n\nfunction setCookies(setter: (prev: AcceptedCookies) => AcceptedCookies) {\n cookies = setter(cookies);\n localStorage.setItem(ACCEPTED_COOKIES_KEY_STORAGE, JSON.stringify(cookies));\n listeners.forEach((fn) => fn());\n}\n\nfunction subscribe(fn: () => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport const useAcceptedCookies = () => {\n const cookies = useSyncExternalStore(subscribe, getCookies, getCookies);\n return [cookies, setCookies] as const;\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useSyncExternalStore } from \"react\";\n\nconst namespace = connectConfig.routerBasename;\n\nexport const COOKIE_BANNER_KEY_STORAGE = `${namespace}:display-cookie-banner`;\n\nconst listeners = new Set<() => void>();\n\nlet bannerShown = getInitial();\n\nfunction getInitial(): boolean {\n try {\n const value = localStorage.getItem(COOKIE_BANNER_KEY_STORAGE);\n return value !== \"false\";\n } catch (error) {\n console.error(error);\n return true;\n }\n}\n\nfunction getCookieBannerState(): boolean {\n return bannerShown;\n}\n\nfunction setCookieBannerState(state: boolean) {\n bannerShown = state;\n localStorage.setItem(COOKIE_BANNER_KEY_STORAGE, JSON.stringify(state));\n}\n\nfunction subscribe(fn: () => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport const useCookieBanner = () => {\n const cookieBannerShown = useSyncExternalStore(\n subscribe,\n getCookieBannerState,\n getCookieBannerState,\n );\n return [cookieBannerShown, setCookieBannerState] as const;\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\n\nimport type { BrowserOptions } from \"@sentry/react\";\n\nimport { childLogger } from \"document-model\";\nimport React, { useEffect } from \"react\";\nimport {\n createRoutesFromChildren,\n matchRoutes,\n useLocation,\n useNavigationType,\n} from \"react-router-dom\";\nimport { useAcceptedCookies } from \"./useAcceptedCookies.js\";\n\nconst logger = childLogger([\"sentry\"]);\n\nlet clientStarted = false;\n\nasync function getSentry() {\n return await import(\"@sentry/react\");\n}\n\nasync function initSentry() {\n const release = connectConfig.sentry;\n\n const Sentry = await getSentry();\n const integrations: BrowserOptions[\"integrations\"] = [\n Sentry.httpClientIntegration(),\n Sentry.extraErrorDataIntegration({ depth: 5 }),\n Sentry.replayIntegration(),\n Sentry.captureConsoleIntegration({ levels: [\"error\"] }),\n ];\n if (connectConfig.sentry.tracing) {\n integrations.push(\n Sentry.reactRouterV6BrowserTracingIntegration({\n useEffect: React.useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n }),\n );\n }\n\n Sentry.init({\n release: connectConfig.sentry.release,\n dsn: connectConfig.sentry.dsn,\n environment: connectConfig.sentry.env,\n integrations,\n ignoreErrors: [\n \"User is not allowed to create files\",\n \"User is not allowed to move documents\",\n \"The user aborted a request.\",\n ],\n sendDefaultPii: true,\n tracesSampleRate: 1.0,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n beforeSend(event, hint) {\n const error = hint.originalException;\n if (\n error instanceof TypeError &&\n error.message.includes(\"Failed to fetch\") &&\n !navigator.onLine\n ) {\n // If fetch fails because user is offline then ignores the error\n return null;\n }\n return event;\n },\n });\n\n clientStarted = true;\n}\n\nasync function closeClient() {\n if (!clientStarted) {\n return;\n }\n const sentry = await getSentry();\n const client = sentry.getClient();\n return client?.close();\n}\n\nexport function useInitSentry() {\n const [acceptedCookies] = useAcceptedCookies();\n const { analytics } = acceptedCookies;\n\n useEffect(() => {\n if (!analytics) {\n closeClient().catch((error: unknown) => logger.error(\"@error\", error));\n return;\n }\n\n if (\n clientStarted ||\n !connectConfig.sentry.dsn ||\n connectConfig.sentry.dsn === \"\"\n ) {\n return;\n }\n\n initSentry().catch((error: unknown) => logger.error(\"@error\", error));\n }, [analytics]);\n}\n","import { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface UseUndoRedoShortcutsProps {\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport const useUndoRedoShortcuts = (props: UseUndoRedoShortcutsProps) => {\n const { undo, redo, canRedo, canUndo } = props;\n const isMac = window.navigator.userAgent.includes(\"Mac\");\n\n let undoShortcut = \"ctrl+z\";\n let redoShortcut = \"ctrl+y\";\n\n if (isMac) {\n undoShortcut = \"mod+z\";\n redoShortcut = \"mod+shift+z\";\n }\n\n // set handler for undo\n useHotkeys(\n undoShortcut,\n (event) => {\n event.preventDefault();\n if (canUndo) {\n undo();\n }\n },\n {},\n [canUndo, undo],\n );\n\n // set handler for redo\n useHotkeys(\n redoShortcut,\n (event) => {\n event.preventDefault();\n if (canRedo) {\n redo();\n }\n },\n {},\n [canRedo, redo],\n );\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useAcceptedCookies } from \"@powerhousedao/connect/hooks\";\nimport { useEffect } from \"react\";\n\ndeclare global {\n interface Window {\n gtag?: (...args: any[]) => void;\n dataLayer?: any[];\n }\n}\n\nfunction gtag(...args: (string | Date)[]) {\n window.dataLayer?.push(...args);\n}\n\nexport const Analytics = () => {\n const gaTrackingId = connectConfig.gaTrackingId;\n const [{ analytics }] = useAcceptedCookies();\n const useAnalytics = gaTrackingId && analytics;\n\n useEffect(() => {\n if (useAnalytics) {\n // Create the GA script tag\n const script = document.createElement(\"script\");\n script.src = `https://www.googletagmanager.com/gtag/js?id=${gaTrackingId}`;\n script.async = true;\n document.head.appendChild(script);\n\n // Initialize GA\n window.dataLayer = window.dataLayer || [];\n\n gtag(\"js\", new Date());\n gtag(\"config\", gaTrackingId);\n\n // Clean up the script if no longer enabled\n return () => {\n document.head.removeChild(script);\n };\n }\n }, [useAnalytics, gaTrackingId]);\n\n return null;\n};\n","export function getBasePath() {\n if (typeof document === \"undefined\") {\n return \"/\";\n }\n\n const baseEl = document.querySelector(\"base\");\n const href = baseEl?.getAttribute(\"href\");\n return href || \"/\";\n}\n","import type {\n Operation,\n PHDocument,\n} from \"@powerhousedao/shared/document-model\";\n\nexport class DocumentEditorDebugTools {\n private document: PHDocument | undefined;\n private operations: Operation[] = [];\n\n constructor(document?: PHDocument) {\n if (document) {\n this.document = document;\n }\n }\n\n private operationsToTableObject(operations: Operation[]) {\n return operations.map((op) => ({\n ...op,\n input: JSON.stringify(op.action.input),\n }));\n }\n\n public setDocument(document: PHDocument) {\n this.document = document;\n }\n\n public getDocument() {\n return this.document;\n }\n\n public getOperations() {\n return this.operations;\n }\n\n public pushOperation(operation: Operation) {\n this.operations.push(operation);\n }\n\n public operationsTable() {\n if (!this.document) {\n console.warn(\"No document\");\n }\n const ops = Object.values(this.document?.operations || {})\n .filter((array): array is Operation[] => array !== undefined)\n .flatMap((array) => array)\n .sort((a, b) => a.index - b.index);\n\n console.table(this.operationsToTableObject(ops));\n }\n\n public scopeOperationsTable(scope: string) {\n if (!this.document) {\n console.warn(\"No document\");\n }\n const ops = this.document?.operations[scope] || [];\n console.table(this.operationsToTableObject(ops));\n }\n\n public operationsLog() {\n console.log(this.operations);\n }\n\n public operationsLogTable() {\n console.table(this.operationsToTableObject(this.operations));\n }\n\n public clear() {\n this.operations = [];\n this.document = undefined;\n }\n}\n","import { getBasePath } from \"@powerhousedao/connect/utils\";\nimport {\n AnimatedLoader,\n ConnectSidebar,\n HomeScreen,\n} from \"@powerhousedao/design-system/connect\";\nimport { useEffect, useState } from \"react\";\nconst LOADER_DELAY = 250;\n\nconst Loader = ({ delay = LOADER_DELAY }: { delay?: number }) => {\n const isSSR = typeof window === \"undefined\";\n const showInitialLoader =\n typeof document !== \"undefined\" &&\n document.body.getAttribute(\"data-show-loader\") === \"true\";\n\n const [showLoading, setShowLoading] = useState(!delay || showInitialLoader);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShowLoading(true);\n }, delay);\n\n return () => clearTimeout(id);\n }, []);\n\n return (\n <div\n className={`skeleton-loader absolute inset-0 z-10 flex items-center justify-center ${showLoading ? \"\" : \"hidden\"}`}\n >\n <div className=\"animate-pulse overflow-hidden rounded-full shadow-lg\">\n <AnimatedLoader />\n </div>\n {isSSR ? (\n <script\n dangerouslySetInnerHTML={{\n __html: `setTimeout(() => {\n document.querySelector('.skeleton-loader')?.classList.remove('hidden');\n document.body.setAttribute('data-show-loader', 'true');\n }, ${delay})`,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport const AppSkeleton = () => {\n const isSSR = typeof window === \"undefined\";\n const isHomeScreen = !isSSR && window.location.pathname === getBasePath();\n return (\n <div className=\"flex h-screen\">\n <ConnectSidebar\n className=\"animate-pulse\"\n onLogin={undefined}\n onDisconnect={undefined}\n onClickSettings={undefined}\n address={undefined}\n />\n <HomeScreen\n containerClassName={\n isSSR || !isHomeScreen ? \"hidden home-screen\" : undefined\n }\n children={null}\n />\n {isSSR ? (\n <script\n dangerouslySetInnerHTML={{\n __html: `\n const baseEl = document.querySelector('base');\n const href = baseEl?.getAttribute('href');\n const basePath = href || '/';\n if (window.location.pathname === basePath) {\n document.querySelector('.home-screen')?.classList.remove('hidden')\n }`,\n }}\n />\n ) : null}\n <Loader />\n </div>\n );\n};\n\nexport default AppSkeleton;\n","import { childLogger } from \"document-model\";\nimport type { ReactNode } from \"react\";\nimport {\n ErrorBoundary as ReactErrorBoundary,\n type FallbackProps,\n} from \"react-error-boundary\";\n\nconst logger = childLogger([\"Connect\"]);\n\n/**\n * Available fallback UI variants for the ErrorBoundary component.\n *\n * - `\"silent\"` - Renders nothing when an error occurs (useful for modals)\n * - `\"text\"` - Displays a simple centered text message\n * - `\"detailed\"` - Shows full error details including message and JSON representation\n */\ntype ErrorFallbackVariant = \"silent\" | \"text\" | \"detailed\";\n\n/**\n * Base props shared by all ErrorBoundary configurations.\n */\ntype BaseErrorBoundaryProps = {\n /** Content to wrap with error boundary protection */\n children: ReactNode;\n /** Optional callback invoked when an error is caught (in addition to logging) */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n /** When any value in this array changes, the error boundary resets */\n resetKeys?: unknown[];\n /** Logger context path for error logging (e.g., [\"Connect\", \"Editor\"]) */\n loggerContext?: string[];\n};\n\n/**\n * Props for using a predefined fallback variant.\n */\ntype VariantErrorBoundaryProps = BaseErrorBoundaryProps & {\n /** The fallback UI variant to display on error */\n variant: ErrorFallbackVariant;\n /** Custom message for the \"text\" variant (default: \"Something went wrong\") */\n fallbackMessage?: string;\n};\n\n/**\n * Props for using a custom fallback render function.\n */\ntype CustomFallbackErrorBoundaryProps = BaseErrorBoundaryProps & {\n /** Custom render function for the fallback UI */\n fallbackRender: (props: FallbackProps) => ReactNode;\n};\n\n/**\n * Union type for all ErrorBoundary prop configurations.\n * Use either a variant or a custom fallbackRender, but not both.\n */\ntype ErrorBoundaryProps =\n | VariantErrorBoundaryProps\n | CustomFallbackErrorBoundaryProps;\n\nfunction hasCustomFallback(\n props: ErrorBoundaryProps,\n): props is CustomFallbackErrorBoundaryProps {\n return \"fallbackRender\" in props;\n}\n\nfunction SilentFallback() {\n return null;\n}\n\n/**\n * Simple text-based fallback component.\n * Displays a centered message when an error occurs.\n */\nfunction TextFallback({\n message = \"Something went wrong\",\n}: {\n message?: string;\n}) {\n return <div className=\"text-center\">{message}</div>;\n}\n\n/**\n * Detailed fallback component showing full error information.\n * Displays error message and JSON representation of the error object.\n * Useful for development and debugging purposes.\n */\nfunction DetailedFallback({ error }: FallbackProps) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return (\n <div className=\"mx-auto flex max-w-[80%] flex-1 flex-col items-center justify-center\">\n <h1 className=\"mb-2 text-xl font-semibold\">Error</h1>\n <i>{errorMessage}</i>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n </div>\n );\n}\n\n/**\n * Centered error message fallback component.\n * Displays the error message in a centered, full-size container.\n * Suitable for use as a custom fallbackRender when you need simple error display.\n */\nfunction CenteredErrorMessage({ error }: FallbackProps) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return (\n <div className=\"flex size-full items-center justify-center\">\n <h3 className=\"text-lg font-semibold\">{errorMessage}</h3>\n </div>\n );\n}\n\nfunction getFallbackComponent(\n variant: ErrorFallbackVariant,\n fallbackMessage?: string,\n): (props: FallbackProps) => ReactNode {\n switch (variant) {\n case \"silent\":\n return SilentFallback;\n case \"text\":\n return () => <TextFallback message={fallbackMessage} />;\n case \"detailed\":\n return DetailedFallback;\n default:\n return CenteredErrorMessage;\n }\n}\n\n/**\n * Unified error boundary component for catching and handling React errors.\n *\n * Built on top of `react-error-boundary`, this component provides:\n * - Automatic error logging with configurable context\n * - Multiple fallback UI variants (silent, text, detailed)\n * - Support for custom fallback render functions\n * - Reset capability via `resetKeys`\n *\n * @example\n * // Using a predefined variant\n * <ErrorBoundary variant=\"detailed\" loggerContext={[\"Connect\", \"Editor\"]}>\n * <EditorComponent />\n * </ErrorBoundary>\n *\n * @example\n * // Using a custom message with the text variant\n * <ErrorBoundary variant=\"text\" fallbackMessage=\"Failed to load drives\">\n * <DrivesList />\n * </ErrorBoundary>\n *\n * @example\n * // Using a custom fallback render\n * <ErrorBoundary\n * fallbackRender={CenteredErrorMessage}\n * onError={(error) => trackError(error)}\n * >\n * <MyComponent />\n * </ErrorBoundary>\n *\n * @example\n * // Silent mode for modals (renders null on error)\n * <ErrorBoundary variant=\"silent\" loggerContext={[\"Connect\", \"Modals\"]}>\n * <ModalContent />\n * </ErrorBoundary>\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps) {\n const { children, onError, resetKeys, loggerContext } = props;\n\n const handleError = (error: Error, info: React.ErrorInfo) => {\n if (\n error.message.includes(\"Failed to fetch dynamically imported module\") &&\n error.message.includes(\"node_modules/.vite\")\n ) {\n console.error(error);\n console.log(\"Outdated chunk detected, reloading page...\");\n window.location.reload();\n return;\n }\n\n const contextLogger = loggerContext ? childLogger(loggerContext) : logger;\n contextLogger.error(\"@error @info\", error, info);\n onError?.(error, info);\n };\n\n const fallbackRender = hasCustomFallback(props)\n ? props.fallbackRender\n : getFallbackComponent(props.variant, props.fallbackMessage);\n\n return (\n <ReactErrorBoundary\n fallbackRender={fallbackRender}\n onError={handleError}\n resetKeys={resetKeys}\n >\n {children}\n </ReactErrorBoundary>\n );\n}\n\nexport { CenteredErrorMessage, DetailedFallback, TextFallback };\nexport type { FallbackProps };\n","import { usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { lazy, Suspense } from \"react\";\nimport { ErrorBoundary } from \"../error-boundary.js\";\n\nconst AddDriveModal = lazy(() =>\n import(\"./modals/AddDriveModal.js\").then((m) => ({\n default: m.AddDriveModal,\n })),\n);\nconst ClearStorageModal = lazy(() =>\n import(\"./modals/ClearStorageModal.js\").then((m) => ({\n default: m.ClearStorageModal,\n })),\n);\nconst CookiesPolicyModal = lazy(() =>\n import(\"./modals/CookiesPolicyModal.js\").then((m) => ({\n default: m.CookiesPolicyModal,\n })),\n);\nconst CreateDocumentModal = lazy(() =>\n import(\"./modals/CreateDocumentModal.js\").then((m) => ({\n default: m.CreateDocumentModal,\n })),\n);\nconst DebugSettingsModal = lazy(() =>\n import(\"./modals/DebugSettingsModal.js\").then((m) => ({\n default: m.DebugSettingsModal,\n })),\n);\nconst DeleteDriveModal = lazy(() =>\n import(\"./modals/DeleteDriveModal.js\").then((m) => ({\n default: m.DeleteDriveModal,\n })),\n);\nconst DeleteItemModal = lazy(() =>\n import(\"./modals/DeleteItemModal.js\").then((m) => ({\n default: m.DeleteItemModal,\n })),\n);\nconst DisclaimerModal = lazy(() =>\n import(\"./modals/DisclaimerModal.js\").then((m) => ({\n default: m.DisclaimerModal,\n })),\n);\nconst DriveSettingsModal = lazy(() =>\n import(\"./modals/DriveSettingsModal.js\").then((m) => ({\n default: m.DriveSettingsModal,\n })),\n);\nconst ExportDocumentWithErrorsModal = lazy(() =>\n import(\"./modals/ExportDocumentWithErrorsModal.js\").then((m) => ({\n default: m.ExportDocumentWithErrorsModal,\n })),\n);\nconst SettingsModal = lazy(() =>\n import(\"./modals/SettingsModal.js\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\nconst UpgradeDriveModal = lazy(() =>\n import(\"./modals/UpgradeDriveModal.js\").then((m) => ({\n default: m.UpgradeDriveModal,\n })),\n);\nconst InspectorModal = lazy(() =>\n import(\"./modals/InspectorModal/index.js\").then((m) => ({\n default: m.InspectorModal,\n })),\n);\nconst MissingPackageModal = lazy(() =>\n import(\"./modals/MissingPackageModal.js\").then((m) => ({\n default: m.ConnectMissingPackageModal,\n })),\n);\nconst modalComponents = {\n addDrive: AddDriveModal,\n clearStorage: ClearStorageModal,\n cookiesPolicy: CookiesPolicyModal,\n createDocument: CreateDocumentModal,\n debugSettings: DebugSettingsModal,\n deleteDrive: DeleteDriveModal,\n deleteItem: DeleteItemModal,\n disclaimer: DisclaimerModal,\n driveSettings: DriveSettingsModal,\n exportDocumentWithErrors: ExportDocumentWithErrorsModal,\n inspector: InspectorModal,\n settings: SettingsModal,\n upgradeDrive: UpgradeDriveModal,\n missingPackage: MissingPackageModal,\n} as const;\n\nexport const ModalsContainer = lazy(async () => {\n return {\n default: () => {\n const phModal = usePHModal();\n\n if (!phModal?.type) return null;\n\n const ModalComponent = modalComponents[phModal.type];\n\n return ModalComponent ? (\n <ErrorBoundary variant=\"silent\" loggerContext={[\"Connect\", \"Modals\"]}>\n <Suspense fallback={null}>\n <ModalComponent />\n </Suspense>\n </ErrorBoundary>\n ) : null;\n },\n };\n});\n","import \"@powerhousedao/connect/i18n\";\nimport type { VetraPackage } from \"@powerhousedao/reactor-browser\";\nimport { lazy, StrictMode, Suspense } from \"react\";\nimport AppSkeleton from \"./app-skeleton.js\";\nimport { App, CookieBanner } from \"./index.js\";\nimport { ModalsContainer } from \"./modal/modals-container.js\";\n\nexport const AppLoader = (props: { localPackage?: VetraPackage }) => {\n const Load = lazy(() =>\n import(\"./load.js\").then((m) => m.loadComponent(props.localPackage)),\n );\n return (\n <StrictMode>\n <Suspense fallback={<AppSkeleton />} name=\"AppLoader\">\n <Load {...props}>\n <App />\n </Load>\n </Suspense>\n <Suspense name=\"CookieBanner\">\n <CookieBanner />\n </Suspense>\n <Suspense name=\"ModalsContainer\">\n <ModalsContainer />\n </Suspense>\n </StrictMode>\n );\n};\n","import { useInitSentry } from \"@powerhousedao/connect/hooks\";\n\ninterface SentryProviderProps {\n children?: React.ReactNode;\n}\n\nexport const SentryProvider: React.FC<SentryProviderProps> = ({ children }) => {\n useInitSentry();\n\n return children;\n};\n","import { Analytics, Router } from \"@powerhousedao/connect/components\";\n\nimport { SentryProvider } from \"@powerhousedao/connect/context\";\nimport {\n DocumentEditorDebugTools,\n serviceWorkerManager,\n} from \"@powerhousedao/connect/utils\";\nimport {\n ToastContainer,\n WagmiContext,\n} from \"@powerhousedao/design-system/connect\";\nimport { useEffect } from \"react\";\nexport const App = () => {\n // refresh page on vite preload error due to outdated chunks\n useEffect(() => {\n const handlePreloadError = () => {\n console.log(\"Outdated chunks detected, reloading page...\");\n window.location.reload();\n };\n\n window.addEventListener(\"vite:preloadError\", handlePreloadError);\n\n return () => {\n window.removeEventListener(\"vite:preloadError\", handlePreloadError);\n };\n }, []);\n\n useEffect(() => {\n if (import.meta.env.MODE === \"development\") {\n window.documentEditorDebugTools = new DocumentEditorDebugTools();\n } else {\n serviceWorkerManager.registerServiceWorker(false);\n }\n }, []);\n\n return (\n <SentryProvider>\n <WagmiContext>\n <ToastContainer position=\"bottom-right\" containerId=\"connect\" />\n <Router />\n <Analytics />\n </WagmiContext>\n </SentryProvider>\n );\n};\n","import {\n useAcceptedCookies,\n useCookieBanner,\n} from \"@powerhousedao/connect/hooks\";\nimport type { CookieInput } from \"@powerhousedao/design-system/connect\";\nimport { CookieBanner as PHCookieBanner } from \"@powerhousedao/design-system/connect\";\nimport { showPHModal } from \"@powerhousedao/reactor-browser\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport { i18n } from \"@powerhousedao/connect/i18n\";\n\nconst isCookieAccepted = (cookies: CookieInput[], id: string) => {\n return cookies.some((cookie) => cookie.id === id && cookie.value);\n};\n\nexport const CookieBanner = () => {\n const { t } = useTranslation(undefined, {\n useSuspense: true,\n i18n,\n });\n const [showBanner, setShowBanner] = useCookieBanner();\n const [, setAcceptedCookies] = useAcceptedCookies();\n\n const cookiesInput: CookieInput[] = [\n {\n id: \"analytics-cookie\",\n label: t(\"cookieBanner.cookies.analytics\"),\n value: true,\n },\n ];\n\n const handleAccept = (cookies: CookieInput[]) => {\n setShowBanner(false);\n\n if (isCookieAccepted(cookies, \"analytics-cookie\")) {\n setAcceptedCookies((acceptedCookies) => ({\n ...acceptedCookies,\n analytics: true,\n }));\n }\n };\n\n const handleReject = () => {\n setShowBanner(false);\n setAcceptedCookies(() => ({\n analytics: false,\n functional: false,\n marketing: false,\n }));\n };\n\n if (!showBanner) {\n return null;\n }\n\n return (\n <div className=\"absolute inset-0 z-[10000] backdrop-blur-sm\">\n <div className=\"absolute inset-0 bg-black opacity-15\" />\n <div className=\"absolute inset-x-0 bottom-0 flex justify-center bg-white px-10 pb-16 pt-10 shadow-lg\">\n <PHCookieBanner\n className=\"max-w-[1024px]\"\n cookies={cookiesInput}\n onSubmit={handleAccept}\n onReject={handleReject}\n submitLabel={t(\"cookieBanner.accept\")}\n rejectLabel={t(\"cookieBanner.reject\")}\n >\n <p className=\"font-semibold text-gray-500\">\n <Trans\n key={\"cookieBanner.message\"}\n i18nKey=\"cookieBanner.message\"\n components={{\n a: (\n <a\n onClick={() => showPHModal({ type: \"cookiesPolicy\" })}\n key={\"cookieBanner.message-link\"}\n className=\"cursor-pointer text-gray-900 hover:underline\"\n />\n ),\n }}\n />\n </p>\n </PHCookieBanner>\n </div>\n </div>\n );\n};\n","import { DocumentEditor } from \"@powerhousedao/connect/components\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport {\n exportFile,\n setSelectedNode,\n showPHModal,\n useNodeParentFolderById,\n useSelectedDocument,\n validateDocument,\n} from \"@powerhousedao/reactor-browser\";\nimport { useCallback, useMemo } from \"react\";\n\nexport function DocumentEditorContainer() {\n const [selectedDocument] = useSelectedDocument();\n const parentFolder = useNodeParentFolderById(selectedDocument.header.id);\n\n const onExport = useCallback(() => {\n const validationErrors = validateDocument(selectedDocument);\n\n if (validationErrors.length) {\n showPHModal({\n type: \"exportDocumentWithErrors\",\n documentId: selectedDocument.header.id,\n });\n } else {\n exportFile(selectedDocument).catch((error: any) => {\n console.error(error);\n const errorMessage =\n error instanceof Error\n ? error.message\n : JSON.stringify(error, null, 1);\n toast(`Failed to export document: ${errorMessage}`);\n });\n }\n }, [selectedDocument]);\n\n // TODO: unused\n const onOpenSwitchboardLink = useMemo(() => {\n return async () => {\n //\n };\n }, []);\n\n const onClose = useCallback(() => {\n setSelectedNode(parentFolder);\n }, [parentFolder, setSelectedNode]);\n\n return (\n <div\n id=\"document-editor-container\"\n className=\"flex-1\"\n data-document-type={selectedDocument.header.documentType}\n >\n <DocumentEditor\n document={selectedDocument}\n onClose={onClose}\n onExport={onExport}\n onOpenSwitchboardLink={onOpenSwitchboardLink}\n />\n </div>\n );\n}\n","import { DefaultEditorLoader } from \"@powerhousedao/design-system/connect\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\n\ntype Props = ComponentProps<typeof DefaultEditorLoader> & {\n loadingTimeout?: number;\n customEditorLoader?: ReactNode;\n};\nexport function EditorLoader(props: Props) {\n const [showLoading, setShowLoading] = useState(false);\n\n // only shows the loader after some time has passed\n useEffect(() => {\n setTimeout(() => {\n setShowLoading(true);\n }, props.loadingTimeout ?? 200);\n }, [props]);\n\n if (!showLoading) return null;\n\n const { customEditorLoader, ...defaultProps } = props;\n\n if (customEditorLoader) return <>{customEditorLoader}</>;\n\n return <DefaultEditorLoader {...defaultProps} />;\n}\n","import { GenericDriveExplorer } from \"@powerhousedao/powerhouse-vetra-packages/editors\";\nimport { DropZoneWrapper } from \"@powerhousedao/design-system/connect\";\nimport {\n useDefaultDriveEditorModule,\n useDriveEditorModuleById,\n useSelectedDocumentId,\n useSelectedDrive,\n} from \"@powerhousedao/reactor-browser\";\nimport { Suspense } from \"react\";\nimport { DocumentEditorContainer } from \"./document-editor-container.js\";\nimport { EditorLoader } from \"./editor-loader.js\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\n\nexport function DriveEditorContainer() {\n const [selectedDrive] = useSelectedDrive();\n const selectedDocumentId = useSelectedDocumentId();\n\n const driveEditor = useDriveEditorModuleById(\n selectedDrive.header.meta?.preferredEditor,\n );\n const defaultDriveEditor = useDefaultDriveEditorModule();\n\n const DriveEditorComponent =\n driveEditor?.Component ??\n defaultDriveEditor?.Component ??\n GenericDriveExplorer.Component;\n\n if (!DriveEditorComponent) {\n throw new Error(\"No drive editor component found\");\n }\n return (\n <ErrorBoundary\n variant=\"detailed\"\n resetKeys={[selectedDrive.header.id]}\n loggerContext={[\"Connect\", \"DriveEditor\"]}\n >\n <Suspense fallback={<EditorLoader />}>\n <DropZoneWrapper className=\"flex h-full flex-col overflow-auto\">\n <DriveEditorComponent>\n {selectedDocumentId ? <DocumentEditorContainer /> : null}\n </DriveEditorComponent>\n </DropZoneWrapper>\n </Suspense>\n </ErrorBoundary>\n );\n}\n","import { Icon } from \"@powerhousedao/design-system\";\nimport { driveCollectionId, useSyncList } from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport function DriveIcon({\n drive,\n}: {\n drive: DocumentDriveDocument | undefined;\n}) {\n const remotes = useSyncList();\n const isRemoteDrive = useMemo(() => {\n if (!drive) return false;\n\n return remotes.some(\n (remote) =>\n remote.collectionId === driveCollectionId(\"main\", drive.header.id),\n );\n }, [remotes, drive]);\n\n const driveIconSrc = drive?.state.global.icon;\n\n if (driveIconSrc) {\n return (\n <img src={driveIconSrc} alt={drive.header.name} height={32} width={32} />\n );\n }\n\n if (!isRemoteDrive) {\n return <Icon name=\"Hdd\" size={32} />;\n }\n\n return <Icon name=\"Server\" size={32} />;\n}\n","import { EditorLoader } from \"@powerhousedao/connect/components\";\nimport { useUndoRedoShortcuts } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { RevisionHistory } from \"@powerhousedao/design-system/connect\";\nimport {\n getRevisionFromDate,\n setRevisionHistoryVisible,\n showPHModal,\n useDocumentById,\n useDocumentModelModuleById,\n useDocumentOperations,\n useEditorModuleById,\n useFallbackEditorModule,\n useRevisionHistoryVisible,\n useSelectedTimelineItem,\n} from \"@powerhousedao/reactor-browser\";\nimport type { PHDocument } from \"@powerhousedao/shared/document-model\";\nimport { redo, undo } from \"@powerhousedao/shared/document-model\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { CenteredErrorMessage, ErrorBoundary } from \"./error-boundary.js\";\n\ntype Props<TDocument extends PHDocument = PHDocument> = {\n document: TDocument;\n onClose: () => void;\n onExport: () => void;\n onOpenSwitchboardLink?: () => Promise<void>;\n};\n\nfunction EditorError({ message }: { message: React.ReactNode }) {\n return (\n <div className=\"flex size-full items-center justify-center\">\n <h3 className=\"text-lg font-semibold\">{message}</h3>\n </div>\n );\n}\n\nexport const DocumentEditor: React.FC<Props> = (props) => {\n const {\n document: initialDocument,\n onClose,\n onExport,\n onOpenSwitchboardLink,\n } = props;\n const selectedTimelineItem = useSelectedTimelineItem();\n const revisionHistoryVisible = useRevisionHistoryVisible();\n const [document, dispatch] = useDocumentById(initialDocument.header.id);\n const documentId = document?.header.id ?? undefined;\n const documentName = document?.header.name ?? undefined;\n const documentType = document?.header.documentType ?? undefined;\n const preferredEditor = document?.header.meta?.preferredEditor ?? undefined;\n const {\n globalOperations,\n localOperations,\n isLoading: isLoadingOperations,\n refetch: refetchOperations,\n } = useDocumentOperations(documentId);\n\n // Refetch operations when revision history panel opens\n useEffect(() => {\n if (revisionHistoryVisible) {\n void refetchOperations();\n }\n }, [revisionHistoryVisible, refetchOperations]);\n\n const globalRevisionNumber = document?.header.revision.global ?? 0;\n const localRevisionNumber = document?.header.revision.local ?? 0;\n const documentModelModule = useDocumentModelModuleById(documentType);\n const preferredEditorModule = useEditorModuleById(preferredEditor);\n const fallbackEditorModule = useFallbackEditorModule(documentType);\n const editorModule = preferredEditorModule ?? fallbackEditorModule;\n const isLoadingDocument = !document;\n const isLoadingEditor =\n editorModule &&\n documentType &&\n !editorModule.documentTypes.includes(documentType) &&\n !editorModule.documentTypes.includes(\"*\");\n\n const canUndo = globalRevisionNumber > 0 || localRevisionNumber > 0;\n const canRedo = !!document?.clipboard.length;\n const addUndoAction = () => dispatch(undo());\n const addRedoAction = () => dispatch(redo());\n useUndoRedoShortcuts({\n undo: addUndoAction,\n redo: addRedoAction,\n canUndo,\n canRedo,\n });\n\n useEffect(() => {\n return () => {\n window.documentEditorDebugTools?.clear();\n };\n }, []);\n\n const [editorError, setEditorError] = useState<\n | {\n error: any;\n info: React.ErrorInfo;\n documentId?: string;\n // clear: () => void;\n }\n | undefined\n >(undefined);\n\n useEffect(() => {\n if (editorError && editorError.documentId !== documentId) {\n setEditorError(undefined);\n }\n }, [editorError, documentId]);\n\n const handleEditorError = (error: Error, info: React.ErrorInfo) => {\n setEditorError({\n error,\n documentId,\n info,\n });\n };\n\n if (isLoadingEditor) {\n return <EditorLoader message=\"Loading editor\" />;\n }\n\n if (isLoadingDocument) {\n return <EditorLoader message=\"Loading document\" />;\n }\n\n if (!documentModelModule) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>\n Unable to open the document because the document model \"\n {documentType}\" is not supported.\n </p>\n <p>\n Go to the{\" \"}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showPHModal({ type: \"settings\" });\n }}\n >\n package manager\n </button>{\" \"}\n to install this document model\n </p>\n </div>\n }\n />\n );\n }\n\n if (!editorModule) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>Unable to open the document because no editor has been found</p>\n <p>\n Go to the{\" \"}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showPHModal({ type: \"settings\" });\n }}\n >\n package manager\n </button>{\" \"}\n an editor for the \"${documentType}\" document type\n </p>\n </div>\n }\n />\n );\n }\n const EditorComponent = editorModule.Component;\n\n return (\n <div\n className=\"relative h-full\"\n id=\"document-editor-context\"\n data-editor={editorModule.id}\n data-document-type={documentType}\n >\n {revisionHistoryVisible ? (\n isLoadingOperations ? (\n <EditorLoader message=\"Loading operations\" />\n ) : (\n <RevisionHistory\n key={documentId}\n documentTitle={documentName ?? \"\"}\n documentId={documentId ?? \"\"}\n globalOperations={globalOperations}\n localOperations={localOperations}\n onClose={() => setRevisionHistoryVisible(false)}\n documentState={document.state}\n onCopyState={() => {\n toast(\"Copied document state to clipboard\", { type: \"success\" });\n }}\n onCopyDocId={() => {\n toast(\"Copied document ID to clipboard\", { type: \"success\" });\n }}\n />\n )\n ) : (\n <Suspense\n fallback={<EditorLoader message=\"Loading editor\" />}\n name=\"EditorLoader\"\n >\n <ErrorBoundary\n fallbackRender={CenteredErrorMessage}\n resetKeys={[documentId]}\n onError={handleEditorError}\n loggerContext={[\"Connect\", \"DocumentEditor\"]}\n >\n {!editorError?.error && (\n <EditorComponent\n key={documentId}\n context={{\n readMode: !!selectedTimelineItem,\n selectedTimelineRevision: getRevisionFromDate(\n selectedTimelineItem?.startDate,\n selectedTimelineItem?.endDate,\n globalOperations,\n ),\n }}\n documentId={document.header.id}\n />\n )}\n </ErrorBoundary>\n </Suspense>\n )}\n </div>\n );\n};\n","import { Sidebar } from \"@powerhousedao/connect/components\";\nimport { Suspense } from \"react\";\nimport { Outlet } from \"react-router-dom\";\n\nexport function Root() {\n return (\n <div className=\"h-screen\">\n <div\n className={`flex h-screen items-stretch overflow-auto`}\n role=\"presentation\"\n tabIndex={0}\n >\n <Suspense name=\"Root\">\n <Sidebar />\n <div className=\"relative flex-1 overflow-auto\">\n <Outlet />\n </div>\n </Suspense>\n </div>\n </div>\n );\n}\n","import {\n DriveEditorContainer,\n DriveIcon,\n} from \"@powerhousedao/connect/components\";\nimport {\n connectConfig,\n defaultPHDocumentEditorConfig,\n defaultPHDriveEditorConfig,\n} from \"@powerhousedao/connect/config\";\nimport {\n HomeScreen,\n HomeScreenAddDriveItem,\n HomeScreenItem,\n} from \"@powerhousedao/design-system/connect\";\nimport {\n setPHDocumentEditorConfig,\n setPHDriveEditorConfig,\n setSelectedDrive,\n useDriveEditorModuleById,\n useDrives,\n useSelectedDocumentId,\n useSelectedDriveSafe,\n useSelectedFolder,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useEffect } from \"react\";\n\nexport function Content() {\n const [selectedDrive] = useSelectedDriveSafe();\n const selectedFolder = useSelectedFolder();\n const selectedDocumentId = useSelectedDocumentId();\n\n useEffect(() => {\n if (!selectedDocumentId) {\n setPHDocumentEditorConfig(defaultPHDocumentEditorConfig);\n }\n }, [selectedDocumentId]);\n\n useEffect(() => {\n if (!selectedDrive) {\n setPHDriveEditorConfig(defaultPHDriveEditorConfig);\n }\n }, [selectedDrive]);\n\n const showHomeScreen =\n !selectedDocumentId && !selectedDrive && !selectedFolder;\n return (\n <ContentContainer>\n {showHomeScreen ? <HomeScreenContainer /> : <DriveEditorContainer />}\n </ContentContainer>\n );\n}\n\nfunction ContentContainer({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-full flex-col overflow-auto\" id=\"content-view\">\n {children}\n </div>\n );\n}\n\nfunction DriveItem({ drive }: { drive: DocumentDriveDocument }) {\n const editorModule = useDriveEditorModuleById(\n drive.header.meta?.preferredEditor,\n );\n const description = editorModule?.name || \"Drive Explorer App\";\n return (\n <HomeScreenItem\n key={drive.header.id}\n title={drive.state.global.name}\n description={description}\n icon={<DriveIcon drive={drive} />}\n onClick={() => setSelectedDrive(drive)}\n />\n );\n}\n\nfunction HomeScreenContainer() {\n const drives = useDrives();\n const config = connectConfig;\n return (\n <HomeScreen>\n {drives?.map((drive) => {\n return <DriveItem key={drive.header.id} drive={drive} />;\n })}\n {config.drives.addDriveEnabled && <HomeScreenAddDriveItem />}\n </HomeScreen>\n );\n}\n","import { toast } from \"@powerhousedao/connect/services\";\nimport { PowerhouseButton } from \"@powerhousedao/design-system\";\nimport {\n addRemoteDrive,\n useReactorClient,\n} from \"@powerhousedao/reactor-browser\";\nimport { gql, request } from \"graphql-request\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocation, useNavigate, useParams } from \"react-router-dom\";\n\nconst REACTOR_URL = \"https://apps.powerhouse.io/sky-atlas/staging/switchboard\";\nconst MIN_LOADING_TIME = 2000;\n\nfunction useReactorUrl() {\n const { search } = useLocation();\n return useMemo(() => {\n const params = new URLSearchParams(search);\n const url = params.get(\"reactorUrl\") ?? REACTOR_URL;\n return url.endsWith(\"/\") ? url : `${url}/`;\n }, [search]);\n}\n\nasync function forkAtlas(\n docId: string,\n reactorUrl: string,\n): Promise<{ ForkAtlas: string }> {\n const document = gql`\n mutation ForkAtlas($docId: PHID) {\n ForkAtlas(docId: $docId)\n }\n `;\n return await request(`${reactorUrl}graphql`, document, { docId });\n}\n\nexport function AtlasImport() {\n const status = useRef<\n \"initial\" | \"forking\" | \"forked\" | \"addingDrive\" | \"done\" | \"error\"\n >(\"initial\");\n const reactor = useReactorClient();\n const { documentId } = useParams();\n const reactorUrl = useReactorUrl();\n const navigate = useNavigate();\n const [driveId, setDriveId] = useState<string | undefined>(undefined);\n const [error, setError] = useState<unknown>(undefined);\n const [loading, setLoading] = useState(true);\n const hasError = status.current === \"error\";\n\n useEffect(() => {\n if (error) {\n console.error(\"Error forking Atlas:\", error);\n toast(\"Error forking Atlas\", { type: \"error\" });\n }\n }, [error]);\n\n async function forkAtlasDocument(documentId: string) {\n const result = await forkAtlas(documentId, reactorUrl);\n const driveId = result.ForkAtlas;\n status.current = \"forked\";\n setDriveId(driveId);\n }\n\n const redirectToDrive = useCallback(() => {\n if (driveId && !loading) {\n navigate(`/d/${driveId}`, { replace: true });\n }\n }, [driveId, navigate, loading]);\n\n const addForkDrive = useCallback(\n async (driveId: string) => {\n console.log(\"Adding remote drive:\", driveId);\n const driveUrl = `${reactorUrl}d/${driveId}`;\n try {\n const addedDrive = await addRemoteDrive(driveUrl);\n status.current = \"done\";\n console.log(\"Added remote drive:\", addedDrive);\n setTimeout(() => {\n setLoading(false);\n }, MIN_LOADING_TIME);\n } catch (error) {\n status.current = \"error\";\n setLoading(false);\n setError(error);\n }\n },\n [addRemoteDrive, navigate, reactorUrl],\n );\n\n useEffect(() => {\n if (!documentId || status.current !== \"initial\") return;\n status.current = \"forking\";\n forkAtlasDocument(documentId).catch((error) => {\n status.current = \"error\";\n setError(error);\n });\n }, [documentId, status]);\n\n useEffect(() => {\n if (!driveId || !reactor || status.current !== \"forked\") return;\n status.current = \"addingDrive\";\n new Promise<void>((resolve) => {\n setTimeout(resolve, 500);\n })\n .then(() => addForkDrive(driveId))\n .catch((error) => {\n status.current = \"error\";\n setError(error);\n });\n }, [driveId, reactor, status]);\n\n return (\n <div className=\"flex size-full justify-center gap-x-4 bg-gray-50\">\n <div className=\"w-full max-w-[850px] rounded-2xl bg-white p-6 drop-shadow-sm\">\n <h1 className=\"text-lg font-medium text-gray-900\">\n Welcome to the Atlas Explorer\n </h1>\n <div className=\"mt-4 rounded-xl border border-gray-200 bg-gray-50 p-6\">\n <div className=\"flex min-h-80 flex-col items-center justify-center rounded-2xl bg-slate-50\">\n <div>\n <svg\n width=\"28\"\n height=\"32\"\n viewBox=\"0 0 28 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.05092 23.7286L0.000163347 23.9993L0 23.9995L0.207853 24.067L27.6823 24.067L27.9995 23.9995L27.9161 23.6913L14.2182 0.209032L13.9998 0L13.749 0.246353L0.05092 23.7286ZM20.9994 11.9999L7.0003 11.9999L13.9998 23.999L20.9994 11.9999Z\"\n fill=\"url(#paint0_radial_319_20865)\"\n />\n <path\n d=\"M14 0L0 23.9998V7.99993L14 0Z\"\n fill=\"url(#paint1_linear_319_20865)\"\n />\n <path\n d=\"M28 24L7.82013e-05 24L14 31.9999L28 24Z\"\n fill=\"url(#paint2_linear_319_20865)\"\n />\n <path\n d=\"M14 0L28 23.9998V7.99993L14 0Z\"\n fill=\"url(#paint3_linear_319_20865)\"\n />\n <defs>\n <radialGradient\n id=\"paint0_radial_319_20865\"\n cx=\"0\"\n cy=\"0\"\n r=\"1\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"translate(13.9994 16.0344) rotate(-89.9988) scale(16.0344 16.201)\"\n >\n <stop offset=\"0.181008\" stopColor=\"#FFCD6B\" />\n <stop offset=\"1\" stopColor=\"#EB5EDF\" />\n </radialGradient>\n <linearGradient\n id=\"paint1_linear_319_20865\"\n x1=\"-0.031454\"\n y1=\"24.041\"\n x2=\"13.801\"\n y2=\"-0.142908\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#4331E9\" />\n <stop offset=\"1\" stopColor=\"#A273FF\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_319_20865\"\n x1=\"-0.0310093\"\n y1=\"24\"\n x2=\"28.0444\"\n y2=\"24\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A273FF\" />\n <stop offset=\"1\" stopColor=\"#4331E9\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_319_20865\"\n x1=\"28.0315\"\n y1=\"24.041\"\n x2=\"14.199\"\n y2=\"-0.142908\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A273FF\" />\n <stop offset=\"1\" stopColor=\"#4331E9\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n {hasError ? (\n <div className=\"mt-3 text-sm text-gray-800\">\n Error forking Atlas scope. Please try again.\n </div>\n ) : (\n <div className=\"mt-3 text-sm text-gray-500\">\n Forking Atlas scope...\n </div>\n )}\n <PowerhouseButton\n onClick={\n hasError\n ? window.location.reload.bind(window.location)\n : redirectToDrive\n }\n size=\"small\"\n color=\"light\"\n className=\"mt-4 h-9 border border-gray-200 bg-white px-3 text-gray-600\"\n >\n {hasError ? (\n \"Retry\"\n ) : loading ? (\n <>\n <svg\n className=\"animate-spin\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.6867 8.03333C15.4933 7.83999 15.1733 7.83999 14.98 8.03333L14.6733 8.34001V8C14.6733 4.32 11.68 1.32666 7.99999 1.32666C5.96666 1.32666 4.06666 2.23999 2.79333 3.82666C2.61999 4.03999 2.65332 4.35999 2.87332 4.52665C3.08666 4.69999 3.40666 4.66666 3.57332 4.44666C4.65999 3.09332 6.27332 2.31999 7.99999 2.31999C11.1267 2.31999 13.6733 4.86666 13.6733 7.99333V8.32666L13.3667 8.02002C13.1733 7.82669 12.8533 7.82669 12.66 8.02002C12.4667 8.21335 12.4667 8.53335 12.66 8.72668L13.82 9.88668C13.8667 9.93334 13.92 9.96666 13.98 9.99333C14.04 10.02 14.1067 10.0333 14.1733 10.0333C14.24 10.0333 14.3 10.02 14.3667 9.99333C14.4267 9.96666 14.48 9.93334 14.5267 9.88668L15.6867 8.72668C15.88 8.54668 15.88 8.22666 15.6867 8.03333Z\"\n fill=\"#6C7275\"\n />\n <path\n d=\"M13.1267 11.4666C12.9133 11.2933 12.5933 11.3266 12.4267 11.5466C11.34 12.9 9.72665 13.6733 7.99998 13.6733C4.87332 13.6733 2.32665 11.1266 2.32665 7.99996V7.66663L2.63332 7.97331C2.73332 8.07331 2.85999 8.11996 2.98665 8.11996C3.11332 8.11996 3.23999 8.07331 3.33999 7.97331C3.53332 7.77998 3.53332 7.45998 3.33999 7.26664L2.17998 6.10661C2.13332 6.05994 2.07998 6.02663 2.01998 5.99996C1.89998 5.94663 1.75998 5.94663 1.63998 5.99996C1.57998 6.02663 1.52665 6.05994 1.47999 6.10661L0.319988 7.26664C0.126654 7.45998 0.126654 7.77998 0.319988 7.97331C0.513321 8.16664 0.833319 8.16664 1.02665 7.97331L1.33332 7.66663V7.99996C1.33332 11.68 4.32665 14.6733 8.00665 14.6733C10.04 14.6733 11.94 13.76 13.2133 12.1733C13.38 11.96 13.3467 11.64 13.1267 11.4666Z\"\n fill=\"#6C7275\"\n />\n </svg>\n Loading\n </>\n ) : (\n \"Continue\"\n )}\n </PowerhouseButton>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Root } from \"@powerhousedao/connect/components\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { AtlasImport, Content } from \"@powerhousedao/connect/pages\";\nimport { Suspense } from \"react\";\nimport type { RouteObject } from \"react-router-dom\";\nimport { RouterProvider, createBrowserRouter } from \"react-router-dom\";\n\nfunction createRouter(routes: RouteObject[]) {\n const routerBasename = connectConfig.routerBasename;\n\n return createBrowserRouter(routes, {\n basename: routerBasename,\n future: {\n v7_fetcherPersist: true,\n v7_relativeSplatPath: true,\n },\n });\n}\n\nfunction createRoutes() {\n const routes: RouteObject[] = [\n {\n index: true,\n path: \"d?/:driveId?/*?\",\n element: (\n <Suspense name=\"Drive\">\n <Content />\n </Suspense>\n ),\n },\n {\n path: \"import/:documentId\",\n element: (\n <Suspense name=\"AtlasImport\">\n <AtlasImport />\n </Suspense>\n ),\n },\n ];\n\n return [\n {\n element: (\n <Suspense name=\"RouteRoot\">\n <Root />\n </Suspense>\n ),\n children: routes,\n },\n ];\n}\n\nconst routes = createRoutes();\nconst router = createRouter(routes);\n\nexport const Router = () => {\n return <RouterProvider router={router} />;\n};\n","import { DriveIcon } from \"@powerhousedao/connect/components\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n ConnectSidebar,\n ConnectTooltipProvider,\n SidebarAddDriveItem,\n SidebarItem,\n} from \"@powerhousedao/design-system/connect\";\n\nimport {\n logout,\n openRenown,\n setSelectedDrive,\n showPHModal,\n useDrives,\n useInspectorEnabled,\n useSelectedDriveSafe,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\n\nexport function Sidebar() {\n const user = useUser();\n const drives = useDrives();\n const [selectedDrive] = useSelectedDriveSafe();\n const inspectorEnabled = useInspectorEnabled();\n const connectDebug = localStorage.getItem(\"CONNECT_DEBUG\") === \"true\";\n\n const onClickSettings = () => {\n showPHModal({ type: \"settings\" });\n };\n\n const onAddDriveClick = () => {\n showPHModal({ type: \"addDrive\" });\n };\n\n const onInspectorClick = () => {\n showPHModal({ type: \"inspector\" });\n };\n\n const etherscanUrl = user?.address\n ? `https://etherscan.io/address/${user.address}`\n : \"\";\n\n return (\n <ConnectTooltipProvider>\n <ConnectSidebar\n id=\"sidebar\"\n onClick={() => setSelectedDrive(undefined)}\n onClickSettings={onClickSettings}\n onInspectorClick={inspectorEnabled ? onInspectorClick : undefined}\n address={user?.address}\n onLogin={openRenown}\n onDisconnect={logout}\n etherscanUrl={etherscanUrl}\n showDebug={connectDebug}\n onDebugClick={() => showPHModal({ type: \"debugSettings\" })}\n >\n <ErrorBoundary\n variant=\"text\"\n fallbackMessage=\"There was an error loading drives\"\n loggerContext={[\"Connect\", \"Sidebar\"]}\n >\n {drives?.map((drive, index) => (\n <SidebarItem\n key={index}\n title={drive.header.name}\n onClick={() => setSelectedDrive(drive)}\n active={selectedDrive?.header.id === drive.header.id}\n icon={<DriveIcon drive={drive} />}\n />\n ))}\n {connectConfig.drives.addDriveEnabled && (\n <SidebarAddDriveItem onClick={onAddDriveClick} />\n )}\n </ErrorBoundary>\n </ConnectSidebar>\n </ConnectTooltipProvider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,MAAM,+BAA+B,GAFnB,cAAc,eAEkB;AAQlD,MAAMA,8BAAY,IAAI,KAAiB;AAEvC,IAAI,UAA2BC,cAAY;AAE3C,SAASA,eAA8B;AACrC,KAAI;EACF,MAAM,QAAQ,aAAa,QAAQ,6BAA6B;AAChE,SAAO,QACF,KAAK,MAAM,MAAM,GAClB;GAAE,WAAW;GAAO,WAAW;GAAO,YAAY;GAAO;SACvD;AACN,SAAO;GAAE,WAAW;GAAO,WAAW;GAAO,YAAY;GAAO;;;AAIpE,SAAS,aAA8B;AACrC,QAAO;;AAGT,SAAS,WAAW,QAAoD;AACtE,WAAU,OAAO,QAAQ;AACzB,cAAa,QAAQ,8BAA8B,KAAK,UAAU,QAAQ,CAAC;AAC3E,aAAU,SAAS,OAAO,IAAI,CAAC;;AAGjC,SAASC,YAAU,IAAgB;AACjC,aAAU,IAAI,GAAG;AACjB,cAAaF,YAAU,OAAO,GAAG;;AAGnC,MAAa,2BAA2B;AAEtC,QAAO,CADS,qBAAqBE,aAAW,YAAY,WAAW,EACtD,WAAW;;ACxC9B,MAAa,4BAA4B,GAFvB,cAAc,eAEsB;AAEtD,MAAM,4BAAY,IAAI,KAAiB;AAEvC,IAAI,cAAc,YAAY;AAE9B,SAAS,aAAsB;AAC7B,KAAI;AAEF,SADc,aAAa,QAAQ,0BAA0B,KAC5C;UACV,OAAO;AACd,UAAQ,MAAM,MAAM;AACpB,SAAO;;;AAIX,SAAS,uBAAgC;AACvC,QAAO;;AAGT,SAAS,qBAAqB,OAAgB;AAC5C,eAAc;AACd,cAAa,QAAQ,2BAA2B,KAAK,UAAU,MAAM,CAAC;;AAGxE,SAAS,UAAU,IAAgB;AACjC,WAAU,IAAI,GAAG;AACjB,cAAa,UAAU,OAAO,GAAG;;AAGnC,MAAa,wBAAwB;AAMnC,QAAO,CALmB,qBACxB,WACA,sBACA,qBACD,EAC0B,qBAAqB;;;;AC3BlD,MAAMC,WAAS,YAAY,CAAC,SAAS,CAAC;AAEtC,IAAI,gBAAgB;AAEpB,eAAe,YAAY;AACzB,QAAO,MAAM,OAAO;;AAGtB,eAAe,aAAa;AACV,eAAc;CAE9B,MAAM,SAAS,MAAM,WAAW;CAChC,MAAM,eAA+C;EACnD,OAAO,uBAAuB;EAC9B,OAAO,0BAA0B,EAAE,OAAO,GAAG,CAAC;EAC9C,OAAO,mBAAmB;EAC1B,OAAO,0BAA0B,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;EACxD;AACD,KAAI,cAAc,OAAO,QACvB,cAAa,KACX,OAAO,uCAAuC;EAC5C,WAAW,MAAM;EACjB;EACA;EACA;EACA;EACD,CAAC,CACH;AAGH,QAAO,KAAK;EACV,SAAS,cAAc,OAAO;EAC9B,KAAK,cAAc,OAAO;EAC1B,aAAa,cAAc,OAAO;EAClC;EACA,cAAc;GACZ;GACA;GACA;GACD;EACD,gBAAgB;EAChB,kBAAkB;EAClB,0BAA0B;EAC1B,0BAA0B;EAC1B,WAAW,OAAO,MAAM;GACtB,MAAM,QAAQ,KAAK;AACnB,OACE,iBAAiB,aACjB,MAAM,QAAQ,SAAS,kBAAkB,IACzC,CAAC,UAAU,OAGX,QAAO;AAET,UAAO;;EAEV,CAAC;AAEF,iBAAgB;;AAGlB,eAAe,cAAc;AAC3B,KAAI,CAAC,cACH;AAIF,SAFe,MAAM,WAAW,EACV,WAAW,EAClB,OAAO;;AAGxB,SAAgB,gBAAgB;CAC9B,MAAM,CAAC,mBAAmB,oBAAoB;CAC9C,MAAM,EAAE,cAAc;AAEtB,iBAAgB;AACd,MAAI,CAAC,WAAW;AACd,gBAAa,CAAC,OAAO,UAAmBA,SAAO,MAAM,UAAU,MAAM,CAAC;AACtE;;AAGF,MACE,iBACA,CAAC,cAAc,OAAO,OACtB,cAAc,OAAO,QAAQ,GAE7B;AAGF,cAAY,CAAC,OAAO,UAAmBA,SAAO,MAAM,UAAU,MAAM,CAAC;IACpE,CAAC,UAAU,CAAC;;;;AC9FjB,MAAa,wBAAwB,UAAqC;CACxE,MAAM,EAAE,MAAM,MAAM,SAAS,YAAY;CACzC,MAAM,QAAQ,OAAO,UAAU,UAAU,SAAS,MAAM;CAExD,IAAI,eAAe;CACnB,IAAI,eAAe;AAEnB,KAAI,OAAO;AACT,iBAAe;AACf,iBAAe;;AAIjB,YACE,eACC,UAAU;AACT,QAAM,gBAAgB;AACtB,MAAI,QACF,OAAM;IAGV,EAAE,EACF,CAAC,SAAS,KAAK,CAChB;AAGD,YACE,eACC,UAAU;AACT,QAAM,gBAAgB;AACtB,MAAI,QACF,OAAM;IAGV,EAAE,EACF,CAAC,SAAS,KAAK,CAChB;;;;AClCH,SAAS,KAAK,GAAG,MAAyB;AACxC,QAAO,WAAW,KAAK,GAAG,KAAK;;AAGjC,MAAa,kBAAkB;CAC7B,MAAM,eAAe,cAAc;CACnC,MAAM,CAAC,EAAE,eAAe,oBAAoB;CAC5C,MAAM,eAAe,gBAAgB;AAErC,iBAAgB;AACd,MAAI,cAAc;GAEhB,MAAM,SAAS,SAAS,cAAc,SAAS;AAC/C,UAAO,MAAM,+CAA+C;AAC5D,UAAO,QAAQ;AACf,YAAS,KAAK,YAAY,OAAO;AAGjC,UAAO,YAAY,OAAO,aAAa,EAAE;AAEzC,QAAK,sBAAM,IAAI,MAAM,CAAC;AACtB,QAAK,UAAU,aAAa;AAG5B,gBAAa;AACX,aAAS,KAAK,YAAY,OAAO;;;IAGpC,CAAC,cAAc,aAAa,CAAC;AAEhC,QAAO;;;;ACzCT,SAAgB,cAAc;AAC5B,KAAI,OAAO,aAAa,YACtB,QAAO;AAKT,QAFe,SAAS,cAAc,OAAO,EACxB,aAAa,OAAO,IAC1B;;;;ACFjB,IAAa,2BAAb,MAAsC;CACpC;CACA,aAAkC,EAAE;CAEpC,YAAY,UAAuB;AACjC,MAAI,SACF,MAAK,WAAW;;CAIpB,wBAAgC,YAAyB;AACvD,SAAO,WAAW,KAAK,QAAQ;GAC7B,GAAG;GACH,OAAO,KAAK,UAAU,GAAG,OAAO,MAAM;GACvC,EAAE;;CAGL,YAAmB,UAAsB;AACvC,OAAK,WAAW;;CAGlB,cAAqB;AACnB,SAAO,KAAK;;CAGd,gBAAuB;AACrB,SAAO,KAAK;;CAGd,cAAqB,WAAsB;AACzC,OAAK,WAAW,KAAK,UAAU;;CAGjC,kBAAyB;AACvB,MAAI,CAAC,KAAK,SACR,SAAQ,KAAK,cAAc;EAE7B,MAAM,MAAM,OAAO,OAAO,KAAK,UAAU,cAAc,EAAE,CAAC,CACvD,QAAQ,UAAgC,UAAU,KAAA,EAAU,CAC5D,SAAS,UAAU,MAAM,CACzB,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAEpC,UAAQ,MAAM,KAAK,wBAAwB,IAAI,CAAC;;CAGlD,qBAA4B,OAAe;AACzC,MAAI,CAAC,KAAK,SACR,SAAQ,KAAK,cAAc;EAE7B,MAAM,MAAM,KAAK,UAAU,WAAW,UAAU,EAAE;AAClD,UAAQ,MAAM,KAAK,wBAAwB,IAAI,CAAC;;CAGlD,gBAAuB;AACrB,UAAQ,IAAI,KAAK,WAAW;;CAG9B,qBAA4B;AAC1B,UAAQ,MAAM,KAAK,wBAAwB,KAAK,WAAW,CAAC;;CAG9D,QAAe;AACb,OAAK,aAAa,EAAE;AACpB,OAAK,WAAW,KAAA;;;;;AC7DpB,MAAM,eAAe;AAErB,MAAM,UAAU,EAAE,QAAQ,mBAAuC;CAC/D,MAAM,QAAQ,OAAO,WAAW;CAChC,MAAM,oBACJ,OAAO,aAAa,eACpB,SAAS,KAAK,aAAa,mBAAmB,KAAK;CAErD,MAAM,CAAC,aAAa,kBAAkB,SAAS,CAAC,SAAS,kBAAkB;AAE3E,iBAAgB;EACd,MAAM,KAAK,iBAAiB;AAC1B,kBAAe,KAAK;KACnB,MAAM;AAET,eAAa,aAAa,GAAG;IAC5B,EAAE,CAAC;AAEN,QACE,qBAAC,OAAD;EACE,WAAW,0EAA0E,cAAc,KAAK;YAD1G,CAGE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,gBAAD,EAAkB,CAAA;GACd,CAAA,EACL,QACC,oBAAC,UAAD,EACE,yBAAyB,EACvB,QAAQ;;;yBAGK,MAAM,IACpB,EACD,CAAA,GACA,KACA;;;AAIV,MAAa,oBAAoB;CAC/B,MAAM,QAAQ,OAAO,WAAW;CAChC,MAAM,eAAe,CAAC,SAAS,OAAO,SAAS,aAAa,aAAa;AACzE,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,gBAAD;IACE,WAAU;IACV,SAAS,KAAA;IACT,cAAc,KAAA;IACd,iBAAiB,KAAA;IACjB,SAAS,KAAA;IACT,CAAA;GACF,oBAAC,YAAD;IACE,oBACE,SAAS,CAAC,eAAe,uBAAuB,KAAA;IAElD,UAAU;IACV,CAAA;GACD,QACC,oBAAC,UAAD,EACE,yBAAyB,EACvB,QAAQ;;;;;;wBAOT,EACD,CAAA,GACA;GACJ,oBAAC,QAAD,EAAU,CAAA;GACN;;;;;ACvEV,MAAMC,WAAS,YAAY,CAAC,UAAU,CAAC;AAmDvC,SAAS,kBACP,OAC2C;AAC3C,QAAO,oBAAoB;;AAG7B,SAAS,iBAAiB;AACxB,QAAO;;;;;;AAOT,SAAS,aAAa,EACpB,UAAU,0BAGT;AACD,QAAO,oBAAC,OAAD;EAAK,WAAU;YAAe;EAAc,CAAA;;;;;;;AAQrD,SAAS,iBAAiB,EAAE,SAAwB;CAClD,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAC3E,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,MAAD;IAAI,WAAU;cAA6B;IAAU,CAAA;GACrD,oBAAC,KAAD,EAAA,UAAI,cAAiB,CAAA;GACrB,oBAAC,OAAD,EAAA,UAAM,KAAK,UAAU,OAAO,MAAM,EAAE,EAAO,CAAA;GACvC;;;;;;;;AASV,SAAS,qBAAqB,EAAE,SAAwB;AAEtD,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,MAAD;GAAI,WAAU;aAHG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GAGd,CAAA;EACrD,CAAA;;AAIV,SAAS,qBACP,SACA,iBACqC;AACrC,SAAQ,SAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,OACH,cAAa,oBAAC,cAAD,EAAc,SAAS,iBAAmB,CAAA;EACzD,KAAK,WACH,QAAO;EACT,QACE,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCb,SAAgBC,gBAAc,OAA2B;CACvD,MAAM,EAAE,UAAU,SAAS,WAAW,kBAAkB;CAExD,MAAM,eAAe,OAAc,SAA0B;AAC3D,MACE,MAAM,QAAQ,SAAS,8CAA8C,IACrE,MAAM,QAAQ,SAAS,qBAAqB,EAC5C;AACA,WAAQ,MAAM,MAAM;AACpB,WAAQ,IAAI,6CAA6C;AACzD,UAAO,SAAS,QAAQ;AACxB;;AAIF,GADsB,gBAAgB,YAAY,cAAc,GAAGD,UACrD,MAAM,gBAAgB,OAAO,KAAK;AAChD,YAAU,OAAO,KAAK;;AAOxB,QACE,oBAACE,eAAD;EACE,gBANmB,kBAAkB,MAAM,GAC3C,MAAM,iBACN,qBAAqB,MAAM,SAAS,MAAM,gBAAgB;EAK1D,SAAS;EACE;EAEV;EACkB,CAAA;;;;AC5LzB,MAAMC,kBAAgB,WACpB,OAAO,+BAA6B,MAAM,OAAO,EAC/C,SAAS,EAAE,eACZ,EAAE,CACJ;AACD,MAAM,oBAAoB,WACxB,OAAO,mCAAiC,MAAM,OAAO,EACnD,SAAS,EAAE,mBACZ,EAAE,CACJ;AACD,MAAM,qBAAqB,WACzB,OAAO,oCAAkC,MAAM,OAAO,EACpD,SAAS,EAAE,oBACZ,EAAE,CACJ;AACD,MAAMC,wBAAsB,WAC1B,OAAO,qCAAmC,MAAM,OAAO,EACrD,SAAS,EAAE,qBACZ,EAAE,CACJ;AACD,MAAM,qBAAqB,WACzB,OAAO,oCAAkC,MAAM,OAAO,EACpD,SAAS,EAAE,oBACZ,EAAE,CACJ;AACD,MAAM,mBAAmB,WACvB,OAAO,kCAAgC,MAAM,OAAO,EAClD,SAAS,EAAE,kBACZ,EAAE,CACJ;AACD,MAAM,kBAAkB,WACtB,OAAO,iCAA+B,MAAM,OAAO,EACjD,SAAS,EAAE,iBACZ,EAAE,CACJ;AACD,MAAM,kBAAkB,WACtB,OAAO,iCAA+B,MAAM,OAAO,EACjD,SAAS,EAAE,iBACZ,EAAE,CACJ;AACD,MAAMC,uBAAqB,WACzB,OAAO,oCAAkC,MAAM,OAAO,EACpD,SAAS,EAAE,oBACZ,EAAE,CACJ;AACD,MAAM,gCAAgC,WACpC,OAAO,+CAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,+BACZ,EAAE,CACJ;AACD,MAAMC,kBAAgB,WACpB,OAAO,+BAA6B,MAAM,OAAO,EAC/C,SAAS,EAAE,eACZ,EAAE,CACJ;AACD,MAAM,oBAAoB,WACxB,OAAO,mCAAiC,MAAM,OAAO,EACnD,SAAS,EAAE,mBACZ,EAAE,CACJ;AAWD,MAAM,kBAAkB;CACtB,UAAUH;CACV,cAAc;CACd,eAAe;CACf,gBAAgBC;CAChB,eAAe;CACf,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,eAAeC;CACf,0BAA0B;CAC1B,WArBqB,WACrB,OAAO,gCAAoC,MAAM,OAAO,EACtD,SAAS,EAAE,gBACZ,EAAE,CACJ;CAkBC,UAAUC;CACV,cAAc;CACd,gBAnB0B,WAC1B,OAAO,qCAAmC,MAAM,OAAO,EACrD,SAAS,EAAE,4BACZ,EAAE,CACJ;CAgBA;AAED,MAAa,kBAAkB,KAAK,YAAY;AAC9C,QAAO,EACL,eAAe;EACb,MAAM,UAAU,YAAY;AAE5B,MAAI,CAAC,SAAS,KAAM,QAAO;EAE3B,MAAM,iBAAiB,gBAAgB,QAAQ;AAE/C,SAAO,iBACL,oBAACC,iBAAD;GAAe,SAAQ;GAAS,eAAe,CAAC,WAAW,SAAS;aAClE,oBAAC,UAAD;IAAU,UAAU;cAClB,oBAAC,gBAAD,EAAkB,CAAA;IACT,CAAA;GACG,CAAA,GACd;IAEP;EACD;;;ACtGF,MAAa,aAAa,UAA2C;CACnE,MAAM,OAAO,WACX,OAAO,sBAAa,MAAM,MAAM,EAAE,cAAc,MAAM,aAAa,CAAC,CACrE;AACD,QACE,qBAAC,YAAD,EAAA,UAAA;EACE,oBAAC,UAAD;GAAU,UAAU,oBAAC,aAAD,EAAe,CAAA;GAAE,MAAK;aACxC,oBAAC,MAAD;IAAM,GAAI;cACR,oBAAC,KAAD,EAAO,CAAA;IACF,CAAA;GACE,CAAA;EACX,oBAAC,UAAD;GAAU,MAAK;aACb,oBAACC,gBAAD,EAAgB,CAAA;GACP,CAAA;EACX,oBAAC,UAAD;GAAU,MAAK;aACb,oBAAC,iBAAD,EAAmB,CAAA;GACV,CAAA;EACA,EAAA,CAAA;;;;AClBjB,MAAa,kBAAiD,EAAE,eAAe;AAC7E,gBAAe;AAEf,QAAO;;;;ACGT,MAAa,YAAY;AAEvB,iBAAgB;EACd,MAAM,2BAA2B;AAC/B,WAAQ,IAAI,8CAA8C;AAC1D,UAAO,SAAS,QAAQ;;AAG1B,SAAO,iBAAiB,qBAAqB,mBAAmB;AAEhE,eAAa;AACX,UAAO,oBAAoB,qBAAqB,mBAAmB;;IAEpE,EAAE,CAAC;AAEN,iBAAgB;AACd,MAAI,OAAO,KAAK,IAAI,SAAS,cAC3B,QAAO,2BAA2B,IAAI,0BAA0B;MAEhE,sBAAqB,sBAAsB,MAAM;IAElD,EAAE,CAAC;AAEN,QACE,oBAAC,gBAAD,EAAA,UACE,qBAAC,cAAD,EAAA,UAAA;EACE,oBAAC,gBAAD;GAAgB,UAAS;GAAe,aAAY;GAAY,CAAA;EAChE,oBAAC,QAAD,EAAU,CAAA;EACV,oBAAC,WAAD,EAAa,CAAA;EACA,EAAA,CAAA,EACA,CAAA;;;;AChCrB,MAAM,oBAAoB,SAAwB,OAAe;AAC/D,QAAO,QAAQ,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO,MAAM;;AAGnE,MAAaC,uBAAqB;CAChC,MAAM,EAAE,MAAM,eAAe,KAAA,GAAW;EACtC,aAAa;EACb;EACD,CAAC;CACF,MAAM,CAAC,YAAY,iBAAiB,iBAAiB;CACrD,MAAM,GAAG,sBAAsB,oBAAoB;CAEnD,MAAM,eAA8B,CAClC;EACE,IAAI;EACJ,OAAO,EAAE,iCAAiC;EAC1C,OAAO;EACR,CACF;CAED,MAAM,gBAAgB,YAA2B;AAC/C,gBAAc,MAAM;AAEpB,MAAI,iBAAiB,SAAS,mBAAmB,CAC/C,qBAAoB,qBAAqB;GACvC,GAAG;GACH,WAAW;GACZ,EAAE;;CAIP,MAAM,qBAAqB;AACzB,gBAAc,MAAM;AACpB,4BAA0B;GACxB,WAAW;GACX,YAAY;GACZ,WAAW;GACZ,EAAE;;AAGL,KAAI,CAAC,WACH,QAAO;AAGT,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD,EAAK,WAAU,wCAAyC,CAAA,EACxD,oBAAC,OAAD;GAAK,WAAU;aACb,oBAACC,cAAD;IACE,WAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,aAAa,EAAE,sBAAsB;IACrC,aAAa,EAAE,sBAAsB;cAErC,oBAAC,KAAD;KAAG,WAAU;eACX,oBAAC,OAAD;MAEE,SAAQ;MACR,YAAY,EACV,GACE,oBAAC,KAAD;OACE,eAAe,YAAY,EAAE,MAAM,iBAAiB,CAAC;OAErD,WAAU;OACV,EAFK,4BAEL,EAEL;MACD,EAXK,uBAWL;KACA,CAAA;IACW,CAAA;GACb,CAAA,CACF;;;;;ACvEV,SAAgB,0BAA0B;CACxC,MAAM,CAAC,oBAAoB,qBAAqB;CAChD,MAAM,eAAe,wBAAwB,iBAAiB,OAAO,GAAG;CAExE,MAAM,WAAW,kBAAkB;AAGjC,MAFyB,iBAAiB,iBAAiB,CAEtC,OACnB,aAAY;GACV,MAAM;GACN,YAAY,iBAAiB,OAAO;GACrC,CAAC;MAEF,YAAW,iBAAiB,CAAC,OAAO,UAAe;AACjD,WAAQ,MAAM,MAAM;AAKpB,WAAM,8BAHJ,iBAAiB,QACb,MAAM,UACN,KAAK,UAAU,OAAO,MAAM,EAAE,GACe;IACnD;IAEH,CAAC,iBAAiB,CAAC;CAGtB,MAAM,wBAAwB,cAAc;AAC1C,SAAO,YAAY;IAGlB,EAAE,CAAC;CAEN,MAAM,UAAU,kBAAkB;AAChC,kBAAgB,aAAa;IAC5B,CAAC,cAAc,gBAAgB,CAAC;AAEnC,QACE,oBAAC,OAAD;EACE,IAAG;EACH,WAAU;EACV,sBAAoB,iBAAiB,OAAO;YAE5C,oBAAC,gBAAD;GACE,UAAU;GACD;GACC;GACa;GACvB,CAAA;EACE,CAAA;;;;ACnDV,SAAgB,aAAa,OAAc;CACzC,MAAM,CAAC,aAAa,kBAAkB,SAAS,MAAM;AAGrD,iBAAgB;AACd,mBAAiB;AACf,kBAAe,KAAK;KACnB,MAAM,kBAAkB,IAAI;IAC9B,CAAC,MAAM,CAAC;AAEX,KAAI,CAAC,YAAa,QAAO;CAEzB,MAAM,EAAE,oBAAoB,GAAG,iBAAiB;AAEhD,KAAI,mBAAoB,QAAO,oBAAA,UAAA,EAAA,UAAG,oBAAsB,CAAA;AAExD,QAAO,oBAAC,qBAAD,EAAqB,GAAI,cAAgB,CAAA;;;;ACXlD,SAAgB,uBAAuB;CACrC,MAAM,CAAC,iBAAiB,kBAAkB;CAC1C,MAAM,qBAAqB,uBAAuB;CAElD,MAAM,cAAc,yBAClB,cAAc,OAAO,MAAM,gBAC5B;CACD,MAAM,qBAAqB,6BAA6B;CAExD,MAAM,uBACJ,aAAa,aACb,oBAAoB,aACpB,qBAAqB;AAEvB,KAAI,CAAC,qBACH,OAAM,IAAI,MAAM,kCAAkC;AAEpD,QACE,oBAACC,iBAAD;EACE,SAAQ;EACR,WAAW,CAAC,cAAc,OAAO,GAAG;EACpC,eAAe,CAAC,WAAW,cAAc;YAEzC,oBAAC,UAAD;GAAU,UAAU,oBAAC,cAAD,EAAgB,CAAA;aAClC,oBAAC,iBAAD;IAAiB,WAAU;cACzB,oBAAC,sBAAD,EAAA,UACG,qBAAqB,oBAAC,yBAAD,EAA2B,CAAA,GAAG,MAC/B,CAAA;IACP,CAAA;GACT,CAAA;EACG,CAAA;;;;ACtCpB,SAAgB,UAAU,EACxB,SAGC;CACD,MAAM,UAAU,aAAa;CAC7B,MAAM,gBAAgB,cAAc;AAClC,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,QAAQ,MACZ,WACC,OAAO,iBAAiB,kBAAkB,QAAQ,MAAM,OAAO,GAAG,CACrE;IACA,CAAC,SAAS,MAAM,CAAC;CAEpB,MAAM,eAAe,OAAO,MAAM,OAAO;AAEzC,KAAI,aACF,QACE,oBAAC,OAAD;EAAK,KAAK;EAAc,KAAK,MAAM,OAAO;EAAM,QAAQ;EAAI,OAAO;EAAM,CAAA;AAI7E,KAAI,CAAC,cACH,QAAO,oBAAC,MAAD;EAAM,MAAK;EAAM,MAAM;EAAM,CAAA;AAGtC,QAAO,oBAAC,MAAD;EAAM,MAAK;EAAS,MAAM;EAAM,CAAA;;;;ACJzC,SAAS,YAAY,EAAE,WAAyC;AAC9D,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,MAAD;GAAI,WAAU;aAAyB;GAAa,CAAA;EAChD,CAAA;;AAIV,MAAa,kBAAmC,UAAU;CACxD,MAAM,EACJ,UAAU,iBACV,SACA,UACA,0BACE;CACJ,MAAM,uBAAuB,yBAAyB;CACtD,MAAM,yBAAyB,2BAA2B;CAC1D,MAAM,CAAC,UAAU,YAAY,gBAAgB,gBAAgB,OAAO,GAAG;CACvE,MAAM,aAAa,UAAU,OAAO,MAAM,KAAA;CAC1C,MAAM,eAAe,UAAU,OAAO,QAAQ,KAAA;CAC9C,MAAM,eAAe,UAAU,OAAO,gBAAgB,KAAA;CACtD,MAAM,kBAAkB,UAAU,OAAO,MAAM,mBAAmB,KAAA;CAClE,MAAM,EACJ,kBACA,iBACA,WAAW,qBACX,SAAS,sBACP,sBAAsB,WAAW;AAGrC,iBAAgB;AACd,MAAI,uBACG,oBAAmB;IAEzB,CAAC,wBAAwB,kBAAkB,CAAC;CAE/C,MAAM,uBAAuB,UAAU,OAAO,SAAS,UAAU;CACjE,MAAM,sBAAsB,UAAU,OAAO,SAAS,SAAS;CAC/D,MAAM,sBAAsB,2BAA2B,aAAa;CACpE,MAAM,wBAAwB,oBAAoB,gBAAgB;CAClE,MAAM,uBAAuB,wBAAwB,aAAa;CAClE,MAAM,eAAe,yBAAyB;CAC9C,MAAM,oBAAoB,CAAC;CAC3B,MAAM,kBACJ,gBACA,gBACA,CAAC,aAAa,cAAc,SAAS,aAAa,IAClD,CAAC,aAAa,cAAc,SAAS,IAAI;CAE3C,MAAM,UAAU,uBAAuB,KAAK,sBAAsB;CAClE,MAAM,UAAU,CAAC,CAAC,UAAU,UAAU;CACtC,MAAM,sBAAsB,SAAS,MAAM,CAAC;CAC5C,MAAM,sBAAsB,SAAS,MAAM,CAAC;AAC5C,sBAAqB;EACnB,MAAM;EACN,MAAM;EACN;EACA;EACD,CAAC;AAEF,iBAAgB;AACd,eAAa;AACX,UAAO,0BAA0B,OAAO;;IAEzC,EAAE,CAAC;CAEN,MAAM,CAAC,aAAa,kBAAkB,SAQpC,KAAA,EAAU;AAEZ,iBAAgB;AACd,MAAI,eAAe,YAAY,eAAe,WAC5C,gBAAe,KAAA,EAAU;IAE1B,CAAC,aAAa,WAAW,CAAC;CAE7B,MAAM,qBAAqB,OAAc,SAA0B;AACjE,iBAAe;GACb;GACA;GACA;GACD,CAAC;;AAGJ,KAAI,gBACF,QAAO,oBAAC,cAAD,EAAc,SAAQ,kBAAmB,CAAA;AAGlD,KAAI,kBACF,QAAO,oBAAC,cAAD,EAAc,SAAQ,oBAAqB,CAAA;AAGpD,KAAI,CAAC,oBACH,QACE,oBAAC,aAAD,EACE,SACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,qBAAC,KAAD,EAAA,UAAA;GAAG;GAEA;GAAa;GACZ,EAAA,CAAA,EACJ,qBAAC,KAAD,EAAA,UAAA;GAAG;GACS;GACV,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,eAAe;AACb,iBAAY,EAAE,MAAM,YAAY,CAAC;;cAEpC;IAEQ,CAAA;GAAC;GAAI;GAEZ,EAAA,CAAA,CACA;KAER,CAAA;AAIN,KAAI,CAAC,aACH,QACE,oBAAC,aAAD,EACE,SACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,KAAD,EAAA,UAAG,gEAAgE,CAAA,EACnE,qBAAC,KAAD,EAAA,UAAA;GAAG;GACS;GACV,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,eAAe;AACb,iBAAY,EAAE,MAAM,YAAY,CAAC;;cAEpC;IAEQ,CAAA;GAAC;GAAI;GACO;GAAa;GAChC,EAAA,CAAA,CACA;KAER,CAAA;CAGN,MAAM,kBAAkB,aAAa;AAErC,QACE,oBAAC,OAAD;EACE,WAAU;EACV,IAAG;EACH,eAAa,aAAa;EAC1B,sBAAoB;YAEnB,yBACC,sBACE,oBAAC,cAAD,EAAc,SAAQ,sBAAuB,CAAA,GAE7C,oBAAC,iBAAD;GAEE,eAAe,gBAAgB;GAC/B,YAAY,cAAc;GACR;GACD;GACjB,eAAe,0BAA0B,MAAM;GAC/C,eAAe,SAAS;GACxB,mBAAmB;AACjB,YAAM,sCAAsC,EAAE,MAAM,WAAW,CAAC;;GAElE,mBAAmB;AACjB,YAAM,mCAAmC,EAAE,MAAM,WAAW,CAAC;;GAE/D,EAbK,WAaL,GAGJ,oBAAC,UAAD;GACE,UAAU,oBAAC,cAAD,EAAc,SAAQ,kBAAmB,CAAA;GACnD,MAAK;aAEL,oBAACC,iBAAD;IACE,gBAAgB;IAChB,WAAW,CAAC,WAAW;IACvB,SAAS;IACT,eAAe,CAAC,WAAW,iBAAiB;cAE3C,CAAC,aAAa,SACb,oBAAC,iBAAD;KAEE,SAAS;MACP,UAAU,CAAC,CAAC;MACZ,0BAA0B,oBACxB,sBAAsB,WACtB,sBAAsB,SACtB,iBACD;MACF;KACD,YAAY,SAAS,OAAO;KAC5B,EAVK,WAUL;IAEU,CAAA;GACP,CAAA;EAET,CAAA;;;;ACvOV,SAAgB,OAAO;AACrB,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,OAAD;GACE,WAAW;GACX,MAAK;GACL,UAAU;aAEV,qBAAC,UAAD;IAAU,MAAK;cAAf,CACE,oBAAC,SAAD,EAAW,CAAA,EACX,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,QAAD,EAAU,CAAA;KACN,CAAA,CACG;;GACP,CAAA;EACF,CAAA;;;;ACQV,SAAgB,UAAU;CACxB,MAAM,CAAC,iBAAiB,sBAAsB;CAC9C,MAAM,iBAAiB,mBAAmB;CAC1C,MAAM,qBAAqB,uBAAuB;AAElD,iBAAgB;AACd,MAAI,CAAC,mBACH,2BAA0B,8BAA8B;IAEzD,CAAC,mBAAmB,CAAC;AAExB,iBAAgB;AACd,MAAI,CAAC,cACH,wBAAuB,2BAA2B;IAEnD,CAAC,cAAc,CAAC;AAInB,QACE,oBAAC,kBAAD,EAAA,UAFA,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,iBAGtB,oBAAC,qBAAD,EAAuB,CAAA,GAAG,oBAAC,sBAAD,EAAwB,CAAA,EACnD,CAAA;;AAIvB,SAAS,iBAAiB,EAAE,YAA2C;AACrE,QACE,oBAAC,OAAD;EAAK,WAAU;EAAqC,IAAG;EACpD;EACG,CAAA;;AAIV,SAAS,UAAU,EAAE,SAA2C;CAI9D,MAAM,cAHe,yBACnB,MAAM,OAAO,MAAM,gBACpB,EACiC,QAAQ;AAC1C,QACE,oBAAC,gBAAD;EAEE,OAAO,MAAM,MAAM,OAAO;EACb;EACb,MAAM,oBAAC,WAAD,EAAkB,OAAS,CAAA;EACjC,eAAe,iBAAiB,MAAM;EACtC,EALK,MAAM,OAAO,GAKlB;;AAIN,SAAS,sBAAsB;CAC7B,MAAM,SAAS,WAAW;CAC1B,MAAM,SAAS;AACf,QACE,qBAAC,YAAD,EAAA,UAAA,CACG,QAAQ,KAAK,UAAU;AACtB,SAAO,oBAAC,WAAD,EAAwC,OAAS,EAAjC,MAAM,OAAO,GAAoB;GACxD,EACD,OAAO,OAAO,mBAAmB,oBAAC,wBAAD,EAA0B,CAAA,CACjD,EAAA,CAAA;;;;AC5EjB,MAAM,cAAc;AACpB,MAAM,mBAAmB;AAEzB,SAAS,gBAAgB;CACvB,MAAM,EAAE,WAAW,aAAa;AAChC,QAAO,cAAc;EAEnB,MAAM,MADS,IAAI,gBAAgB,OAAO,CACvB,IAAI,aAAa,IAAI;AACxC,SAAO,IAAI,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI;IACvC,CAAC,OAAO,CAAC;;AAGd,eAAe,UACb,OACA,YACgC;CAChC,MAAM,WAAW,GAAG;;;;;AAKpB,QAAO,MAAM,QAAQ,GAAG,WAAW,UAAU,UAAU,EAAE,OAAO,CAAC;;AAGnE,SAAgB,cAAc;CAC5B,MAAM,SAAS,OAEb,UAAU;CACZ,MAAM,UAAU,kBAAkB;CAClC,MAAM,EAAE,eAAe,WAAW;CAClC,MAAM,aAAa,eAAe;CAClC,MAAM,WAAW,aAAa;CAC9B,MAAM,CAAC,SAAS,cAAc,SAA6B,KAAA,EAAU;CACrE,MAAM,CAAC,OAAO,YAAY,SAAkB,KAAA,EAAU;CACtD,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,WAAW,OAAO,YAAY;AAEpC,iBAAgB;AACd,MAAI,OAAO;AACT,WAAQ,MAAM,wBAAwB,MAAM;AAC5C,WAAM,uBAAuB,EAAE,MAAM,SAAS,CAAC;;IAEhD,CAAC,MAAM,CAAC;CAEX,eAAe,kBAAkB,YAAoB;EAEnD,MAAM,WADS,MAAM,UAAU,YAAY,WAAW,EAC/B;AACvB,SAAO,UAAU;AACjB,aAAW,QAAQ;;CAGrB,MAAM,kBAAkB,kBAAkB;AACxC,MAAI,WAAW,CAAC,QACd,UAAS,MAAM,WAAW,EAAE,SAAS,MAAM,CAAC;IAE7C;EAAC;EAAS;EAAU;EAAQ,CAAC;CAEhC,MAAM,eAAe,YACnB,OAAO,YAAoB;AACzB,UAAQ,IAAI,wBAAwB,QAAQ;EAC5C,MAAM,WAAW,GAAG,WAAW,IAAI;AACnC,MAAI;GACF,MAAM,aAAa,MAAM,eAAe,SAAS;AACjD,UAAO,UAAU;AACjB,WAAQ,IAAI,uBAAuB,WAAW;AAC9C,oBAAiB;AACf,eAAW,MAAM;MAChB,iBAAiB;WACb,OAAO;AACd,UAAO,UAAU;AACjB,cAAW,MAAM;AACjB,YAAS,MAAM;;IAGnB;EAAC;EAAgB;EAAU;EAAW,CACvC;AAED,iBAAgB;AACd,MAAI,CAAC,cAAc,OAAO,YAAY,UAAW;AACjD,SAAO,UAAU;AACjB,oBAAkB,WAAW,CAAC,OAAO,UAAU;AAC7C,UAAO,UAAU;AACjB,YAAS,MAAM;IACf;IACD,CAAC,YAAY,OAAO,CAAC;AAExB,iBAAgB;AACd,MAAI,CAAC,WAAW,CAAC,WAAW,OAAO,YAAY,SAAU;AACzD,SAAO,UAAU;AACjB,MAAI,SAAe,YAAY;AAC7B,cAAW,SAAS,IAAI;IACxB,CACC,WAAW,aAAa,QAAQ,CAAC,CACjC,OAAO,UAAU;AAChB,UAAO,UAAU;AACjB,YAAS,MAAM;IACf;IACH;EAAC;EAAS;EAAS;EAAO,CAAC;AAE9B,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,MAAD;IAAI,WAAU;cAAoC;IAE7C,CAAA,EACL,oBAAC,OAAD;IAAK,WAAU;cACb,qBAAC,OAAD;KAAK,WAAU;eAAf;MACE,oBAAC,OAAD,EAAA,UACE,qBAAC,OAAD;OACE,OAAM;OACN,QAAO;OACP,SAAQ;OACR,MAAK;OACL,OAAM;iBALR;QAOE,oBAAC,QAAD;SACE,UAAS;SACT,UAAS;SACT,GAAE;SACF,MAAK;SACL,CAAA;QACF,oBAAC,QAAD;SACE,GAAE;SACF,MAAK;SACL,CAAA;QACF,oBAAC,QAAD;SACE,GAAE;SACF,MAAK;SACL,CAAA;QACF,oBAAC,QAAD;SACE,GAAE;SACF,MAAK;SACL,CAAA;QACF,qBAAC,QAAD,EAAA,UAAA;SACE,qBAAC,kBAAD;UACE,IAAG;UACH,IAAG;UACH,IAAG;UACH,GAAE;UACF,eAAc;UACd,mBAAkB;oBANpB,CAQE,oBAAC,QAAD;WAAM,QAAO;WAAW,WAAU;WAAY,CAAA,EAC9C,oBAAC,QAAD;WAAM,QAAO;WAAI,WAAU;WAAY,CAAA,CACxB;;SACjB,qBAAC,kBAAD;UACE,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,eAAc;oBANhB,CAQE,oBAAC,QAAD,EAAM,WAAU,WAAY,CAAA,EAC5B,oBAAC,QAAD;WAAM,QAAO;WAAI,WAAU;WAAY,CAAA,CACxB;;SACjB,qBAAC,kBAAD;UACE,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,eAAc;oBANhB,CAQE,oBAAC,QAAD,EAAM,WAAU,WAAY,CAAA,EAC5B,oBAAC,QAAD;WAAM,QAAO;WAAI,WAAU;WAAY,CAAA,CACxB;;SACjB,qBAAC,kBAAD;UACE,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,IAAG;UACH,eAAc;oBANhB,CAQE,oBAAC,QAAD,EAAM,WAAU,WAAY,CAAA,EAC5B,oBAAC,QAAD;WAAM,QAAO;WAAI,WAAU;WAAY,CAAA,CACxB;;SACZ,EAAA,CAAA;QACH;UACF,CAAA;MACL,WACC,oBAAC,OAAD;OAAK,WAAU;iBAA6B;OAEtC,CAAA,GAEN,oBAAC,OAAD;OAAK,WAAU;iBAA6B;OAEtC,CAAA;MAER,oBAAC,kBAAD;OACE,SACE,WACI,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,GAC5C;OAEN,MAAK;OACL,OAAM;OACN,WAAU;iBAET,WACC,UACE,UACF,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,OAAD;QACE,WAAU;QACV,OAAM;QACN,QAAO;QACP,SAAQ;QACR,MAAK;QACL,OAAM;kBANR,CAQE,oBAAC,QAAD;SACE,GAAE;SACF,MAAK;SACL,CAAA,EACF,oBAAC,QAAD;SACE,GAAE;SACF,MAAK;SACL,CAAA,CACE;qBAEL,EAAA,CAAA,GAEH;OAEe,CAAA;MACf;;IACF,CAAA,CACF;;EACF,CAAA;;;;ACzOV,SAAS,aAAa,QAAuB;CAC3C,MAAM,iBAAiB,cAAc;AAErC,QAAO,oBAAoB,QAAQ;EACjC,UAAU;EACV,QAAQ;GACN,mBAAmB;GACnB,sBAAsB;GACvB;EACF,CAAC;;AAGJ,SAAS,eAAe;AAqBtB,QAAO,CACL;EACE,SACE,oBAAC,UAAD;GAAU,MAAK;aACb,oBAAC,MAAD,EAAQ,CAAA;GACC,CAAA;EAEb,UA3B0B,CAC5B;GACE,OAAO;GACP,MAAM;GACN,SACE,oBAAC,UAAD;IAAU,MAAK;cACb,oBAAC,SAAD,EAAW,CAAA;IACF,CAAA;GAEd,EACD;GACE,MAAM;GACN,SACE,oBAAC,UAAD;IAAU,MAAK;cACb,oBAAC,aAAD,EAAe,CAAA;IACN,CAAA;GAEd,CACF;EAUE,CACF;;AAIH,MAAM,SAAS,aADA,cAAc,CACM;AAEnC,MAAa,eAAe;AAC1B,QAAO,oBAAC,gBAAD,EAAwB,QAAU,CAAA;;;;ACnC3C,SAAgB,UAAU;CACxB,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAW;CAC1B,MAAM,CAAC,iBAAiB,sBAAsB;CAC9C,MAAM,mBAAmB,qBAAqB;CAC9C,MAAM,eAAe,aAAa,QAAQ,gBAAgB,KAAK;CAE/D,MAAM,wBAAwB;AAC5B,cAAY,EAAE,MAAM,YAAY,CAAC;;CAGnC,MAAM,wBAAwB;AAC5B,cAAY,EAAE,MAAM,YAAY,CAAC;;CAGnC,MAAM,yBAAyB;AAC7B,cAAY,EAAE,MAAM,aAAa,CAAC;;CAGpC,MAAM,eAAe,MAAM,UACvB,gCAAgC,KAAK,YACrC;AAEJ,QACE,oBAAC,wBAAD,EAAA,UACE,oBAAC,gBAAD;EACE,IAAG;EACH,eAAe,iBAAiB,KAAA,EAAU;EACzB;EACjB,kBAAkB,mBAAmB,mBAAmB,KAAA;EACxD,SAAS,MAAM;EACf,SAAS;EACT,cAAc;EACA;EACd,WAAW;EACX,oBAAoB,YAAY,EAAE,MAAM,iBAAiB,CAAC;YAE1D,qBAACC,iBAAD;GACE,SAAQ;GACR,iBAAgB;GAChB,eAAe,CAAC,WAAW,UAAU;aAHvC,CAKG,QAAQ,KAAK,OAAO,UACnB,oBAAC,aAAD;IAEE,OAAO,MAAM,OAAO;IACpB,eAAe,iBAAiB,MAAM;IACtC,QAAQ,eAAe,OAAO,OAAO,MAAM,OAAO;IAClD,MAAM,oBAAC,WAAD,EAAkB,OAAS,CAAA;IACjC,EALK,MAKL,CACF,EACD,cAAc,OAAO,mBACpB,oBAAC,qBAAD,EAAqB,SAAS,iBAAmB,CAAA,CAErC;;EACD,CAAA,EACM,CAAA"}
@@ -1,4 +1,4 @@
1
- import { t as AppLoader } from "./sidebar-BsGPzoQu.js";
1
+ import { t as AppLoader } from "./sidebar-CFPiUu1q.js";
2
2
  import { convertLegacyLibToVetraPackage } from "@powerhousedao/reactor-browser";
3
3
  import { createRoot } from "react-dom/client";
4
4
  import { jsx } from "react/jsx-runtime";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@powerhousedao/connect",
3
3
  "productName": "Powerhouse-Connect",
4
- "version": "6.0.0-dev.109",
4
+ "version": "6.0.0-dev.110",
5
5
  "description": "Powerhouse Connect",
6
6
  "main": "dist/index.html",
7
7
  "type": "module",
@@ -65,15 +65,14 @@
65
65
  "react-router-dom": "^6.11.2",
66
66
  "tailwind-merge": "3.4.0",
67
67
  "usehooks-ts": "^3.1.1",
68
- "@powerhousedao/powerhouse-vetra-packages": "6.0.0-dev.109",
69
- "@powerhousedao/design-system": "6.0.0-dev.109",
70
- "@powerhousedao/config": "6.0.0-dev.109",
71
- "@powerhousedao/reactor-browser": "6.0.0-dev.109",
72
- "@powerhousedao/shared": "6.0.0-dev.109",
73
- "@powerhousedao/vetra": "6.0.0-dev.109",
74
- "document-drive": "6.0.0-dev.109",
75
- "document-model": "6.0.0-dev.109",
76
- "@renown/sdk": "6.0.0-dev.109"
68
+ "@powerhousedao/config": "6.0.0-dev.110",
69
+ "@powerhousedao/design-system": "6.0.0-dev.110",
70
+ "@powerhousedao/reactor-browser": "6.0.0-dev.110",
71
+ "@powerhousedao/shared": "6.0.0-dev.110",
72
+ "@powerhousedao/powerhouse-vetra-packages": "6.0.0-dev.110",
73
+ "@powerhousedao/vetra": "6.0.0-dev.110",
74
+ "@renown/sdk": "6.0.0-dev.110",
75
+ "document-model": "6.0.0-dev.110"
77
76
  },
78
77
  "devDependencies": {
79
78
  "@tailwindcss/cli": "4.1.18",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddDriveModal-K9jmTp6w.js","names":["ConnectAddLocalDriveModal"],"sources":["../src/components/modal/modals/AddDriveModal.tsx"],"sourcesContent":["import { toast } from \"@powerhousedao/connect/services\";\nimport type {\n AddLocalDriveInput,\n AddRemoteDriveInput,\n} from \"@powerhousedao/design-system/connect\";\nimport { AddDriveModal as ConnectAddLocalDriveModal } from \"@powerhousedao/design-system/connect\";\nimport {\n addDrive,\n addRemoteDrive,\n closePHModal,\n setSelectedDrive,\n useDriveEditorModules,\n usePHModal,\n useRenown,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport { requestPublicDriveFromReactor } from \"document-drive\";\nimport { t } from \"i18next\";\n\nexport function AddDriveModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"addDrive\";\n const user = useUser();\n const renown = useRenown();\n const driveEditorModules = useDriveEditorModules();\n const onAddLocalDrive = async (data: AddLocalDriveInput) => {\n try {\n const app = driveEditorModules?.find((a) => a.id === data.appId);\n const newDrive = await addDrive(\n {\n id: \"\",\n slug: \"\",\n global: {\n name: data.name,\n icon: null,\n },\n local: {\n availableOffline: data.availableOffline,\n sharingType: data.sharingType.toLowerCase(),\n listeners: [],\n triggers: [],\n },\n },\n app?.id,\n );\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n if (!newDrive) {\n return;\n }\n\n setSelectedDrive(newDrive);\n } catch (e) {\n console.error(e);\n }\n };\n\n const onAddRemoteDrive = async (data: AddRemoteDriveInput) => {\n try {\n const driveId = await addRemoteDrive(data.url, data.id);\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n setSelectedDrive(driveId);\n } catch (e) {\n console.error(e);\n }\n };\n async function onAddLocalDriveSubmit(data: AddLocalDriveInput) {\n await onAddLocalDrive(data);\n closePHModal();\n }\n\n async function onAddRemoteDriveSubmit(data: AddRemoteDriveInput) {\n await onAddRemoteDrive(data);\n closePHModal();\n }\n\n const ready = !!driveEditorModules?.length;\n\n return (\n <ConnectAddLocalDriveModal\n open={open && ready}\n onAddLocalDrive={onAddLocalDriveSubmit}\n onAddRemoteDrive={onAddRemoteDriveSubmit}\n requestPublicDrive={async (url: string) => {\n try {\n if (user) {\n const authToken = await renown?.getBearerToken?.({\n expiresIn: 10,\n aud: url,\n });\n return requestPublicDriveFromReactor(url, {\n Authorization: `Bearer ${authToken}`,\n });\n }\n return requestPublicDriveFromReactor(url);\n } catch (error) {\n console.error(error);\n return requestPublicDriveFromReactor(url);\n }\n }}\n onOpenChange={(status) => {\n if (!status) return closePHModal();\n }}\n appOptions={\n driveEditorModules?.map((pkg) => ({\n id: pkg.id,\n name: pkg.name,\n driveEditor: pkg.id,\n })) || []\n }\n />\n );\n}\n"],"mappings":";;;;;;;AAmBA,SAAgB,gBAAgB;CAE9B,MAAM,OADU,YAAY,EACN,SAAS;CAC/B,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAW;CAC1B,MAAM,qBAAqB,uBAAuB;CAClD,MAAM,kBAAkB,OAAO,SAA6B;AAC1D,MAAI;GACF,MAAM,MAAM,oBAAoB,MAAM,MAAM,EAAE,OAAO,KAAK,MAAM;GAChE,MAAM,WAAW,MAAM,SACrB;IACE,IAAI;IACJ,MAAM;IACN,QAAQ;KACN,MAAM,KAAK;KACX,MAAM;KACP;IACD,OAAO;KACL,kBAAkB,KAAK;KACvB,aAAa,KAAK,YAAY,aAAa;KAC3C,WAAW,EAAE;KACb,UAAU,EAAE;KACb;IACF,EACD,KAAK,GACN;AAED,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,OAAI,CAAC,SACH;AAGF,oBAAiB,SAAS;WACnB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAIpB,MAAM,mBAAmB,OAAO,SAA8B;AAC5D,MAAI;GACF,MAAM,UAAU,MAAM,eAAe,KAAK,KAAK,KAAK,GAAG;AAEvD,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,oBAAiB,QAAQ;WAClB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAGpB,eAAe,sBAAsB,MAA0B;AAC7D,QAAM,gBAAgB,KAAK;AAC3B,gBAAc;;CAGhB,eAAe,uBAAuB,MAA2B;AAC/D,QAAM,iBAAiB,KAAK;AAC5B,gBAAc;;CAGhB,MAAM,QAAQ,CAAC,CAAC,oBAAoB;AAEpC,QACE,oBAACA,iBAAD;EACE,MAAM,QAAQ;EACd,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB,OAAO,QAAgB;AACzC,OAAI;AACF,QAAI,KAKF,QAAO,8BAA8B,KAAK,EACxC,eAAe,UALC,MAAM,QAAQ,iBAAiB;KAC/C,WAAW;KACX,KAAK;KACN,CAAC,IAGD,CAAC;AAEJ,WAAO,8BAA8B,IAAI;YAClC,OAAO;AACd,YAAQ,MAAM,MAAM;AACpB,WAAO,8BAA8B,IAAI;;;EAG7C,eAAe,WAAW;AACxB,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,YACE,oBAAoB,KAAK,SAAS;GAChC,IAAI,IAAI;GACR,MAAM,IAAI;GACV,aAAa,IAAI;GAClB,EAAE,IAAI,EAAE;EAEX,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-BwM2UjEs.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-BsGPzoQu.js","names":["listeners","getInitial","subscribe","logger","logger","ErrorBoundary","ReactErrorBoundary","AddDriveModal","CreateDocumentModal","DriveSettingsModal","SettingsModal","ErrorBoundary","CookieBanner","CookieBanner","PHCookieBanner","ErrorBoundary","ErrorBoundary","ErrorBoundary"],"sources":["../src/hooks/useAcceptedCookies.ts","../src/hooks/useCookieBanner.ts","../src/hooks/useInitSentry.ts","../src/hooks/useUndoRedoShortcuts.ts","../src/components/analytics.tsx","../src/utils/browser.ts","../src/utils/document-editor-debug-tools.ts","../src/components/app-skeleton.tsx","../src/components/error-boundary.tsx","../src/components/modal/modals-container.tsx","../src/components/app-loader.tsx","../src/context/processor-manager.old.tsx","../src/context/sentry-provider.tsx","../src/components/app.tsx","../src/components/cookie-banner.tsx","../src/components/document-editor-container.tsx","../src/components/editor-loader.tsx","../src/components/drive-editor-container.tsx","../src/components/drive-icon.tsx","../src/components/editors.tsx","../src/components/root.tsx","../src/pages/content.tsx","../src/pages/demo/atlas-import.tsx","../src/components/router.tsx","../src/components/sidebar.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useSyncExternalStore } from \"react\";\n\nconst namespace = connectConfig.routerBasename;\n\nconst ACCEPTED_COOKIES_KEY_STORAGE = `${namespace}:acceptedCookies`;\n\nexport interface AcceptedCookies {\n analytics: boolean;\n marketing: boolean;\n functional: boolean;\n}\n\nconst listeners = new Set<() => void>();\n\nlet cookies: AcceptedCookies = getInitial();\n\nfunction getInitial(): AcceptedCookies {\n try {\n const value = localStorage.getItem(ACCEPTED_COOKIES_KEY_STORAGE);\n return value\n ? (JSON.parse(value) as AcceptedCookies)\n : { analytics: false, marketing: false, functional: false };\n } catch {\n return { analytics: false, marketing: false, functional: false };\n }\n}\n\nfunction getCookies(): AcceptedCookies {\n return cookies;\n}\n\nfunction setCookies(setter: (prev: AcceptedCookies) => AcceptedCookies) {\n cookies = setter(cookies);\n localStorage.setItem(ACCEPTED_COOKIES_KEY_STORAGE, JSON.stringify(cookies));\n listeners.forEach((fn) => fn());\n}\n\nfunction subscribe(fn: () => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport const useAcceptedCookies = () => {\n const cookies = useSyncExternalStore(subscribe, getCookies, getCookies);\n return [cookies, setCookies] as const;\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useSyncExternalStore } from \"react\";\n\nconst namespace = connectConfig.routerBasename;\n\nexport const COOKIE_BANNER_KEY_STORAGE = `${namespace}:display-cookie-banner`;\n\nconst listeners = new Set<() => void>();\n\nlet bannerShown = getInitial();\n\nfunction getInitial(): boolean {\n try {\n const value = localStorage.getItem(COOKIE_BANNER_KEY_STORAGE);\n return value !== \"false\";\n } catch (error) {\n console.error(error);\n return true;\n }\n}\n\nfunction getCookieBannerState(): boolean {\n return bannerShown;\n}\n\nfunction setCookieBannerState(state: boolean) {\n bannerShown = state;\n localStorage.setItem(COOKIE_BANNER_KEY_STORAGE, JSON.stringify(state));\n}\n\nfunction subscribe(fn: () => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n}\n\nexport const useCookieBanner = () => {\n const cookieBannerShown = useSyncExternalStore(\n subscribe,\n getCookieBannerState,\n getCookieBannerState,\n );\n return [cookieBannerShown, setCookieBannerState] as const;\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\n\nimport type { BrowserOptions } from \"@sentry/react\";\n\nimport { childLogger } from \"document-model\";\nimport React, { useEffect } from \"react\";\nimport {\n createRoutesFromChildren,\n matchRoutes,\n useLocation,\n useNavigationType,\n} from \"react-router-dom\";\nimport { useAcceptedCookies } from \"./useAcceptedCookies.js\";\n\nconst logger = childLogger([\"sentry\"]);\n\nlet clientStarted = false;\n\nasync function getSentry() {\n return await import(\"@sentry/react\");\n}\n\nasync function initSentry() {\n const release = connectConfig.sentry;\n\n const Sentry = await getSentry();\n const integrations: BrowserOptions[\"integrations\"] = [\n Sentry.httpClientIntegration(),\n Sentry.extraErrorDataIntegration({ depth: 5 }),\n Sentry.replayIntegration(),\n Sentry.captureConsoleIntegration({ levels: [\"error\"] }),\n ];\n if (connectConfig.sentry.tracing) {\n integrations.push(\n Sentry.reactRouterV6BrowserTracingIntegration({\n useEffect: React.useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n }),\n );\n }\n\n Sentry.init({\n release: connectConfig.sentry.release,\n dsn: connectConfig.sentry.dsn,\n environment: connectConfig.sentry.env,\n integrations,\n ignoreErrors: [\n \"User is not allowed to create files\",\n \"User is not allowed to move documents\",\n \"The user aborted a request.\",\n ],\n sendDefaultPii: true,\n tracesSampleRate: 1.0,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n beforeSend(event, hint) {\n const error = hint.originalException;\n if (\n error instanceof TypeError &&\n error.message.includes(\"Failed to fetch\") &&\n !navigator.onLine\n ) {\n // If fetch fails because user is offline then ignores the error\n return null;\n }\n return event;\n },\n });\n\n clientStarted = true;\n}\n\nasync function closeClient() {\n if (!clientStarted) {\n return;\n }\n const sentry = await getSentry();\n const client = sentry.getClient();\n return client?.close();\n}\n\nexport function useInitSentry() {\n const [acceptedCookies] = useAcceptedCookies();\n const { analytics } = acceptedCookies;\n\n useEffect(() => {\n if (!analytics) {\n closeClient().catch((error: unknown) => logger.error(\"@error\", error));\n return;\n }\n\n if (\n clientStarted ||\n !connectConfig.sentry.dsn ||\n connectConfig.sentry.dsn === \"\"\n ) {\n return;\n }\n\n initSentry().catch((error: unknown) => logger.error(\"@error\", error));\n }, [analytics]);\n}\n","import { useHotkeys } from \"react-hotkeys-hook\";\n\nexport interface UseUndoRedoShortcutsProps {\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport const useUndoRedoShortcuts = (props: UseUndoRedoShortcutsProps) => {\n const { undo, redo, canRedo, canUndo } = props;\n const isMac = window.navigator.userAgent.includes(\"Mac\");\n\n let undoShortcut = \"ctrl+z\";\n let redoShortcut = \"ctrl+y\";\n\n if (isMac) {\n undoShortcut = \"mod+z\";\n redoShortcut = \"mod+shift+z\";\n }\n\n // set handler for undo\n useHotkeys(\n undoShortcut,\n (event) => {\n event.preventDefault();\n if (canUndo) {\n undo();\n }\n },\n {},\n [canUndo, undo],\n );\n\n // set handler for redo\n useHotkeys(\n redoShortcut,\n (event) => {\n event.preventDefault();\n if (canRedo) {\n redo();\n }\n },\n {},\n [canRedo, redo],\n );\n};\n","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { useAcceptedCookies } from \"@powerhousedao/connect/hooks\";\nimport { useEffect } from \"react\";\n\ndeclare global {\n interface Window {\n gtag?: (...args: any[]) => void;\n dataLayer?: any[];\n }\n}\n\nfunction gtag(...args: (string | Date)[]) {\n window.dataLayer?.push(...args);\n}\n\nexport const Analytics = () => {\n const gaTrackingId = connectConfig.gaTrackingId;\n const [{ analytics }] = useAcceptedCookies();\n const useAnalytics = gaTrackingId && analytics;\n\n useEffect(() => {\n if (useAnalytics) {\n // Create the GA script tag\n const script = document.createElement(\"script\");\n script.src = `https://www.googletagmanager.com/gtag/js?id=${gaTrackingId}`;\n script.async = true;\n document.head.appendChild(script);\n\n // Initialize GA\n window.dataLayer = window.dataLayer || [];\n\n gtag(\"js\", new Date());\n gtag(\"config\", gaTrackingId);\n\n // Clean up the script if no longer enabled\n return () => {\n document.head.removeChild(script);\n };\n }\n }, [useAnalytics, gaTrackingId]);\n\n return null;\n};\n","export function getBasePath() {\n if (typeof document === \"undefined\") {\n return \"/\";\n }\n\n const baseEl = document.querySelector(\"base\");\n const href = baseEl?.getAttribute(\"href\");\n return href || \"/\";\n}\n","import type {\n Operation,\n PHDocument,\n} from \"@powerhousedao/shared/document-model\";\n\nexport class DocumentEditorDebugTools {\n private document: PHDocument | undefined;\n private operations: Operation[] = [];\n\n constructor(document?: PHDocument) {\n if (document) {\n this.document = document;\n }\n }\n\n private operationsToTableObject(operations: Operation[]) {\n return operations.map((op) => ({\n ...op,\n input: JSON.stringify(op.action.input),\n }));\n }\n\n public setDocument(document: PHDocument) {\n this.document = document;\n }\n\n public getDocument() {\n return this.document;\n }\n\n public getOperations() {\n return this.operations;\n }\n\n public pushOperation(operation: Operation) {\n this.operations.push(operation);\n }\n\n public operationsTable() {\n if (!this.document) {\n console.warn(\"No document\");\n }\n const ops = Object.values(this.document?.operations || {})\n .filter((array): array is Operation[] => array !== undefined)\n .flatMap((array) => array)\n .sort((a, b) => a.index - b.index);\n\n console.table(this.operationsToTableObject(ops));\n }\n\n public scopeOperationsTable(scope: string) {\n if (!this.document) {\n console.warn(\"No document\");\n }\n const ops = this.document?.operations[scope] || [];\n console.table(this.operationsToTableObject(ops));\n }\n\n public operationsLog() {\n console.log(this.operations);\n }\n\n public operationsLogTable() {\n console.table(this.operationsToTableObject(this.operations));\n }\n\n public clear() {\n this.operations = [];\n this.document = undefined;\n }\n}\n","import { getBasePath } from \"@powerhousedao/connect/utils\";\nimport {\n AnimatedLoader,\n ConnectSidebar,\n HomeScreen,\n} from \"@powerhousedao/design-system/connect\";\nimport { useEffect, useState } from \"react\";\nconst LOADER_DELAY = 250;\n\nconst Loader = ({ delay = LOADER_DELAY }: { delay?: number }) => {\n const isSSR = typeof window === \"undefined\";\n const showInitialLoader =\n typeof document !== \"undefined\" &&\n document.body.getAttribute(\"data-show-loader\") === \"true\";\n\n const [showLoading, setShowLoading] = useState(!delay || showInitialLoader);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShowLoading(true);\n }, delay);\n\n return () => clearTimeout(id);\n }, []);\n\n return (\n <div\n className={`skeleton-loader absolute inset-0 z-10 flex items-center justify-center ${showLoading ? \"\" : \"hidden\"}`}\n >\n <div className=\"animate-pulse overflow-hidden rounded-full shadow-lg\">\n <AnimatedLoader />\n </div>\n {isSSR ? (\n <script\n dangerouslySetInnerHTML={{\n __html: `setTimeout(() => {\n document.querySelector('.skeleton-loader')?.classList.remove('hidden');\n document.body.setAttribute('data-show-loader', 'true');\n }, ${delay})`,\n }}\n />\n ) : null}\n </div>\n );\n};\n\nexport const AppSkeleton = () => {\n const isSSR = typeof window === \"undefined\";\n const isHomeScreen = !isSSR && window.location.pathname === getBasePath();\n return (\n <div className=\"flex h-screen\">\n <ConnectSidebar\n className=\"animate-pulse\"\n onLogin={undefined}\n onDisconnect={undefined}\n onClickSettings={undefined}\n address={undefined}\n />\n <HomeScreen\n containerClassName={\n isSSR || !isHomeScreen ? \"hidden home-screen\" : undefined\n }\n children={null}\n />\n {isSSR ? (\n <script\n dangerouslySetInnerHTML={{\n __html: `\n const baseEl = document.querySelector('base');\n const href = baseEl?.getAttribute('href');\n const basePath = href || '/';\n if (window.location.pathname === basePath) {\n document.querySelector('.home-screen')?.classList.remove('hidden')\n }`,\n }}\n />\n ) : null}\n <Loader />\n </div>\n );\n};\n\nexport default AppSkeleton;\n","import { childLogger } from \"document-model\";\nimport type { ReactNode } from \"react\";\nimport {\n ErrorBoundary as ReactErrorBoundary,\n type FallbackProps,\n} from \"react-error-boundary\";\n\nconst logger = childLogger([\"Connect\"]);\n\n/**\n * Available fallback UI variants for the ErrorBoundary component.\n *\n * - `\"silent\"` - Renders nothing when an error occurs (useful for modals)\n * - `\"text\"` - Displays a simple centered text message\n * - `\"detailed\"` - Shows full error details including message and JSON representation\n */\ntype ErrorFallbackVariant = \"silent\" | \"text\" | \"detailed\";\n\n/**\n * Base props shared by all ErrorBoundary configurations.\n */\ntype BaseErrorBoundaryProps = {\n /** Content to wrap with error boundary protection */\n children: ReactNode;\n /** Optional callback invoked when an error is caught (in addition to logging) */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n /** When any value in this array changes, the error boundary resets */\n resetKeys?: unknown[];\n /** Logger context path for error logging (e.g., [\"Connect\", \"Editor\"]) */\n loggerContext?: string[];\n};\n\n/**\n * Props for using a predefined fallback variant.\n */\ntype VariantErrorBoundaryProps = BaseErrorBoundaryProps & {\n /** The fallback UI variant to display on error */\n variant: ErrorFallbackVariant;\n /** Custom message for the \"text\" variant (default: \"Something went wrong\") */\n fallbackMessage?: string;\n};\n\n/**\n * Props for using a custom fallback render function.\n */\ntype CustomFallbackErrorBoundaryProps = BaseErrorBoundaryProps & {\n /** Custom render function for the fallback UI */\n fallbackRender: (props: FallbackProps) => ReactNode;\n};\n\n/**\n * Union type for all ErrorBoundary prop configurations.\n * Use either a variant or a custom fallbackRender, but not both.\n */\ntype ErrorBoundaryProps =\n | VariantErrorBoundaryProps\n | CustomFallbackErrorBoundaryProps;\n\nfunction hasCustomFallback(\n props: ErrorBoundaryProps,\n): props is CustomFallbackErrorBoundaryProps {\n return \"fallbackRender\" in props;\n}\n\nfunction SilentFallback() {\n return null;\n}\n\n/**\n * Simple text-based fallback component.\n * Displays a centered message when an error occurs.\n */\nfunction TextFallback({\n message = \"Something went wrong\",\n}: {\n message?: string;\n}) {\n return <div className=\"text-center\">{message}</div>;\n}\n\n/**\n * Detailed fallback component showing full error information.\n * Displays error message and JSON representation of the error object.\n * Useful for development and debugging purposes.\n */\nfunction DetailedFallback({ error }: FallbackProps) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return (\n <div className=\"mx-auto flex max-w-[80%] flex-1 flex-col items-center justify-center\">\n <h1 className=\"mb-2 text-xl font-semibold\">Error</h1>\n <i>{errorMessage}</i>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n </div>\n );\n}\n\n/**\n * Centered error message fallback component.\n * Displays the error message in a centered, full-size container.\n * Suitable for use as a custom fallbackRender when you need simple error display.\n */\nfunction CenteredErrorMessage({ error }: FallbackProps) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return (\n <div className=\"flex size-full items-center justify-center\">\n <h3 className=\"text-lg font-semibold\">{errorMessage}</h3>\n </div>\n );\n}\n\nfunction getFallbackComponent(\n variant: ErrorFallbackVariant,\n fallbackMessage?: string,\n): (props: FallbackProps) => ReactNode {\n switch (variant) {\n case \"silent\":\n return SilentFallback;\n case \"text\":\n return () => <TextFallback message={fallbackMessage} />;\n case \"detailed\":\n return DetailedFallback;\n default:\n return CenteredErrorMessage;\n }\n}\n\n/**\n * Unified error boundary component for catching and handling React errors.\n *\n * Built on top of `react-error-boundary`, this component provides:\n * - Automatic error logging with configurable context\n * - Multiple fallback UI variants (silent, text, detailed)\n * - Support for custom fallback render functions\n * - Reset capability via `resetKeys`\n *\n * @example\n * // Using a predefined variant\n * <ErrorBoundary variant=\"detailed\" loggerContext={[\"Connect\", \"Editor\"]}>\n * <EditorComponent />\n * </ErrorBoundary>\n *\n * @example\n * // Using a custom message with the text variant\n * <ErrorBoundary variant=\"text\" fallbackMessage=\"Failed to load drives\">\n * <DrivesList />\n * </ErrorBoundary>\n *\n * @example\n * // Using a custom fallback render\n * <ErrorBoundary\n * fallbackRender={CenteredErrorMessage}\n * onError={(error) => trackError(error)}\n * >\n * <MyComponent />\n * </ErrorBoundary>\n *\n * @example\n * // Silent mode for modals (renders null on error)\n * <ErrorBoundary variant=\"silent\" loggerContext={[\"Connect\", \"Modals\"]}>\n * <ModalContent />\n * </ErrorBoundary>\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps) {\n const { children, onError, resetKeys, loggerContext } = props;\n\n const handleError = (error: Error, info: React.ErrorInfo) => {\n if (\n error.message.includes(\"Failed to fetch dynamically imported module\") &&\n error.message.includes(\"node_modules/.vite\")\n ) {\n console.error(error);\n console.log(\"Outdated chunk detected, reloading page...\");\n window.location.reload();\n return;\n }\n\n const contextLogger = loggerContext ? childLogger(loggerContext) : logger;\n contextLogger.error(\"@error @info\", error, info);\n onError?.(error, info);\n };\n\n const fallbackRender = hasCustomFallback(props)\n ? props.fallbackRender\n : getFallbackComponent(props.variant, props.fallbackMessage);\n\n return (\n <ReactErrorBoundary\n fallbackRender={fallbackRender}\n onError={handleError}\n resetKeys={resetKeys}\n >\n {children}\n </ReactErrorBoundary>\n );\n}\n\nexport { CenteredErrorMessage, DetailedFallback, TextFallback };\nexport type { FallbackProps };\n","import { usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { lazy, Suspense } from \"react\";\nimport { ErrorBoundary } from \"../error-boundary.js\";\n\nconst AddDriveModal = lazy(() =>\n import(\"./modals/AddDriveModal.js\").then((m) => ({\n default: m.AddDriveModal,\n })),\n);\nconst ClearStorageModal = lazy(() =>\n import(\"./modals/ClearStorageModal.js\").then((m) => ({\n default: m.ClearStorageModal,\n })),\n);\nconst CookiesPolicyModal = lazy(() =>\n import(\"./modals/CookiesPolicyModal.js\").then((m) => ({\n default: m.CookiesPolicyModal,\n })),\n);\nconst CreateDocumentModal = lazy(() =>\n import(\"./modals/CreateDocumentModal.js\").then((m) => ({\n default: m.CreateDocumentModal,\n })),\n);\nconst DebugSettingsModal = lazy(() =>\n import(\"./modals/DebugSettingsModal.js\").then((m) => ({\n default: m.DebugSettingsModal,\n })),\n);\nconst DeleteDriveModal = lazy(() =>\n import(\"./modals/DeleteDriveModal.js\").then((m) => ({\n default: m.DeleteDriveModal,\n })),\n);\nconst DeleteItemModal = lazy(() =>\n import(\"./modals/DeleteItemModal.js\").then((m) => ({\n default: m.DeleteItemModal,\n })),\n);\nconst DisclaimerModal = lazy(() =>\n import(\"./modals/DisclaimerModal.js\").then((m) => ({\n default: m.DisclaimerModal,\n })),\n);\nconst DriveSettingsModal = lazy(() =>\n import(\"./modals/DriveSettingsModal.js\").then((m) => ({\n default: m.DriveSettingsModal,\n })),\n);\nconst ExportDocumentWithErrorsModal = lazy(() =>\n import(\"./modals/ExportDocumentWithErrorsModal.js\").then((m) => ({\n default: m.ExportDocumentWithErrorsModal,\n })),\n);\nconst SettingsModal = lazy(() =>\n import(\"./modals/SettingsModal.js\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\nconst UpgradeDriveModal = lazy(() =>\n import(\"./modals/UpgradeDriveModal.js\").then((m) => ({\n default: m.UpgradeDriveModal,\n })),\n);\nconst InspectorModal = lazy(() =>\n import(\"./modals/InspectorModal/index.js\").then((m) => ({\n default: m.InspectorModal,\n })),\n);\nconst MissingPackageModal = lazy(() =>\n import(\"./modals/MissingPackageModal.js\").then((m) => ({\n default: m.ConnectMissingPackageModal,\n })),\n);\nconst modalComponents = {\n addDrive: AddDriveModal,\n clearStorage: ClearStorageModal,\n cookiesPolicy: CookiesPolicyModal,\n createDocument: CreateDocumentModal,\n debugSettings: DebugSettingsModal,\n deleteDrive: DeleteDriveModal,\n deleteItem: DeleteItemModal,\n disclaimer: DisclaimerModal,\n driveSettings: DriveSettingsModal,\n exportDocumentWithErrors: ExportDocumentWithErrorsModal,\n inspector: InspectorModal,\n settings: SettingsModal,\n upgradeDrive: UpgradeDriveModal,\n missingPackage: MissingPackageModal,\n} as const;\n\nexport const ModalsContainer = lazy(async () => {\n return {\n default: () => {\n const phModal = usePHModal();\n\n if (!phModal?.type) return null;\n\n const ModalComponent = modalComponents[phModal.type];\n\n return ModalComponent ? (\n <ErrorBoundary variant=\"silent\" loggerContext={[\"Connect\", \"Modals\"]}>\n <Suspense fallback={null}>\n <ModalComponent />\n </Suspense>\n </ErrorBoundary>\n ) : null;\n },\n };\n});\n","import \"@powerhousedao/connect/i18n\";\nimport type { VetraPackage } from \"@powerhousedao/reactor-browser\";\nimport { lazy, StrictMode, Suspense } from \"react\";\nimport AppSkeleton from \"./app-skeleton.js\";\nimport { App, CookieBanner } from \"./index.js\";\nimport { ModalsContainer } from \"./modal/modals-container.js\";\n\nexport const AppLoader = (props: { localPackage?: VetraPackage }) => {\n const Load = lazy(() =>\n import(\"./load.js\").then((m) => m.loadComponent(props.localPackage)),\n );\n return (\n <StrictMode>\n <Suspense fallback={<AppSkeleton />} name=\"AppLoader\">\n <Load {...props}>\n <App />\n </Load>\n </Suspense>\n <Suspense name=\"CookieBanner\">\n <CookieBanner />\n </Suspense>\n <Suspense name=\"ModalsContainer\">\n <ModalsContainer />\n </Suspense>\n </StrictMode>\n );\n};\n","// import type { PGlite } from \"@electric-sql/pglite\";\n// import type { PGliteWithLive } from \"@electric-sql/pglite/live\";\n// import { PGliteWorker } from \"@electric-sql/pglite/worker\";\n// import type { IAnalyticsStore } from \"@powerhousedao/analytics-engine-core\";\n// import { processorFactory } from \"@powerhousedao/common\";\n// import { connectConfig } from \"@powerhousedao/connect/config\";\n// import type { Processors } from \"@powerhousedao/reactor-browser\";\n// import {\n// AnalyticsProvider,\n// useAnalyticsStoreAsync,\n// useProcessors,\n// useRelationalDb,\n// useSetPGliteDB,\n// } from \"@powerhousedao/reactor-browser\";\n// import { useProcessorManager } from \"@powerhousedao/reactor-browser\";\n// import type { IRelationalDb, ProcessorManager } from \"document-drive\";\n// import { childLogger } from \"document-model\";\n// import { generateId } from \"@powerhousedao/shared/document-model\";\n// import type { PropsWithChildren } from \"react\";\n// import { useEffect, useRef } from \"react\";\n\nimport type { PropsWithChildren } from \"react\";\n\n// const logger = childLogger([\"reactor-analytics\"]);\n\n// function createPgLiteFactoryWorker(databaseName: string) {\n// return async () => {\n// const worker = new Worker(\n// new URL(\"../workers/pglite-worker.js\", import.meta.url),\n// {\n// type: \"module\",\n// },\n// );\n\n// worker.onmessage = (event) => {\n// logger.verbose(event.data);\n// };\n\n// worker.onerror = (event) => {\n// logger.error(event.message);\n// throw event.error;\n// };\n\n// const pgLiteWorker = new PGliteWorker(worker, {\n// meta: {\n// databaseName,\n// },\n// });\n\n// await pgLiteWorker.waitReady;\n\n// return pgLiteWorker as unknown as PGlite;\n// };\n// }\n\n// async function registerExternalProcessors(\n// manager: ProcessorManager,\n// analyticsStore: IAnalyticsStore,\n// relationalDb: IRelationalDb,\n// processorName: string,\n// processorFactory: Processors,\n// ) {\n// return manager.registerFactory(\n// processorName,\n// processorFactory({ analyticsStore, relationalDb }),\n// );\n// }\n\n// // async function registerDiffAnalyzer(\n// // manager: ProcessorManager,\n// // analyticsStore: IAnalyticsStore,\n// // ) {\n// // const { processorFactory } = await import(\n// // \"@powerhousedao/diff-analyzer/processors\"\n// // );\n\n// // const unsafeWrappedFactory = (driveHeader: PHDocumentHeader) => {\n// // return processorFactory({ analyticsStore })(\n// // driveHeader.id,\n// // ) as ProcessorRecord[];\n// // };\n\n// // return manager.registerFactory(\n// // \"@powerhousedao/diff-analyzer\",\n// // unsafeWrappedFactory,\n// // );\n// // }\n\n// async function registerDriveAnalytics(\n// manager: ProcessorManager,\n// analyticsStore: IAnalyticsStore,\n// ) {\n// return manager.registerFactory(\n// \"@powerhousedao/common/drive-analytics\",\n// processorFactory({ analyticsStore }),\n// );\n// }\n\n// export function DiffAnalyzerProcessor() {\n// const store = useAnalyticsStoreAsync();\n// const manager = useProcessorManager();\n// const hasRegistered = useRef(false);\n\n// useEffect(() => {\n// if (!store.data || !manager || hasRegistered.current) {\n// return;\n// }\n\n// hasRegistered.current = true;\n// // registerDiffAnalyzer(manager, store.data).catch(logger.error);\n// }, [store.data, manager]);\n\n// return null;\n// }\n\n// export function DriveAnalyticsProcessor() {\n// const store = useAnalyticsStoreAsync();\n// const manager = useProcessorManager();\n// const hasRegistered = useRef(false);\n\n// useEffect(() => {\n// if (!store.data || !manager || hasRegistered.current) {\n// return;\n// }\n\n// hasRegistered.current = true;\n// registerDriveAnalytics(manager, store.data)\n// .then(() => {\n// logger.verbose(\"Drive analytics processor registered\");\n// })\n// .catch(logger.error);\n// }, [store.data, manager]);\n\n// return null;\n// }\n\n// export function ExternalProcessors() {\n// const processors = useProcessors();\n// const store = useAnalyticsStoreAsync();\n// const relationalDb = useRelationalDb();\n// const manager = useProcessorManager();\n// const hasRegistered = useRef(false);\n\n// useEffect(() => {\n// if (\n// !store.data ||\n// !manager ||\n// hasRegistered.current ||\n// processors?.length === 0 ||\n// !relationalDb.db\n// ) {\n// return;\n// }\n\n// hasRegistered.current = true;\n\n// if (!processors) {\n// return;\n// }\n// for (const processor of processors) {\n// registerExternalProcessors(\n// manager,\n// store.data,\n// relationalDb.db,\n// generateId(),\n// processor,\n// ).catch(logger.error);\n// }\n// }, [store.data, manager, relationalDb]);\n\n// return null;\n// }\n\n// export function ProcessorManagerProvider({ children }: PropsWithChildren) {\n// const pgLiteFactory = connectConfig.analytics.useWorker\n// ? createPgLiteFactoryWorker(connectConfig.analytics.databaseName)\n// : undefined;\n\n// const setPGliteDB = useSetPGliteDB();\n\n// // Initialize and handle PGlite factory\n// useEffect(() => {\n// if (!pgLiteFactory) {\n// // If no factory, set to not loading with null db\n// setPGliteDB({\n// db: null,\n// isLoading: false,\n// error: null,\n// });\n// return;\n// }\n\n// // Resolve the factory\n// pgLiteFactory()\n// .then((db) => {\n// setPGliteDB({\n// db: db as unknown as PGliteWithLive,\n// isLoading: false,\n// error: null,\n// });\n// })\n// .catch((err: unknown) => {\n// const error = err instanceof Error ? err : new Error(String(err));\n// setPGliteDB({\n// db: null,\n// isLoading: false,\n// error,\n// });\n// });\n// }, []);\n\n// const content = (\n// <>\n// {connectConfig.analytics.diffProcessorEnabled && (\n// <DiffAnalyzerProcessor />\n// )}\n// {connectConfig.analytics.driveAnalyticsEnabled && (\n// <DriveAnalyticsProcessor />\n// )}\n// {connectConfig.analytics.externalProcessorsEnabled && (\n// <ExternalProcessors />\n// )}\n// {children}\n// </>\n// );\n\n// return (\n// <AnalyticsProvider\n// options={{\n// databaseName: connectConfig.analytics.databaseName,\n// pgLiteFactory,\n// }}\n// >\n// {content}\n// </AnalyticsProvider>\n// );\n// }\n\nexport function ProcessorManagerProvider({ children }: PropsWithChildren) {\n return <>{children}</>;\n}\n","import { useInitSentry } from \"@powerhousedao/connect/hooks\";\n\ninterface SentryProviderProps {\n children?: React.ReactNode;\n}\n\nexport const SentryProvider: React.FC<SentryProviderProps> = ({ children }) => {\n useInitSentry();\n\n return children;\n};\n","import { Analytics, Router } from \"@powerhousedao/connect/components\";\n\nimport {\n ProcessorManagerProvider,\n SentryProvider,\n} from \"@powerhousedao/connect/context\";\nimport {\n DocumentEditorDebugTools,\n serviceWorkerManager,\n} from \"@powerhousedao/connect/utils\";\nimport {\n ToastContainer,\n WagmiContext,\n} from \"@powerhousedao/design-system/connect\";\nimport { useEffect } from \"react\";\nexport const App = () => {\n // refresh page on vite preload error due to outdated chunks\n useEffect(() => {\n const handlePreloadError = () => {\n console.log(\"Outdated chunks detected, reloading page...\");\n window.location.reload();\n };\n\n window.addEventListener(\"vite:preloadError\", handlePreloadError);\n\n return () => {\n window.removeEventListener(\"vite:preloadError\", handlePreloadError);\n };\n }, []);\n\n useEffect(() => {\n if (import.meta.env.MODE === \"development\") {\n window.documentEditorDebugTools = new DocumentEditorDebugTools();\n } else {\n serviceWorkerManager.registerServiceWorker(false);\n }\n }, []);\n\n return (\n <SentryProvider>\n <WagmiContext>\n <ProcessorManagerProvider>\n <ToastContainer position=\"bottom-right\" containerId=\"connect\" />\n <Router />\n <Analytics />\n </ProcessorManagerProvider>\n </WagmiContext>\n </SentryProvider>\n );\n};\n","import {\n useAcceptedCookies,\n useCookieBanner,\n} from \"@powerhousedao/connect/hooks\";\nimport type { CookieInput } from \"@powerhousedao/design-system/connect\";\nimport { CookieBanner as PHCookieBanner } from \"@powerhousedao/design-system/connect\";\nimport { showPHModal } from \"@powerhousedao/reactor-browser\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport { i18n } from \"@powerhousedao/connect/i18n\";\n\nconst isCookieAccepted = (cookies: CookieInput[], id: string) => {\n return cookies.some((cookie) => cookie.id === id && cookie.value);\n};\n\nexport const CookieBanner = () => {\n const { t } = useTranslation(undefined, {\n useSuspense: true,\n i18n,\n });\n const [showBanner, setShowBanner] = useCookieBanner();\n const [, setAcceptedCookies] = useAcceptedCookies();\n\n const cookiesInput: CookieInput[] = [\n {\n id: \"analytics-cookie\",\n label: t(\"cookieBanner.cookies.analytics\"),\n value: true,\n },\n ];\n\n const handleAccept = (cookies: CookieInput[]) => {\n setShowBanner(false);\n\n if (isCookieAccepted(cookies, \"analytics-cookie\")) {\n setAcceptedCookies((acceptedCookies) => ({\n ...acceptedCookies,\n analytics: true,\n }));\n }\n };\n\n const handleReject = () => {\n setShowBanner(false);\n setAcceptedCookies(() => ({\n analytics: false,\n functional: false,\n marketing: false,\n }));\n };\n\n if (!showBanner) {\n return null;\n }\n\n return (\n <div className=\"absolute inset-0 z-[10000] backdrop-blur-sm\">\n <div className=\"absolute inset-0 bg-black opacity-15\" />\n <div className=\"absolute inset-x-0 bottom-0 flex justify-center bg-white px-10 pb-16 pt-10 shadow-lg\">\n <PHCookieBanner\n className=\"max-w-[1024px]\"\n cookies={cookiesInput}\n onSubmit={handleAccept}\n onReject={handleReject}\n submitLabel={t(\"cookieBanner.accept\")}\n rejectLabel={t(\"cookieBanner.reject\")}\n >\n <p className=\"font-semibold text-gray-500\">\n <Trans\n key={\"cookieBanner.message\"}\n i18nKey=\"cookieBanner.message\"\n components={{\n a: (\n <a\n onClick={() => showPHModal({ type: \"cookiesPolicy\" })}\n key={\"cookieBanner.message-link\"}\n className=\"cursor-pointer text-gray-900 hover:underline\"\n />\n ),\n }}\n />\n </p>\n </PHCookieBanner>\n </div>\n </div>\n );\n};\n","import { DocumentEditor } from \"@powerhousedao/connect/components\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport {\n exportFile,\n setSelectedNode,\n showPHModal,\n useNodeParentFolderById,\n useSelectedDocument,\n validateDocument,\n} from \"@powerhousedao/reactor-browser\";\nimport { useCallback, useMemo } from \"react\";\n\nexport function DocumentEditorContainer() {\n const [selectedDocument] = useSelectedDocument();\n const parentFolder = useNodeParentFolderById(selectedDocument.header.id);\n\n const onExport = useCallback(() => {\n const validationErrors = validateDocument(selectedDocument);\n\n if (validationErrors.length) {\n showPHModal({\n type: \"exportDocumentWithErrors\",\n documentId: selectedDocument.header.id,\n });\n } else {\n exportFile(selectedDocument).catch((error: any) => {\n console.error(error);\n const errorMessage =\n error instanceof Error\n ? error.message\n : JSON.stringify(error, null, 1);\n toast(`Failed to export document: ${errorMessage}`);\n });\n }\n }, [selectedDocument]);\n\n // TODO: unused\n const onOpenSwitchboardLink = useMemo(() => {\n return async () => {\n //\n };\n }, []);\n\n const onClose = useCallback(() => {\n setSelectedNode(parentFolder);\n }, [parentFolder, setSelectedNode]);\n\n return (\n <div\n id=\"document-editor-container\"\n className=\"flex-1\"\n data-document-type={selectedDocument.header.documentType}\n >\n <DocumentEditor\n document={selectedDocument}\n onClose={onClose}\n onExport={onExport}\n onOpenSwitchboardLink={onOpenSwitchboardLink}\n />\n </div>\n );\n}\n","import { DefaultEditorLoader } from \"@powerhousedao/design-system/connect\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\n\ntype Props = ComponentProps<typeof DefaultEditorLoader> & {\n loadingTimeout?: number;\n customEditorLoader?: ReactNode;\n};\nexport function EditorLoader(props: Props) {\n const [showLoading, setShowLoading] = useState(false);\n\n // only shows the loader after some time has passed\n useEffect(() => {\n setTimeout(() => {\n setShowLoading(true);\n }, props.loadingTimeout ?? 200);\n }, [props]);\n\n if (!showLoading) return null;\n\n const { customEditorLoader, ...defaultProps } = props;\n\n if (customEditorLoader) return <>{customEditorLoader}</>;\n\n return <DefaultEditorLoader {...defaultProps} />;\n}\n","import { GenericDriveExplorer } from \"@powerhousedao/powerhouse-vetra-packages/editors\";\nimport { DropZoneWrapper } from \"@powerhousedao/design-system/connect\";\nimport {\n useDefaultDriveEditorModule,\n useDriveEditorModuleById,\n useSelectedDocumentId,\n useSelectedDrive,\n} from \"@powerhousedao/reactor-browser\";\nimport { Suspense } from \"react\";\nimport { DocumentEditorContainer } from \"./document-editor-container.js\";\nimport { EditorLoader } from \"./editor-loader.js\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\n\nexport function DriveEditorContainer() {\n const [selectedDrive] = useSelectedDrive();\n const selectedDocumentId = useSelectedDocumentId();\n\n const driveEditor = useDriveEditorModuleById(\n selectedDrive.header.meta?.preferredEditor,\n );\n const defaultDriveEditor = useDefaultDriveEditorModule();\n\n const DriveEditorComponent =\n driveEditor?.Component ??\n defaultDriveEditor?.Component ??\n GenericDriveExplorer.Component;\n\n if (!DriveEditorComponent) {\n throw new Error(\"No drive editor component found\");\n }\n return (\n <ErrorBoundary\n variant=\"detailed\"\n resetKeys={[selectedDrive.header.id]}\n loggerContext={[\"Connect\", \"DriveEditor\"]}\n >\n <Suspense fallback={<EditorLoader />}>\n <DropZoneWrapper className=\"flex h-full flex-col overflow-auto\">\n <DriveEditorComponent>\n {selectedDocumentId ? <DocumentEditorContainer /> : null}\n </DriveEditorComponent>\n </DropZoneWrapper>\n </Suspense>\n </ErrorBoundary>\n );\n}\n","import { Icon } from \"@powerhousedao/design-system\";\nimport { driveCollectionId, useSyncList } from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport function DriveIcon({\n drive,\n}: {\n drive: DocumentDriveDocument | undefined;\n}) {\n const remotes = useSyncList();\n const isRemoteDrive = useMemo(() => {\n if (!drive) return false;\n\n return remotes.some(\n (remote) =>\n remote.collectionId === driveCollectionId(\"main\", drive.header.id),\n );\n }, [remotes, drive]);\n\n const driveIconSrc = drive?.state.global.icon;\n\n if (driveIconSrc) {\n return (\n <img src={driveIconSrc} alt={drive.header.name} height={32} width={32} />\n );\n }\n\n if (!isRemoteDrive) {\n return <Icon name=\"Hdd\" size={32} />;\n }\n\n return <Icon name=\"Server\" size={32} />;\n}\n","import { EditorLoader } from \"@powerhousedao/connect/components\";\nimport { useUndoRedoShortcuts } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { RevisionHistory } from \"@powerhousedao/design-system/connect\";\nimport {\n getRevisionFromDate,\n setRevisionHistoryVisible,\n showPHModal,\n useDocumentById,\n useDocumentModelModuleById,\n useDocumentOperations,\n useEditorModuleById,\n useFallbackEditorModule,\n useRevisionHistoryVisible,\n useSelectedTimelineItem,\n} from \"@powerhousedao/reactor-browser\";\nimport type { PHDocument } from \"@powerhousedao/shared/document-model\";\nimport { redo, undo } from \"@powerhousedao/shared/document-model\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { CenteredErrorMessage, ErrorBoundary } from \"./error-boundary.js\";\n\ntype Props<TDocument extends PHDocument = PHDocument> = {\n document: TDocument;\n onClose: () => void;\n onExport: () => void;\n onOpenSwitchboardLink?: () => Promise<void>;\n};\n\nfunction EditorError({ message }: { message: React.ReactNode }) {\n return (\n <div className=\"flex size-full items-center justify-center\">\n <h3 className=\"text-lg font-semibold\">{message}</h3>\n </div>\n );\n}\n\nexport const DocumentEditor: React.FC<Props> = (props) => {\n const {\n document: initialDocument,\n onClose,\n onExport,\n onOpenSwitchboardLink,\n } = props;\n const selectedTimelineItem = useSelectedTimelineItem();\n const revisionHistoryVisible = useRevisionHistoryVisible();\n const [document, dispatch] = useDocumentById(initialDocument.header.id);\n const documentId = document?.header.id ?? undefined;\n const documentName = document?.header.name ?? undefined;\n const documentType = document?.header.documentType ?? undefined;\n const preferredEditor = document?.header.meta?.preferredEditor ?? undefined;\n const {\n globalOperations,\n localOperations,\n isLoading: isLoadingOperations,\n refetch: refetchOperations,\n } = useDocumentOperations(documentId);\n\n // Refetch operations when revision history panel opens\n useEffect(() => {\n if (revisionHistoryVisible) {\n void refetchOperations();\n }\n }, [revisionHistoryVisible, refetchOperations]);\n\n const globalRevisionNumber = document?.header.revision.global ?? 0;\n const localRevisionNumber = document?.header.revision.local ?? 0;\n const documentModelModule = useDocumentModelModuleById(documentType);\n const preferredEditorModule = useEditorModuleById(preferredEditor);\n const fallbackEditorModule = useFallbackEditorModule(documentType);\n const editorModule = preferredEditorModule ?? fallbackEditorModule;\n const isLoadingDocument = !document;\n const isLoadingEditor =\n editorModule &&\n documentType &&\n !editorModule.documentTypes.includes(documentType) &&\n !editorModule.documentTypes.includes(\"*\");\n\n const canUndo = globalRevisionNumber > 0 || localRevisionNumber > 0;\n const canRedo = !!document?.clipboard.length;\n const addUndoAction = () => dispatch(undo());\n const addRedoAction = () => dispatch(redo());\n useUndoRedoShortcuts({\n undo: addUndoAction,\n redo: addRedoAction,\n canUndo,\n canRedo,\n });\n\n useEffect(() => {\n return () => {\n window.documentEditorDebugTools?.clear();\n };\n }, []);\n\n const [editorError, setEditorError] = useState<\n | {\n error: any;\n info: React.ErrorInfo;\n documentId?: string;\n // clear: () => void;\n }\n | undefined\n >(undefined);\n\n useEffect(() => {\n if (editorError && editorError.documentId !== documentId) {\n setEditorError(undefined);\n }\n }, [editorError, documentId]);\n\n const handleEditorError = (error: Error, info: React.ErrorInfo) => {\n setEditorError({\n error,\n documentId,\n info,\n });\n };\n\n if (isLoadingEditor) {\n return <EditorLoader message=\"Loading editor\" />;\n }\n\n if (isLoadingDocument) {\n return <EditorLoader message=\"Loading document\" />;\n }\n\n if (!documentModelModule) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>\n Unable to open the document because the document model \"\n {documentType}\" is not supported.\n </p>\n <p>\n Go to the{\" \"}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showPHModal({ type: \"settings\" });\n }}\n >\n package manager\n </button>{\" \"}\n to install this document model\n </p>\n </div>\n }\n />\n );\n }\n\n if (!editorModule) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>Unable to open the document because no editor has been found</p>\n <p>\n Go to the{\" \"}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showPHModal({ type: \"settings\" });\n }}\n >\n package manager\n </button>{\" \"}\n an editor for the \"${documentType}\" document type\n </p>\n </div>\n }\n />\n );\n }\n const EditorComponent = editorModule.Component;\n\n return (\n <div\n className=\"relative h-full\"\n id=\"document-editor-context\"\n data-editor={editorModule.id}\n data-document-type={documentType}\n >\n {revisionHistoryVisible ? (\n isLoadingOperations ? (\n <EditorLoader message=\"Loading operations\" />\n ) : (\n <RevisionHistory\n key={documentId}\n documentTitle={documentName ?? \"\"}\n documentId={documentId ?? \"\"}\n globalOperations={globalOperations}\n localOperations={localOperations}\n onClose={() => setRevisionHistoryVisible(false)}\n documentState={document.state}\n onCopyState={() => {\n toast(\"Copied document state to clipboard\", { type: \"success\" });\n }}\n onCopyDocId={() => {\n toast(\"Copied document ID to clipboard\", { type: \"success\" });\n }}\n />\n )\n ) : (\n <Suspense\n fallback={<EditorLoader message=\"Loading editor\" />}\n name=\"EditorLoader\"\n >\n <ErrorBoundary\n fallbackRender={CenteredErrorMessage}\n resetKeys={[documentId]}\n onError={handleEditorError}\n loggerContext={[\"Connect\", \"DocumentEditor\"]}\n >\n {!editorError?.error && (\n <EditorComponent\n key={documentId}\n context={{\n readMode: !!selectedTimelineItem,\n selectedTimelineRevision: getRevisionFromDate(\n selectedTimelineItem?.startDate,\n selectedTimelineItem?.endDate,\n globalOperations,\n ),\n }}\n documentId={document.header.id}\n />\n )}\n </ErrorBoundary>\n </Suspense>\n )}\n </div>\n );\n};\n","import { Sidebar } from \"@powerhousedao/connect/components\";\nimport { Suspense } from \"react\";\nimport { Outlet } from \"react-router-dom\";\n\nexport function Root() {\n return (\n <div className=\"h-screen\">\n <div\n className={`flex h-screen items-stretch overflow-auto`}\n role=\"presentation\"\n tabIndex={0}\n >\n <Suspense name=\"Root\">\n <Sidebar />\n <div className=\"relative flex-1 overflow-auto\">\n <Outlet />\n </div>\n </Suspense>\n </div>\n </div>\n );\n}\n","import {\n DriveEditorContainer,\n DriveIcon,\n} from \"@powerhousedao/connect/components\";\nimport {\n connectConfig,\n defaultPHDocumentEditorConfig,\n defaultPHDriveEditorConfig,\n} from \"@powerhousedao/connect/config\";\nimport {\n HomeScreen,\n HomeScreenAddDriveItem,\n HomeScreenItem,\n} from \"@powerhousedao/design-system/connect\";\nimport {\n setPHDocumentEditorConfig,\n setPHDriveEditorConfig,\n setSelectedDrive,\n useDriveEditorModuleById,\n useDrives,\n useSelectedDocumentId,\n useSelectedDriveSafe,\n useSelectedFolder,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useEffect } from \"react\";\n\nexport function Content() {\n const [selectedDrive] = useSelectedDriveSafe();\n const selectedFolder = useSelectedFolder();\n const selectedDocumentId = useSelectedDocumentId();\n\n useEffect(() => {\n if (!selectedDocumentId) {\n setPHDocumentEditorConfig(defaultPHDocumentEditorConfig);\n }\n }, [selectedDocumentId]);\n\n useEffect(() => {\n if (!selectedDrive) {\n setPHDriveEditorConfig(defaultPHDriveEditorConfig);\n }\n }, [selectedDrive]);\n\n const showHomeScreen =\n !selectedDocumentId && !selectedDrive && !selectedFolder;\n return (\n <ContentContainer>\n {showHomeScreen ? <HomeScreenContainer /> : <DriveEditorContainer />}\n </ContentContainer>\n );\n}\n\nfunction ContentContainer({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-full flex-col overflow-auto\" id=\"content-view\">\n {children}\n </div>\n );\n}\n\nfunction DriveItem({ drive }: { drive: DocumentDriveDocument }) {\n const editorModule = useDriveEditorModuleById(\n drive.header.meta?.preferredEditor,\n );\n const description = editorModule?.name || \"Drive Explorer App\";\n return (\n <HomeScreenItem\n key={drive.header.id}\n title={drive.state.global.name}\n description={description}\n icon={<DriveIcon drive={drive} />}\n onClick={() => setSelectedDrive(drive)}\n />\n );\n}\n\nfunction HomeScreenContainer() {\n const drives = useDrives();\n const config = connectConfig;\n return (\n <HomeScreen>\n {drives?.map((drive) => {\n return <DriveItem key={drive.header.id} drive={drive} />;\n })}\n {config.drives.addDriveEnabled && <HomeScreenAddDriveItem />}\n </HomeScreen>\n );\n}\n","import { toast } from \"@powerhousedao/connect/services\";\nimport { PowerhouseButton } from \"@powerhousedao/design-system\";\nimport {\n addRemoteDrive,\n useReactorClient,\n} from \"@powerhousedao/reactor-browser\";\nimport { gql, request } from \"graphql-request\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocation, useNavigate, useParams } from \"react-router-dom\";\n\nconst REACTOR_URL = \"https://apps.powerhouse.io/sky-atlas/staging/switchboard\";\nconst MIN_LOADING_TIME = 2000;\n\nfunction useReactorUrl() {\n const { search } = useLocation();\n return useMemo(() => {\n const params = new URLSearchParams(search);\n const url = params.get(\"reactorUrl\") ?? REACTOR_URL;\n return url.endsWith(\"/\") ? url : `${url}/`;\n }, [search]);\n}\n\nasync function forkAtlas(\n docId: string,\n reactorUrl: string,\n): Promise<{ ForkAtlas: string }> {\n const document = gql`\n mutation ForkAtlas($docId: PHID) {\n ForkAtlas(docId: $docId)\n }\n `;\n return await request(`${reactorUrl}graphql`, document, { docId });\n}\n\nexport function AtlasImport() {\n const status = useRef<\n \"initial\" | \"forking\" | \"forked\" | \"addingDrive\" | \"done\" | \"error\"\n >(\"initial\");\n const reactor = useReactorClient();\n const { documentId } = useParams();\n const reactorUrl = useReactorUrl();\n const navigate = useNavigate();\n const [driveId, setDriveId] = useState<string | undefined>(undefined);\n const [error, setError] = useState<unknown>(undefined);\n const [loading, setLoading] = useState(true);\n const hasError = status.current === \"error\";\n\n useEffect(() => {\n if (error) {\n console.error(\"Error forking Atlas:\", error);\n toast(\"Error forking Atlas\", { type: \"error\" });\n }\n }, [error]);\n\n async function forkAtlasDocument(documentId: string) {\n const result = await forkAtlas(documentId, reactorUrl);\n const driveId = result.ForkAtlas;\n status.current = \"forked\";\n setDriveId(driveId);\n }\n\n const redirectToDrive = useCallback(() => {\n if (driveId && !loading) {\n navigate(`/d/${driveId}`, { replace: true });\n }\n }, [driveId, navigate, loading]);\n\n const addForkDrive = useCallback(\n async (driveId: string) => {\n console.log(\"Adding remote drive:\", driveId);\n const driveUrl = `${reactorUrl}d/${driveId}`;\n try {\n const addedDrive = await addRemoteDrive(driveUrl);\n status.current = \"done\";\n console.log(\"Added remote drive:\", addedDrive);\n setTimeout(() => {\n setLoading(false);\n }, MIN_LOADING_TIME);\n } catch (error) {\n status.current = \"error\";\n setLoading(false);\n setError(error);\n }\n },\n [addRemoteDrive, navigate, reactorUrl],\n );\n\n useEffect(() => {\n if (!documentId || status.current !== \"initial\") return;\n status.current = \"forking\";\n forkAtlasDocument(documentId).catch((error) => {\n status.current = \"error\";\n setError(error);\n });\n }, [documentId, status]);\n\n useEffect(() => {\n if (!driveId || !reactor || status.current !== \"forked\") return;\n status.current = \"addingDrive\";\n new Promise<void>((resolve) => {\n setTimeout(resolve, 500);\n })\n .then(() => addForkDrive(driveId))\n .catch((error) => {\n status.current = \"error\";\n setError(error);\n });\n }, [driveId, reactor, status]);\n\n return (\n <div className=\"flex size-full justify-center gap-x-4 bg-gray-50\">\n <div className=\"w-full max-w-[850px] rounded-2xl bg-white p-6 drop-shadow-sm\">\n <h1 className=\"text-lg font-medium text-gray-900\">\n Welcome to the Atlas Explorer\n </h1>\n <div className=\"mt-4 rounded-xl border border-gray-200 bg-gray-50 p-6\">\n <div className=\"flex min-h-80 flex-col items-center justify-center rounded-2xl bg-slate-50\">\n <div>\n <svg\n width=\"28\"\n height=\"32\"\n viewBox=\"0 0 28 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.05092 23.7286L0.000163347 23.9993L0 23.9995L0.207853 24.067L27.6823 24.067L27.9995 23.9995L27.9161 23.6913L14.2182 0.209032L13.9998 0L13.749 0.246353L0.05092 23.7286ZM20.9994 11.9999L7.0003 11.9999L13.9998 23.999L20.9994 11.9999Z\"\n fill=\"url(#paint0_radial_319_20865)\"\n />\n <path\n d=\"M14 0L0 23.9998V7.99993L14 0Z\"\n fill=\"url(#paint1_linear_319_20865)\"\n />\n <path\n d=\"M28 24L7.82013e-05 24L14 31.9999L28 24Z\"\n fill=\"url(#paint2_linear_319_20865)\"\n />\n <path\n d=\"M14 0L28 23.9998V7.99993L14 0Z\"\n fill=\"url(#paint3_linear_319_20865)\"\n />\n <defs>\n <radialGradient\n id=\"paint0_radial_319_20865\"\n cx=\"0\"\n cy=\"0\"\n r=\"1\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"translate(13.9994 16.0344) rotate(-89.9988) scale(16.0344 16.201)\"\n >\n <stop offset=\"0.181008\" stopColor=\"#FFCD6B\" />\n <stop offset=\"1\" stopColor=\"#EB5EDF\" />\n </radialGradient>\n <linearGradient\n id=\"paint1_linear_319_20865\"\n x1=\"-0.031454\"\n y1=\"24.041\"\n x2=\"13.801\"\n y2=\"-0.142908\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#4331E9\" />\n <stop offset=\"1\" stopColor=\"#A273FF\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_319_20865\"\n x1=\"-0.0310093\"\n y1=\"24\"\n x2=\"28.0444\"\n y2=\"24\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A273FF\" />\n <stop offset=\"1\" stopColor=\"#4331E9\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_319_20865\"\n x1=\"28.0315\"\n y1=\"24.041\"\n x2=\"14.199\"\n y2=\"-0.142908\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#A273FF\" />\n <stop offset=\"1\" stopColor=\"#4331E9\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n {hasError ? (\n <div className=\"mt-3 text-sm text-gray-800\">\n Error forking Atlas scope. Please try again.\n </div>\n ) : (\n <div className=\"mt-3 text-sm text-gray-500\">\n Forking Atlas scope...\n </div>\n )}\n <PowerhouseButton\n onClick={\n hasError\n ? window.location.reload.bind(window.location)\n : redirectToDrive\n }\n size=\"small\"\n color=\"light\"\n className=\"mt-4 h-9 border border-gray-200 bg-white px-3 text-gray-600\"\n >\n {hasError ? (\n \"Retry\"\n ) : loading ? (\n <>\n <svg\n className=\"animate-spin\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.6867 8.03333C15.4933 7.83999 15.1733 7.83999 14.98 8.03333L14.6733 8.34001V8C14.6733 4.32 11.68 1.32666 7.99999 1.32666C5.96666 1.32666 4.06666 2.23999 2.79333 3.82666C2.61999 4.03999 2.65332 4.35999 2.87332 4.52665C3.08666 4.69999 3.40666 4.66666 3.57332 4.44666C4.65999 3.09332 6.27332 2.31999 7.99999 2.31999C11.1267 2.31999 13.6733 4.86666 13.6733 7.99333V8.32666L13.3667 8.02002C13.1733 7.82669 12.8533 7.82669 12.66 8.02002C12.4667 8.21335 12.4667 8.53335 12.66 8.72668L13.82 9.88668C13.8667 9.93334 13.92 9.96666 13.98 9.99333C14.04 10.02 14.1067 10.0333 14.1733 10.0333C14.24 10.0333 14.3 10.02 14.3667 9.99333C14.4267 9.96666 14.48 9.93334 14.5267 9.88668L15.6867 8.72668C15.88 8.54668 15.88 8.22666 15.6867 8.03333Z\"\n fill=\"#6C7275\"\n />\n <path\n d=\"M13.1267 11.4666C12.9133 11.2933 12.5933 11.3266 12.4267 11.5466C11.34 12.9 9.72665 13.6733 7.99998 13.6733C4.87332 13.6733 2.32665 11.1266 2.32665 7.99996V7.66663L2.63332 7.97331C2.73332 8.07331 2.85999 8.11996 2.98665 8.11996C3.11332 8.11996 3.23999 8.07331 3.33999 7.97331C3.53332 7.77998 3.53332 7.45998 3.33999 7.26664L2.17998 6.10661C2.13332 6.05994 2.07998 6.02663 2.01998 5.99996C1.89998 5.94663 1.75998 5.94663 1.63998 5.99996C1.57998 6.02663 1.52665 6.05994 1.47999 6.10661L0.319988 7.26664C0.126654 7.45998 0.126654 7.77998 0.319988 7.97331C0.513321 8.16664 0.833319 8.16664 1.02665 7.97331L1.33332 7.66663V7.99996C1.33332 11.68 4.32665 14.6733 8.00665 14.6733C10.04 14.6733 11.94 13.76 13.2133 12.1733C13.38 11.96 13.3467 11.64 13.1267 11.4666Z\"\n fill=\"#6C7275\"\n />\n </svg>\n Loading\n </>\n ) : (\n \"Continue\"\n )}\n </PowerhouseButton>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { Root } from \"@powerhousedao/connect/components\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { AtlasImport, Content } from \"@powerhousedao/connect/pages\";\nimport { Suspense } from \"react\";\nimport type { RouteObject } from \"react-router-dom\";\nimport { RouterProvider, createBrowserRouter } from \"react-router-dom\";\n\nfunction createRouter(routes: RouteObject[]) {\n const routerBasename = connectConfig.routerBasename;\n\n return createBrowserRouter(routes, {\n basename: routerBasename,\n future: {\n v7_fetcherPersist: true,\n v7_relativeSplatPath: true,\n },\n });\n}\n\nfunction createRoutes() {\n const routes: RouteObject[] = [\n {\n index: true,\n path: \"d?/:driveId?/*?\",\n element: (\n <Suspense name=\"Drive\">\n <Content />\n </Suspense>\n ),\n },\n {\n path: \"import/:documentId\",\n element: (\n <Suspense name=\"AtlasImport\">\n <AtlasImport />\n </Suspense>\n ),\n },\n ];\n\n return [\n {\n element: (\n <Suspense name=\"RouteRoot\">\n <Root />\n </Suspense>\n ),\n children: routes,\n },\n ];\n}\n\nconst routes = createRoutes();\nconst router = createRouter(routes);\n\nexport const Router = () => {\n return <RouterProvider router={router} />;\n};\n","import { DriveIcon } from \"@powerhousedao/connect/components\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n ConnectSidebar,\n ConnectTooltipProvider,\n SidebarAddDriveItem,\n SidebarItem,\n} from \"@powerhousedao/design-system/connect\";\n\nimport {\n logout,\n openRenown,\n setSelectedDrive,\n showPHModal,\n useDrives,\n useInspectorEnabled,\n useSelectedDriveSafe,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport { ErrorBoundary } from \"./error-boundary.js\";\n\nexport function Sidebar() {\n const user = useUser();\n const drives = useDrives();\n const [selectedDrive] = useSelectedDriveSafe();\n const inspectorEnabled = useInspectorEnabled();\n const connectDebug = localStorage.getItem(\"CONNECT_DEBUG\") === \"true\";\n\n const onClickSettings = () => {\n showPHModal({ type: \"settings\" });\n };\n\n const onAddDriveClick = () => {\n showPHModal({ type: \"addDrive\" });\n };\n\n const onInspectorClick = () => {\n showPHModal({ type: \"inspector\" });\n };\n\n const etherscanUrl = user?.address\n ? `https://etherscan.io/address/${user.address}`\n : \"\";\n\n return (\n <ConnectTooltipProvider>\n <ConnectSidebar\n id=\"sidebar\"\n onClick={() => setSelectedDrive(undefined)}\n onClickSettings={onClickSettings}\n onInspectorClick={inspectorEnabled ? onInspectorClick : undefined}\n address={user?.address}\n onLogin={openRenown}\n onDisconnect={logout}\n etherscanUrl={etherscanUrl}\n showDebug={connectDebug}\n onDebugClick={() => showPHModal({ type: \"debugSettings\" })}\n >\n <ErrorBoundary\n variant=\"text\"\n fallbackMessage=\"There was an error loading drives\"\n loggerContext={[\"Connect\", \"Sidebar\"]}\n >\n {drives?.map((drive, index) => (\n <SidebarItem\n key={index}\n title={drive.header.name}\n onClick={() => setSelectedDrive(drive)}\n active={selectedDrive?.header.id === drive.header.id}\n icon={<DriveIcon drive={drive} />}\n />\n ))}\n {connectConfig.drives.addDriveEnabled && (\n <SidebarAddDriveItem onClick={onAddDriveClick} />\n )}\n </ErrorBoundary>\n </ConnectSidebar>\n </ConnectTooltipProvider>\n );\n}\n"],"mappings":"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"}