@powerhousedao/connect 1.0.0-sky.184 → 1.0.0-sky.185

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/assets/{app-xkQmjDch.js → app-CEjUVP0-.js} +6 -6
  2. package/dist/assets/{app-xkQmjDch.js.map → app-CEjUVP0-.js.map} +1 -1
  3. package/dist/assets/{app-loader-BBe4M2Ml.js → app-loader-BNyCiyDz.js} +3 -3
  4. package/dist/assets/{app-loader-BBe4M2Ml.js.map → app-loader-BNyCiyDz.js.map} +1 -1
  5. package/dist/assets/{browser-CEARsm5L.js → browser-CPcl7U5g.js} +4 -4
  6. package/dist/assets/{browser-CEARsm5L.js.map → browser-CPcl7U5g.js.map} +1 -1
  7. package/dist/assets/{ccip-DA9iGsQE.js → ccip-C6tafvYY.js} +2 -2
  8. package/dist/assets/{ccip-DA9iGsQE.js.map → ccip-C6tafvYY.js.map} +1 -1
  9. package/dist/assets/content-C7DGe_qU.js +92 -0
  10. package/dist/assets/content-C7DGe_qU.js.map +1 -0
  11. package/dist/assets/{editor-Bi10PLX-.js → editor-60KSeLXl.js} +2 -2
  12. package/dist/assets/{editor-Bi10PLX-.js.map → editor-60KSeLXl.js.map} +1 -1
  13. package/dist/assets/{editor-Bs04MLzK.js → editor-B5mvOgOD.js} +2 -2
  14. package/dist/assets/{editor-Bs04MLzK.js.map → editor-B5mvOgOD.js.map} +1 -1
  15. package/dist/assets/{editor-CaH9gYrb.js → editor-C0aQEn9c.js} +2 -2
  16. package/dist/assets/{editor-CaH9gYrb.js.map → editor-C0aQEn9c.js.map} +1 -1
  17. package/dist/assets/{editor-BD8Wk4kt.js → editor-Dbz8kQvZ.js} +2 -2
  18. package/dist/assets/{editor-BD8Wk4kt.js.map → editor-Dbz8kQvZ.js.map} +1 -1
  19. package/dist/assets/{editors-BH6MLE1z.js → editors-CUAsvgKz.js} +5 -5
  20. package/dist/assets/{editors-BH6MLE1z.js.map → editors-CUAsvgKz.js.map} +1 -1
  21. package/dist/assets/{index-CMLoiw55.js → index-g4Q6-PRA.js} +2 -2
  22. package/dist/assets/{index-CMLoiw55.js.map → index-g4Q6-PRA.js.map} +1 -1
  23. package/dist/assets/{index-D_kQ8OEz.js → index-h9lOUGxV.js} +3 -3
  24. package/dist/assets/{index-D_kQ8OEz.js.map → index-h9lOUGxV.js.map} +1 -1
  25. package/dist/assets/{main.yZTQnvvE.js → main.AX2O67pt.js} +2 -2
  26. package/dist/assets/{main.yZTQnvvE.js.map → main.AX2O67pt.js.map} +1 -1
  27. package/dist/assets/{root-DIxTzlKD.js → root-C784bEPE.js} +2 -2
  28. package/dist/assets/{root-DIxTzlKD.js.map → root-C784bEPE.js.map} +1 -1
  29. package/dist/assets/{router-rzs8I7Wj.js → router-0g625aul.js} +4 -4
  30. package/dist/assets/{router-rzs8I7Wj.js.map → router-0g625aul.js.map} +1 -1
  31. package/dist/assets/{useUiNodes-DH62DyAC.js → useUiNodes-DYMt05zv.js} +2 -2
  32. package/dist/assets/{useUiNodes-DH62DyAC.js.map → useUiNodes-DYMt05zv.js.map} +1 -1
  33. package/dist/index.html +6 -6
  34. package/dist/service-worker.js +1 -1
  35. package/dist/swEnv.js +5 -5
  36. package/dist/vite-envs.sh +5 -5
  37. package/package.json +2 -2
  38. package/dist/assets/content-DAePlLHb.js +0 -92
  39. package/dist/assets/content-DAePlLHb.js.map +0 -1
  40. package/dist/icons.svg +0 -302
@@ -1 +1 @@
1
- {"version":3,"file":"useUiNodes-DH62DyAC.js","sources":["../../src/store/document-drive.ts","../../src/utils/drive-sections.ts","../../src/hooks/useDocumentDriveById.ts","../../node_modules/lz-string/libs/lz-string.js","../../src/utils/getSwitchboardUrl.ts","../../src/utils/openUrl.ts","../../src/hooks/useOpenSwitchboardLink.ts","../../src/hooks/useUiNodes.ts"],"sourcesContent":["import { FILE, TUiNodesContext } from '@powerhousedao/design-system';\nimport { Document, Operation } from 'document-model/document';\nimport { atom, useAtom } from 'jotai';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { IReadModeContext } from 'src/context/read-mode';\nimport { documentToHash } from 'src/hooks/useDocumentDrives';\nimport { TDocumentDriveServer } from 'src/hooks/useDocumentDriveServer';\nimport { logger } from 'src/services/logger';\n\nfunction debounceOperations(\n callback: (operations: Operation[]) => Promise<Document | undefined>,\n timeout = 50,\n) {\n let timer: number;\n const operations: Operation[] = [];\n return (operation: Operation) => {\n if (timer) {\n clearTimeout(timer);\n }\n const index = operations.findIndex(\n op => op.scope === operation.scope && op.index === operation.index,\n );\n if (index > -1) {\n const oldOperation = operations[index];\n if (\n !(\n oldOperation.type === operation.type &&\n JSON.stringify(operation.input) ===\n JSON.stringify(oldOperation.input)\n )\n ) {\n console.warn(\n 'Two conflicting operations were dispatched:',\n oldOperation,\n operation,\n );\n }\n operations[index] = operation;\n } else {\n operations.push(operation);\n }\n return new Promise<Document | undefined>((resolve, reject) => {\n timer = setTimeout(() => {\n callback(operations).then(resolve).catch(reject);\n }, timeout) as unknown as number;\n });\n };\n}\n\ntype FileNodeDocument =\n | {\n driveId: string;\n documentId: string;\n documentType: string;\n document: Document | undefined;\n status: 'LOADING' | 'ERROR';\n }\n | {\n driveId: string;\n documentId: string;\n documentType: string;\n document: Document;\n status: 'LOADED';\n }\n | undefined;\n\nconst documentCacheAtom = atom(new Map<string, Document>());\n\nconst singletonFileNodeDocumentAtom = atom<FileNodeDocument>(undefined);\nconst fileNodeDocumentAtom = atom(\n get => get(singletonFileNodeDocumentAtom),\n (get, set, newValue: FileNodeDocument) => {\n const currentValue = get(singletonFileNodeDocumentAtom);\n\n // if document will be loaded then sets\n // the cached version while it loads\n const documentCache = get(documentCacheAtom);\n if (!newValue?.document && newValue?.status === 'LOADING') {\n newValue.document = documentCache.get(\n `${newValue.driveId}:${newValue.documentId}`,\n );\n }\n\n // only change if the provided file node is different\n if (\n currentValue?.driveId !== newValue?.driveId ||\n currentValue?.documentId !== newValue?.documentId ||\n currentValue?.documentType !== newValue?.documentType ||\n currentValue?.status !== newValue?.status ||\n !!currentValue?.document !== !!newValue?.document ||\n (currentValue?.document &&\n newValue?.document &&\n documentToHash(currentValue.document) !==\n documentToHash(newValue.document))\n ) {\n // if document has been fetched then updates the cache\n if (newValue?.status === 'LOADED') {\n documentCache.set(\n `${newValue.driveId}:${newValue.documentId}`,\n newValue.document,\n );\n }\n\n set(singletonFileNodeDocumentAtom, newValue);\n return true;\n }\n\n return false;\n },\n);\n\nconst selectedDocumentAtom = atom(\n get => get(fileNodeDocumentAtom)?.document,\n (get, set, document: Document | undefined) => {\n const fileNodeDocument = get(fileNodeDocumentAtom);\n if (!fileNodeDocument) {\n throw new Error('fileNodeDocument is undefined');\n } else if (!document) {\n set(fileNodeDocumentAtom, undefined);\n } else {\n set(fileNodeDocumentAtom, { ...fileNodeDocument, document });\n }\n },\n);\n\nexport function useFileNodeDocument(\n props: TUiNodesContext & TDocumentDriveServer & IReadModeContext,\n) {\n const {\n selectedNode,\n selectedDriveNode,\n openFile,\n addOperations,\n onStrandUpdate,\n fetchDocument: fetchReadDocument,\n } = props;\n const [fileNodeDocument, setFileNodeDocument] =\n useAtom(fileNodeDocumentAtom);\n const isReadMode =\n selectedDriveNode?.sharingType !== 'LOCAL' &&\n selectedDriveNode?.syncStatus === undefined;\n const driveId = selectedNode?.driveId;\n const documentId = selectedNode?.id;\n const kind = selectedNode?.kind;\n const documentType =\n kind === 'FILE' ? selectedNode?.documentType : undefined;\n\n const [selectedDocument, setSelectedDocument] =\n useAtom(selectedDocumentAtom);\n\n const fetchDocument = useCallback(\n async (driveId: string, id: string, documentType: string) => {\n const document = await (isReadMode\n ? fetchReadDocument(driveId, id, documentType)\n : openFile(driveId, id));\n if (document instanceof Error) {\n throw document;\n }\n return document;\n },\n [fetchReadDocument, isReadMode, openFile],\n );\n\n useEffect(() => {\n // if selected node is undefine then clears fileNodeDocument\n if (!driveId || !documentId || !documentType) {\n if (fileNodeDocument) {\n setFileNodeDocument(undefined);\n }\n return;\n }\n\n // if selectedNode changes then fetches fileNodeDocument\n if (\n driveId !== fileNodeDocument?.driveId ||\n documentId !== fileNodeDocument.documentId ||\n documentType !== fileNodeDocument.documentType\n ) {\n const changed = setFileNodeDocument({\n driveId,\n documentId,\n documentType,\n document: undefined,\n status: 'LOADING',\n });\n\n // if the selected file node changed then fetches the new document\n if (changed) {\n fetchDocument(driveId, documentId, documentType)\n .then(document =>\n setFileNodeDocument(\n document\n ? {\n driveId,\n documentId,\n documentType,\n document,\n status: 'LOADED',\n }\n : {\n driveId,\n documentId,\n documentType,\n document,\n status: 'ERROR',\n },\n ),\n )\n .catch(error => {\n logger.error(error);\n setFileNodeDocument({\n driveId,\n documentId,\n documentType,\n document: undefined,\n status: 'ERROR',\n });\n });\n }\n }\n }, [\n selectedNode,\n documentId,\n documentType,\n driveId,\n fetchDocument,\n fileNodeDocument,\n setFileNodeDocument,\n ]);\n\n useEffect(() => {\n if (\n !fileNodeDocument?.driveId ||\n !fileNodeDocument.documentId ||\n !fileNodeDocument.documentType\n ) {\n return;\n }\n\n // watches for strand updates to update the document\n const removeListener = onStrandUpdate(strand => {\n if (\n strand.driveId === fileNodeDocument.driveId &&\n strand.documentId === fileNodeDocument.documentId\n ) {\n fetchDocument(\n fileNodeDocument.driveId,\n fileNodeDocument.documentId,\n fileNodeDocument.documentType,\n )\n .then(setSelectedDocument)\n .catch(logger.error);\n }\n });\n\n return removeListener;\n }, [\n fileNodeDocument?.driveId,\n fileNodeDocument?.documentId,\n fileNodeDocument?.documentType,\n onStrandUpdate,\n fetchDocument,\n setSelectedDocument,\n ]);\n\n const addOperationToSelectedDocument = useMemo(() => {\n if (driveId && documentId && kind === FILE) {\n return debounceOperations(operations =>\n addOperations(driveId, documentId, operations),\n );\n }\n }, [addOperations, driveId, documentId, kind]);\n\n const isSelectedDocument =\n kind === FILE &&\n fileNodeDocument?.driveId === driveId &&\n fileNodeDocument?.documentId === documentId;\n\n return useMemo(\n () => ({\n fileNodeDocument,\n selectedDocument: isSelectedDocument ? selectedDocument : undefined,\n setSelectedDocument,\n addOperationToSelectedDocument,\n }),\n [\n fileNodeDocument,\n isSelectedDocument,\n selectedDocument,\n setSelectedDocument,\n addOperationToSelectedDocument,\n ],\n );\n}\n","import {\n CLOUD,\n debugNodeOptions,\n defaultDriveOptions,\n defaultFileOptions,\n defaultFolderOptions,\n DELETE,\n DRIVE,\n FILE,\n FOLDER,\n LOCAL,\n PUBLIC,\n SharingType,\n} from '@powerhousedao/design-system';\nimport connectConfig from 'connect-config';\nimport { ReactNode } from 'react';\n\n// Enables debug options for the drive\nconst connectDebug = localStorage.getItem('CONNECT_DEBUG') === 'true';\n\nconst DriveSections: {\n sharingType: SharingType;\n label: ReactNode;\n}[] = [\n { sharingType: PUBLIC, label: 'Public Drives' },\n { sharingType: CLOUD, label: 'Secure Cloud Drives' },\n { sharingType: LOCAL, label: 'My Local Drives' },\n] as const;\n\nconst getSectionConfig = (sharingType: SharingType) => {\n return connectConfig.drives.sections[sharingType];\n};\n\nexport function getDriveNodeOptions(sharingType: SharingType) {\n const options = [...defaultDriveOptions];\n\n if (connectConfig.drives.sections[sharingType].allowDelete) {\n options.push(DELETE);\n }\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getFileNodeOptions() {\n const options = [...defaultFileOptions];\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getFolderNodeOptions() {\n const options = [...defaultFolderOptions];\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getNodeOptions() {\n return {\n [LOCAL]: {\n [DRIVE]: getDriveNodeOptions(LOCAL),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n [CLOUD]: {\n [DRIVE]: getDriveNodeOptions(CLOUD),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n [PUBLIC]: {\n [DRIVE]: getDriveNodeOptions(PUBLIC),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n } as const;\n}\n\nexport const driveSections = DriveSections.filter(\n section => getSectionConfig(section.sharingType).enabled,\n).map(section => {\n const sectionConfig = getSectionConfig(section.sharingType);\n\n return {\n ...section,\n disableAddDrives: !sectionConfig.allowAdd,\n };\n});\n","import { DocumentDriveState } from 'document-model-libs/document-drive';\nimport { useDocumentDriveServer } from './useDocumentDriveServer';\n\ntype ExtendedDocumentDriveState = DocumentDriveState & { remoteUrl?: string };\n\nexport function useDocumentDriveById(driveId: string | undefined) {\n const { documentDrives } = useDocumentDriveServer();\n\n if (!driveId) return {\n drive: null,\n remoteUrl: null,\n isRemoteDrive: false,\n };\n\n const drive = documentDrives.find(\n drive => drive.state.global.id === driveId,\n );\n\n const pullResponder = drive?.state.local.triggers.find(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n trigger => trigger.type === 'PullResponder',\n );\n\n const { remoteUrl } = (drive?.state.global ||\n {}) as ExtendedDocumentDriveState;\n\n const isRemoteDrive = !!remoteUrl || !!pullResponder;\n\n return {\n drive,\n remoteUrl: remoteUrl || pullResponder?.data?.url,\n isRemoteDrive,\n };\n}\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","import LZString from 'lz-string';\n\nconst rwaQuery = `... on RealWorldAssets {\n state {\n portfolio {\n __typename\n ... on FixedIncome {\n name\n CUSIP\n purchaseDate\n purchasePrice\n purchaseProceeds\n salesProceeds\n totalDiscount\n spvId\n }\n ... on Cash {\n id\n balance\n }\n }\n transactions {\n id\n type\n entryTime\n cashBalanceChange\n fees {\n id\n serviceProviderFeeTypeId\n amount\n }\n txRef\n cashTransaction {\n id\n assetId\n amount\n entryTime\n tradeTime\n settlementTime\n accountId\n counterPartyAccountId\n }\n fixedIncomeTransaction {\n id\n assetId\n amount\n entryTime\n tradeTime\n settlementTime\n accountId\n counterPartyAccountId\n }\n }\n }\n }`;\n\nconst accountSnapshot = `... on AccountSnapshot {\n state {\n id\n ownerId\n ownerType\n period\n start\n end\n actualsComparison {\n month\n reportedActuals\n currency\n netExpenses {\n offChainIncluded {amount difference}\n onChainOnly {amount difference}\n }\n }\n snapshotAccount {\n id\n accountLabel\n accountAddress\n accountType\n groupAccountId\n offChain\n upstreamAccountId\n }\n }\n }`;\n\nconst budgetStatement = `... on BudgetStatement {\n state {\n month\n quoteCurrency\n accounts {\n name\n address\n lineItems {\n actual\n payment\n budgetCap\n }\n }\n ftes {\n value\n }\n }\n }`;\n\nconst getQuery = (\n documentId: string,\n documentType: string,\n encodeQuery = true,\n) => {\n let query = ``;\n\n if (documentType === 'powerhouse/account-snapshot') {\n query = accountSnapshot;\n }\n\n if (documentType === 'powerhouse/budget-statement') {\n query = budgetStatement;\n }\n\n if (documentType === 'makerdao/rwa-portfolio') {\n query = rwaQuery;\n }\n\n const queryString = `query {\n document(id:\"${documentId}\") {\n name\n documentType\n revision\n created\n lastModified\n ${query}\n }\n}`;\n\n if (!encodeQuery) {\n return queryString;\n }\n\n return encodeURIComponent(queryString);\n};\n\nconst getLocalReactorUrl = (\n remoteUrl: string,\n documentType: string,\n documentId: string,\n) => {\n const query = getQuery(documentId, documentType, false);\n\n const explorerURLState = LZString.compressToEncodedURIComponent(\n JSON.stringify({\n document: query.trim(),\n }),\n );\n\n const url = remoteUrl + `?explorerURLState=${explorerURLState}`;\n return url.toString();\n};\n\nexport const getSwitchboardUrl = (\n remoteUrl: string,\n documentType: string,\n documentId: string,\n) => {\n if (remoteUrl.includes('localhost')) {\n return getLocalReactorUrl(remoteUrl, documentType, documentId);\n }\n\n const explorerUrl = remoteUrl.replace(/\\/d\\//, '/graphql/');\n const query = getQuery(documentId, documentType);\n const url = explorerUrl + `?query=${query}`;\n\n return url.toString();\n};\n","const openBrowserUrl = (url: string) => window.open(url, '_blank');\n\nexport const openUrl = window.electronAPI?.openURL ?? openBrowserUrl;\n","import { FILE, UiNode } from '@powerhousedao/design-system';\nimport { getSwitchboardUrl } from 'src/utils/getSwitchboardUrl';\nimport { openUrl } from 'src/utils/openUrl';\nimport { useDocumentDriveById } from './useDocumentDriveById';\n\nexport const useOpenSwitchboardLink = (driveId: string | undefined) => {\n const { isRemoteDrive, remoteUrl } = useDocumentDriveById(driveId);\n\n return async (uiNode?: UiNode | null) => {\n if (uiNode?.kind !== FILE || !remoteUrl || !isRemoteDrive) return;\n\n const url = new URL(remoteUrl);\n const baseUrl = url.origin;\n\n const switchboardUrl = getSwitchboardUrl(\n remoteUrl,\n uiNode.documentType,\n uiNode.id,\n );\n\n await openUrl(switchboardUrl);\n };\n};\n","import {\n AddLocalDriveInput,\n AddRemoteDriveInput,\n CLOUD,\n DRIVE,\n FILE,\n FOLDER,\n LOCAL,\n PUBLIC,\n SharingType,\n SUCCESS,\n toast,\n UiDriveNode,\n UiFileNode,\n UiFolderNode,\n UiNode,\n useUiNodesContext,\n} from '@powerhousedao/design-system';\nimport { ReadDrive } from 'document-drive';\nimport { DocumentDriveDocument } from 'document-model-libs/document-drive';\nimport { useCallback, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useModal } from 'src/components/modal';\nimport { useReadModeContext } from 'src/context/read-mode';\nimport { useFileNodeDocument } from 'src/store/document-drive';\nimport {\n useFilteredDocumentModels,\n useGetDocumentModel,\n} from 'src/store/document-model';\nimport { getNodeOptions } from 'src/utils/drive-sections';\nimport { makeNodeSlugFromNodeName } from 'src/utils/slug';\nimport { useDocumentDriveById } from './useDocumentDriveById';\nimport { useDocumentDriveServer } from './useDocumentDriveServer';\nimport { useOpenSwitchboardLink } from './useOpenSwitchboardLink';\nimport { useUserPermissions } from './useUserPermissions';\n\nexport function useUiNodes() {\n const { showModal } = useModal();\n const { t } = useTranslation();\n const uiNodesContext = useUiNodesContext();\n const {\n selectedDriveNode,\n driveNodes,\n selectedParentNode,\n setSelectedNode,\n getParentNode,\n } = uiNodesContext;\n const readModeContext = useReadModeContext();\n const documentDriveServer = useDocumentDriveServer();\n const {\n addFolder,\n addFile,\n renameNode,\n deleteNode,\n addDrive,\n addRemoteDrive,\n deleteDrive,\n renameDrive,\n setDriveAvailableOffline,\n setDriveSharingType,\n copyNode,\n moveNode,\n getSyncStatus,\n removeTrigger,\n addTrigger,\n registerNewPullResponderTrigger,\n } = documentDriveServer;\n const selectedDocumentDrive = useDocumentDriveById(selectedDriveNode?.id);\n const openSwitchboardLink = useOpenSwitchboardLink(selectedDriveNode?.id);\n const userPermissions = useUserPermissions();\n const nodeOptions = getNodeOptions();\n const documentModels = useFilteredDocumentModels();\n const getDocumentModel = useGetDocumentModel();\n const fileNodeDocument = useFileNodeDocument({\n ...uiNodesContext,\n ...documentDriveServer,\n ...readModeContext,\n });\n\n const makeUiDriveNode = useCallback(\n async (drive: DocumentDriveDocument | ReadDrive) => {\n const isReadDrive = 'readContext' in drive;\n const { id, name, icon, slug } = drive.state.global;\n const { sharingType: _sharingType, availableOffline } = !isReadDrive\n ? drive.state.local\n : { sharingType: PUBLIC, availableOffline: false };\n const __sharingType = _sharingType?.toUpperCase();\n const sharingType = (\n __sharingType === 'PRIVATE' ? LOCAL : __sharingType\n ) as SharingType;\n const driveSyncStatus = !isReadDrive\n ? await getSyncStatus(id, sharingType)\n : undefined;\n\n // TODO: rempve this after integration in design-system\n const normalizedDriveSyncStatus =\n driveSyncStatus === 'INITIAL_SYNC'\n ? 'SYNCING'\n : driveSyncStatus;\n\n const driveNode: UiDriveNode = {\n id,\n name,\n slug: slug || null,\n kind: DRIVE,\n children: [],\n nodeMap: {},\n sharingType,\n syncStatus: normalizedDriveSyncStatus,\n availableOffline,\n icon,\n parentFolder: null,\n driveId: id,\n };\n\n const nodes = drive.state.global.nodes.map(n => {\n const node = {\n ...n,\n slug: makeNodeSlugFromNodeName(n.name),\n driveId: id,\n parentFolder: n.parentFolder || id,\n kind: n.kind.toUpperCase(),\n syncStatus: normalizedDriveSyncStatus,\n sharingType,\n };\n\n if (node.kind === DRIVE) {\n throw new Error('Drive nodes should not be nested');\n }\n\n if (node.kind === FILE) {\n return node as UiFileNode;\n }\n\n return {\n ...node,\n children: [],\n } as UiFolderNode;\n });\n\n for (const node of nodes) {\n driveNode.nodeMap[node.id] = node;\n }\n\n for await (const node of nodes) {\n if (node.kind === FILE) {\n const fileSyncStatus = !isReadDrive\n ? await getSyncStatus(\n node.synchronizationUnits[0].syncId,\n sharingType,\n )\n : undefined;\n\n // TODO: rempve this after integration in design-system\n const normalizedFileSyncStatus =\n fileSyncStatus === 'INITIAL_SYNC'\n ? 'SYNCING'\n : fileSyncStatus;\n\n node.syncStatus = normalizedFileSyncStatus;\n }\n\n if (node.parentFolder === id) {\n driveNode.children.push(node);\n continue;\n }\n const parent = driveNode.nodeMap[node.parentFolder];\n\n if (parent.kind === FILE) {\n throw new Error(\n `Parent node ${node.parentFolder} is a file, not a folder`,\n );\n }\n\n parent.children.push(node);\n\n if (node.syncStatus !== SUCCESS) {\n parent.syncStatus = node.syncStatus;\n }\n }\n\n return driveNode;\n },\n [getSyncStatus],\n );\n\n const makeUiDriveNodes = useCallback(\n async (documentDrives: DocumentDriveDocument[]) => {\n return Promise.all(documentDrives.map(makeUiDriveNode));\n },\n [makeUiDriveNode],\n );\n\n const onAddFolder = useCallback(\n async (name: string, parentNode: UiNode | null) => {\n if (!parentNode) {\n throw new Error('Parent node is required');\n }\n if (parentNode.kind === FILE) {\n throw new Error('Cannot add folder to a file');\n }\n return await addFolder(parentNode.driveId, name, parentNode.id);\n },\n [addFolder],\n );\n\n const onRenameNode = useCallback(\n async (name: string, uiNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error(\n 'Drive can only be renamed from the drive settings modal',\n );\n }\n return await renameNode(uiNode.driveId, uiNode.id, name);\n },\n [renameNode],\n );\n\n const onCopyNode = useCallback(\n async (uiNode: UiNode, targetNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be duplicated');\n }\n\n await copyNode(uiNode, targetNode);\n },\n [copyNode],\n );\n\n const onMoveNode = useCallback(\n async (uiNode: UiNode, targetNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be moved');\n }\n\n await moveNode(uiNode, targetNode);\n },\n [moveNode],\n );\n\n const onAddFile = useCallback(\n async (file: File, parentNode: UiNode | null) => {\n if (!parentNode) {\n throw new Error('Parent node is required');\n }\n if (parentNode.kind === FILE) {\n throw new Error('Cannot add file to a file');\n }\n\n const fileName = file.name.replace(/\\.zip$/gim, '');\n\n return await addFile(\n file,\n parentNode.driveId,\n fileName,\n parentNode.id,\n );\n },\n [addFile],\n );\n\n const onDuplicateNode = useCallback(\n async (uiNode: UiNode) => {\n if (!selectedParentNode) return;\n\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be duplicated');\n }\n\n await copyNode(uiNode, selectedParentNode);\n },\n [copyNode, selectedParentNode],\n );\n\n const onDeleteNode = useCallback(\n (uiNode: UiFileNode | UiFolderNode) => {\n showModal('deleteItem', {\n uiNode,\n onDelete: async closeModal => {\n closeModal();\n\n const i18nKey =\n uiNode.kind === FOLDER\n ? 'notifications.deleteFolderSuccess'\n : 'notifications.fileDeleteSuccess';\n\n const parentNode = getParentNode(uiNode);\n\n await deleteNode(uiNode.driveId, uiNode.id);\n\n setSelectedNode(parentNode);\n\n toast(t(i18nKey), { type: 'connect-deleted' });\n },\n });\n },\n [deleteNode, getParentNode, setSelectedNode, showModal, t],\n );\n\n const onDeleteDrive = useCallback(\n (uiDriveNode: UiDriveNode) => {\n showModal('deleteDriveModal', {\n uiDriveNode,\n onDelete: async closeModal => {\n closeModal();\n await deleteDrive(uiDriveNode.id);\n\n setSelectedNode(driveNodes[0]);\n\n toast(t('notifications.deleteDriveSuccess'), {\n type: 'connect-deleted',\n });\n },\n });\n },\n [deleteDrive, driveNodes, setSelectedNode, showModal, t],\n );\n\n const onAddLocalDrive = useCallback(\n async (data: AddLocalDriveInput) => {\n try {\n const newDrive = await addDrive({\n global: {\n name: data.name,\n id: undefined,\n icon: null,\n slug: null,\n },\n local: {\n availableOffline: data.availableOffline,\n sharingType: data.sharingType.toLowerCase(),\n listeners: [],\n triggers: [],\n },\n });\n\n toast(t('notifications.addDriveSuccess'), {\n type: 'connect-success',\n });\n\n const newDriveNode = await makeUiDriveNode(newDrive);\n\n setSelectedNode(newDriveNode);\n } catch (e) {\n console.error(e);\n }\n },\n [addDrive, makeUiDriveNode, setSelectedNode, t],\n );\n\n const onAddRemoteDrive = useCallback(\n async (data: AddRemoteDriveInput) => {\n try {\n const newDrive = await addRemoteDrive(data.url, {\n sharingType: data.sharingType,\n availableOffline: data.availableOffline,\n listeners: [\n {\n block: true,\n callInfo: {\n data: data.url,\n name: 'switchboard-push',\n transmitterType: 'SwitchboardPush',\n },\n filter: {\n branch: ['main'],\n documentId: ['*'],\n documentType: ['*'],\n scope: ['global'],\n },\n label: 'Switchboard Sync',\n listenerId: '1',\n system: true,\n },\n ],\n triggers: [],\n pullInterval: 3000,\n });\n\n toast(t('notifications.addDriveSuccess'), {\n type: 'connect-success',\n });\n\n const newDriveNode = await makeUiDriveNode(newDrive);\n\n setSelectedNode(newDriveNode);\n } catch (e) {\n console.error(e);\n }\n },\n [addRemoteDrive, makeUiDriveNode, setSelectedNode, t],\n );\n\n const showAddDriveModal = useCallback(\n (groupSharingType: SharingType) => {\n if (groupSharingType === LOCAL) {\n showModal('addLocalDrive', {\n onAddLocalDrive,\n });\n } else {\n showModal('addRemoteDrive', {\n onAddRemoteDrive,\n groupSharingType,\n });\n }\n },\n [onAddLocalDrive, onAddRemoteDrive, showModal],\n );\n\n const onRenameDrive = useCallback(\n async (uiDriveNode: UiDriveNode, newName: string) => {\n await renameDrive(uiDriveNode.id, newName);\n },\n [renameDrive],\n );\n\n const onChangeSharingType = useCallback(\n async (uiDriveNode: UiDriveNode, newSharingType: SharingType) => {\n await setDriveSharingType(uiDriveNode.id, newSharingType);\n },\n [setDriveSharingType],\n );\n\n const onChangeAvailableOffline = useCallback(\n async (uiDriveNode: UiDriveNode, newAvailableOffline: boolean) => {\n await setDriveAvailableOffline(uiDriveNode.id, newAvailableOffline);\n },\n [setDriveAvailableOffline],\n );\n\n const showDriveSettingsModal = useCallback(\n (uiDriveNode: UiDriveNode) => {\n showModal('driveSettings', {\n uiDriveNode,\n onRenameDrive,\n onDeleteDrive,\n onChangeSharingType,\n onChangeAvailableOffline,\n });\n },\n [\n onChangeAvailableOffline,\n onChangeSharingType,\n onDeleteDrive,\n onRenameDrive,\n showModal,\n ],\n );\n\n const onAddAndSelectNewFolder = useCallback(\n async (name: string) => {\n if (!name || !selectedParentNode) return;\n\n const newFolder = await onAddFolder(name, selectedParentNode);\n\n setSelectedNode({\n ...newFolder,\n kind: FOLDER,\n slug: makeNodeSlugFromNodeName(newFolder.name),\n parentFolder: selectedParentNode.id,\n syncStatus: selectedParentNode.syncStatus,\n driveId: selectedParentNode.driveId,\n sharingType: selectedParentNode.sharingType,\n children: [],\n });\n },\n [onAddFolder, selectedParentNode, setSelectedNode],\n );\n\n const onAddTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const url = window.prompt('url') || '';\n\n const pullResponderTrigger = await registerNewPullResponderTrigger(\n uiNodeDriveId,\n url,\n { pullInterval: 6000 },\n );\n await addTrigger(uiNodeDriveId, pullResponderTrigger);\n },\n [addTrigger, registerNewPullResponderTrigger],\n );\n\n const onRemoveTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const triggerId = window.prompt('triggerId:');\n\n if (triggerId) {\n await removeTrigger(uiNodeDriveId, triggerId);\n }\n },\n [removeTrigger],\n );\n\n const onAddInvalidTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const url = window.prompt('url') || '';\n\n await addTrigger(uiNodeDriveId, {\n id: 'some-invalid-id',\n type: 'PullResponder',\n data: {\n interval: '3000',\n listenerId: 'invalid-listener-id',\n url,\n },\n });\n },\n [addTrigger],\n );\n\n const driveNodesBySharingType = useMemo(\n () =>\n driveNodes.reduce<Record<SharingType, UiDriveNode[]>>(\n (acc, driveNode) => {\n acc[driveNode.sharingType].push(driveNode);\n return acc;\n },\n {\n [PUBLIC]: [],\n [CLOUD]: [],\n [LOCAL]: [],\n },\n ),\n [driveNodes],\n );\n\n return useMemo(\n () => ({\n ...documentDriveServer,\n ...uiNodesContext,\n ...userPermissions,\n ...selectedDocumentDrive,\n ...fileNodeDocument,\n nodeOptions,\n driveNodesBySharingType,\n documentModels,\n onAddFolder,\n onAddFile,\n onCopyNode,\n onMoveNode,\n onRenameNode,\n onDuplicateNode,\n onDeleteNode,\n onDeleteDrive,\n makeUiDriveNodes,\n onAddAndSelectNewFolder,\n showAddDriveModal,\n showDriveSettingsModal,\n openSwitchboardLink,\n onAddTrigger,\n onRemoveTrigger,\n onAddInvalidTrigger,\n getDocumentModel,\n }),\n [\n documentDriveServer,\n uiNodesContext,\n userPermissions,\n selectedDocumentDrive,\n fileNodeDocument,\n nodeOptions,\n driveNodesBySharingType,\n documentModels,\n onAddFolder,\n onAddFile,\n onCopyNode,\n onMoveNode,\n onRenameNode,\n onDuplicateNode,\n onDeleteNode,\n onDeleteDrive,\n makeUiDriveNodes,\n onAddAndSelectNewFolder,\n showAddDriveModal,\n showDriveSettingsModal,\n openSwitchboardLink,\n onAddTrigger,\n onRemoveTrigger,\n onAddInvalidTrigger,\n getDocumentModel,\n ],\n );\n}\n\nexport type TUiNodes = ReturnType<typeof useUiNodes>;\n"],"names":["debounceOperations","callback","timeout","timer","operations","operation","index","op","oldOperation","resolve","reject","documentCacheAtom","atom","singletonFileNodeDocumentAtom","fileNodeDocumentAtom","get","set","newValue","currentValue","documentCache","documentToHash","selectedDocumentAtom","_a","document","fileNodeDocument","useFileNodeDocument","props","selectedNode","selectedDriveNode","openFile","addOperations","onStrandUpdate","fetchReadDocument","setFileNodeDocument","useAtom","isReadMode","driveId","documentId","kind","documentType","selectedDocument","setSelectedDocument","fetchDocument","useCallback","id","useEffect","error","logger","strand","addOperationToSelectedDocument","useMemo","FILE","isSelectedDocument","connectDebug","DriveSections","PUBLIC","CLOUD","LOCAL","getSectionConfig","sharingType","connectConfig","getDriveNodeOptions","options","defaultDriveOptions","DELETE","debugNodeOptions","getFileNodeOptions","defaultFileOptions","getFolderNodeOptions","defaultFolderOptions","getNodeOptions","DRIVE","FOLDER","driveSections","section","sectionConfig","useDocumentDriveById","documentDrives","useDocumentDriveServer","drive","pullResponder","trigger","remoteUrl","isRemoteDrive","LZString","f","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","i","input","res","a","compressed","uncompressed","buf","TotalLen","current_value","result","c","bitsPerChar","getCharFromInt","value","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","ii","length","resetValue","getNextValue","dictionary","enlargeIn","dictSize","numBits","entry","w","bits","resb","maxpower","power","data","module","rwaQuery","accountSnapshot","budgetStatement","getQuery","encodeQuery","query","queryString","getLocalReactorUrl","explorerURLState","getSwitchboardUrl","explorerUrl","openBrowserUrl","url","openUrl","useOpenSwitchboardLink","uiNode","switchboardUrl","useUiNodes","showModal","useModal","t","useTranslation","uiNodesContext","useUiNodesContext","driveNodes","selectedParentNode","setSelectedNode","getParentNode","readModeContext","useReadModeContext","documentDriveServer","addFolder","addFile","renameNode","deleteNode","addDrive","addRemoteDrive","deleteDrive","renameDrive","setDriveAvailableOffline","setDriveSharingType","copyNode","moveNode","getSyncStatus","removeTrigger","addTrigger","registerNewPullResponderTrigger","selectedDocumentDrive","openSwitchboardLink","userPermissions","useUserPermissions","nodeOptions","documentModels","useFilteredDocumentModels","getDocumentModel","useGetDocumentModel","makeUiDriveNode","isReadDrive","name","icon","slug","_sharingType","availableOffline","__sharingType","driveSyncStatus","normalizedDriveSyncStatus","driveNode","nodes","n","node","makeNodeSlugFromNodeName","fileSyncStatus","normalizedFileSyncStatus","parent","SUCCESS","makeUiDriveNodes","onAddFolder","parentNode","onRenameNode","onCopyNode","targetNode","onMoveNode","onAddFile","file","fileName","onDuplicateNode","onDeleteNode","closeModal","i18nKey","toast","onDeleteDrive","uiDriveNode","onAddLocalDrive","newDrive","newDriveNode","e","onAddRemoteDrive","showAddDriveModal","groupSharingType","onRenameDrive","newName","onChangeSharingType","newSharingType","onChangeAvailableOffline","newAvailableOffline","showDriveSettingsModal","onAddAndSelectNewFolder","newFolder","onAddTrigger","uiNodeDriveId","pullResponderTrigger","onRemoveTrigger","triggerId","onAddInvalidTrigger","driveNodesBySharingType","acc"],"mappings":"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","x_google_ignoreList":[3]}
1
+ {"version":3,"file":"useUiNodes-DYMt05zv.js","sources":["../../src/store/document-drive.ts","../../src/utils/drive-sections.ts","../../src/hooks/useDocumentDriveById.ts","../../node_modules/lz-string/libs/lz-string.js","../../src/utils/getSwitchboardUrl.ts","../../src/utils/openUrl.ts","../../src/hooks/useOpenSwitchboardLink.ts","../../src/hooks/useUiNodes.ts"],"sourcesContent":["import { FILE, TUiNodesContext } from '@powerhousedao/design-system';\nimport { Document, Operation } from 'document-model/document';\nimport { atom, useAtom } from 'jotai';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { IReadModeContext } from 'src/context/read-mode';\nimport { documentToHash } from 'src/hooks/useDocumentDrives';\nimport { TDocumentDriveServer } from 'src/hooks/useDocumentDriveServer';\nimport { logger } from 'src/services/logger';\n\nfunction debounceOperations(\n callback: (operations: Operation[]) => Promise<Document | undefined>,\n timeout = 50,\n) {\n let timer: number;\n const operations: Operation[] = [];\n return (operation: Operation) => {\n if (timer) {\n clearTimeout(timer);\n }\n const index = operations.findIndex(\n op => op.scope === operation.scope && op.index === operation.index,\n );\n if (index > -1) {\n const oldOperation = operations[index];\n if (\n !(\n oldOperation.type === operation.type &&\n JSON.stringify(operation.input) ===\n JSON.stringify(oldOperation.input)\n )\n ) {\n console.warn(\n 'Two conflicting operations were dispatched:',\n oldOperation,\n operation,\n );\n }\n operations[index] = operation;\n } else {\n operations.push(operation);\n }\n return new Promise<Document | undefined>((resolve, reject) => {\n timer = setTimeout(() => {\n callback(operations).then(resolve).catch(reject);\n }, timeout) as unknown as number;\n });\n };\n}\n\ntype FileNodeDocument =\n | {\n driveId: string;\n documentId: string;\n documentType: string;\n document: Document | undefined;\n status: 'LOADING' | 'ERROR';\n }\n | {\n driveId: string;\n documentId: string;\n documentType: string;\n document: Document;\n status: 'LOADED';\n }\n | undefined;\n\nconst documentCacheAtom = atom(new Map<string, Document>());\n\nconst singletonFileNodeDocumentAtom = atom<FileNodeDocument>(undefined);\nconst fileNodeDocumentAtom = atom(\n get => get(singletonFileNodeDocumentAtom),\n (get, set, newValue: FileNodeDocument) => {\n const currentValue = get(singletonFileNodeDocumentAtom);\n\n // if document will be loaded then sets\n // the cached version while it loads\n const documentCache = get(documentCacheAtom);\n if (!newValue?.document && newValue?.status === 'LOADING') {\n newValue.document = documentCache.get(\n `${newValue.driveId}:${newValue.documentId}`,\n );\n }\n\n // only change if the provided file node is different\n if (\n currentValue?.driveId !== newValue?.driveId ||\n currentValue?.documentId !== newValue?.documentId ||\n currentValue?.documentType !== newValue?.documentType ||\n currentValue?.status !== newValue?.status ||\n !!currentValue?.document !== !!newValue?.document ||\n (currentValue?.document &&\n newValue?.document &&\n documentToHash(currentValue.document) !==\n documentToHash(newValue.document))\n ) {\n // if document has been fetched then updates the cache\n if (newValue?.status === 'LOADED') {\n documentCache.set(\n `${newValue.driveId}:${newValue.documentId}`,\n newValue.document,\n );\n }\n\n set(singletonFileNodeDocumentAtom, newValue);\n return true;\n }\n\n return false;\n },\n);\n\nconst selectedDocumentAtom = atom(\n get => get(fileNodeDocumentAtom)?.document,\n (get, set, document: Document | undefined) => {\n const fileNodeDocument = get(fileNodeDocumentAtom);\n if (!fileNodeDocument) {\n throw new Error('fileNodeDocument is undefined');\n } else if (!document) {\n set(fileNodeDocumentAtom, undefined);\n } else {\n set(fileNodeDocumentAtom, { ...fileNodeDocument, document });\n }\n },\n);\n\nexport function useFileNodeDocument(\n props: TUiNodesContext & TDocumentDriveServer & IReadModeContext,\n) {\n const {\n selectedNode,\n selectedDriveNode,\n openFile,\n addOperations,\n onStrandUpdate,\n fetchDocument: fetchReadDocument,\n } = props;\n const [fileNodeDocument, setFileNodeDocument] =\n useAtom(fileNodeDocumentAtom);\n const isReadMode =\n selectedDriveNode?.sharingType !== 'LOCAL' &&\n selectedDriveNode?.syncStatus === undefined;\n const driveId = selectedNode?.driveId;\n const documentId = selectedNode?.id;\n const kind = selectedNode?.kind;\n const documentType =\n kind === 'FILE' ? selectedNode?.documentType : undefined;\n\n const [selectedDocument, setSelectedDocument] =\n useAtom(selectedDocumentAtom);\n\n const fetchDocument = useCallback(\n async (driveId: string, id: string, documentType: string) => {\n const document = await (isReadMode\n ? fetchReadDocument(driveId, id, documentType)\n : openFile(driveId, id));\n if (document instanceof Error) {\n throw document;\n }\n return document;\n },\n [fetchReadDocument, isReadMode, openFile],\n );\n\n useEffect(() => {\n // if selected node is undefine then clears fileNodeDocument\n if (!driveId || !documentId || !documentType) {\n if (fileNodeDocument) {\n setFileNodeDocument(undefined);\n }\n return;\n }\n\n // if selectedNode changes then fetches fileNodeDocument\n if (\n driveId !== fileNodeDocument?.driveId ||\n documentId !== fileNodeDocument.documentId ||\n documentType !== fileNodeDocument.documentType\n ) {\n const changed = setFileNodeDocument({\n driveId,\n documentId,\n documentType,\n document: undefined,\n status: 'LOADING',\n });\n\n // if the selected file node changed then fetches the new document\n if (changed) {\n fetchDocument(driveId, documentId, documentType)\n .then(document =>\n setFileNodeDocument(\n document\n ? {\n driveId,\n documentId,\n documentType,\n document,\n status: 'LOADED',\n }\n : {\n driveId,\n documentId,\n documentType,\n document,\n status: 'ERROR',\n },\n ),\n )\n .catch(error => {\n logger.error(error);\n setFileNodeDocument({\n driveId,\n documentId,\n documentType,\n document: undefined,\n status: 'ERROR',\n });\n });\n }\n }\n }, [\n selectedNode,\n documentId,\n documentType,\n driveId,\n fetchDocument,\n fileNodeDocument,\n setFileNodeDocument,\n ]);\n\n useEffect(() => {\n if (\n !fileNodeDocument?.driveId ||\n !fileNodeDocument.documentId ||\n !fileNodeDocument.documentType\n ) {\n return;\n }\n\n // watches for strand updates to update the document\n const removeListener = onStrandUpdate(strand => {\n if (\n strand.driveId === fileNodeDocument.driveId &&\n strand.documentId === fileNodeDocument.documentId\n ) {\n fetchDocument(\n fileNodeDocument.driveId,\n fileNodeDocument.documentId,\n fileNodeDocument.documentType,\n )\n .then(setSelectedDocument)\n .catch(logger.error);\n }\n });\n\n return removeListener;\n }, [\n fileNodeDocument?.driveId,\n fileNodeDocument?.documentId,\n fileNodeDocument?.documentType,\n onStrandUpdate,\n fetchDocument,\n setSelectedDocument,\n ]);\n\n const addOperationToSelectedDocument = useMemo(() => {\n if (driveId && documentId && kind === FILE) {\n return debounceOperations(operations =>\n addOperations(driveId, documentId, operations),\n );\n }\n }, [addOperations, driveId, documentId, kind]);\n\n const isSelectedDocument =\n kind === FILE &&\n fileNodeDocument?.driveId === driveId &&\n fileNodeDocument?.documentId === documentId;\n\n return useMemo(\n () => ({\n fileNodeDocument,\n selectedDocument: isSelectedDocument ? selectedDocument : undefined,\n setSelectedDocument,\n addOperationToSelectedDocument,\n }),\n [\n fileNodeDocument,\n isSelectedDocument,\n selectedDocument,\n setSelectedDocument,\n addOperationToSelectedDocument,\n ],\n );\n}\n","import {\n CLOUD,\n debugNodeOptions,\n defaultDriveOptions,\n defaultFileOptions,\n defaultFolderOptions,\n DELETE,\n DRIVE,\n FILE,\n FOLDER,\n LOCAL,\n PUBLIC,\n SharingType,\n} from '@powerhousedao/design-system';\nimport connectConfig from 'connect-config';\nimport { ReactNode } from 'react';\n\n// Enables debug options for the drive\nconst connectDebug = localStorage.getItem('CONNECT_DEBUG') === 'true';\n\nconst DriveSections: {\n sharingType: SharingType;\n label: ReactNode;\n}[] = [\n { sharingType: PUBLIC, label: 'Public Drives' },\n { sharingType: CLOUD, label: 'Secure Cloud Drives' },\n { sharingType: LOCAL, label: 'My Local Drives' },\n] as const;\n\nconst getSectionConfig = (sharingType: SharingType) => {\n return connectConfig.drives.sections[sharingType];\n};\n\nexport function getDriveNodeOptions(sharingType: SharingType) {\n const options = [...defaultDriveOptions];\n\n if (connectConfig.drives.sections[sharingType].allowDelete) {\n options.push(DELETE);\n }\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getFileNodeOptions() {\n const options = [...defaultFileOptions];\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getFolderNodeOptions() {\n const options = [...defaultFolderOptions];\n\n if (connectDebug) {\n options.push(...debugNodeOptions);\n }\n\n return options;\n}\n\nexport function getNodeOptions() {\n return {\n [LOCAL]: {\n [DRIVE]: getDriveNodeOptions(LOCAL),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n [CLOUD]: {\n [DRIVE]: getDriveNodeOptions(CLOUD),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n [PUBLIC]: {\n [DRIVE]: getDriveNodeOptions(PUBLIC),\n [FOLDER]: getFolderNodeOptions(),\n [FILE]: getFileNodeOptions(),\n },\n } as const;\n}\n\nexport const driveSections = DriveSections.filter(\n section => getSectionConfig(section.sharingType).enabled,\n).map(section => {\n const sectionConfig = getSectionConfig(section.sharingType);\n\n return {\n ...section,\n disableAddDrives: !sectionConfig.allowAdd,\n };\n});\n","import { DocumentDriveState } from 'document-model-libs/document-drive';\nimport { useDocumentDriveServer } from './useDocumentDriveServer';\n\ntype ExtendedDocumentDriveState = DocumentDriveState & { remoteUrl?: string };\n\nexport function useDocumentDriveById(driveId: string | undefined) {\n const { documentDrives } = useDocumentDriveServer();\n\n if (!driveId) return {\n drive: null,\n remoteUrl: null,\n isRemoteDrive: false,\n };\n\n const drive = documentDrives.find(\n drive => drive.state.global.id === driveId,\n );\n\n const pullResponder = drive?.state.local.triggers.find(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n trigger => trigger.type === 'PullResponder',\n );\n\n const { remoteUrl } = (drive?.state.global ||\n {}) as ExtendedDocumentDriveState;\n\n const isRemoteDrive = !!remoteUrl || !!pullResponder;\n\n return {\n drive,\n remoteUrl: remoteUrl || pullResponder?.data?.url,\n isRemoteDrive,\n };\n}\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","import LZString from 'lz-string';\n\nconst rwaQuery = `... on RealWorldAssets {\n state {\n portfolio {\n __typename\n ... on FixedIncome {\n name\n CUSIP\n purchaseDate\n purchasePrice\n purchaseProceeds\n salesProceeds\n totalDiscount\n spvId\n }\n ... on Cash {\n id\n balance\n }\n }\n transactions {\n id\n type\n entryTime\n cashBalanceChange\n fees {\n id\n serviceProviderFeeTypeId\n amount\n }\n txRef\n cashTransaction {\n id\n assetId\n amount\n entryTime\n tradeTime\n settlementTime\n accountId\n counterPartyAccountId\n }\n fixedIncomeTransaction {\n id\n assetId\n amount\n entryTime\n tradeTime\n settlementTime\n accountId\n counterPartyAccountId\n }\n }\n }\n }`;\n\nconst accountSnapshot = `... on AccountSnapshot {\n state {\n id\n ownerId\n ownerType\n period\n start\n end\n actualsComparison {\n month\n reportedActuals\n currency\n netExpenses {\n offChainIncluded {amount difference}\n onChainOnly {amount difference}\n }\n }\n snapshotAccount {\n id\n accountLabel\n accountAddress\n accountType\n groupAccountId\n offChain\n upstreamAccountId\n }\n }\n }`;\n\nconst budgetStatement = `... on BudgetStatement {\n state {\n month\n quoteCurrency\n accounts {\n name\n address\n lineItems {\n actual\n payment\n budgetCap\n }\n }\n ftes {\n value\n }\n }\n }`;\n\nconst getQuery = (\n documentId: string,\n documentType: string,\n encodeQuery = true,\n) => {\n let query = ``;\n\n if (documentType === 'powerhouse/account-snapshot') {\n query = accountSnapshot;\n }\n\n if (documentType === 'powerhouse/budget-statement') {\n query = budgetStatement;\n }\n\n if (documentType === 'makerdao/rwa-portfolio') {\n query = rwaQuery;\n }\n\n const queryString = `query {\n document(id:\"${documentId}\") {\n name\n documentType\n revision\n created\n lastModified\n ${query}\n }\n}`;\n\n if (!encodeQuery) {\n return queryString;\n }\n\n return encodeURIComponent(queryString);\n};\n\nconst getLocalReactorUrl = (\n remoteUrl: string,\n documentType: string,\n documentId: string,\n) => {\n const query = getQuery(documentId, documentType, false);\n\n const explorerURLState = LZString.compressToEncodedURIComponent(\n JSON.stringify({\n document: query.trim(),\n }),\n );\n\n const url = remoteUrl + `?explorerURLState=${explorerURLState}`;\n return url.toString();\n};\n\nexport const getSwitchboardUrl = (\n remoteUrl: string,\n documentType: string,\n documentId: string,\n) => {\n if (remoteUrl.includes('localhost')) {\n return getLocalReactorUrl(remoteUrl, documentType, documentId);\n }\n\n const explorerUrl = remoteUrl.replace(/\\/d\\//, '/graphql/');\n const query = getQuery(documentId, documentType);\n const url = explorerUrl + `?query=${query}`;\n\n return url.toString();\n};\n","const openBrowserUrl = (url: string) => window.open(url, '_blank');\n\nexport const openUrl = window.electronAPI?.openURL ?? openBrowserUrl;\n","import { FILE, UiNode } from '@powerhousedao/design-system';\nimport { getSwitchboardUrl } from 'src/utils/getSwitchboardUrl';\nimport { openUrl } from 'src/utils/openUrl';\nimport { useDocumentDriveById } from './useDocumentDriveById';\n\nexport const useOpenSwitchboardLink = (driveId: string | undefined) => {\n const { isRemoteDrive, remoteUrl } = useDocumentDriveById(driveId);\n\n return async (uiNode?: UiNode | null) => {\n if (uiNode?.kind !== FILE || !remoteUrl || !isRemoteDrive) return;\n\n const url = new URL(remoteUrl);\n const baseUrl = url.origin;\n\n const switchboardUrl = getSwitchboardUrl(\n remoteUrl,\n uiNode.documentType,\n uiNode.id,\n );\n\n await openUrl(switchboardUrl);\n };\n};\n","import {\n AddLocalDriveInput,\n AddRemoteDriveInput,\n CLOUD,\n DRIVE,\n FILE,\n FOLDER,\n LOCAL,\n PUBLIC,\n SharingType,\n SUCCESS,\n toast,\n UiDriveNode,\n UiFileNode,\n UiFolderNode,\n UiNode,\n useUiNodesContext,\n} from '@powerhousedao/design-system';\nimport { ReadDrive } from 'document-drive';\nimport { DocumentDriveDocument } from 'document-model-libs/document-drive';\nimport { useCallback, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useModal } from 'src/components/modal';\nimport { useReadModeContext } from 'src/context/read-mode';\nimport { useFileNodeDocument } from 'src/store/document-drive';\nimport {\n useFilteredDocumentModels,\n useGetDocumentModel,\n} from 'src/store/document-model';\nimport { getNodeOptions } from 'src/utils/drive-sections';\nimport { makeNodeSlugFromNodeName } from 'src/utils/slug';\nimport { useDocumentDriveById } from './useDocumentDriveById';\nimport { useDocumentDriveServer } from './useDocumentDriveServer';\nimport { useOpenSwitchboardLink } from './useOpenSwitchboardLink';\nimport { useUserPermissions } from './useUserPermissions';\n\nexport function useUiNodes() {\n const { showModal } = useModal();\n const { t } = useTranslation();\n const uiNodesContext = useUiNodesContext();\n const {\n selectedDriveNode,\n driveNodes,\n selectedParentNode,\n setSelectedNode,\n getParentNode,\n } = uiNodesContext;\n const readModeContext = useReadModeContext();\n const documentDriveServer = useDocumentDriveServer();\n const {\n addFolder,\n addFile,\n renameNode,\n deleteNode,\n addDrive,\n addRemoteDrive,\n deleteDrive,\n renameDrive,\n setDriveAvailableOffline,\n setDriveSharingType,\n copyNode,\n moveNode,\n getSyncStatus,\n removeTrigger,\n addTrigger,\n registerNewPullResponderTrigger,\n } = documentDriveServer;\n const selectedDocumentDrive = useDocumentDriveById(selectedDriveNode?.id);\n const openSwitchboardLink = useOpenSwitchboardLink(selectedDriveNode?.id);\n const userPermissions = useUserPermissions();\n const nodeOptions = getNodeOptions();\n const documentModels = useFilteredDocumentModels();\n const getDocumentModel = useGetDocumentModel();\n const fileNodeDocument = useFileNodeDocument({\n ...uiNodesContext,\n ...documentDriveServer,\n ...readModeContext,\n });\n\n const makeUiDriveNode = useCallback(\n async (drive: DocumentDriveDocument | ReadDrive) => {\n const isReadDrive = 'readContext' in drive;\n const { id, name, icon, slug } = drive.state.global;\n const { sharingType: _sharingType, availableOffline } = !isReadDrive\n ? drive.state.local\n : { sharingType: PUBLIC, availableOffline: false };\n const __sharingType = _sharingType?.toUpperCase();\n const sharingType = (\n __sharingType === 'PRIVATE' ? LOCAL : __sharingType\n ) as SharingType;\n const driveSyncStatus = !isReadDrive\n ? await getSyncStatus(id, sharingType)\n : undefined;\n\n // TODO: rempve this after integration in design-system\n const normalizedDriveSyncStatus =\n driveSyncStatus === 'INITIAL_SYNC'\n ? 'SYNCING'\n : driveSyncStatus;\n\n const driveNode: UiDriveNode = {\n id,\n name,\n slug: slug || null,\n kind: DRIVE,\n children: [],\n nodeMap: {},\n sharingType,\n syncStatus: normalizedDriveSyncStatus,\n availableOffline,\n icon,\n parentFolder: null,\n driveId: id,\n };\n\n const nodes = drive.state.global.nodes.map(n => {\n const node = {\n ...n,\n slug: makeNodeSlugFromNodeName(n.name),\n driveId: id,\n parentFolder: n.parentFolder || id,\n kind: n.kind.toUpperCase(),\n syncStatus: normalizedDriveSyncStatus,\n sharingType,\n };\n\n if (node.kind === DRIVE) {\n throw new Error('Drive nodes should not be nested');\n }\n\n if (node.kind === FILE) {\n return node as UiFileNode;\n }\n\n return {\n ...node,\n children: [],\n } as UiFolderNode;\n });\n\n for (const node of nodes) {\n driveNode.nodeMap[node.id] = node;\n }\n\n for await (const node of nodes) {\n if (node.kind === FILE) {\n const fileSyncStatus = !isReadDrive\n ? await getSyncStatus(\n node.synchronizationUnits[0].syncId,\n sharingType,\n )\n : undefined;\n\n // TODO: rempve this after integration in design-system\n const normalizedFileSyncStatus =\n fileSyncStatus === 'INITIAL_SYNC'\n ? 'SYNCING'\n : fileSyncStatus;\n\n node.syncStatus = normalizedFileSyncStatus;\n }\n\n if (node.parentFolder === id) {\n driveNode.children.push(node);\n continue;\n }\n const parent = driveNode.nodeMap[node.parentFolder];\n\n if (parent.kind === FILE) {\n throw new Error(\n `Parent node ${node.parentFolder} is a file, not a folder`,\n );\n }\n\n parent.children.push(node);\n\n if (node.syncStatus !== SUCCESS) {\n parent.syncStatus = node.syncStatus;\n }\n }\n\n return driveNode;\n },\n [getSyncStatus],\n );\n\n const makeUiDriveNodes = useCallback(\n async (documentDrives: DocumentDriveDocument[]) => {\n return Promise.all(documentDrives.map(makeUiDriveNode));\n },\n [makeUiDriveNode],\n );\n\n const onAddFolder = useCallback(\n async (name: string, parentNode: UiNode | null) => {\n if (!parentNode) {\n throw new Error('Parent node is required');\n }\n if (parentNode.kind === FILE) {\n throw new Error('Cannot add folder to a file');\n }\n return await addFolder(parentNode.driveId, name, parentNode.id);\n },\n [addFolder],\n );\n\n const onRenameNode = useCallback(\n async (name: string, uiNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error(\n 'Drive can only be renamed from the drive settings modal',\n );\n }\n return await renameNode(uiNode.driveId, uiNode.id, name);\n },\n [renameNode],\n );\n\n const onCopyNode = useCallback(\n async (uiNode: UiNode, targetNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be duplicated');\n }\n\n await copyNode(uiNode, targetNode);\n },\n [copyNode],\n );\n\n const onMoveNode = useCallback(\n async (uiNode: UiNode, targetNode: UiNode) => {\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be moved');\n }\n\n await moveNode(uiNode, targetNode);\n },\n [moveNode],\n );\n\n const onAddFile = useCallback(\n async (file: File, parentNode: UiNode | null) => {\n if (!parentNode) {\n throw new Error('Parent node is required');\n }\n if (parentNode.kind === FILE) {\n throw new Error('Cannot add file to a file');\n }\n\n const fileName = file.name.replace(/\\.zip$/gim, '');\n\n return await addFile(\n file,\n parentNode.driveId,\n fileName,\n parentNode.id,\n );\n },\n [addFile],\n );\n\n const onDuplicateNode = useCallback(\n async (uiNode: UiNode) => {\n if (!selectedParentNode) return;\n\n if (uiNode.kind === DRIVE) {\n throw new Error('Drive cannot be duplicated');\n }\n\n await copyNode(uiNode, selectedParentNode);\n },\n [copyNode, selectedParentNode],\n );\n\n const onDeleteNode = useCallback(\n (uiNode: UiFileNode | UiFolderNode) => {\n showModal('deleteItem', {\n uiNode,\n onDelete: async closeModal => {\n closeModal();\n\n const i18nKey =\n uiNode.kind === FOLDER\n ? 'notifications.deleteFolderSuccess'\n : 'notifications.fileDeleteSuccess';\n\n const parentNode = getParentNode(uiNode);\n\n await deleteNode(uiNode.driveId, uiNode.id);\n\n setSelectedNode(parentNode);\n\n toast(t(i18nKey), { type: 'connect-deleted' });\n },\n });\n },\n [deleteNode, getParentNode, setSelectedNode, showModal, t],\n );\n\n const onDeleteDrive = useCallback(\n (uiDriveNode: UiDriveNode) => {\n showModal('deleteDriveModal', {\n uiDriveNode,\n onDelete: async closeModal => {\n closeModal();\n await deleteDrive(uiDriveNode.id);\n\n setSelectedNode(driveNodes[0]);\n\n toast(t('notifications.deleteDriveSuccess'), {\n type: 'connect-deleted',\n });\n },\n });\n },\n [deleteDrive, driveNodes, setSelectedNode, showModal, t],\n );\n\n const onAddLocalDrive = useCallback(\n async (data: AddLocalDriveInput) => {\n try {\n const newDrive = await addDrive({\n global: {\n name: data.name,\n id: undefined,\n icon: null,\n slug: null,\n },\n local: {\n availableOffline: data.availableOffline,\n sharingType: data.sharingType.toLowerCase(),\n listeners: [],\n triggers: [],\n },\n });\n\n toast(t('notifications.addDriveSuccess'), {\n type: 'connect-success',\n });\n\n const newDriveNode = await makeUiDriveNode(newDrive);\n\n setSelectedNode(newDriveNode);\n } catch (e) {\n console.error(e);\n }\n },\n [addDrive, makeUiDriveNode, setSelectedNode, t],\n );\n\n const onAddRemoteDrive = useCallback(\n async (data: AddRemoteDriveInput) => {\n try {\n const newDrive = await addRemoteDrive(data.url, {\n sharingType: data.sharingType,\n availableOffline: data.availableOffline,\n listeners: [\n {\n block: true,\n callInfo: {\n data: data.url,\n name: 'switchboard-push',\n transmitterType: 'SwitchboardPush',\n },\n filter: {\n branch: ['main'],\n documentId: ['*'],\n documentType: ['*'],\n scope: ['global'],\n },\n label: 'Switchboard Sync',\n listenerId: '1',\n system: true,\n },\n ],\n triggers: [],\n pullInterval: 3000,\n });\n\n toast(t('notifications.addDriveSuccess'), {\n type: 'connect-success',\n });\n\n const newDriveNode = await makeUiDriveNode(newDrive);\n\n setSelectedNode(newDriveNode);\n } catch (e) {\n console.error(e);\n }\n },\n [addRemoteDrive, makeUiDriveNode, setSelectedNode, t],\n );\n\n const showAddDriveModal = useCallback(\n (groupSharingType: SharingType) => {\n if (groupSharingType === LOCAL) {\n showModal('addLocalDrive', {\n onAddLocalDrive,\n });\n } else {\n showModal('addRemoteDrive', {\n onAddRemoteDrive,\n groupSharingType,\n });\n }\n },\n [onAddLocalDrive, onAddRemoteDrive, showModal],\n );\n\n const onRenameDrive = useCallback(\n async (uiDriveNode: UiDriveNode, newName: string) => {\n await renameDrive(uiDriveNode.id, newName);\n },\n [renameDrive],\n );\n\n const onChangeSharingType = useCallback(\n async (uiDriveNode: UiDriveNode, newSharingType: SharingType) => {\n await setDriveSharingType(uiDriveNode.id, newSharingType);\n },\n [setDriveSharingType],\n );\n\n const onChangeAvailableOffline = useCallback(\n async (uiDriveNode: UiDriveNode, newAvailableOffline: boolean) => {\n await setDriveAvailableOffline(uiDriveNode.id, newAvailableOffline);\n },\n [setDriveAvailableOffline],\n );\n\n const showDriveSettingsModal = useCallback(\n (uiDriveNode: UiDriveNode) => {\n showModal('driveSettings', {\n uiDriveNode,\n onRenameDrive,\n onDeleteDrive,\n onChangeSharingType,\n onChangeAvailableOffline,\n });\n },\n [\n onChangeAvailableOffline,\n onChangeSharingType,\n onDeleteDrive,\n onRenameDrive,\n showModal,\n ],\n );\n\n const onAddAndSelectNewFolder = useCallback(\n async (name: string) => {\n if (!name || !selectedParentNode) return;\n\n const newFolder = await onAddFolder(name, selectedParentNode);\n\n setSelectedNode({\n ...newFolder,\n kind: FOLDER,\n slug: makeNodeSlugFromNodeName(newFolder.name),\n parentFolder: selectedParentNode.id,\n syncStatus: selectedParentNode.syncStatus,\n driveId: selectedParentNode.driveId,\n sharingType: selectedParentNode.sharingType,\n children: [],\n });\n },\n [onAddFolder, selectedParentNode, setSelectedNode],\n );\n\n const onAddTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const url = window.prompt('url') || '';\n\n const pullResponderTrigger = await registerNewPullResponderTrigger(\n uiNodeDriveId,\n url,\n { pullInterval: 6000 },\n );\n await addTrigger(uiNodeDriveId, pullResponderTrigger);\n },\n [addTrigger, registerNewPullResponderTrigger],\n );\n\n const onRemoveTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const triggerId = window.prompt('triggerId:');\n\n if (triggerId) {\n await removeTrigger(uiNodeDriveId, triggerId);\n }\n },\n [removeTrigger],\n );\n\n const onAddInvalidTrigger = useCallback(\n async (uiNodeDriveId: string) => {\n const url = window.prompt('url') || '';\n\n await addTrigger(uiNodeDriveId, {\n id: 'some-invalid-id',\n type: 'PullResponder',\n data: {\n interval: '3000',\n listenerId: 'invalid-listener-id',\n url,\n },\n });\n },\n [addTrigger],\n );\n\n const driveNodesBySharingType = useMemo(\n () =>\n driveNodes.reduce<Record<SharingType, UiDriveNode[]>>(\n (acc, driveNode) => {\n acc[driveNode.sharingType].push(driveNode);\n return acc;\n },\n {\n [PUBLIC]: [],\n [CLOUD]: [],\n [LOCAL]: [],\n },\n ),\n [driveNodes],\n );\n\n return useMemo(\n () => ({\n ...documentDriveServer,\n ...uiNodesContext,\n ...userPermissions,\n ...selectedDocumentDrive,\n ...fileNodeDocument,\n nodeOptions,\n driveNodesBySharingType,\n documentModels,\n onAddFolder,\n onAddFile,\n onCopyNode,\n onMoveNode,\n onRenameNode,\n onDuplicateNode,\n onDeleteNode,\n onDeleteDrive,\n makeUiDriveNodes,\n onAddAndSelectNewFolder,\n showAddDriveModal,\n showDriveSettingsModal,\n openSwitchboardLink,\n onAddTrigger,\n onRemoveTrigger,\n onAddInvalidTrigger,\n getDocumentModel,\n }),\n [\n documentDriveServer,\n uiNodesContext,\n userPermissions,\n selectedDocumentDrive,\n fileNodeDocument,\n nodeOptions,\n driveNodesBySharingType,\n documentModels,\n onAddFolder,\n onAddFile,\n onCopyNode,\n onMoveNode,\n onRenameNode,\n onDuplicateNode,\n onDeleteNode,\n onDeleteDrive,\n makeUiDriveNodes,\n onAddAndSelectNewFolder,\n showAddDriveModal,\n showDriveSettingsModal,\n openSwitchboardLink,\n onAddTrigger,\n onRemoveTrigger,\n onAddInvalidTrigger,\n getDocumentModel,\n ],\n );\n}\n\nexport type TUiNodes = ReturnType<typeof useUiNodes>;\n"],"names":["debounceOperations","callback","timeout","timer","operations","operation","index","op","oldOperation","resolve","reject","documentCacheAtom","atom","singletonFileNodeDocumentAtom","fileNodeDocumentAtom","get","set","newValue","currentValue","documentCache","documentToHash","selectedDocumentAtom","_a","document","fileNodeDocument","useFileNodeDocument","props","selectedNode","selectedDriveNode","openFile","addOperations","onStrandUpdate","fetchReadDocument","setFileNodeDocument","useAtom","isReadMode","driveId","documentId","kind","documentType","selectedDocument","setSelectedDocument","fetchDocument","useCallback","id","useEffect","error","logger","strand","addOperationToSelectedDocument","useMemo","FILE","isSelectedDocument","connectDebug","DriveSections","PUBLIC","CLOUD","LOCAL","getSectionConfig","sharingType","connectConfig","getDriveNodeOptions","options","defaultDriveOptions","DELETE","debugNodeOptions","getFileNodeOptions","defaultFileOptions","getFolderNodeOptions","defaultFolderOptions","getNodeOptions","DRIVE","FOLDER","driveSections","section","sectionConfig","useDocumentDriveById","documentDrives","useDocumentDriveServer","drive","pullResponder","trigger","remoteUrl","isRemoteDrive","LZString","f","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","i","input","res","a","compressed","uncompressed","buf","TotalLen","current_value","result","c","bitsPerChar","getCharFromInt","value","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","ii","length","resetValue","getNextValue","dictionary","enlargeIn","dictSize","numBits","entry","w","bits","resb","maxpower","power","data","module","rwaQuery","accountSnapshot","budgetStatement","getQuery","encodeQuery","query","queryString","getLocalReactorUrl","explorerURLState","getSwitchboardUrl","explorerUrl","openBrowserUrl","url","openUrl","useOpenSwitchboardLink","uiNode","switchboardUrl","useUiNodes","showModal","useModal","t","useTranslation","uiNodesContext","useUiNodesContext","driveNodes","selectedParentNode","setSelectedNode","getParentNode","readModeContext","useReadModeContext","documentDriveServer","addFolder","addFile","renameNode","deleteNode","addDrive","addRemoteDrive","deleteDrive","renameDrive","setDriveAvailableOffline","setDriveSharingType","copyNode","moveNode","getSyncStatus","removeTrigger","addTrigger","registerNewPullResponderTrigger","selectedDocumentDrive","openSwitchboardLink","userPermissions","useUserPermissions","nodeOptions","documentModels","useFilteredDocumentModels","getDocumentModel","useGetDocumentModel","makeUiDriveNode","isReadDrive","name","icon","slug","_sharingType","availableOffline","__sharingType","driveSyncStatus","normalizedDriveSyncStatus","driveNode","nodes","n","node","makeNodeSlugFromNodeName","fileSyncStatus","normalizedFileSyncStatus","parent","SUCCESS","makeUiDriveNodes","onAddFolder","parentNode","onRenameNode","onCopyNode","targetNode","onMoveNode","onAddFile","file","fileName","onDuplicateNode","onDeleteNode","closeModal","i18nKey","toast","onDeleteDrive","uiDriveNode","onAddLocalDrive","newDrive","newDriveNode","e","onAddRemoteDrive","showAddDriveModal","groupSharingType","onRenameDrive","newName","onChangeSharingType","newSharingType","onChangeAvailableOffline","newAvailableOffline","showDriveSettingsModal","onAddAndSelectNewFolder","newFolder","onAddTrigger","uiNodeDriveId","pullResponderTrigger","onRemoveTrigger","triggerId","onAddInvalidTrigger","driveNodesBySharingType","acc"],"mappings":"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","x_google_ignoreList":[3]}
package/dist/index.html CHANGED
@@ -5,9 +5,9 @@
5
5
  "MODE": "InByb2R1Y3Rpb24i",
6
6
  "DEV": "ZmFsc2U=",
7
7
  "PROD": "dHJ1ZQ==",
8
- "APP_VERSION": "IjEuMC4wLXNreS4xODQi",
8
+ "APP_VERSION": "IjEuMC4wLXNreS4xODUi",
9
9
  "REQUIRES_HARD_REFRESH": "dHJ1ZQ==",
10
- "SENTRY_RELEASE": "IjEuMC4wLXNreS4xODQi",
10
+ "SENTRY_RELEASE": "IjEuMC4wLXNreS4xODUi",
11
11
  "BASE_PATH": "Ii8i",
12
12
  "BASE_HREF": "Ii4vIg==",
13
13
  "PH_CONNECT_APP_REQUIRES_HARD_REFRESH": "InRydWUi",
@@ -16,7 +16,7 @@
16
16
  "SENTRY_PROJECT": "IiI=",
17
17
  "PH_CONNECT_STUDIO_MODE": "ImZhbHNlIg==",
18
18
  "PH_CONNECT_ROUTER_BASENAME": "Ii8i",
19
- "PH_CONNECT_DEFAULT_DRIVES_URL": "Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwMS9kL3Bvd2VyaG91c2Ui",
19
+ "PH_CONNECT_DEFAULT_DRIVES_URL": "IiI=",
20
20
  "PH_CONNECT_ENABLED_EDITORS": "Iioi",
21
21
  "PH_CONNECT_DISABLE_ADD_PUBLIC_DRIVES": "ImZhbHNlIg==",
22
22
  "PH_CONNECT_SEARCH_BAR_ENABLED": "ImZhbHNlIg==",
@@ -31,13 +31,13 @@
31
31
  "PH_CONNECT_ARBITRUM_ALLOW_LIST": "IiI=",
32
32
  "PH_CONNECT_RWA_ALLOW_LIST": "IiI=",
33
33
  "PH_CONNECT_HIDE_DOCUMENT_MODEL_SELECTION_SETTINGS": "InRydWUi",
34
- "PH_CONNECT_RENOWN_URL": "Imh0dHBzOi8vd3d3LnJlbm93bi5pZCI=",
34
+ "PH_CONNECT_RENOWN_URL": "Imh0dHBzOi8vYXV0aC5yZW5vd24uaWQi",
35
35
  "PH_CONNECT_RENOWN_NETWORK_ID": "ImVpcDE1NSI=",
36
36
  "PH_CONNECT_RENOWN_CHAIN_ID": "IjEi",
37
37
  "PH_CONNECT_DISABLED_EDITORS": "IiI=",
38
38
  "PH_CONNECT_SENTRY_DSN": "IiI=",
39
39
  "PH_CONNECT_SENTRY_PROJECT": "IiI=",
40
- "PH_CONNECT_SENTRY_ENV": "IiI=",
40
+ "PH_CONNECT_SENTRY_ENV": "InByb2Qi",
41
41
  "PH_CONNECT_SENTRY_TRACING_ENABLED": "ImZhbHNlIg==",
42
42
  "PH_CONNECT_GA_TRACKING_ID": "IiI=",
43
43
  "LOCAL_DOCUMENT_MODELS": "IiI=",
@@ -56,4 +56,4 @@
56
56
  );
57
57
  });
58
58
  window.__VITE_ENVS = env;
59
- </script><script type="module" crossorigin="" src="/assets/main.yZTQnvvE.js"></script></head><body><div id="app"></div></body></html>
59
+ </script><script type="module" crossorigin="" src="/assets/main.AX2O67pt.js"></script></head><body><div id="app"></div></body></html>
@@ -1,2 +1,2 @@
1
- const c=self,i="1.0.0-sky.184",r=!0,l="version-cache",o="app-version";c.addEventListener("install",()=>{c.skipWaiting().catch(console.error)});c.addEventListener("activate",e=>{e.waitUntil(c.clients.claim()),p(i,r).catch(console.error)});function E(e,n){return e.postMessage(n)}async function p(e,n){try{const t=await caches.open(l),s=await t.match(o);let a="";s&&(a=await s.text()),a===""?await t.put(o,new Response(e)):a!==e&&(console.log("Current version:",a),console.log("New version:",e),await t.put(o,new Response(e)),await h(e,n))}catch(t){console.error("Error checking version:",t)}}async function h(e,n){await c.clients.claim(),(await c.clients.matchAll()).forEach(s=>{E(s,{type:"NEW_VERSION_AVAILABLE",version:e,requiresHardRefresh:n})})}
1
+ const c=self,i="1.0.0-sky.185",r=!0,l="version-cache",o="app-version";c.addEventListener("install",()=>{c.skipWaiting().catch(console.error)});c.addEventListener("activate",e=>{e.waitUntil(c.clients.claim()),p(i,r).catch(console.error)});function E(e,n){return e.postMessage(n)}async function p(e,n){try{const t=await caches.open(l),s=await t.match(o);let a="";s&&(a=await s.text()),a===""?await t.put(o,new Response(e)):a!==e&&(console.log("Current version:",a),console.log("New version:",e),await t.put(o,new Response(e)),await h(e,n))}catch(t){console.error("Error checking version:",t)}}async function h(e,n){await c.clients.claim(),(await c.clients.matchAll()).forEach(s=>{E(s,{type:"NEW_VERSION_AVAILABLE",version:e,requiresHardRefresh:n})})}
2
2
  //# sourceMappingURL=service-worker.js.map
package/dist/swEnv.js CHANGED
@@ -10,9 +10,9 @@ const envWithValuesInBase64 = {
10
10
  "MODE": "InByb2R1Y3Rpb24i",
11
11
  "DEV": "ZmFsc2U=",
12
12
  "PROD": "dHJ1ZQ==",
13
- "APP_VERSION": "IjEuMC4wLXNreS4xODQi",
13
+ "APP_VERSION": "IjEuMC4wLXNreS4xODUi",
14
14
  "REQUIRES_HARD_REFRESH": "dHJ1ZQ==",
15
- "SENTRY_RELEASE": "IjEuMC4wLXNreS4xODQi",
15
+ "SENTRY_RELEASE": "IjEuMC4wLXNreS4xODUi",
16
16
  "BASE_PATH": "Ii8i",
17
17
  "BASE_HREF": "Ii4vIg==",
18
18
  "PH_CONNECT_APP_REQUIRES_HARD_REFRESH": "InRydWUi",
@@ -21,7 +21,7 @@ const envWithValuesInBase64 = {
21
21
  "SENTRY_PROJECT": "IiI=",
22
22
  "PH_CONNECT_STUDIO_MODE": "ImZhbHNlIg==",
23
23
  "PH_CONNECT_ROUTER_BASENAME": "Ii8i",
24
- "PH_CONNECT_DEFAULT_DRIVES_URL": "Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwMS9kL3Bvd2VyaG91c2Ui",
24
+ "PH_CONNECT_DEFAULT_DRIVES_URL": "IiI=",
25
25
  "PH_CONNECT_ENABLED_EDITORS": "Iioi",
26
26
  "PH_CONNECT_DISABLE_ADD_PUBLIC_DRIVES": "ImZhbHNlIg==",
27
27
  "PH_CONNECT_SEARCH_BAR_ENABLED": "ImZhbHNlIg==",
@@ -36,13 +36,13 @@ const envWithValuesInBase64 = {
36
36
  "PH_CONNECT_ARBITRUM_ALLOW_LIST": "IiI=",
37
37
  "PH_CONNECT_RWA_ALLOW_LIST": "IiI=",
38
38
  "PH_CONNECT_HIDE_DOCUMENT_MODEL_SELECTION_SETTINGS": "InRydWUi",
39
- "PH_CONNECT_RENOWN_URL": "Imh0dHBzOi8vd3d3LnJlbm93bi5pZCI=",
39
+ "PH_CONNECT_RENOWN_URL": "Imh0dHBzOi8vYXV0aC5yZW5vd24uaWQi",
40
40
  "PH_CONNECT_RENOWN_NETWORK_ID": "ImVpcDE1NSI=",
41
41
  "PH_CONNECT_RENOWN_CHAIN_ID": "IjEi",
42
42
  "PH_CONNECT_DISABLED_EDITORS": "IiI=",
43
43
  "PH_CONNECT_SENTRY_DSN": "IiI=",
44
44
  "PH_CONNECT_SENTRY_PROJECT": "IiI=",
45
- "PH_CONNECT_SENTRY_ENV": "IiI=",
45
+ "PH_CONNECT_SENTRY_ENV": "InByb2Qi",
46
46
  "PH_CONNECT_SENTRY_TRACING_ENABLED": "ImZhbHNlIg==",
47
47
  "PH_CONNECT_GA_TRACKING_ID": "IiI=",
48
48
  "LOCAL_DOCUMENT_MODELS": "IiI=",
package/dist/vite-envs.sh CHANGED
@@ -11,7 +11,7 @@ replaceAll() {
11
11
  }'
12
12
  }
13
13
 
14
- html=$(echo "PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0iVVRGLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj48dGl0bGU+UG93ZXJob3VzZSBDb25uZWN0PC90aXRsZT48YmFzZSBocmVmPSIvIj48IS0tIHZpdGUtZW52cyBzY3JpcHQgcGxhY2Vob2xkZXIgeEtzUG1MczMwc3dLc2RJc1Z4IC0tPjwvaGVhZD48Ym9keT4lVklURV9JTVBPUlRfUkVBQ1RfU0NSSVBUJTxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbj0iIiBzcmM9Ii9hc3NldHMvbWFpbi55WlRRbnZ2RS5qcyI+PC9zY3JpcHQ+PGRpdiBpZD0iYXBwIj48L2Rpdj48L2JvZHk+PC9odG1sPg==" | base64 -d)
14
+ html=$(echo "PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0iVVRGLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj48dGl0bGU+UG93ZXJob3VzZSBDb25uZWN0PC90aXRsZT48YmFzZSBocmVmPSIvIj48IS0tIHZpdGUtZW52cyBzY3JpcHQgcGxhY2Vob2xkZXIgeEtzUG1MczMwc3dLc2RJc1Z4IC0tPjwvaGVhZD48Ym9keT4lVklURV9JTVBPUlRfUkVBQ1RfU0NSSVBUJTxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbj0iIiBzcmM9Ii9hc3NldHMvbWFpbi5BWDJPNjdwdC5qcyI+PC9zY3JpcHQ+PGRpdiBpZD0iYXBwIj48L2Rpdj48L2JvZHk+PC9odG1sPg==" | base64 -d)
15
15
 
16
16
  VITE_IMPORT_REACT_SCRIPT_base64="eEFwV2RSclg5OWtQclZnZ0UiIgo="
17
17
  VITE_IMPORT_REACT_SCRIPT=$(echo "Cg==" | base64 -d)
@@ -23,12 +23,12 @@ DEV_base64="eEFwV2RSclg5OWtQclZnZ0VmYWxzZQo="
23
23
  DEV=$(echo "ZmFsc2UK" | base64 -d)
24
24
  PROD_base64="eEFwV2RSclg5OWtQclZnZ0V0cnVlCg=="
25
25
  PROD=$(echo "dHJ1ZQo=" | base64 -d)
26
- APP_VERSION_base64="eEFwV2RSclg5OWtQclZnZ0UiMS4wLjAtc2t5LjE4NCIK"
27
- APP_VERSION=$(echo "MS4wLjAtc2t5LjE4NAo=" | base64 -d)
26
+ APP_VERSION_base64="eEFwV2RSclg5OWtQclZnZ0UiMS4wLjAtc2t5LjE4NSIK"
27
+ APP_VERSION=$(echo "MS4wLjAtc2t5LjE4NQo=" | base64 -d)
28
28
  REQUIRES_HARD_REFRESH_base64="eEFwV2RSclg5OWtQclZnZ0V0cnVlCg=="
29
29
  REQUIRES_HARD_REFRESH=$(echo "dHJ1ZQo=" | base64 -d)
30
- SENTRY_RELEASE_base64="eEFwV2RSclg5OWtQclZnZ0UiMS4wLjAtc2t5LjE4NCIK"
31
- SENTRY_RELEASE=$(echo "MS4wLjAtc2t5LjE4NAo=" | base64 -d)
30
+ SENTRY_RELEASE_base64="eEFwV2RSclg5OWtQclZnZ0UiMS4wLjAtc2t5LjE4NSIK"
31
+ SENTRY_RELEASE=$(echo "MS4wLjAtc2t5LjE4NQo=" | base64 -d)
32
32
  if printenv BASE_PATH &> /dev/null; then
33
33
  BASE_PATH_base64=$(printenv BASE_PATH | base64)
34
34
  else
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@powerhousedao/connect",
3
3
  "productName": "Powerhouse-Connect",
4
- "version": "1.0.0-sky.184",
4
+ "version": "1.0.0-sky.185",
5
5
  "description": "Powerhouse Connect",
6
6
  "main": "./dist/studio/index.js",
7
7
  "types": "./dist/studio/index.d.ts",
@@ -49,7 +49,7 @@
49
49
  "build:service-worker": "tsc --build ./tsconfig.sw.json"
50
50
  },
51
51
  "dependencies": {
52
- "@powerhousedao/atlas-feedback-issues": "^1.0.11",
52
+ "@powerhousedao/atlas-feedback-issues": "^1.0.14",
53
53
  "@powerhousedao/mips-parser": "^2.2.1",
54
54
  "commander": "^12.1.0",
55
55
  "vite": "^5.4.8",