@powerhousedao/network-admin 1.0.3 → 1.2.0

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.
@@ -14,7 +14,13 @@ describe("WorkstreamOperations", () => {
14
14
  });
15
15
  it("should handle editClientInfo operation", () => {
16
16
  const document = utils.createDocument();
17
- const input = generateMock(EditClientInfoInputSchema());
17
+ const mockInput = generateMock(EditClientInfoInputSchema());
18
+ const input = {
19
+ ...mockInput,
20
+ // Override icon with a valid URL if provided, otherwise undefined
21
+ // The state schema requires icon to be a valid URL (z.url()) or null
22
+ icon: mockInput.icon ? "https://example.com/icon.png" : undefined,
23
+ };
18
24
  const updatedDocument = reducer(document, editClientInfo(input));
19
25
  expect(isWorkstreamDocument(updatedDocument)).toBe(true);
20
26
  expect(updatedDocument.operations.global).toHaveLength(1);
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/builders/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,EAAE,YAOtB,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/builders/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,EAAE,YAOtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/DriveExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA0BlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA6ZtD"}
1
+ {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/DriveExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA4BlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA4gBtD"}
@@ -1,11 +1,13 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useCallback, useRef } from "react";
3
3
  import { setSelectedNode, useSelectedDriveSafe, useSelectedFolder, useUserPermissions, useDocumentsInSelectedDrive, useFileNodesInSelectedDrive, useNodeActions, useSelectedDocumentSafe, showDeleteNodeModal, addDocument, dispatchActions, } from "@powerhousedao/reactor-browser";
4
4
  import { Button } from "@powerhousedao/document-engineering";
5
5
  import { CreateDocumentModal } from "@powerhousedao/design-system/connect";
6
6
  import {} from "document-model";
7
+ import { isValidName } from "document-drive";
7
8
  import { WorkstreamIcon } from "./icons/WorkstreamIcon.js";
8
9
  import { editClientInfo, editWorkstream, } from "../../../document-models/workstream/gen/creators.js";
10
+ import { setProfileName } from "../../../document-models/network-profile/gen/creators.js";
9
11
  import { FolderTree } from "./FolderTree.js";
10
12
  /**
11
13
  * Main drive explorer component with sidebar navigation and content area.
@@ -18,6 +20,8 @@ export function DriveExplorer({ children }) {
18
20
  const [openModal, setOpenModal] = useState(false);
19
21
  const [selectedRootNode, setSelectedRootNode] = useState("workstreams");
20
22
  const [modalDocumentType, setModalDocumentType] = useState("powerhouse/workstream");
23
+ const [profileNameInput, setProfileNameInput] = useState("");
24
+ const [isCreatingProfile, setIsCreatingProfile] = useState(false);
21
25
  const selectedDocumentModel = useRef(null);
22
26
  // === STATE MANAGEMENT HOOKS ===
23
27
  // Core state hooks for drive navigation
@@ -62,20 +66,14 @@ export function DriveExplorer({ children }) {
62
66
  const networkProfileDoc = networkAdminDocuments?.find((doc) => doc.header.documentType === "powerhouse/network-profile");
63
67
  switch (nodeType) {
64
68
  case "workstreams":
65
- return (_jsx("div", { className: "w-full h-full p-6 overflow-auto", children: _jsxs("div", { className: "max-w-7xl mx-auto", children: [_jsxs("div", { className: "space-y-6 flex flex-col items-center justify-center mb-10", children: [_jsx("h1", { className: "text-2xl font-bold", children: "Welcome to the Network Admin" }), isNetworkProfileCreated &&
66
- networkProfileDoc?.state.global.logo && (_jsxs("div", { className: "bg-white rounded-lg shadow-md border border-gray-300 p-4 max-w-lg mx-auto text-sm", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [networkProfileDoc?.state.global.logo ? (_jsx("img", { src: networkProfileDoc?.state.global.logo, alt: "Network Profile Logo", className: "mb-4 max-w-64 max-h-12 w-auto h-auto object-contain flex-shrink-0" })) : (_jsx("div", {})), _jsx("div", { className: "flex flex-wrap gap-2 justify-end flex-shrink-0", children: networkProfileDoc?.state.global.category.map((category) => (_jsx("span", { className: `inline-flex items-center justify-center rounded-md w-fit whitespace-nowrap shrink-0 border-2 px-2 py-0 text-sm font-extrabold ${category.toLowerCase() === "oss"
69
+ return (_jsx("div", { className: "w-full h-full p-6 overflow-auto", children: _jsxs("div", { className: "max-w-7xl mx-auto", children: [_jsxs("div", { className: "space-y-6 flex flex-col items-center justify-center mb-10", children: [_jsxs("h1", { className: "text-2xl font-bold", children: ["Welcome to the ", networkProfileDoc?.state.global.name || "", " Network Admin"] }), networkProfileDoc?.state.global.logo && (_jsxs("div", { className: "bg-white rounded-lg shadow-md border border-gray-300 p-4 max-w-lg mx-auto text-sm", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [networkProfileDoc?.state.global.logo ? (_jsx("img", { src: networkProfileDoc?.state.global.logo, alt: "Network Profile Logo", className: "mb-4 max-w-64 max-h-12 w-auto h-auto object-contain flex-shrink-0" })) : (_jsx("div", {})), _jsx("div", { className: "flex flex-wrap gap-2 justify-end flex-shrink-0", children: networkProfileDoc?.state.global.category.map((category) => (_jsx("span", { className: `inline-flex items-center justify-center rounded-md w-fit whitespace-nowrap shrink-0 border-2 px-2 py-0 text-sm font-extrabold ${category.toLowerCase() === "oss"
67
70
  ? "bg-purple-600/30 text-purple-600 border-purple-600/70"
68
71
  : category.toLowerCase() === "defi"
69
72
  ? "bg-blue-600/30 text-blue-600 border-blue-600/70"
70
- : "bg-gray-500/30 text-gray-500 border-gray-500/70"}`, children: category }, category))) })] }), _jsx("p", { className: "mt-4", children: networkProfileDoc?.state.global.description })] })), _jsxs("div", { className: "flex flex-wrap gap-3 justify-center", children: [_jsx(Button, { color: "dark" // Customize button appearance
71
- , size: "sm", className: "cursor-pointer hover:bg-gray-600 hover:text-white", title: "Create Workstream Document", "aria-description": "Create Workstream Document", onClick: () => {
72
- setModalDocumentType("powerhouse/workstream");
73
- setOpenModal(true);
74
- }, disabled: !isNetworkProfileCreated, children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(WorkstreamIcon, { className: "w-7 h-7 text-white" }), "Create Workstream Document"] }) }), _jsx(Button, { color: "dark" // Customize button appearance
75
- , size: "sm", className: "cursor-pointer hover:bg-gray-600 hover:text-white", title: "Create Network Profile Document", "aria-description": "Create Network Profile Document", onClick: () => {
76
- setModalDocumentType("powerhouse/network-profile");
77
- setOpenModal(true);
78
- }, disabled: isNetworkProfileCreated, children: _jsx("span", { className: "flex items-center gap-2", children: "Create Network Profile Document" }) })] })] }), networkAdminDocuments && networkAdminDocuments.length > 0 && (_jsxs("div", { className: "w-full", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-gray-700", children: "\uD83D\uDCC4 Documents" }), _jsx("div", { className: "overflow-x-auto rounded-lg border border-gray-200 shadow-sm", children: _jsxs("table", { className: "w-full bg-white", children: [_jsx("thead", { className: "bg-gray-50", children: _jsxs("tr", { children: [_jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Name" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Type" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Actions" })] }) }), _jsx("tbody", { className: "bg-white divide-y divide-gray-200", children: networkAdminDocuments.map((document) => {
73
+ : "bg-gray-500/30 text-gray-500 border-gray-500/70"}`, children: category }, category))) })] }), _jsx("p", { className: "mt-4", children: networkProfileDoc?.state.global.description })] })), _jsx("div", { className: "flex flex-wrap gap-3 justify-center", children: _jsx(Button, { color: "dark", size: "sm", className: "cursor-pointer hover:bg-gray-600 hover:text-white", title: "Create Workstream Document", "aria-description": "Create Workstream Document", onClick: () => {
74
+ setModalDocumentType("powerhouse/workstream");
75
+ setOpenModal(true);
76
+ }, children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(WorkstreamIcon, { className: "w-7 h-7 text-white" }), "Create Workstream Document"] }) }) })] }), networkAdminDocuments && networkAdminDocuments.length > 0 && (_jsxs("div", { className: "w-full", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-gray-700", children: "Documents" }), _jsx("div", { className: "overflow-x-auto rounded-lg border border-gray-200 shadow-sm", children: _jsxs("table", { className: "w-full bg-white", children: [_jsx("thead", { className: "bg-gray-50", children: _jsxs("tr", { children: [_jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Name" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Type" }), _jsx("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-1/4", children: "Actions" })] }) }), _jsx("tbody", { className: "bg-white divide-y divide-gray-200", children: networkAdminDocuments.map((document) => {
79
77
  // Find the corresponding file node for actions
80
78
  const fileNode = fileChildren?.find((file) => file.id === document.header.id);
81
79
  return (_jsxs("tr", { className: "hover:bg-gray-50 transition-colors", children: [_jsx("td", { className: "px-2 py-2", children: _jsx("div", { className: "text-sm font-medium text-gray-900 truncate max-w-xs", title: fileNode?.name || document.header.name, children: fileNode?.name || document.header.name }) }), _jsx("td", { className: "px-2 py-2", children: _jsx("div", { className: "text-sm text-gray-500 truncate max-w-xs", title: document.header.documentType, children: document.header.documentType }) }), _jsx("td", { className: "px-2 py-2", children: _jsxs("div", { className: "flex gap-2 flex-wrap", children: [_jsx("button", { onClick: () => {
@@ -176,7 +174,38 @@ export function DriveExplorer({ children }) {
176
174
  return null;
177
175
  }
178
176
  }, [selectedDrive?.header.id, allDocuments]);
177
+ // Handle network profile creation from welcome form
178
+ const handleCreateProfile = useCallback(async (e) => {
179
+ e.preventDefault();
180
+ const name = profileNameInput.trim();
181
+ if (!name || isCreatingProfile)
182
+ return;
183
+ setIsCreatingProfile(true);
184
+ try {
185
+ const node = await addDocument(selectedDrive?.header.id || "", name, "powerhouse/network-profile", undefined, undefined, undefined, "network-profile-editor");
186
+ if (!node?.id) {
187
+ console.error("Error creating network profile document");
188
+ return;
189
+ }
190
+ await dispatchActions([setProfileName({ name })], node.id);
191
+ setProfileNameInput("");
192
+ setSelectedRootNode("network-information");
193
+ }
194
+ catch (error) {
195
+ console.error("Failed to create network profile:", error);
196
+ }
197
+ finally {
198
+ setIsCreatingProfile(false);
199
+ }
200
+ }, [profileNameInput, isCreatingProfile, selectedDrive?.header.id]);
179
201
  // === RENDER ===
202
+ // If no network profile exists, show the creation form (no sidebar)
203
+ if (!isNetworkProfileCreated) {
204
+ const isValid = isValidName(profileNameInput);
205
+ return (_jsx("div", { className: "flex h-full items-center justify-center px-4 py-12", children: _jsxs("div", { className: "relative w-full max-w-2xl overflow-hidden rounded-2xl border border-slate-200/50 bg-gradient-to-br from-slate-50 via-purple-50/30 to-indigo-50/40 p-12 shadow-xl shadow-slate-200/50 backdrop-blur-sm", children: [_jsx("div", { className: "absolute -right-20 -top-20 h-64 w-64 rounded-full bg-gradient-to-br from-purple-400/20 to-indigo-400/20 blur-3xl" }), _jsx("div", { className: "absolute -bottom-16 -left-16 h-48 w-48 rounded-full bg-gradient-to-br from-indigo-300/20 to-purple-300/20 blur-2xl" }), _jsxs("div", { className: "relative z-10 text-center", children: [_jsx("div", { className: "mb-6 inline-flex items-center justify-center rounded-full bg-gradient-to-r from-purple-600 to-indigo-600 p-3 shadow-lg shadow-purple-500/30", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", className: "text-white", children: _jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) }) }), _jsx("h2", { className: "mb-4 text-3xl font-bold tracking-tight text-slate-900", children: "Create your Network Profile" }), _jsx("p", { className: "mb-8 text-lg leading-relaxed text-slate-600", children: "Get started by creating a network profile to manage workstreams, builders, and documents." }), _jsxs("form", { onSubmit: handleCreateProfile, className: "mx-auto max-w-md", children: [!isValid && profileNameInput && (_jsx("div", { className: "mb-2 text-sm text-red-500", children: "Document name must be valid URL characters." })), _jsx("input", { type: "text", value: profileNameInput, onChange: (e) => setProfileNameInput(e.target.value), placeholder: "Network profile name", maxLength: 100, disabled: isCreatingProfile, className: "mb-6 w-full rounded-xl border border-slate-200 bg-white px-4 py-3 text-base text-slate-900 placeholder-slate-400 shadow-sm outline-none transition-all focus:border-purple-500 focus:ring-2 focus:ring-purple-500/20 disabled:opacity-50" }), _jsxs("button", { type: "submit", disabled: !isValid || isCreatingProfile, className: "group relative w-full overflow-hidden rounded-xl bg-gradient-to-r from-purple-600 to-indigo-600 px-8 py-4 text-base font-semibold text-white shadow-lg shadow-purple-500/40 transition-all duration-300 hover:scale-105 hover:shadow-xl hover:shadow-purple-500/50 active:scale-100 disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:scale-100 disabled:hover:shadow-lg", children: [_jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [_jsx("span", { children: isCreatingProfile
206
+ ? "Creating..."
207
+ : "Create Network Profile" }), !isCreatingProfile && (_jsx("svg", { className: "h-5 w-5 transition-transform duration-300 group-hover:translate-x-1", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M13 7l5 5m0 0l-5 5m5-5H6" }) }))] }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-purple-700 to-indigo-700 opacity-0 transition-opacity duration-300 group-hover:opacity-100" })] })] })] })] }) }));
208
+ }
180
209
  return (_jsx("div", { className: "h-full", children: isScopeOfWorkFullView && children ? (_jsx("div", { className: "h-full w-full", children: children })) : (
181
210
  /* === NORMAL VIEW WITH SIDEBAR === */
182
211
  _jsxs("div", { className: "flex h-full", children: [_jsx(FolderTree, { activeSidebarNodeId: activeSidebarNodeId, setActiveSidebarNodeId: setActiveSidebarNodeId, setSelectedRootNode: setSelectedRootNode, createBuildersDocument: createBuildersDocument }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx("div", { className: "h-full", children: children ||
@@ -1 +1 @@
1
- {"version":3,"file":"FolderTree.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/FolderTree.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA0B/C,UAAU,eAAe;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,sBAAsB,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACpE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,EAAE,eAAe,2CA+QjB"}
1
+ {"version":3,"file":"FolderTree.d.ts","sourceRoot":"","sources":["../../../../editors/network-admin/components/FolderTree.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA0B/C,UAAU,eAAe;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,sBAAsB,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACpE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,EAAE,eAAe,2CAsRjB"}
@@ -175,6 +175,10 @@ export function FolderTree({ activeSidebarNodeId, setActiveSidebarNodeId, setSel
175
175
  };
176
176
  return [workstreamsNode, networkInfoNode, buildersNode];
177
177
  }, [networkAdminDocuments, allDocuments]);
178
+ const sidebarTitle = useMemo(() => {
179
+ const networkProfileDoc = networkAdminDocuments?.find((doc) => doc.header.documentType === "powerhouse/network-profile");
180
+ return networkProfileDoc?.state.global.name || "Network Admin";
181
+ }, [networkAdminDocuments]);
178
182
  // Handle sidebar node selection
179
183
  const handleActiveNodeChange = useCallback((nodeId) => {
180
184
  // Find the node by ID
@@ -218,7 +222,7 @@ export function FolderTree({ activeSidebarNodeId, setActiveSidebarNodeId, setSel
218
222
  setSelectedRootNode,
219
223
  createBuildersDocument,
220
224
  ]);
221
- return (_jsx(SidebarProvider, { nodes: sidebarNodes, children: _jsx(Sidebar, { nodes: sidebarNodes, activeNodeId: activeSidebarNodeId, onActiveNodeChange: (node) => handleActiveNodeChange(node.id), sidebarTitle: "Network Admin", showSearchBar: true, allowPinning: true, resizable: true, initialWidth: 300, maxWidth: 500, enableMacros: 4, handleOnTitleClick: () => {
225
+ return (_jsx(SidebarProvider, { nodes: sidebarNodes, children: _jsx(Sidebar, { nodes: sidebarNodes, activeNodeId: activeSidebarNodeId, onActiveNodeChange: (node) => handleActiveNodeChange(node.id), sidebarTitle: sidebarTitle, showSearchBar: true, allowPinning: true, resizable: true, initialWidth: 300, maxWidth: 500, enableMacros: 4, handleOnTitleClick: () => {
222
226
  setSelectedNode(undefined);
223
227
  setActiveSidebarNodeId("workstreams");
224
228
  setSelectedRootNode("workstreams");
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,mFAAmF;AACnF,eAAO,MAAM,YAAY,EAAE,YAO1B,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/network-admin/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,mFAAmF;AACnF,eAAO,MAAM,YAAY,EAAE,YAO1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/network-profile/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/network-profile/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"milestones-section.d.ts","sourceRoot":"","sources":["../../../../editors/payment-terms/components/milestones-section.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,SAAS,EAET,kBAAkB,EACnB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,KAAK,OAAO,IAAI,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtG,UAAU,sBAAsB;IAC9B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,EAAE,sBAAsB,2CA8WxB"}
1
+ {"version":3,"file":"milestones-section.d.ts","sourceRoot":"","sources":["../../../../editors/payment-terms/components/milestones-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EAET,kBAAkB,EACnB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,KAAK,OAAO,IAAI,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtG,UAAU,sBAAsB;IAC9B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,EAAE,sBAAsB,2CA8WxB"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo } from "react";
3
- import { Milestone as MilestoneIcon, Plus, } from "lucide-react";
3
+ import { Milestone as MilestoneIcon, Plus } from "lucide-react";
4
4
  import { ObjectSetTable, DatePicker, Checkbox, Select, } from "@powerhousedao/document-engineering";
5
5
  import { toast } from "@powerhousedao/design-system/connect";
6
6
  import { generateId } from "document-model/core";
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/payment-terms/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,YAOhC,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/payment-terms/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,YAOhC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/request-for-proposals/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,EAAE,YAOvC,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/request-for-proposals/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,EAAE,YAOvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/workstream/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,YAO9B,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/workstream/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,YAO9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../processors/workstreams/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAsB,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9D;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../processors/workstreams/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAsB,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9D;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE"}
package/dist/style.css CHANGED
@@ -47,14 +47,20 @@
47
47
  --color-blue-800: hsl(209 100% 55%);
48
48
  --color-indigo-50: oklch(96.2% 0.018 272.314);
49
49
  --color-indigo-100: oklch(93% 0.034 272.788);
50
+ --color-indigo-300: oklch(78.5% 0.115 274.713);
51
+ --color-indigo-400: oklch(67.3% 0.182 276.935);
50
52
  --color-indigo-500: oklch(58.5% 0.233 277.117);
51
53
  --color-indigo-600: oklch(51.1% 0.262 276.966);
52
54
  --color-indigo-700: oklch(45.7% 0.24 277.023);
53
55
  --color-violet-50: oklch(96.9% 0.016 293.756);
54
56
  --color-violet-500: oklch(60.6% 0.25 292.717);
55
57
  --color-violet-600: oklch(54.1% 0.281 293.009);
58
+ --color-purple-50: oklch(97.7% 0.014 308.299);
59
+ --color-purple-300: hsl(263 79% 85%);
60
+ --color-purple-400: hsl(264 77% 81%);
56
61
  --color-purple-500: hsl(264 77% 77%);
57
62
  --color-purple-600: hsl(263 76% 74%);
63
+ --color-purple-700: hsl(263 78% 70%);
58
64
  --color-pink-500: oklch(65.6% 0.241 354.308);
59
65
  --color-rose-50: oklch(96.9% 0.015 12.422);
60
66
  --color-rose-100: oklch(94.1% 0.03 12.58);
@@ -94,6 +100,7 @@
94
100
  --container-xs: 20rem;
95
101
  --container-md: 28rem;
96
102
  --container-lg: 32rem;
103
+ --container-2xl: 42rem;
97
104
  --container-4xl: 56rem;
98
105
  --container-7xl: 80rem;
99
106
  --text-xs: 0.75rem;
@@ -128,6 +135,8 @@
128
135
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
129
136
  --animate-spin: spin 1s linear infinite;
130
137
  --blur-sm: 8px;
138
+ --blur-2xl: 40px;
139
+ --blur-3xl: 64px;
131
140
  --default-transition-duration: 150ms;
132
141
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
133
142
  --default-font-family: var(--font-sans);
@@ -304,15 +313,27 @@
304
313
  .-top-3 {
305
314
  top: calc(var(--spacing) * -3);
306
315
  }
316
+ .-top-20 {
317
+ top: calc(var(--spacing) * -20);
318
+ }
307
319
  .top-full {
308
320
  top: 100%;
309
321
  }
310
322
  .-right-3 {
311
323
  right: calc(var(--spacing) * -3);
312
324
  }
325
+ .-right-20 {
326
+ right: calc(var(--spacing) * -20);
327
+ }
313
328
  .right-0 {
314
329
  right: calc(var(--spacing) * 0);
315
330
  }
331
+ .-bottom-16 {
332
+ bottom: calc(var(--spacing) * -16);
333
+ }
334
+ .-left-16 {
335
+ left: calc(var(--spacing) * -16);
336
+ }
316
337
  .z-10 {
317
338
  z-index: 10;
318
339
  }
@@ -325,6 +346,24 @@
325
346
  .col-span-2 {
326
347
  grid-column: span 2 / span 2;
327
348
  }
349
+ .container {
350
+ width: 100%;
351
+ @media (width >= 40rem) {
352
+ max-width: 40rem;
353
+ }
354
+ @media (width >= 48rem) {
355
+ max-width: 48rem;
356
+ }
357
+ @media (width >= 64rem) {
358
+ max-width: 64rem;
359
+ }
360
+ @media (width >= 80rem) {
361
+ max-width: 80rem;
362
+ }
363
+ @media (width >= 96rem) {
364
+ max-width: 96rem;
365
+ }
366
+ }
328
367
  .mx-2 {
329
368
  margin-inline: calc(var(--spacing) * 2);
330
369
  }
@@ -376,6 +415,9 @@
376
415
  .mb-6 {
377
416
  margin-bottom: calc(var(--spacing) * 6);
378
417
  }
418
+ .mb-8 {
419
+ margin-bottom: calc(var(--spacing) * 8);
420
+ }
379
421
  .mb-10 {
380
422
  margin-bottom: calc(var(--spacing) * 10);
381
423
  }
@@ -436,6 +478,12 @@
436
478
  .h-12 {
437
479
  height: calc(var(--spacing) * 12);
438
480
  }
481
+ .h-48 {
482
+ height: calc(var(--spacing) * 48);
483
+ }
484
+ .h-64 {
485
+ height: calc(var(--spacing) * 64);
486
+ }
439
487
  .h-auto {
440
488
  height: auto;
441
489
  }
@@ -487,6 +535,12 @@
487
535
  .w-12 {
488
536
  width: calc(var(--spacing) * 12);
489
537
  }
538
+ .w-48 {
539
+ width: calc(var(--spacing) * 48);
540
+ }
541
+ .w-64 {
542
+ width: calc(var(--spacing) * 64);
543
+ }
490
544
  .w-\[115px\] {
491
545
  width: 115px;
492
546
  }
@@ -514,6 +568,9 @@
514
568
  .w-full {
515
569
  width: 100%;
516
570
  }
571
+ .max-w-2xl {
572
+ max-width: var(--container-2xl);
573
+ }
517
574
  .max-w-4xl {
518
575
  max-width: var(--container-4xl);
519
576
  }
@@ -532,6 +589,9 @@
532
589
  .max-w-lg {
533
590
  max-width: var(--container-lg);
534
591
  }
592
+ .max-w-md {
593
+ max-width: var(--container-md);
594
+ }
535
595
  .max-w-xs {
536
596
  max-width: var(--container-xs);
537
597
  }
@@ -721,6 +781,9 @@
721
781
  .rounded {
722
782
  border-radius: 0.25rem;
723
783
  }
784
+ .rounded-2xl {
785
+ border-radius: var(--radius-2xl);
786
+ }
724
787
  .rounded-full {
725
788
  border-radius: calc(infinity * 1px);
726
789
  }
@@ -808,6 +871,15 @@
808
871
  .border-rose-600 {
809
872
  border-color: var(--color-rose-600);
810
873
  }
874
+ .border-slate-200 {
875
+ border-color: var(--color-slate-200);
876
+ }
877
+ .border-slate-200\/50 {
878
+ border-color: color-mix(in srgb, hsl(210 9% 48%) 50%, transparent);
879
+ @supports (color: color-mix(in lab, red, red)) {
880
+ border-color: color-mix(in oklab, var(--color-slate-200) 50%, transparent);
881
+ }
882
+ }
811
883
  .border-transparent {
812
884
  border-color: transparent;
813
885
  }
@@ -929,6 +1001,40 @@
929
1001
  --tw-gradient-from: var(--color-emerald-600);
930
1002
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
931
1003
  }
1004
+ .from-indigo-300\/20 {
1005
+ --tw-gradient-from: color-mix(in srgb, oklch(78.5% 0.115 274.713) 20%, transparent);
1006
+ @supports (color: color-mix(in lab, red, red)) {
1007
+ --tw-gradient-from: color-mix(in oklab, var(--color-indigo-300) 20%, transparent);
1008
+ }
1009
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1010
+ }
1011
+ .from-purple-400\/20 {
1012
+ --tw-gradient-from: color-mix(in srgb, hsl(264 77% 81%) 20%, transparent);
1013
+ @supports (color: color-mix(in lab, red, red)) {
1014
+ --tw-gradient-from: color-mix(in oklab, var(--color-purple-400) 20%, transparent);
1015
+ }
1016
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1017
+ }
1018
+ .from-purple-600 {
1019
+ --tw-gradient-from: var(--color-purple-600);
1020
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1021
+ }
1022
+ .from-purple-700 {
1023
+ --tw-gradient-from: var(--color-purple-700);
1024
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1025
+ }
1026
+ .from-slate-50 {
1027
+ --tw-gradient-from: var(--color-slate-50);
1028
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1029
+ }
1030
+ .via-purple-50\/30 {
1031
+ --tw-gradient-via: color-mix(in srgb, oklch(97.7% 0.014 308.299) 30%, transparent);
1032
+ @supports (color: color-mix(in lab, red, red)) {
1033
+ --tw-gradient-via: color-mix(in oklab, var(--color-purple-50) 30%, transparent);
1034
+ }
1035
+ --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
1036
+ --tw-gradient-stops: var(--tw-gradient-via-stops);
1037
+ }
932
1038
  .to-blue-500 {
933
1039
  --tw-gradient-to: var(--color-blue-500);
934
1040
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
@@ -937,6 +1043,35 @@
937
1043
  --tw-gradient-to: var(--color-emerald-400);
938
1044
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
939
1045
  }
1046
+ .to-indigo-50\/40 {
1047
+ --tw-gradient-to: color-mix(in srgb, oklch(96.2% 0.018 272.314) 40%, transparent);
1048
+ @supports (color: color-mix(in lab, red, red)) {
1049
+ --tw-gradient-to: color-mix(in oklab, var(--color-indigo-50) 40%, transparent);
1050
+ }
1051
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1052
+ }
1053
+ .to-indigo-400\/20 {
1054
+ --tw-gradient-to: color-mix(in srgb, oklch(67.3% 0.182 276.935) 20%, transparent);
1055
+ @supports (color: color-mix(in lab, red, red)) {
1056
+ --tw-gradient-to: color-mix(in oklab, var(--color-indigo-400) 20%, transparent);
1057
+ }
1058
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1059
+ }
1060
+ .to-indigo-600 {
1061
+ --tw-gradient-to: var(--color-indigo-600);
1062
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1063
+ }
1064
+ .to-indigo-700 {
1065
+ --tw-gradient-to: var(--color-indigo-700);
1066
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1067
+ }
1068
+ .to-purple-300\/20 {
1069
+ --tw-gradient-to: color-mix(in srgb, hsl(263 79% 85%) 20%, transparent);
1070
+ @supports (color: color-mix(in lab, red, red)) {
1071
+ --tw-gradient-to: color-mix(in oklab, var(--color-purple-300) 20%, transparent);
1072
+ }
1073
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
1074
+ }
940
1075
  .object-contain {
941
1076
  object-fit: contain;
942
1077
  }
@@ -964,6 +1099,9 @@
964
1099
  .p-8 {
965
1100
  padding: calc(var(--spacing) * 8);
966
1101
  }
1102
+ .p-12 {
1103
+ padding: calc(var(--spacing) * 12);
1104
+ }
967
1105
  .px-2 {
968
1106
  padding-inline: calc(var(--spacing) * 2);
969
1107
  }
@@ -985,6 +1123,9 @@
985
1123
  .px-6 {
986
1124
  padding-inline: calc(var(--spacing) * 6);
987
1125
  }
1126
+ .px-8 {
1127
+ padding-inline: calc(var(--spacing) * 8);
1128
+ }
988
1129
  .py-0 {
989
1130
  padding-block: calc(var(--spacing) * 0);
990
1131
  }
@@ -1047,6 +1188,10 @@
1047
1188
  font-size: var(--text-3xl);
1048
1189
  line-height: var(--tw-leading, var(--text-3xl--line-height));
1049
1190
  }
1191
+ .text-base {
1192
+ font-size: var(--text-base);
1193
+ line-height: var(--tw-leading, var(--text-base--line-height));
1194
+ }
1050
1195
  .text-lg {
1051
1196
  font-size: var(--text-lg);
1052
1197
  line-height: var(--tw-leading, var(--text-lg--line-height));
@@ -1188,6 +1333,9 @@
1188
1333
  .text-slate-800 {
1189
1334
  color: var(--color-slate-800);
1190
1335
  }
1336
+ .text-slate-900 {
1337
+ color: var(--color-slate-900);
1338
+ }
1191
1339
  .text-white {
1192
1340
  color: var(--color-white);
1193
1341
  }
@@ -1200,6 +1348,11 @@
1200
1348
  .underline {
1201
1349
  text-decoration-line: underline;
1202
1350
  }
1351
+ .placeholder-slate-400 {
1352
+ &::placeholder {
1353
+ color: var(--color-slate-400);
1354
+ }
1355
+ }
1203
1356
  .accent-blue-600 {
1204
1357
  accent-color: var(--color-blue-600);
1205
1358
  }
@@ -1235,10 +1388,36 @@
1235
1388
  --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1236
1389
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1237
1390
  }
1391
+ .shadow-purple-500\/30 {
1392
+ --tw-shadow-color: color-mix(in srgb, hsl(264 77% 77%) 30%, transparent);
1393
+ @supports (color: color-mix(in lab, red, red)) {
1394
+ --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-purple-500) 30%, transparent) var(--tw-shadow-alpha), transparent);
1395
+ }
1396
+ }
1397
+ .shadow-purple-500\/40 {
1398
+ --tw-shadow-color: color-mix(in srgb, hsl(264 77% 77%) 40%, transparent);
1399
+ @supports (color: color-mix(in lab, red, red)) {
1400
+ --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-purple-500) 40%, transparent) var(--tw-shadow-alpha), transparent);
1401
+ }
1402
+ }
1403
+ .shadow-slate-200\/50 {
1404
+ --tw-shadow-color: color-mix(in srgb, hsl(210 9% 48%) 50%, transparent);
1405
+ @supports (color: color-mix(in lab, red, red)) {
1406
+ --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-slate-200) 50%, transparent) var(--tw-shadow-alpha), transparent);
1407
+ }
1408
+ }
1238
1409
  .blur {
1239
1410
  --tw-blur: blur(8px);
1240
1411
  filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1241
1412
  }
1413
+ .blur-2xl {
1414
+ --tw-blur: blur(var(--blur-2xl));
1415
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1416
+ }
1417
+ .blur-3xl {
1418
+ --tw-blur: blur(var(--blur-3xl));
1419
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1420
+ }
1242
1421
  .filter {
1243
1422
  filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1244
1423
  }
@@ -1280,10 +1459,33 @@
1280
1459
  --tw-duration: 200ms;
1281
1460
  transition-duration: 200ms;
1282
1461
  }
1462
+ .duration-300 {
1463
+ --tw-duration: 300ms;
1464
+ transition-duration: 300ms;
1465
+ }
1283
1466
  .duration-500 {
1284
1467
  --tw-duration: 500ms;
1285
1468
  transition-duration: 500ms;
1286
1469
  }
1470
+ .outline-none {
1471
+ --tw-outline-style: none;
1472
+ outline-style: none;
1473
+ }
1474
+ .group-hover\:translate-x-1 {
1475
+ &:is(:where(.group):hover *) {
1476
+ @media (hover: hover) {
1477
+ --tw-translate-x: calc(var(--spacing) * 1);
1478
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1479
+ }
1480
+ }
1481
+ }
1482
+ .group-hover\:opacity-100 {
1483
+ &:is(:where(.group):hover *) {
1484
+ @media (hover: hover) {
1485
+ opacity: 100%;
1486
+ }
1487
+ }
1488
+ }
1287
1489
  .after\:text-rose-500 {
1288
1490
  &::after {
1289
1491
  content: var(--tw-content);
@@ -1304,6 +1506,16 @@
1304
1506
  }
1305
1507
  }
1306
1508
  }
1509
+ .hover\:scale-105 {
1510
+ &:hover {
1511
+ @media (hover: hover) {
1512
+ --tw-scale-x: 105%;
1513
+ --tw-scale-y: 105%;
1514
+ --tw-scale-z: 105%;
1515
+ scale: var(--tw-scale-x) var(--tw-scale-y);
1516
+ }
1517
+ }
1518
+ }
1307
1519
  .hover\:bg-blue-600 {
1308
1520
  &:hover {
1309
1521
  @media (hover: hover) {
@@ -1445,11 +1657,34 @@
1445
1657
  }
1446
1658
  }
1447
1659
  }
1660
+ .hover\:shadow-xl {
1661
+ &:hover {
1662
+ @media (hover: hover) {
1663
+ --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1664
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1665
+ }
1666
+ }
1667
+ }
1668
+ .hover\:shadow-purple-500\/50 {
1669
+ &:hover {
1670
+ @media (hover: hover) {
1671
+ --tw-shadow-color: color-mix(in srgb, hsl(264 77% 77%) 50%, transparent);
1672
+ @supports (color: color-mix(in lab, red, red)) {
1673
+ --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-purple-500) 50%, transparent) var(--tw-shadow-alpha), transparent);
1674
+ }
1675
+ }
1676
+ }
1677
+ }
1448
1678
  .focus\:border-blue-500 {
1449
1679
  &:focus {
1450
1680
  border-color: var(--color-blue-500);
1451
1681
  }
1452
1682
  }
1683
+ .focus\:border-purple-500 {
1684
+ &:focus {
1685
+ border-color: var(--color-purple-500);
1686
+ }
1687
+ }
1453
1688
  .focus\:ring-2 {
1454
1689
  &:focus {
1455
1690
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
@@ -1461,6 +1696,14 @@
1461
1696
  --tw-ring-color: var(--color-blue-500);
1462
1697
  }
1463
1698
  }
1699
+ .focus\:ring-purple-500\/20 {
1700
+ &:focus {
1701
+ --tw-ring-color: color-mix(in srgb, hsl(264 77% 77%) 20%, transparent);
1702
+ @supports (color: color-mix(in lab, red, red)) {
1703
+ --tw-ring-color: color-mix(in oklab, var(--color-purple-500) 20%, transparent);
1704
+ }
1705
+ }
1706
+ }
1464
1707
  .focus\:ring-slate-500 {
1465
1708
  &:focus {
1466
1709
  --tw-ring-color: var(--color-slate-500);
@@ -1478,6 +1721,14 @@
1478
1721
  outline-style: none;
1479
1722
  }
1480
1723
  }
1724
+ .active\:scale-100 {
1725
+ &:active {
1726
+ --tw-scale-x: 100%;
1727
+ --tw-scale-y: 100%;
1728
+ --tw-scale-z: 100%;
1729
+ scale: var(--tw-scale-x) var(--tw-scale-y);
1730
+ }
1731
+ }
1481
1732
  .disabled\:cursor-not-allowed {
1482
1733
  &:disabled {
1483
1734
  cursor: not-allowed;
@@ -1488,6 +1739,28 @@
1488
1739
  opacity: 50%;
1489
1740
  }
1490
1741
  }
1742
+ .disabled\:hover\:scale-100 {
1743
+ &:disabled {
1744
+ &:hover {
1745
+ @media (hover: hover) {
1746
+ --tw-scale-x: 100%;
1747
+ --tw-scale-y: 100%;
1748
+ --tw-scale-z: 100%;
1749
+ scale: var(--tw-scale-x) var(--tw-scale-y);
1750
+ }
1751
+ }
1752
+ }
1753
+ }
1754
+ .disabled\:hover\:shadow-lg {
1755
+ &:disabled {
1756
+ &:hover {
1757
+ @media (hover: hover) {
1758
+ --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1759
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1760
+ }
1761
+ }
1762
+ }
1763
+ }
1491
1764
  .md\:grid-cols-2 {
1492
1765
  @media (width >= 48rem) {
1493
1766
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -8808,6 +9081,21 @@
8808
9081
  initial-value: "";
8809
9082
  inherits: false;
8810
9083
  }
9084
+ @property --tw-scale-x {
9085
+ syntax: "*";
9086
+ inherits: false;
9087
+ initial-value: 1;
9088
+ }
9089
+ @property --tw-scale-y {
9090
+ syntax: "*";
9091
+ inherits: false;
9092
+ initial-value: 1;
9093
+ }
9094
+ @property --tw-scale-z {
9095
+ syntax: "*";
9096
+ inherits: false;
9097
+ initial-value: 1;
9098
+ }
8811
9099
  @keyframes spin {
8812
9100
  to {
8813
9101
  transform: rotate(360deg);
@@ -8878,6 +9166,9 @@
8878
9166
  --tw-backdrop-sepia: initial;
8879
9167
  --tw-duration: initial;
8880
9168
  --tw-content: "";
9169
+ --tw-scale-x: 1;
9170
+ --tw-scale-y: 1;
9171
+ --tw-scale-z: 1;
8881
9172
  --tw-ease: initial;
8882
9173
  }
8883
9174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAe5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA6fxE,CAAC"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAe5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAmgBxE,CAAC"}
@@ -33,7 +33,9 @@ export const getResolvers = (subgraph) => {
33
33
  String(filter.code || "").toLowerCase())
34
34
  return false;
35
35
  if (filter.name &&
36
- !String(builder.name || "").toLowerCase().includes(String(filter.name || "").toLowerCase()))
36
+ !String(builder.name || "")
37
+ .toLowerCase()
38
+ .includes(String(filter.name || "").toLowerCase()))
37
39
  return false;
38
40
  if (filter.slug &&
39
41
  String(builder.slug || "").toLowerCase() !==
@@ -346,9 +348,7 @@ export const getResolvers = (subgraph) => {
346
348
  facetTargets: Array.isArray(rtState.facetTargets)
347
349
  ? rtState.facetTargets
348
350
  : [],
349
- services: Array.isArray(rtState.services)
350
- ? rtState.services
351
- : [],
351
+ services: Array.isArray(rtState.services) ? rtState.services : [],
352
352
  optionGroups: Array.isArray(rtState.optionGroups)
353
353
  ? rtState.optionGroups
354
354
  : [],
@@ -378,7 +378,10 @@ export const getResolvers = (subgraph) => {
378
378
  const description = String(state?.description ?? state?.slug ?? "");
379
379
  const about = String(state?.about ?? "");
380
380
  const isOperator = state?.isOperator ?? false;
381
- const operationalHubMember = state?.operationalHubMember ?? { name: null, phid: null };
381
+ const operationalHubMember = state?.operationalHubMember ?? {
382
+ name: null,
383
+ phid: null,
384
+ };
382
385
  // Document model uses 'skils' (typo), but GraphQL schema uses 'skills'
383
386
  const skills = Array.isArray(state?.skils)
384
387
  ? state.skils
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YAoSpB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/builders-addon/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YAmSpB,CAAC"}
@@ -209,7 +209,7 @@ export const schema = gql `
209
209
  completed: Int!
210
210
  }
211
211
 
212
- # PRODUCTS #
212
+ # PRODUCTS #
213
213
 
214
214
  type BuilderProduct {
215
215
  id: PHID!
@@ -290,5 +290,4 @@ export const schema = gql `
290
290
  content: String!
291
291
  displayOrder: Int!
292
292
  }
293
-
294
293
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/networks/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK/D,eAAO,MAAM,YAAY,GACvB,UAAU,YAAY,KACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAkNxB,CAAC"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/networks/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK/D,eAAO,MAAM,YAAY,GACvB,UAAU,YAAY,KACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAqNxB,CAAC"}
@@ -102,7 +102,10 @@ export const getResolvers = (subgraph) => {
102
102
  description: state?.description || state?.slug || "",
103
103
  lastModified: state.lastModified || null,
104
104
  isOperator: state?.isOperator ?? false,
105
- operationalHubMember: state?.operationalHubMember ?? { name: null, phid: null },
105
+ operationalHubMember: state?.operationalHubMember ?? {
106
+ name: null,
107
+ phid: null,
108
+ },
106
109
  _contributorPhids: contributorPhids, // Internal field for resolver
107
110
  status: state?.status || null,
108
111
  skills: state?.skils || state?.skills || [],
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/workstreams/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAuC5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA09BxE,CAAC"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/workstreams/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAuC5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA++BxE,CAAC"}
@@ -439,9 +439,16 @@ export const getResolvers = (subgraph) => {
439
439
  // isOperator: Boolean! - non-nullable, default to false
440
440
  const isOperator = state?.isOperator ?? false;
441
441
  // operationalHubMember: OpHubMember! - non-nullable
442
- const operationalHubMember = state?.operationalHubMember ?? { name: null, phid: null };
442
+ const operationalHubMember = state?.operationalHubMember ?? {
443
+ name: null,
444
+ phid: null,
445
+ };
443
446
  // skills: [BuilderSkill!]! - non-nullable array (document model uses 'skils' typo)
444
- const skills = Array.isArray(state?.skils) ? state.skils : Array.isArray(state?.skills) ? state.skills : [];
447
+ const skills = Array.isArray(state?.skils)
448
+ ? state.skils
449
+ : Array.isArray(state?.skills)
450
+ ? state.skills
451
+ : [];
445
452
  // scopes: [BuilderScope!]! - non-nullable array
446
453
  const scopes = Array.isArray(state?.scopes) ? state.scopes : [];
447
454
  // links: [BuilderLink!]! - non-nullable array
@@ -550,9 +557,16 @@ export const getResolvers = (subgraph) => {
550
557
  // isOperator: Boolean! - non-nullable, default to false
551
558
  const isOperator = state?.isOperator ?? false;
552
559
  // operationalHubMember: OpHubMember! - non-nullable
553
- const operationalHubMember = state?.operationalHubMember ?? { name: null, phid: null };
560
+ const operationalHubMember = state?.operationalHubMember ?? {
561
+ name: null,
562
+ phid: null,
563
+ };
554
564
  // skills: [BuilderSkill!]! - non-nullable array (document model uses 'skils' typo)
555
- const skills = Array.isArray(state?.skils) ? state.skils : Array.isArray(state?.skills) ? state.skills : [];
565
+ const skills = Array.isArray(state?.skils)
566
+ ? state.skils
567
+ : Array.isArray(state?.skills)
568
+ ? state.skills
569
+ : [];
556
570
  // scopes: [BuilderScope!]! - non-nullable array
557
571
  const scopes = Array.isArray(state?.scopes) ? state.scopes : [];
558
572
  // links: [BuilderLink!]! - non-nullable array
@@ -723,9 +737,16 @@ export const getResolvers = (subgraph) => {
723
737
  // isOperator: Boolean! - non-nullable, default to false
724
738
  const isOperator = state?.isOperator ?? false;
725
739
  // operationalHubMember: OpHubMember! - non-nullable
726
- const operationalHubMember = state?.operationalHubMember ?? { name: null, phid: null };
740
+ const operationalHubMember = state?.operationalHubMember ?? {
741
+ name: null,
742
+ phid: null,
743
+ };
727
744
  // skills: [BuilderSkill!]! - non-nullable array (document model uses 'skils' typo)
728
- const skills = Array.isArray(state?.skils) ? state.skils : Array.isArray(state?.skills) ? state.skills : [];
745
+ const skills = Array.isArray(state?.skils)
746
+ ? state.skils
747
+ : Array.isArray(state?.skills)
748
+ ? state.skills
749
+ : [];
729
750
  // scopes: [BuilderScope!]! - non-nullable array
730
751
  const scopes = Array.isArray(state?.scopes) ? state.scopes : [];
731
752
  // links: [BuilderLink!]! - non-nullable array
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": "1.0.3",
4
+ "version": "1.2.0",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
7
7
  "type": "git",
@@ -69,12 +69,12 @@
69
69
  "service-unstartup": "bash ./node_modules/@powerhousedao/ph-cli/dist/scripts/service-unstartup.sh"
70
70
  },
71
71
  "dependencies": {
72
- "@powerhousedao/builder-profile": "1.0.2",
72
+ "@powerhousedao/builder-profile": "1.0.3",
73
73
  "@powerhousedao/builder-tools": "5.3.3",
74
74
  "@powerhousedao/common": "5.3.3",
75
75
  "@powerhousedao/design-system": "5.3.3",
76
76
  "@powerhousedao/document-engineering": "^1.40.1",
77
- "@powerhousedao/project-management": "1.0.2",
77
+ "@powerhousedao/project-management": "1.0.3",
78
78
  "@powerhousedao/vetra": "^5.3.3",
79
79
  "@uiw/react-md-editor": "^4.0.8",
80
80
  "document-model": "5.3.3",