@powerhousedao/network-admin 0.0.17 → 0.0.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/DriveExplorer.tsx"],"names":[],"mappings":"AA4CA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,2CAknBvC"}
1
+ {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/DriveExplorer.tsx"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,2CAigBvC"}
@@ -1,8 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, CreateDocumentModal, useDrop, } from "@powerhousedao/design-system";
2
+ import { Button, CreateDocumentModal, } from "@powerhousedao/design-system";
3
3
  import { Sidebar, SidebarProvider, } from "@powerhousedao/document-engineering";
4
- import { addDocument, setSelectedNode, useAllFolderNodes, useDocumentModelModules, useDriveContext, useDriveSharingType, useEditorModules, useFileChildNodes, useSelectedDrive, useSelectedFolder, useSelectedNodePath, useUserPermissions, useAllDocuments, dispatchActions, useSelectedDocument, } from "@powerhousedao/reactor-browser";
5
- import { twMerge } from "tailwind-merge";
4
+ import { addDocument, setSelectedNode, useAllFolderNodes, useFileChildNodes, useSelectedDrive, useSelectedFolder, dispatchActions, useSelectedDocument, useSelectedDriveDocuments, renameNode, showDeleteNodeModal, useSelectedDriveId, } from "@powerhousedao/reactor-browser";
6
5
  import { useCallback, useRef, useState, useMemo, useEffect } from "react";
7
6
  import { EditorContainer } from "./EditorContainer.js";
8
7
  import { editWorkstream } from "../../../document-models/workstream/gen/creators.js";
@@ -18,20 +17,12 @@ export function DriveExplorer(props) {
18
17
  const [selectedRootNode, setSelectedRootNode] = useState("workstreams");
19
18
  const [modalDocumentType, setModalDocumentType] = useState("powerhouse/workstream");
20
19
  const selectedDocumentModel = useRef(null);
21
- const editorModules = useEditorModules();
22
- // Track the last created folder for drag and drop targeting
23
- const [lastCreatedFolder, setLastCreatedFolder] = useState(undefined);
24
- // === DRIVE CONTEXT HOOKS ===
25
- // Core drive operations and document models
26
- const { onAddFile, onAddFolder, onCopyNode, onDuplicateNode, onMoveNode, onRenameNode, showDeleteNodeModal, } = useDriveContext();
27
- const { isAllowedToCreateDocuments } = useUserPermissions();
28
20
  // === STATE MANAGEMENT HOOKS ===
29
21
  // Core state hooks for drive navigation
30
22
  const [selectedDrive] = useSelectedDrive(); // Currently selected drive
31
23
  const selectedFolder = useSelectedFolder(); // Currently selected folder
32
- const selectedNodePath = useSelectedNodePath();
33
- const sharingType = useDriveSharingType(selectedDrive?.header.id);
34
- const allDocuments = useAllDocuments();
24
+ const allDocuments = useSelectedDriveDocuments();
25
+ const selectedDriveId = useSelectedDriveId();
35
26
  // Listen to global selected document state (for external editors like Scope of Work)
36
27
  const [globalSelectedDocument] = useSelectedDocument();
37
28
  // All folders for the sidebar tree view
@@ -52,41 +43,13 @@ export function DriveExplorer(props) {
52
43
  // Check if current active document is a Scope of Work (should show in full view)
53
44
  const activeDoc = allDocuments?.find((doc) => doc.header.id === activeDocumentId);
54
45
  const isScopeOfWorkFullView = activeDoc?.header.documentType === "powerhouse/scopeofwork";
55
- // Find the folder containing the most recent workstream document
56
- const getMostRecentWorkstreamFolder = useCallback(() => {
57
- const workstreamFiles = fileChildren.filter((file) => file.documentType === "powerhouse/workstream");
58
- if (workstreamFiles.length === 0)
59
- return undefined;
60
- // Sort by creation time (assuming newer files have higher IDs or we can use a different method)
61
- const mostRecentWorkstream = workstreamFiles[workstreamFiles.length - 1];
62
- // Find the folder that contains this workstream
63
- if (mostRecentWorkstream.parentFolder) {
64
- return allFolders.find((folder) => folder.id === mostRecentWorkstream.parentFolder);
46
+ // rename node
47
+ const onRenameNode = async (nodeId, newName) => {
48
+ const renamedNode = await renameNode(selectedDriveId || "", nodeId, newName);
49
+ if (renamedNode) {
50
+ console.log("Renamed node", renamedNode);
65
51
  }
66
- return undefined;
67
- }, [fileChildren, allFolders]);
68
- // === DROP HOOKS ===
69
- const mostRecentWorkstreamFolder = getMostRecentWorkstreamFolder();
70
- const dropTargetNode = lastCreatedFolder ||
71
- mostRecentWorkstreamFolder ||
72
- selectedFolder ||
73
- undefined;
74
- // Create a custom onAddFile wrapper that ensures the correct folder is used
75
- const onAddFileWithTarget = useCallback((file, targetFolder) => {
76
- console.log("onAddFileWithTarget called with:", {
77
- file,
78
- targetFolder,
79
- dropTargetNode,
80
- });
81
- // Use the dropTargetNode as the folder, not the targetFolder parameter
82
- return onAddFile(file, dropTargetNode);
83
- }, [onAddFile, dropTargetNode]);
84
- const { isDropTarget, dropProps } = useDrop({
85
- node: dropTargetNode,
86
- onAddFile: onAddFileWithTarget,
87
- onCopyNode,
88
- onMoveNode,
89
- });
52
+ };
90
53
  // check if workstream doc is created, set isWorkstreamCreated to true
91
54
  const isWorkstreamCreated = networkAdminDocuments?.some((doc) => doc.header.documentType === "powerhouse/workstream") || false;
92
55
  //check if network profile doc is created, set isNetworkProfileCreated to true
@@ -141,8 +104,6 @@ export function DriveExplorer(props) {
141
104
  // Handle sidebar node selection
142
105
  const handleActiveNodeChange = useCallback((nodeId) => {
143
106
  console.log("nodeId", nodeId);
144
- // Clear the last created folder when navigating to a different node
145
- setLastCreatedFolder(undefined);
146
107
  // Find the node by ID
147
108
  const findNodeById = (nodes, id) => {
148
109
  for (const node of nodes) {
@@ -229,7 +190,7 @@ export function DriveExplorer(props) {
229
190
  if (fileNode) {
230
191
  setSelectedNode(fileNode);
231
192
  }
232
- }, className: "px-3 py-1.5 bg-blue-500 text-white rounded text-xs font-medium hover:bg-blue-600 transition-colors whitespace-nowrap", children: "Open" }), _jsx("button", { onClick: () => {
193
+ }, className: "px-3 py-1.5 bg-blue-500 text-white rounded text-xs font-medium hover:bg-blue-600 transition-colors whitespace-nowrap", children: "Open" }), _jsx("button", { onClick: async () => {
233
194
  if (!fileNode || !fileNode.id)
234
195
  return;
235
196
  const newName = prompt("Enter new name:", document.header.name || "");
@@ -237,15 +198,15 @@ export function DriveExplorer(props) {
237
198
  newName.trim() &&
238
199
  newName !== document.header.name) {
239
200
  try {
240
- onRenameNode(newName.trim(), fileNode);
201
+ await onRenameNode(fileNode.id || "", newName.trim());
241
202
  }
242
203
  catch (error) {
243
- alert("Failed to rename document. Please try again.");
204
+ console.error("Failed to rename document", error);
244
205
  }
245
206
  }
246
207
  }, className: "px-3 py-1.5 bg-yellow-500 text-white rounded text-xs font-medium hover:bg-yellow-600 transition-colors whitespace-nowrap", children: "Edit" }), _jsx("button", { onClick: () => {
247
208
  if (fileNode) {
248
- showDeleteNodeModal(fileNode);
209
+ showDeleteNodeModal(fileNode.id || "");
249
210
  }
250
211
  }, className: "px-3 py-1.5 bg-red-500 text-white rounded text-xs font-medium hover:bg-red-600 transition-colors whitespace-nowrap", children: "Delete" })] }) })] }, document.header.id));
251
212
  }) })] }) })] }))] }) }));
@@ -253,26 +214,6 @@ export function DriveExplorer(props) {
253
214
  return _jsxs("div", { children: ["Unknown node type: ", nodeType] });
254
215
  }
255
216
  };
256
- // Handle folder creation with optional name parameter
257
- const handleCreateFolder = useCallback(async (folderName) => {
258
- let name = folderName;
259
- // If no name provided, prompt for it (for manual folder creation)
260
- if (!name) {
261
- const promptResult = prompt("Enter folder name:");
262
- name = promptResult || undefined;
263
- }
264
- if (name?.trim()) {
265
- try {
266
- const createdFolder = await onAddFolder(name.trim(), selectedFolder);
267
- // Track the created folder for drag and drop targeting
268
- console.log("Created manual folder:", createdFolder);
269
- setLastCreatedFolder(createdFolder);
270
- }
271
- catch (error) {
272
- console.error("Failed to create folder:", error);
273
- }
274
- }
275
- }, [onAddFolder, selectedFolder]);
276
217
  // Handle document creation from modal
277
218
  const onCreateDocument = useCallback(async (fileName) => {
278
219
  setOpenModal(false);
@@ -315,18 +256,6 @@ export function DriveExplorer(props) {
315
256
  selectedFolder?.id,
316
257
  modalDocumentType,
317
258
  ]);
318
- // Filter available document types here if needed
319
- const documentModelModules = useDocumentModelModules();
320
- // Get active document and its editor components
321
- const activeDocument = activeDocumentId
322
- ? fileChildren.find((file) => file.id === activeDocumentId)
323
- : undefined;
324
- const documentModelModule = activeDocument
325
- ? documentModelModules?.find((m) => m.documentModel.id === activeDocument.documentType)
326
- : null;
327
- const editorModule = activeDocument
328
- ? editorModules?.find((e) => e.documentTypes.includes(activeDocument.documentType))
329
- : null;
330
259
  // === RENDER ===
331
260
  return (_jsx(SidebarProvider, { nodes: sidebarNodes, children: isScopeOfWorkFullView && activeDocumentId ? (_jsx("div", { className: "h-full w-full", children: _jsx(EditorContainer, { handleClose: () => {
332
261
  setActiveDocumentId(undefined);
@@ -338,5 +267,5 @@ export function DriveExplorer(props) {
338
267
  `, nodes: sidebarNodes, activeNodeId: selectedFolder?.id || activeDocumentId, onActiveNodeChange: (node) => handleActiveNodeChange(node.id), sidebarTitle: "Network Admin", showSearchBar: true, allowPinning: true, resizable: true, initialWidth: 300, maxWidth: 500, enableMacros: 2, handleOnTitleClick: () => {
339
268
  setActiveDocumentId(undefined);
340
269
  setSelectedRootNode("workstreams");
341
- } }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx("div", { ...dropProps, className: twMerge("rounded-md border-2 border-transparent ", isDropTarget && "border-dashed border-blue-100"), children: activeDocumentId ? (_jsx(EditorContainer, { handleClose: () => setActiveDocumentId(undefined), hideToolbar: false, activeDocumentId: activeDocumentId, setActiveDocumentId: setActiveDocumentId })) : (displayActiveNode(selectedFolder?.id || selectedRootNode)) }) }), _jsx(CreateDocumentModal, { onContinue: onCreateDocument, onOpenChange: (open) => setOpenModal(open), open: openModal })] })) }));
270
+ } }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx("div", { className: "h-full", children: activeDocumentId ? (_jsx(EditorContainer, { handleClose: () => setActiveDocumentId(undefined), hideToolbar: false, activeDocumentId: activeDocumentId, setActiveDocumentId: setActiveDocumentId })) : (displayActiveNode(selectedFolder?.id || selectedRootNode)) }) }), _jsx(CreateDocumentModal, { onContinue: onCreateDocument, onOpenChange: (open) => setOpenModal(open), open: openModal })] })) }));
342
271
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EditorContainer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/EditorContainer.tsx"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,4CAgMA,CAAC"}
1
+ {"version":3,"file":"EditorContainer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/EditorContainer.tsx"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,4CAgMA,CAAC"}
@@ -1,10 +1,15 @@
1
+ import { type DriveEditorProps } from "@powerhousedao/reactor-browser";
2
+ export type IProps = DriveEditorProps & {
3
+ context?: any;
4
+ document?: any;
5
+ };
1
6
  /**
2
7
  * Base editor component that renders the drive explorer interface.
3
8
  * Customize document opening behavior and drive-level actions here.
4
9
  */
5
- export declare function BaseEditor(props: any): import("react/jsx-runtime").JSX.Element;
10
+ export declare function BaseEditor(props: IProps): import("react/jsx-runtime").JSX.Element;
6
11
  /**
7
12
  * Main editor entry point with required providers.
8
13
  */
9
- export default function Editor(props: any): import("react/jsx-runtime").JSX.Element;
14
+ export default function Editor(props: IProps): import("react/jsx-runtime").JSX.Element;
10
15
  //# sourceMappingURL=editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/editor.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,2CAOpC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,GAAG,2CAaxC"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/editor.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AAIxC,MAAM,MAAM,MAAM,GAAG,gBAAgB,GAAG;IACtC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,2CAOvC;AAKD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,2CAW3C"}
@@ -1,15 +1,18 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { WagmiContext } from "@powerhousedao/design-system";
3
- import { AnalyticsProvider, DriveContextProvider, useAppConfig, } from "@powerhousedao/reactor-browser";
3
+ import { AnalyticsProvider, useAppConfig, } from "@powerhousedao/reactor-browser";
4
4
  import { DriveExplorer } from "./components/DriveExplorer.js";
5
+ import { withDropZone } from "./utils/withDropZone.js";
5
6
  /**
6
7
  * Base editor component that renders the drive explorer interface.
7
8
  * Customize document opening behavior and drive-level actions here.
8
9
  */
9
10
  export function BaseEditor(props) {
10
11
  const { context, document } = props;
11
- return (_jsx("div", { className: "h-full w-full", children: _jsx(DriveExplorer, { document: document, context: context }) }));
12
+ return (_jsx("div", { style: { height: "100%" }, children: _jsx(DriveExplorer, { document: document, context: context }) }));
12
13
  }
14
+ // Wrap base editor with drop zone functionality
15
+ const BaseEditorWithDropZone = withDropZone(BaseEditor);
13
16
  /**
14
17
  * Main editor entry point with required providers.
15
18
  */
@@ -18,5 +21,5 @@ export default function Editor(props) {
18
21
  const analyticsDatabaseName = appConfig?.analyticsDatabaseName;
19
22
  return (
20
23
  // Required context providers for drive functionality
21
- _jsx(DriveContextProvider, { value: props.context, children: _jsx(WagmiContext, { children: _jsx(AnalyticsProvider, { databaseName: analyticsDatabaseName, children: _jsx(BaseEditor, { ...props }) }) }) }));
24
+ _jsx(WagmiContext, { children: _jsx(AnalyticsProvider, { databaseName: analyticsDatabaseName, children: _jsx(BaseEditorWithDropZone, { ...props }) }) }));
22
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,eAAO,MAAM,MAAM,EAAE,iBASpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,eAAO,MAAM,MAAM,EAAE,iBAoBpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -7,6 +7,17 @@ export const module = {
7
7
  disableExternalControls: true,
8
8
  documentToolbarEnabled: true,
9
9
  showSwitchboardLink: true,
10
+ documentTypes: [
11
+ // List all document types that can be dropped
12
+ "powerhouse/network-profile",
13
+ "powerhouse/workstream",
14
+ "powerhouse/scopeofwork",
15
+ "powerhouse/rfp",
16
+ "payment-terms",
17
+ ],
18
+ dragAndDrop: {
19
+ enabled: true, // Enable drag-and-drop functionality
20
+ },
10
21
  },
11
22
  };
12
23
  export default module;
@@ -0,0 +1,4 @@
1
+ import type { DriveEditorProps } from "@powerhousedao/reactor-browser";
2
+ import type { ComponentType } from "react";
3
+ export declare function withDropZone<T extends DriveEditorProps>(WrappedComponent: ComponentType<T>): ComponentType<T>;
4
+ //# sourceMappingURL=withDropZone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withDropZone.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/utils/withDropZone.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,gCAAgC,CAAC;AAMxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACrD,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,GACjC,aAAa,CAAC,CAAC,CAAC,CAqClB"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DropZone } from "@powerhousedao/design-system";
3
+ import { setSelectedNode, useOnDropFile, useSelectedDriveId, } from "@powerhousedao/reactor-browser";
4
+ export function withDropZone(WrappedComponent) {
5
+ const WithDropZoneComponent = (props) => {
6
+ const driveId = useSelectedDriveId();
7
+ const onDropFile = useOnDropFile(props.editorConfig?.documentTypes);
8
+ const onAddFile = async (file, parent, onProgress, resolveConflict) => {
9
+ return await onDropFile(file, onProgress, resolveConflict);
10
+ };
11
+ // Only wrap with DropZone if enabled in config
12
+ if (props.editorConfig?.dragAndDrop?.enabled) {
13
+ return (_jsx(DropZone, { onAddFile: onAddFile, setSelectedNode: setSelectedNode, driveId: driveId, useLocalStorage: true, style: { height: "100%" }, children: _jsx(WrappedComponent, { ...props }) }));
14
+ }
15
+ return _jsx(WrappedComponent, { ...props });
16
+ };
17
+ WithDropZoneComponent.displayName = `withDropZone(${WrappedComponent.displayName || WrappedComponent.name || "Component"})`;
18
+ return WithDropZoneComponent;
19
+ }
package/dist/style.css CHANGED
@@ -372,9 +372,6 @@
372
372
  .mt-6 {
373
373
  margin-top: calc(var(--spacing) * 6);
374
374
  }
375
- .mr-1 {
376
- margin-right: calc(var(--spacing) * 1);
377
- }
378
375
  .mr-2 {
379
376
  margin-right: calc(var(--spacing) * 2);
380
377
  }
@@ -656,9 +653,6 @@
656
653
  --tw-border-style: dashed;
657
654
  border-style: dashed;
658
655
  }
659
- .border-blue-100 {
660
- border-color: var(--color-blue-100);
661
- }
662
656
  .border-blue-700 {
663
657
  border-color: var(--color-blue-700);
664
658
  }
@@ -677,9 +671,6 @@
677
671
  .border-red-700 {
678
672
  border-color: var(--color-red-700);
679
673
  }
680
- .border-transparent {
681
- border-color: transparent;
682
- }
683
674
  .bg-blue-50 {
684
675
  background-color: var(--color-blue-50);
685
676
  }
@@ -758,9 +749,6 @@
758
749
  .px-6 {
759
750
  padding-inline: calc(var(--spacing) * 6);
760
751
  }
761
- .py-1 {
762
- padding-block: calc(var(--spacing) * 1);
763
- }
764
752
  .py-1\.5 {
765
753
  padding-block: calc(var(--spacing) * 1.5);
766
754
  }
@@ -975,13 +963,6 @@
975
963
  }
976
964
  }
977
965
  }
978
- .hover\:bg-gray-100 {
979
- &:hover {
980
- @media (hover: hover) {
981
- background-color: var(--color-gray-100);
982
- }
983
- }
984
- }
985
966
  .hover\:bg-gray-200 {
986
967
  &:hover {
987
968
  @media (hover: hover) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@powerhousedao/network-admin",
3
3
  "description": "Network Admin package for Powerhouse",
4
- "version": "0.0.17",
4
+ "version": "0.0.18",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
7
7
  "files": [
@@ -55,13 +55,13 @@
55
55
  "service-unstartup": "bash ./node_modules/@powerhousedao/ph-cli/dist/scripts/service-unstartup.sh"
56
56
  },
57
57
  "dependencies": {
58
- "@powerhousedao/builder-tools": "^5.0.0-staging.19",
59
- "@powerhousedao/common": "^5.0.0-staging.19",
60
- "@powerhousedao/design-system": "^5.0.0-staging.19",
58
+ "@powerhousedao/builder-tools": "^5.0.0-staging.21",
59
+ "@powerhousedao/common": "^5.0.0-staging.21",
60
+ "@powerhousedao/design-system": "^5.0.0-staging.21",
61
61
  "@powerhousedao/document-engineering": "^1.38.0",
62
- "@powerhousedao/project-management": "0.0.39",
62
+ "@powerhousedao/project-management": "0.0.40",
63
63
  "@uiw/react-md-editor": "^4.0.8",
64
- "document-model": "^5.0.0-staging.19",
64
+ "document-model": "^5.0.0-staging.21",
65
65
  "error": "^10.4.0",
66
66
  "graphql": "^16.10.0",
67
67
  "graphql-tag": "^2.12.6",
@@ -73,19 +73,19 @@
73
73
  "@electric-sql/pglite": "^0.2.12",
74
74
  "@eslint/js": "^9.25.0",
75
75
  "@powerhousedao/analytics-engine-core": "^0.5.0",
76
- "@powerhousedao/codegen": "^5.0.0-staging.19",
77
- "@powerhousedao/ph-cli": "^5.0.0-staging.19",
78
- "@powerhousedao/reactor-api": "^5.0.0-staging.19",
79
- "@powerhousedao/reactor-browser": "^5.0.0-staging.19",
80
- "@powerhousedao/reactor-local": "^5.0.0-staging.19",
76
+ "@powerhousedao/codegen": "^5.0.0-staging.21",
77
+ "@powerhousedao/ph-cli": "^5.0.0-staging.21",
78
+ "@powerhousedao/reactor-api": "^5.0.0-staging.21",
79
+ "@powerhousedao/reactor-browser": "^5.0.0-staging.21",
80
+ "@powerhousedao/reactor-local": "^5.0.0-staging.21",
81
81
  "@powerhousedao/scalars": "^1.33.1-staging.5",
82
- "@powerhousedao/switchboard": "^5.0.0-staging.19",
82
+ "@powerhousedao/switchboard": "^5.0.0-staging.21",
83
83
  "@tailwindcss/cli": "^4.1.4",
84
84
  "@testing-library/react": "^16.3.0",
85
85
  "@types/node": "^22.14.1",
86
86
  "@types/react": "^18.3.20",
87
87
  "@vitejs/plugin-react": "^4.4.1",
88
- "document-drive": "^5.0.0-staging.19",
88
+ "document-drive": "^5.0.0-staging.21",
89
89
  "eslint": "^9.25.0",
90
90
  "eslint-plugin-react": "^7.37.5",
91
91
  "eslint-plugin-react-hooks": "^5.2.0",