@powerhousedao/powerhouse-vetra-packages 6.2.2-dev.82 → 6.2.2-dev.84
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.
- package/dist/browser/{connect-Bpm1qc2o.js → connect-CZxjNDFs.js} +14 -5
- package/dist/browser/{connect-Bpm1qc2o.js.map → connect-CZxjNDFs.js.map} +1 -1
- package/dist/browser/{dist-DzuQgnp9.js → dist-CnNpgEVe.js} +134 -4
- package/dist/browser/dist-CnNpgEVe.js.map +1 -0
- package/dist/browser/{document-drive-BVYCdu_5.js → document-drive-ZQzPQfEL.js} +12 -5
- package/dist/browser/{document-drive-BVYCdu_5.js.map → document-drive-ZQzPQfEL.js.map} +1 -1
- package/dist/browser/document-models/index.js +1 -1
- package/dist/browser/{editor-BhVC9JGB.js → editor-Dg_2AIoc.js} +5 -5
- package/dist/browser/{editor-BhVC9JGB.js.map → editor-Dg_2AIoc.js.map} +1 -1
- package/dist/browser/{editor-Cr2SUFnl.js → editor-TmNqs_3q.js} +6 -6
- package/dist/browser/{editor-Cr2SUFnl.js.map → editor-TmNqs_3q.js.map} +1 -1
- package/dist/browser/editors/document-model-editor/module.js +1 -1
- package/dist/browser/editors/generic-drive-explorer/index.js +4 -4
- package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
- package/dist/browser/{folder-view-EDdZl1fJ.js → folder-view-B7P3uF6d.js} +3 -3
- package/dist/browser/{folder-view-EDdZl1fJ.js.map → folder-view-B7P3uF6d.js.map} +1 -1
- package/dist/browser/{graphql-editor-BjkthIT9.js → graphql-editor-tFWpwJhB.js} +3 -3
- package/dist/browser/{graphql-editor-BjkthIT9.js.map → graphql-editor-tFWpwJhB.js.map} +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/{json-editor-nLgiw_aY.js → json-editor-DczBqrwD.js} +3 -3
- package/dist/browser/{json-editor-nLgiw_aY.js.map → json-editor-DczBqrwD.js.map} +1 -1
- package/dist/browser/lib-ewnRj2dJ.js.map +1 -1
- package/dist/browser/{state-schemas-IiwC01DT.js → state-schemas-inzuDitu.js} +3 -3
- package/dist/browser/{state-schemas-IiwC01DT.js.map → state-schemas-inzuDitu.js.map} +1 -1
- package/dist/node/{connect-DzMvrvtH.mjs → connect-Bfdoq4eL.mjs} +14 -5
- package/dist/node/{connect-DzMvrvtH.mjs.map → connect-Bfdoq4eL.mjs.map} +1 -1
- package/dist/node/{dist-CWqCyPep.mjs → dist-BDq_3xzc.mjs} +134 -4
- package/dist/node/dist-BDq_3xzc.mjs.map +1 -0
- package/dist/node/{document-drive-lf_0SP-H.mjs → document-drive-D1NMjQQc.mjs} +12 -5
- package/dist/node/{document-drive-lf_0SP-H.mjs.map → document-drive-D1NMjQQc.mjs.map} +1 -1
- package/dist/node/document-models/index.mjs +1 -1
- package/dist/node/{editor-DSlBxXEG.mjs → editor-DQvgS2LK.mjs} +5 -5
- package/dist/node/{editor-DSlBxXEG.mjs.map → editor-DQvgS2LK.mjs.map} +1 -1
- package/dist/node/{editor-BHFgv5Sn.mjs → editor-tTT_T9Fq.mjs} +6 -6
- package/dist/node/{editor-BHFgv5Sn.mjs.map → editor-tTT_T9Fq.mjs.map} +1 -1
- package/dist/node/editors/document-model-editor/module.mjs +1 -1
- package/dist/node/editors/generic-drive-explorer/index.mjs +4 -4
- package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
- package/dist/node/{folder-view-BU4jkZT4.mjs → folder-view-Bjnpy_l9.mjs} +3 -3
- package/dist/node/{folder-view-BU4jkZT4.mjs.map → folder-view-Bjnpy_l9.mjs.map} +1 -1
- package/dist/node/{graphql-editor-CScEOmFM.mjs → graphql-editor-DK16Va7B.mjs} +3 -3
- package/dist/node/{graphql-editor-CScEOmFM.mjs.map → graphql-editor-DK16Va7B.mjs.map} +1 -1
- package/dist/node/index.mjs +1 -1
- package/dist/node/{json-editor-BkdBLGDx.mjs → json-editor-CUxDXYvs.mjs} +3 -3
- package/dist/node/{json-editor-BkdBLGDx.mjs.map → json-editor-CUxDXYvs.mjs.map} +1 -1
- package/dist/node/main-B1tRsYOp.mjs.map +1 -1
- package/dist/node/{state-schemas-BCTGWiNB.mjs → state-schemas-CbnYhOyM.mjs} +3 -3
- package/dist/node/{state-schemas-BCTGWiNB.mjs.map → state-schemas-CbnYhOyM.mjs.map} +1 -1
- package/package.json +7 -7
- package/dist/browser/dist-DzuQgnp9.js.map +0 -1
- package/dist/node/dist-CWqCyPep.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { D as __commonJSMin, M as __toESM, t as capitalCase } from "./dist-DT7jI9ol.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { A as createPresignedHeader, D as buildSignedAction, E as baseSaveToFileHandle, G as replayDocumentVersioned, N as createZip, T as baseLoadFromInputVersioned, _ as UnsupportedDocumentModelVersionError, a as getDescendants, c as isFileNode, ct as validateInitialState, d as moveNode, dt as zipEntries, et as setName, f as updateNode, ft as generateId, i as generateNodesCopy, l as isFolderNode, lt as validateModules, m as logger, n as copyNode, o as getNextCopyNumber, s as handleTargetNameCollisions, t as addFolder, ut as validateStateSchemaName, w as baseLoadFromInput, x as assertAuthPreservedOnDuplicate } from "./document-drive-D1NMjQQc.mjs";
|
|
3
3
|
import { a as DriveCollectionId, i as SyncStatus, o as ModuleNotFoundError, t as require_main } from "./main-B1tRsYOp.mjs";
|
|
4
4
|
import { t as require_graphql } from "./graphql-BfAoPeWM.mjs";
|
|
5
5
|
import { createContext, use, useCallback, useContext, useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
@@ -2058,7 +2058,7 @@ var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
|
2058
2058
|
})(MessageType || {});
|
|
2059
2059
|
Error;
|
|
2060
2060
|
//#endregion
|
|
2061
|
-
//#region ../reactor-browser/dist/document-operations-
|
|
2061
|
+
//#region ../reactor-browser/dist/document-operations-Bo1dPDgq.js
|
|
2062
2062
|
const modalEventFunctions = makePHEventFunctions("modal");
|
|
2063
2063
|
modalEventFunctions.useValue;
|
|
2064
2064
|
/** Sets the current modal */
|
|
@@ -3852,6 +3852,117 @@ var import_lz_string = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((
|
|
|
3852
3852
|
return LZString;
|
|
3853
3853
|
});
|
|
3854
3854
|
})))(), 1);
|
|
3855
|
+
const sanitize = (segment) => segment.replace(/\//g, "-");
|
|
3856
|
+
/**
|
|
3857
|
+
* Name segments from the exported folder (exclusive) down to `node`
|
|
3858
|
+
* (inclusive), in top-down order. `root === undefined` means the drive root:
|
|
3859
|
+
* all ancestors. A node that IS the exported folder yields no segments.
|
|
3860
|
+
*/
|
|
3861
|
+
function segmentsBelow(root, node, allNodes) {
|
|
3862
|
+
const segments = [];
|
|
3863
|
+
let current = node;
|
|
3864
|
+
while (current && current.id !== root?.id) {
|
|
3865
|
+
segments.push(sanitize(current.name));
|
|
3866
|
+
const parentId = current.parentFolder;
|
|
3867
|
+
current = parentId ? allNodes.find((n) => n.id === parentId) : void 0;
|
|
3868
|
+
}
|
|
3869
|
+
return segments.reverse();
|
|
3870
|
+
}
|
|
3871
|
+
/**
|
|
3872
|
+
* Assemble the archive zip for a folder (or the whole drive when
|
|
3873
|
+
* `folderNode` is undefined). Every folder in the subtree becomes a
|
|
3874
|
+
* directory entry (empty folders survive); every file becomes a standard
|
|
3875
|
+
* single-document zip named after the node (drive naming convention:
|
|
3876
|
+
* `${name}.${extension}.phd`, ` (copy) N` on a same-folder collision).
|
|
3877
|
+
*
|
|
3878
|
+
* `fetchDocument` must return the document WITH its full operations and
|
|
3879
|
+
* initialState (see downloadFolderZip).
|
|
3880
|
+
*/
|
|
3881
|
+
async function buildFolderZip(drive, folderNode, fetchDocument, onProgress) {
|
|
3882
|
+
const allNodes = drive.state.global.nodes;
|
|
3883
|
+
const topName = sanitize(folderNode?.name ?? (drive.state.global.name || drive.header.name));
|
|
3884
|
+
const subtree = folderNode ? [folderNode, ...getDescendants(folderNode, allNodes)] : allNodes;
|
|
3885
|
+
const entries = { [topName + "/"]: new Uint8Array(0) };
|
|
3886
|
+
for (const node of subtree) {
|
|
3887
|
+
if (!isFolderNode(node)) continue;
|
|
3888
|
+
const dir = [topName, ...segmentsBelow(folderNode, node, allNodes)].join("/");
|
|
3889
|
+
entries[dir + "/"] = new Uint8Array(0);
|
|
3890
|
+
}
|
|
3891
|
+
const files = subtree.filter(isFileNode);
|
|
3892
|
+
const failed = [];
|
|
3893
|
+
const usedNamesByDir = /* @__PURE__ */ new Map();
|
|
3894
|
+
let done = 0;
|
|
3895
|
+
for (const node of files) try {
|
|
3896
|
+
const doc = await fetchDocument(node.id);
|
|
3897
|
+
const extension = await getDocumentExtension(doc);
|
|
3898
|
+
const parent = node.parentFolder ? allNodes.find((n) => n.id === node.parentFolder) : void 0;
|
|
3899
|
+
const dir = [topName, ...parent ? segmentsBelow(folderNode, parent, allNodes) : []].join("/");
|
|
3900
|
+
let usedNames = usedNamesByDir.get(dir);
|
|
3901
|
+
if (!usedNames) {
|
|
3902
|
+
usedNames = /* @__PURE__ */ new Set();
|
|
3903
|
+
usedNamesByDir.set(dir, usedNames);
|
|
3904
|
+
}
|
|
3905
|
+
const base = sanitize(node.name);
|
|
3906
|
+
let candidate = base;
|
|
3907
|
+
let count = getNextCopyNumber([...usedNames], base);
|
|
3908
|
+
while (usedNames.has(candidate)) {
|
|
3909
|
+
candidate = `${base} (copy) ${count}`;
|
|
3910
|
+
count += 1;
|
|
3911
|
+
}
|
|
3912
|
+
usedNames.add(candidate);
|
|
3913
|
+
const leaf = extension ? `${candidate}.${extension}.phd` : `${candidate}.phd`;
|
|
3914
|
+
entries[`${dir}/${leaf}`] = await createZip(doc);
|
|
3915
|
+
} catch {
|
|
3916
|
+
failed.push(node.name);
|
|
3917
|
+
} finally {
|
|
3918
|
+
done += 1;
|
|
3919
|
+
onProgress?.(done, files.length);
|
|
3920
|
+
}
|
|
3921
|
+
return {
|
|
3922
|
+
zip: await zipEntries(entries),
|
|
3923
|
+
archiveName: `${topName}.zip`,
|
|
3924
|
+
entryCount: files.length - failed.length,
|
|
3925
|
+
failed
|
|
3926
|
+
};
|
|
3927
|
+
}
|
|
3928
|
+
/**
|
|
3929
|
+
* Export a folder (or whole drive) to disk: fetches every document with its
|
|
3930
|
+
* full operation history, builds the archive, and saves it via
|
|
3931
|
+
* showSaveFilePicker (fallback: blob download), mirroring exportFile.
|
|
3932
|
+
*/
|
|
3933
|
+
async function downloadFolderZip(drive, folderNode, onProgress) {
|
|
3934
|
+
const reactorClient = window.ph?.reactorClient;
|
|
3935
|
+
if (!reactorClient) throw new Error("ReactorClient not initialized");
|
|
3936
|
+
const result = await buildFolderZip(drive, folderNode, async (id) => {
|
|
3937
|
+
const doc = await reactorClient.get(id);
|
|
3938
|
+
const operations = await fetchDocumentOperations(reactorClient, doc);
|
|
3939
|
+
const initialState = extractInitialState(operations["document"] ?? []);
|
|
3940
|
+
return {
|
|
3941
|
+
...doc,
|
|
3942
|
+
operations,
|
|
3943
|
+
initialState
|
|
3944
|
+
};
|
|
3945
|
+
}, onProgress);
|
|
3946
|
+
if (!window.showSaveFilePicker) {
|
|
3947
|
+
const blob = new Blob([new Uint8Array(result.zip)], { type: "application/zip" });
|
|
3948
|
+
const link = window.document.createElement("a");
|
|
3949
|
+
link.style.display = "none";
|
|
3950
|
+
link.href = URL.createObjectURL(blob);
|
|
3951
|
+
link.download = result.archiveName;
|
|
3952
|
+
window.document.body.appendChild(link);
|
|
3953
|
+
link.click();
|
|
3954
|
+
window.document.body.removeChild(link);
|
|
3955
|
+
return result;
|
|
3956
|
+
}
|
|
3957
|
+
try {
|
|
3958
|
+
const writable = await (await window.showSaveFilePicker({ suggestedName: result.archiveName })).createWritable();
|
|
3959
|
+
await writable.write(new Uint8Array(result.zip));
|
|
3960
|
+
await writable.close();
|
|
3961
|
+
} catch (e) {
|
|
3962
|
+
if (!(e instanceof DOMException && e.name === "AbortError")) throw e;
|
|
3963
|
+
}
|
|
3964
|
+
return result;
|
|
3965
|
+
}
|
|
3855
3966
|
/** Document types that represent a "drive": a container of nodes. */
|
|
3856
3967
|
const DRIVE_DOCUMENT_TYPES = ["powerhouse/document-drive", "powerhouse/reactor-drive"];
|
|
3857
3968
|
function useAllowedDocumentModelModules() {
|
|
@@ -4029,6 +4140,25 @@ function useDownloadDocument(id) {
|
|
|
4029
4140
|
}
|
|
4030
4141
|
};
|
|
4031
4142
|
}
|
|
4143
|
+
/**
|
|
4144
|
+
* Downloads the selected drive's folder (or the whole drive when no folder
|
|
4145
|
+
* is given) as a single zip archive mirroring the folder tree.
|
|
4146
|
+
*/
|
|
4147
|
+
function useDownloadFolder(folderNode) {
|
|
4148
|
+
const [selectedDrive] = useSelectedDriveSafe();
|
|
4149
|
+
const toast = usePHToast();
|
|
4150
|
+
return async () => {
|
|
4151
|
+
if (!selectedDrive) return;
|
|
4152
|
+
const name = folderNode?.name ?? selectedDrive.header.name;
|
|
4153
|
+
toast?.(`Downloading "${name}"…`);
|
|
4154
|
+
try {
|
|
4155
|
+
const { entryCount, failed } = await downloadFolderZip(selectedDrive, folderNode);
|
|
4156
|
+
toast?.(failed.length ? `Downloaded ${entryCount} files (${failed.length} failed)` : `Downloaded ${entryCount} files`);
|
|
4157
|
+
} catch (error) {
|
|
4158
|
+
toast?.(`Failed to download "${name}": ${error.message}`);
|
|
4159
|
+
}
|
|
4160
|
+
};
|
|
4161
|
+
}
|
|
4032
4162
|
/** An editor is a drive "app" if it targets any supported drive document type. */
|
|
4033
4163
|
function isDriveEditor(module) {
|
|
4034
4164
|
const driveTypes = DRIVE_DOCUMENT_TYPES;
|
|
@@ -4375,6 +4505,6 @@ function createDebouncedRefreshReactorDataClient(debounceDelayMs = DEFAULT_DEBOU
|
|
|
4375
4505
|
createDebouncedRefreshReactorData();
|
|
4376
4506
|
createDebouncedRefreshReactorDataClient();
|
|
4377
4507
|
//#endregion
|
|
4378
|
-
export {
|
|
4508
|
+
export { useDropNode as A, setSelectedNode as B, addDocument as C, showRevisionHistory as D, showPHModal as E, t$2 as F, useSelectedDriveSafe as H, t$5 as I, isFileNodeKind as L, useStudioMode as M, e$1 as N, useDisabledEditors as O, e$4 as P, isFolderNodeKind as R, useSelectedDocumentSafe as S, showDeleteNodeModal as T, useDocumentById as U, useSelectedDriveId as V, useSetPHAppConfig as _, useDownloadDocument as a, useUserPermissions as b, useEditorModulesForDocumentType as c, useNodeById as d, useNodeParentFolderById as f, useSelectedNodePath as g, useSelectedFolder as h, useDocumentVersionStatus as i, usePHToast as j, useDragNode as k, useGetSwitchboardLink as l, useParentFolderForSelectedNode as m, preloadEditorModule as n, useDownloadFolder as o, useNodesInSelectedDriveOrFolder as p, useAllowedDocumentModelModules as r, useEditorModules as s, getSyncStatusSync as t, useNodeActions as u, useSetPHDocumentEditorConfig as v, addFolder$1 as w, useSelectedDocumentOfType as x, useTheme as y, setSelectedDrive as z };
|
|
4379
4509
|
|
|
4380
|
-
//# sourceMappingURL=dist-
|
|
4510
|
+
//# sourceMappingURL=dist-BDq_3xzc.mjs.map
|