@burdenoff/fluidgrids-fe-sdk 2026.1111.21 → 2026.1111.22
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/README.md +13 -0
- package/dist/{AiStudioPage-CJdzRL26.js → AiStudioPage-DIfF4LhQ.js} +5 -5
- package/dist/{DataSinkDashboardPage-hrwQSvks.js → DataSinkDashboardPage-DDvNPS8Z.js} +1 -1
- package/dist/{DataTablesPage-BZy2z0LB.js → DataTablesPage-BpnF13UT.js} +9 -1
- package/dist/{ExecutionDetailPage-DKp421Fj.js → ExecutionDetailPage-DYLWtHRG.js} +5 -5
- package/dist/{ExecutionsListPage-DwJQfDPt.js → ExecutionsListPage-D63aCXJH.js} +4 -4
- package/dist/{FluidGridsProvider-CbY91ZQq.js → FluidGridsProvider-CWyQ8ziM.js} +2 -1
- package/dist/{HistoryPage-BLXZJDoJ.js → HistoryPage-CNXgUMb0.js} +1 -1
- package/dist/{InsightsPage-ChnoW5U4.js → InsightsPage-Duo83yAM.js} +1 -1
- package/dist/{MissingNodesInstallModal-mYFfy9Gg.js → MissingNodesInstallModal-Q3RYBvS8.js} +1 -1
- package/dist/{QuotaExhaustedDialog-DWm_YWL7.js → QuotaExhaustedDialog-ChBoJnRo.js} +3 -2
- package/dist/{SettingsPage-CXoKX0px.js → SettingsPage-DI_vIG7t.js} +2 -2
- package/dist/{TemplateCard-HIMsb47R.js → TemplateCard-6W2q2wiK.js} +4 -3
- package/dist/{TemplateConfigurationModal-BNtbJ2fv.js → TemplateConfigurationModal-qNQGP7cm.js} +1 -1
- package/dist/{TemplateDetailPanel-C6Zh2WRF.js → TemplateDetailPanel-CQvYqhVO.js} +1 -1
- package/dist/{TemplatePreview-_wUMSwh_.js → TemplatePreview-t3251W_n.js} +4 -4
- package/dist/{TemplatesPage-DBfL-ao9.js → TemplatesPage-Bvg6R2P9.js} +6 -5
- package/dist/{WorkflowBuilder-CYmpQtIQ.js → WorkflowBuilder-C-hgvww2.js} +3 -3
- package/dist/{WorkflowBuilder-CMZi6wQE.js → WorkflowBuilder-DdvSGsxr.js} +8 -8
- package/dist/{WorkflowSearchRedirect-iWzvY9Qo.js → WorkflowSearchRedirect-33Vs4FKc.js} +1 -1
- package/dist/{WorkflowsList-C8aoqtRE.js → WorkflowsList-C3bHLpSv.js} +147 -22
- package/dist/agent-tools.js +1 -1
- package/dist/{agentTools-CrEWQ5st.js → agentTools-BjhxAdlt.js} +3 -3
- package/dist/{canvasNoteTools-6BQYNCee.js → canvasNoteTools-CZEFFhRp.js} +2 -2
- package/dist/{code-editor-field-CoRq10k7.js → code-editor-field-CfP0QYUD.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-Dwev-C_g.js → flow-builder-CE8cNXNi.js} +16 -73
- package/dist/fluidgridsEvents-Dm5CaHtr.js +162 -0
- package/dist/history.js +1 -1
- package/dist/{index-6JR2vD9J.d.ts → index-7eJQwsNS.d.ts} +3 -19
- package/dist/index.d.ts +2 -1
- package/dist/index.js +29 -27
- package/dist/{node-detail-view-BFBSKj5w.js → node-detail-view-BoR0vYZ3.js} +5 -5
- package/dist/{node-editor-tab-body-Cz9kOlxu.js → node-editor-tab-body-DxMbKspp.js} +2 -2
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-xPh0iIzy.js → popover-B1aKz7DC.js} +1 -1
- package/dist/{quick-config-panel-Ym05lyGn.js → quick-config-panel-DXvLJdeW.js} +3 -3
- package/dist/quota-Cdt8yz7N.js +152 -0
- package/dist/quota.d.ts +3 -0
- package/dist/quota.js +4 -0
- package/dist/runsQuota-DsniKiSg.d.ts +20 -0
- package/dist/runsQuota-DvXR6mRN.js +100 -0
- package/dist/{schedule-panel-54D5W5Qk.js → schedule-panel-CY6S4JMd.js} +5 -5
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-LL3ofDN7.js → sidebar-node-editor-FU3fvOjh.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{uiMarkTools-nlmzsHQM.js → uiMarkTools-DZ6akjQK.js} +1 -1
- package/dist/useActionParam-B0ebTZmg.js +83 -0
- package/dist/{useDurableParity-BScby67i.js → useDurableParity-BApRraSO.js} +1 -1
- package/dist/{useExecutions-B0VzQcY2.js → useExecutions-C2a4EcvC.js} +2 -2
- package/dist/{useObservability-FfQGgW6W.js → useObservability-BmbeK5bG.js} +2 -2
- package/dist/{useRunHistory-BZJg72kd.js → useRunHistory-CqfDFRzr.js} +1 -1
- package/dist/{useWorkflowCodeExport-CUWMlJbi.js → useWorkflowCodeExport-DebpM48M.js} +1 -1
- package/dist/{useWorkflows-Czz5DlL0.js → useWorkflows-D1-rYzGK.js} +2 -2
- package/dist/workflow-builder.js +4 -4
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +14 -14
- package/dist/workflows-list.d.ts +6 -0
- package/dist/workflows-list.js +3 -2
- package/package.json +5 -1
- package/dist/fluidgridsEvents-CNdcrUNN.js +0 -310
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-
|
|
4
|
-
import { At as createThenOpen, t as FluidGridsContext } from "./FluidGridsProvider-
|
|
5
|
-
import { C as typeScriptModuleFile, S as typeScriptImportSource, T as CreateWorkflowRefusalDialog, a as parseWorkflowImport, b as readProjectArchive, c as MAX_IMPORT_ARCHIVE_BYTES, d as checkTypeScriptImport, i as downloadWorkflowExport, l as MAX_IMPORT_SOURCE_BYTES, m as importFileKind, n as useExportWorkflowAs, o as CODE_EXPORT_FORMATS, p as importAcceptAttribute, s as ImportSourceError, u as assertImportByteSize, w as workflowNameFromFile, y as primaryImportModule } from "./useWorkflowCodeExport-
|
|
6
|
-
import {
|
|
3
|
+
import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-D1-rYzGK.js";
|
|
4
|
+
import { At as createThenOpen, t as FluidGridsContext } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
5
|
+
import { C as typeScriptModuleFile, S as typeScriptImportSource, T as CreateWorkflowRefusalDialog, a as parseWorkflowImport, b as readProjectArchive, c as MAX_IMPORT_ARCHIVE_BYTES, d as checkTypeScriptImport, i as downloadWorkflowExport, l as MAX_IMPORT_SOURCE_BYTES, m as importFileKind, n as useExportWorkflowAs, o as CODE_EXPORT_FORMATS, p as importAcceptAttribute, s as ImportSourceError, u as assertImportByteSize, w as workflowNameFromFile, y as primaryImportModule } from "./useWorkflowCodeExport-DebpM48M.js";
|
|
6
|
+
import { c as isQuotaExhaustedFailure, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
7
7
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
8
8
|
import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
9
|
-
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-
|
|
9
|
+
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-ChBoJnRo.js";
|
|
10
10
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
11
11
|
import { CF as WorkflowExportFormat, gF as WorkflowAccessFilter } from "./graphql-types-CDKVWH2R.js";
|
|
12
12
|
import { i as canShareWorkflow, r as canEditWorkflow, t as WorkflowShareDialog } from "./WorkflowShareDialog-mbIwRQUY.js";
|
|
13
|
+
import { i as useOpenRequest, n as ACTION_PARAM_VALUES, r as useActionParam } from "./useActionParam-B0ebTZmg.js";
|
|
13
14
|
import { l as useFluidGridsFlag, t as FLUIDGRIDS_FLAGS } from "./feature-flags-DM5myWaD.js";
|
|
14
15
|
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
15
16
|
import { $t as RenameWorkflowProjectDocument, G as DeleteWorkflowFolderDocument, Hr as WorkflowProjectsDocument, K as DeleteWorkflowProjectDocument, M as CreateWorkflowProjectDocument, Nr as WorkflowFoldersDocument, Qt as RenameWorkflowFolderDocument, Tt as MoveWorkflowFolderDocument, g as BulkMoveWorkflowsToFolderDocument, h as BulkDeleteWorkflowsDocument, j as CreateWorkflowFolderDocument, m as BulkAssignWorkflowsToProjectDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
16
|
-
import { a as useExecutions } from "./useExecutions-
|
|
17
|
+
import { a as useExecutions } from "./useExecutions-C2a4EcvC.js";
|
|
17
18
|
import { a as firstWorkflowProgress, i as builderPathFor, r as GUIDED_TOUR_STATE } from "./firstWorkflow-C_h0KMB2.js";
|
|
18
19
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
19
20
|
import { i as workflowsListControls } from "./pageControlSpecs-DZJ9K37m.js";
|
|
20
21
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
21
22
|
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
22
|
-
import { useNavigate } from "react-router";
|
|
23
|
+
import { useNavigate, useSearchParams } from "react-router";
|
|
23
24
|
import { Icon } from "@iconify/react";
|
|
24
25
|
import { cn } from "@burdenoff/fe-libs/utils";
|
|
25
26
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -712,11 +713,13 @@ function declaredLength(response) {
|
|
|
712
713
|
const value = Number(response.headers.get("content-length"));
|
|
713
714
|
return Number.isFinite(value) && value > 0 ? value : null;
|
|
714
715
|
}
|
|
715
|
-
function WorkflowImportDialog({ onImported }) {
|
|
716
|
+
function WorkflowImportDialog({ onImported, openRequested, onOpenRequestHandled }) {
|
|
716
717
|
const tr = useTr();
|
|
717
718
|
const codeFirst = useFluidGridsFlag(FLUIDGRIDS_FLAGS.codeFirst);
|
|
718
719
|
const { importWorkflow, loading, error: importError } = useImportWorkflow();
|
|
719
720
|
const [open, setOpen] = useState(false);
|
|
721
|
+
const openFromRequest = useCallback(() => setOpen(true), []);
|
|
722
|
+
useOpenRequest(openRequested, openFromRequest, onOpenRequestHandled);
|
|
720
723
|
const [typeScript, setTypeScript] = useState(null);
|
|
721
724
|
const [issues, setIssues] = useState(null);
|
|
722
725
|
const [submitted, setSubmitted] = useState(false);
|
|
@@ -1447,20 +1450,22 @@ function FolderRow({ folder, depth, selectedFolderId, onSelect, onCreateChild, o
|
|
|
1447
1450
|
* itself owns that filtering (see WorkflowsList's `folderFilter` state) so
|
|
1448
1451
|
* this component stays a pure navigation/management surface.
|
|
1449
1452
|
*/
|
|
1450
|
-
function WorkflowFolderSidebar({ selectedFolderId, onSelectFolder }) {
|
|
1453
|
+
function WorkflowFolderSidebar({ selectedFolderId, onSelectFolder, createRequested, onCreateRequestHandled }) {
|
|
1451
1454
|
const tr = useTr();
|
|
1452
1455
|
const { folders, loading, refetch } = useWorkflowFolders();
|
|
1453
1456
|
const { createFolder, renameFolder, deleteFolder } = useWorkflowFolderActions();
|
|
1454
1457
|
const [dialog, setDialog] = useState(null);
|
|
1455
1458
|
const [name, setName] = useState("");
|
|
1456
1459
|
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
1457
|
-
const openCreate = (parentId) => {
|
|
1460
|
+
const openCreate = useCallback((parentId) => {
|
|
1458
1461
|
setName("");
|
|
1459
1462
|
setDialog({
|
|
1460
1463
|
mode: "create",
|
|
1461
1464
|
parentId
|
|
1462
1465
|
});
|
|
1463
|
-
};
|
|
1466
|
+
}, []);
|
|
1467
|
+
const openCreateTopLevel = useCallback(() => openCreate(null), [openCreate]);
|
|
1468
|
+
useOpenRequest(createRequested, openCreateTopLevel, onCreateRequestHandled);
|
|
1464
1469
|
const openRename = (folder) => {
|
|
1465
1470
|
setName(folder.name);
|
|
1466
1471
|
setDialog({
|
|
@@ -1975,6 +1980,110 @@ function WorkflowMoveToProjectDialog({ workflow, onClose, onMoved }) {
|
|
|
1975
1980
|
});
|
|
1976
1981
|
}
|
|
1977
1982
|
|
|
1983
|
+
// src/pages/workflowsListUrlState.ts
|
|
1984
|
+
/**
|
|
1985
|
+
* URL-driven filter state for the workflows list (BOFF-10854).
|
|
1986
|
+
*
|
|
1987
|
+
* The access, status and folder filters live in the query string so the
|
|
1988
|
+
* shell's navigation ("Shared with me", "Archived", a folder) can link
|
|
1989
|
+
* straight to a filtered list, and a filtered list survives reload and
|
|
1990
|
+
* back/forward. Supported values:
|
|
1991
|
+
*
|
|
1992
|
+
* ?access=mine | shared (absent or "all" = every visible workflow)
|
|
1993
|
+
* ?status=active | draft | archived | deprecated (absent = any status)
|
|
1994
|
+
* ?folder=<folder id> (absent = all folders)
|
|
1995
|
+
*
|
|
1996
|
+
* Unknown values fall back to the default rather than erroring. Writes use
|
|
1997
|
+
* history replace, so toggling chips does not flood the back stack, and a
|
|
1998
|
+
* default value removes its parameter so plain `/workflows/list` stays clean.
|
|
1999
|
+
*/
|
|
2000
|
+
const WORKFLOWS_LIST_PARAMS = {
|
|
2001
|
+
access: "access",
|
|
2002
|
+
status: "status",
|
|
2003
|
+
folder: "folder"
|
|
2004
|
+
};
|
|
2005
|
+
/** The workflow statuses the list's status chips offer. */
|
|
2006
|
+
const WORKFLOW_LIST_STATUSES = [
|
|
2007
|
+
"ACTIVE",
|
|
2008
|
+
"DRAFT",
|
|
2009
|
+
"ARCHIVED",
|
|
2010
|
+
"DEPRECATED"
|
|
2011
|
+
];
|
|
2012
|
+
const ACCESS_BY_PARAM = {
|
|
2013
|
+
all: "ALL",
|
|
2014
|
+
mine: "OWNED_BY_ME",
|
|
2015
|
+
shared: "SHARED_WITH_ME"
|
|
2016
|
+
};
|
|
2017
|
+
const PARAM_BY_ACCESS = {
|
|
2018
|
+
["ALL"]: null,
|
|
2019
|
+
["OWNED_BY_ME"]: "mine",
|
|
2020
|
+
["SHARED_WITH_ME"]: "shared"
|
|
2021
|
+
};
|
|
2022
|
+
function accessFromParam(value) {
|
|
2023
|
+
if (!value) return "ALL";
|
|
2024
|
+
return ACCESS_BY_PARAM[value.trim().toLowerCase()] ?? "ALL";
|
|
2025
|
+
}
|
|
2026
|
+
function accessToParam(access) {
|
|
2027
|
+
return PARAM_BY_ACCESS[access];
|
|
2028
|
+
}
|
|
2029
|
+
function isWorkflowListStatus(value) {
|
|
2030
|
+
return WORKFLOW_LIST_STATUSES.includes(value);
|
|
2031
|
+
}
|
|
2032
|
+
/** `archived` / `ARCHIVED` → `ARCHIVED`; anything unknown → no filter. */
|
|
2033
|
+
function statusFromParam(value) {
|
|
2034
|
+
if (!value) return null;
|
|
2035
|
+
const upper = value.trim().toUpperCase();
|
|
2036
|
+
return isWorkflowListStatus(upper) ? upper : null;
|
|
2037
|
+
}
|
|
2038
|
+
function statusToParam(status) {
|
|
2039
|
+
if (!status) return null;
|
|
2040
|
+
const upper = status.toUpperCase();
|
|
2041
|
+
return isWorkflowListStatus(upper) ? upper.toLowerCase() : null;
|
|
2042
|
+
}
|
|
2043
|
+
function folderFromParam(value) {
|
|
2044
|
+
const trimmed = value?.trim();
|
|
2045
|
+
return trimmed ? trimmed : null;
|
|
2046
|
+
}
|
|
2047
|
+
/**
|
|
2048
|
+
* Applies a filter patch to a copy of `params`. Keys missing from the patch
|
|
2049
|
+
* are left untouched; default values delete their parameter. Unrelated
|
|
2050
|
+
* parameters (e.g. `?action=`) are preserved.
|
|
2051
|
+
*/
|
|
2052
|
+
function applyFilterPatch(params, patch) {
|
|
2053
|
+
const next = new URLSearchParams(params);
|
|
2054
|
+
const write = (key, value) => {
|
|
2055
|
+
if (value === null) next.delete(key);
|
|
2056
|
+
else next.set(key, value);
|
|
2057
|
+
};
|
|
2058
|
+
if (patch.access !== void 0) write(WORKFLOWS_LIST_PARAMS.access, accessToParam(patch.access));
|
|
2059
|
+
if (patch.status !== void 0) write(WORKFLOWS_LIST_PARAMS.status, statusToParam(patch.status));
|
|
2060
|
+
if (patch.folder !== void 0) write(WORKFLOWS_LIST_PARAMS.folder, folderFromParam(patch.folder));
|
|
2061
|
+
return next;
|
|
2062
|
+
}
|
|
2063
|
+
function useWorkflowsListUrlState() {
|
|
2064
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
2065
|
+
const access = accessFromParam(searchParams.get(WORKFLOWS_LIST_PARAMS.access));
|
|
2066
|
+
const status = statusFromParam(searchParams.get(WORKFLOWS_LIST_PARAMS.status));
|
|
2067
|
+
const folder = folderFromParam(searchParams.get(WORKFLOWS_LIST_PARAMS.folder));
|
|
2068
|
+
const update = useCallback((patch) => {
|
|
2069
|
+
setSearchParams((prev) => applyFilterPatch(prev, patch), { replace: true });
|
|
2070
|
+
}, [setSearchParams]);
|
|
2071
|
+
return useMemo(() => ({
|
|
2072
|
+
access,
|
|
2073
|
+
status,
|
|
2074
|
+
folder,
|
|
2075
|
+
update,
|
|
2076
|
+
setAccess: (next) => update({ access: next }),
|
|
2077
|
+
setStatus: (next) => update({ status: next }),
|
|
2078
|
+
setFolder: (next) => update({ folder: next })
|
|
2079
|
+
}), [
|
|
2080
|
+
access,
|
|
2081
|
+
status,
|
|
2082
|
+
folder,
|
|
2083
|
+
update
|
|
2084
|
+
]);
|
|
2085
|
+
}
|
|
2086
|
+
|
|
1978
2087
|
// src/pages/WorkflowsList.tsx
|
|
1979
2088
|
var WorkflowsList_exports = /* @__PURE__ */ __exportAll({ WorkflowsList: () => WorkflowsList });
|
|
1980
2089
|
function useStatusFilters() {
|
|
@@ -2037,7 +2146,8 @@ function WorkflowsList() {
|
|
|
2037
2146
|
const STATUS_FILTERS = useStatusFilters();
|
|
2038
2147
|
const ACCESS_FILTERS = useAccessFilters();
|
|
2039
2148
|
const workspaceId = useContext(FluidGridsContext)?.workspaceId ?? "";
|
|
2040
|
-
const
|
|
2149
|
+
const urlFilters = useWorkflowsListUrlState();
|
|
2150
|
+
const { access: accessFilter, status: statusFilter, folder: folderFilter, setAccess: setAccessFilter, setStatus: setStatusFilter, setFolder: setFolderFilter } = urlFilters;
|
|
2041
2151
|
const { workflows, loading, error, tagsByKey, refetch } = useWorkflowDefinitions({
|
|
2042
2152
|
limit: 100,
|
|
2043
2153
|
latestOnly: true,
|
|
@@ -2047,18 +2157,24 @@ function WorkflowsList() {
|
|
|
2047
2157
|
const [moving, setMoving] = useState(null);
|
|
2048
2158
|
const filteredByAccess = accessFilter !== "ALL";
|
|
2049
2159
|
const { getWorkflow } = useLazyWorkflowDefinition();
|
|
2050
|
-
const
|
|
2160
|
+
const createPermission = useFluidGridsPermission(FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE);
|
|
2161
|
+
const canCreate = createPermission.allowed;
|
|
2162
|
+
const importRequest = useActionParam(ACTION_PARAM_VALUES.import, createPermission);
|
|
2163
|
+
const newFolderRequest = useActionParam(ACTION_PARAM_VALUES.newFolder);
|
|
2051
2164
|
const [search, setSearch] = useState("");
|
|
2052
|
-
const [statusFilter, setStatusFilter] = useState(null);
|
|
2053
2165
|
const [tagFilter, setTagFilter] = useState(null);
|
|
2054
|
-
const [folderFilter, setFolderFilter] = useState(null);
|
|
2055
2166
|
const [projectFilter, setProjectFilter] = useState(null);
|
|
2056
2167
|
const [selectMode, setSelectMode] = useState(false);
|
|
2057
2168
|
const [selectedIds, setSelectedIds] = useState(/* @__PURE__ */ new Set());
|
|
2058
2169
|
const presentStatuses = useMemo(() => {
|
|
2059
2170
|
const seen = new Set(workflows.map((w) => w.status ?? "DRAFT"));
|
|
2171
|
+
if (statusFilter) seen.add(statusFilter);
|
|
2060
2172
|
return STATUS_FILTERS.filter((s) => seen.has(s.value));
|
|
2061
|
-
}, [
|
|
2173
|
+
}, [
|
|
2174
|
+
workflows,
|
|
2175
|
+
STATUS_FILTERS,
|
|
2176
|
+
statusFilter
|
|
2177
|
+
]);
|
|
2062
2178
|
const presentTags = useMemo(() => {
|
|
2063
2179
|
const byId = /* @__PURE__ */ new Map();
|
|
2064
2180
|
for (const w of workflows) for (const a of tagsByKey[w.workflowKey] ?? []) if (!byId.has(a.tagId)) byId.set(a.tagId, {
|
|
@@ -2188,7 +2304,9 @@ function WorkflowsList() {
|
|
|
2188
2304
|
children: [
|
|
2189
2305
|
/* @__PURE__ */ jsx(WorkflowFolderSidebar, {
|
|
2190
2306
|
selectedFolderId: folderFilter,
|
|
2191
|
-
onSelectFolder: setFolderFilter
|
|
2307
|
+
onSelectFolder: setFolderFilter,
|
|
2308
|
+
createRequested: newFolderRequest.requested,
|
|
2309
|
+
onCreateRequestHandled: newFolderRequest.handled
|
|
2192
2310
|
}),
|
|
2193
2311
|
/* @__PURE__ */ jsxs("div", {
|
|
2194
2312
|
className: "flex flex-1 flex-col gap-5 p-4 sm:p-6",
|
|
@@ -2223,7 +2341,11 @@ function WorkflowsList() {
|
|
|
2223
2341
|
]
|
|
2224
2342
|
}),
|
|
2225
2343
|
createButton,
|
|
2226
|
-
/* @__PURE__ */ jsx(WorkflowImportDialog, {
|
|
2344
|
+
/* @__PURE__ */ jsx(WorkflowImportDialog, {
|
|
2345
|
+
onImported: () => void refetch(),
|
|
2346
|
+
openRequested: importRequest.requested,
|
|
2347
|
+
onOpenRequestHandled: importRequest.handled
|
|
2348
|
+
})
|
|
2227
2349
|
]
|
|
2228
2350
|
}),
|
|
2229
2351
|
!loading && !error && /* @__PURE__ */ jsx(FirstWorkflowChecklist, {
|
|
@@ -2276,7 +2398,7 @@ function WorkflowsList() {
|
|
|
2276
2398
|
className: "size-4"
|
|
2277
2399
|
}), tr("fluidgrids.workflowsList.bulk.selectToggle", "Select")]
|
|
2278
2400
|
}),
|
|
2279
|
-
presentStatuses.length > 1 && /* @__PURE__ */ jsxs("div", {
|
|
2401
|
+
(presentStatuses.length > 1 || statusFilter !== null) && /* @__PURE__ */ jsxs("div", {
|
|
2280
2402
|
className: "flex flex-wrap items-center gap-1.5",
|
|
2281
2403
|
children: [/* @__PURE__ */ jsx("button", {
|
|
2282
2404
|
type: "button",
|
|
@@ -2285,7 +2407,7 @@ function WorkflowsList() {
|
|
|
2285
2407
|
children: tr("fluidgrids.workflowsList.statusFilterAll", "All")
|
|
2286
2408
|
}), presentStatuses.map((s) => /* @__PURE__ */ jsx("button", {
|
|
2287
2409
|
type: "button",
|
|
2288
|
-
onClick: () => setStatusFilter(
|
|
2410
|
+
onClick: () => setStatusFilter(statusFilter === s.value ? null : s.value),
|
|
2289
2411
|
className: cn("rounded-full border px-3 py-1 text-xs font-medium transition-colors", statusFilter === s.value ? "border-transparent bg-primary text-primary-foreground" : "border-border bg-card text-muted-foreground hover:text-foreground"),
|
|
2290
2412
|
children: s.label
|
|
2291
2413
|
}, s.value))]
|
|
@@ -2365,9 +2487,12 @@ function WorkflowsList() {
|
|
|
2365
2487
|
size: "sm",
|
|
2366
2488
|
onClick: () => {
|
|
2367
2489
|
setSearch("");
|
|
2368
|
-
setStatusFilter(null);
|
|
2369
2490
|
setTagFilter(null);
|
|
2370
|
-
|
|
2491
|
+
urlFilters.update({
|
|
2492
|
+
status: null,
|
|
2493
|
+
folder: null,
|
|
2494
|
+
access: "ALL"
|
|
2495
|
+
});
|
|
2371
2496
|
},
|
|
2372
2497
|
children: tr("fluidgrids.workflowsList.clearFiltersButton", "Clear filters")
|
|
2373
2498
|
})
|
package/dist/agent-tools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-
|
|
2
|
+
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-DZ6akjQK.js";
|
|
3
3
|
import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-DGCXjTmZ.js";
|
|
4
4
|
|
|
5
5
|
export { AgentCalloutOverlay, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { B as createConfiguredNode, Nt as useSaveStatusStore, Q as selectedOperationOf, R as SENSITIVE_PARAM, Y as nodeTitle, Z as paramsFromOperation, _ as registryNodeData, f as isNodeConfigsInitialized, gt as autosaveAllowedFor, o as NODE_CONFIGS, q as fixedParameterState, wt as isFlowComplete } from "./FluidGridsProvider-
|
|
2
|
+
import { B as createConfiguredNode, Nt as useSaveStatusStore, Q as selectedOperationOf, R as SENSITIVE_PARAM, Y as nodeTitle, Z as paramsFromOperation, _ as registryNodeData, f as isNodeConfigsInitialized, gt as autosaveAllowedFor, o as NODE_CONFIGS, q as fixedParameterState, wt as isFlowComplete } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
3
3
|
import { E as resolveOutputHandles, H as useFlowStore, T as resolveInputHandles } from "./node-operation-selection--oy-yEq_.js";
|
|
4
|
-
import { j as isNodeTypeHiddenFromPalette } from "./TemplateCard-
|
|
5
|
-
import {
|
|
4
|
+
import { j as isNodeTypeHiddenFromPalette } from "./TemplateCard-6W2q2wiK.js";
|
|
5
|
+
import { g as computeAttachPosition } from "./flow-builder-CE8cNXNi.js";
|
|
6
6
|
import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-DGCXjTmZ.js";
|
|
3
|
-
import { Q as selectedOperationOf, Y as nodeTitle, Z as paramsFromOperation } from "./FluidGridsProvider-
|
|
3
|
+
import { Q as selectedOperationOf, Y as nodeTitle, Z as paramsFromOperation } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
4
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
5
|
-
import {
|
|
5
|
+
import { p as notesKeyOf } from "./flow-builder-CE8cNXNi.js";
|
|
6
6
|
import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { g as toCodeMirrorDiagnostics } from "./node-operation-selection--oy-yEq_.js";
|
|
4
|
-
import { Bn as useBuilderReadOnly } from "./FluidGridsProvider-
|
|
4
|
+
import { Bn as useBuilderReadOnly } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
5
5
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
6
6
|
import { cn } from "@burdenoff/fe-libs/utils";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
package/dist/executions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as ExecutionsListPage } from "./ExecutionsListPage-
|
|
3
|
-
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-
|
|
2
|
+
import { t as ExecutionsListPage } from "./ExecutionsListPage-D63aCXJH.js";
|
|
3
|
+
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-DYLWtHRG.js";
|
|
4
4
|
|
|
5
5
|
export { ExecutionDetailPage, ExecutionsListPage };
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { B as NODE_TYPE_DRAG_DATA_FORMAT, G as isTriggerOperation, H as useFlowStore, M as isImageIcon, T as resolveInputHandles, U as useIsValidConnection, V as STICKY_NOTE_TYPE, j as NodeTypeIcon, r as CODE_WORKFLOW_NODE_TYPE, z as NODE_OPERATION_DRAG_DATA_FORMAT } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
-
import { $t as canAutosave, Bn as useBuilderReadOnly, Bt as phaseAfterAcquire, Ct as watchLeavingLosesChanges, D as InstallWorkflowNodeDocument, E as InstallPurchasedNodeDocument, Et as useSaveWorkflow, F as getNodeMetadata, Fn as getNodeDetail, Ft as useEditLeaseStore, Gt as EDIT_SESSION_ID, H as MissingParametersDialog, Ht as releasesOnClose, In as buildStickyNode, It as bannerOf, Jt as sessionBeforeReload, Kt as forgetSessionForReload, Ln as loadMarkdown, Lt as isLocked, M as UninstallOrganizationPrivateNodeDocument, Mt as saveIndicatorOf, N as UninstallWorkflowNodeDocument, Nt as useSaveStatusStore, Pt as useEditLeaseLocked, Qt as AUTOSAVE_RETRY_DELAYS_MS, Rn as useMarkdownRenderer, Rt as leaseCallQueue, S as CreateStoreOrderDocument, St as touchesSavedFields, T as InstallOrganizationPrivateNodeDocument, Tt as useFlowValidator, U as useRunGuard, Ut as shouldReleaseForIdle, V as useInsertNode, Vt as phaseAfterTakeOver, W as workflowParameterIssues, Wt as tickAction, Xt as rememberRevision, Yt as rememberOwnStatusChange, Zt as AUTOSAVE_DEBOUNCE_MS, _t as departingSave, a as NODES_METADATA, an as workflowFingerprint, b as BrowseWorkflowNodesDocument, bt as leavingLosesChanges, f as isNodeConfigsInitialized, g as registerWorkflowNodeTypes, gt as autosaveAllowedFor, ht as useManualSave, i as AVAILABLE_NODES, in as saveFailureActionOf, jt as refusalOfQuota, k as OrganizationPrivateNodesDocument, l as ensureNodeConfigsLoaded, m as refetchStoreNodes, mt as useGuardedNavigate, nn as inAppLeaveTarget, o as NODE_CONFIGS, on as useNodeExecution, p as onNodeTypesUpdate, qt as rememberSessionForReload, rn as resettledBaseline, s as NODE_TYPES, t as FluidGridsContext, v as scheduleNodePaletteLoad, vn as useCanvasEdges, vt as editStateFor, w as GetNodeInstallableVersionsDocument, wt as isFlowComplete, xn as loadDefinitionJson, xt as savedEverythingBeforeLeaving, yn as useNodeRegistryRevision, yt as editingLeaseLocked, z as buildOperationSeed, zn as BuilderReadOnlyProvider, zt as leaseCallSequence } from "./FluidGridsProvider-
|
|
3
|
+
import { $t as canAutosave, Bn as useBuilderReadOnly, Bt as phaseAfterAcquire, Ct as watchLeavingLosesChanges, D as InstallWorkflowNodeDocument, E as InstallPurchasedNodeDocument, Et as useSaveWorkflow, F as getNodeMetadata, Fn as getNodeDetail, Ft as useEditLeaseStore, Gt as EDIT_SESSION_ID, H as MissingParametersDialog, Ht as releasesOnClose, In as buildStickyNode, It as bannerOf, Jt as sessionBeforeReload, Kt as forgetSessionForReload, Ln as loadMarkdown, Lt as isLocked, M as UninstallOrganizationPrivateNodeDocument, Mt as saveIndicatorOf, N as UninstallWorkflowNodeDocument, Nt as useSaveStatusStore, Pt as useEditLeaseLocked, Qt as AUTOSAVE_RETRY_DELAYS_MS, Rn as useMarkdownRenderer, Rt as leaseCallQueue, S as CreateStoreOrderDocument, St as touchesSavedFields, T as InstallOrganizationPrivateNodeDocument, Tt as useFlowValidator, U as useRunGuard, Ut as shouldReleaseForIdle, V as useInsertNode, Vt as phaseAfterTakeOver, W as workflowParameterIssues, Wt as tickAction, Xt as rememberRevision, Yt as rememberOwnStatusChange, Zt as AUTOSAVE_DEBOUNCE_MS, _t as departingSave, a as NODES_METADATA, an as workflowFingerprint, b as BrowseWorkflowNodesDocument, bt as leavingLosesChanges, f as isNodeConfigsInitialized, g as registerWorkflowNodeTypes, gt as autosaveAllowedFor, ht as useManualSave, i as AVAILABLE_NODES, in as saveFailureActionOf, jt as refusalOfQuota, k as OrganizationPrivateNodesDocument, l as ensureNodeConfigsLoaded, m as refetchStoreNodes, mt as useGuardedNavigate, nn as inAppLeaveTarget, o as NODE_CONFIGS, on as useNodeExecution, p as onNodeTypesUpdate, qt as rememberSessionForReload, rn as resettledBaseline, s as NODE_TYPES, t as FluidGridsContext, v as scheduleNodePaletteLoad, vn as useCanvasEdges, vt as editStateFor, w as GetNodeInstallableVersionsDocument, wt as isFlowComplete, xn as loadDefinitionJson, xt as savedEverythingBeforeLeaving, yn as useNodeRegistryRevision, yt as editingLeaseLocked, z as buildOperationSeed, zn as BuilderReadOnlyProvider, zt as leaseCallSequence } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
5
|
import { n as preloadableLazy } from "./preloadable-lazy-Pp47mqQ9.js";
|
|
6
6
|
import { a as DialogFooter$1, d as Input$1, i as DialogDescription$1, l as DialogTitle$1, o as DialogHeader$1, r as DialogContent$1, t as Dialog$1 } from "./dialog-Cjb4lB4D.js";
|
|
7
|
-
import { _ as storeNodeInstallVersion, a as useTemplateImportFlow, d as filterStoreNodesForPalette, f as getStoreNodeAvailability, g as storeNodeDisplayVersion, h as isStoreNodeUpdateAvailable, k as filterPaletteNodes, m as getStoreNodeType, p as getStoreNodeIcon, t as TemplateCard, u as useWorkflowTemplates, v as useInstalledNodes, y as useGlobalStoreClient } from "./TemplateCard-
|
|
7
|
+
import { _ as storeNodeInstallVersion, a as useTemplateImportFlow, d as filterStoreNodesForPalette, f as getStoreNodeAvailability, g as storeNodeDisplayVersion, h as isStoreNodeUpdateAvailable, k as filterPaletteNodes, m as getStoreNodeType, p as getStoreNodeIcon, t as TemplateCard, u as useWorkflowTemplates, v as useInstalledNodes, y as useGlobalStoreClient } from "./TemplateCard-6W2q2wiK.js";
|
|
8
8
|
import { _ as throwIfResultError, d as emitFluidGridsEvent, m as describeOperationError, n as getFluidGridsClient, s as waitForFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
9
9
|
import { c as useDurableParityEnabled, d as usePaletteGates, l as useFluidGridsFlag, m as useWorkflowTestsEnabled, s as useDurableFunctionNodesEnabled, t as FLUIDGRIDS_FLAGS } from "./feature-flags-DM5myWaD.js";
|
|
10
10
|
import { t as Button$2 } from "./button-DG7y_FVJ.js";
|
|
11
11
|
import { t as PublishCustomNodeAction } from "./PublishCustomNodeAction-5XXnSA3H.js";
|
|
12
|
-
import {
|
|
13
|
-
import { An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, Bn as TakeOverWorkflowEditLeaseDocument, Er as WorkflowDefinitionDocument, Fr as WorkflowGenerationTemplatesDocument, Gt as PushWorkflowToGitDocument, Ir as WorkflowGitCommitsDocument, Jt as RejectWorkflowPromotionDocument, Lr as WorkflowGitDiffDocument, Mr as WorkflowEnvironmentsDocument, Nt as NodeUsageStatusDocument, Rr as WorkflowGitPushesDocument, St as LinkWorkflowGitRepositoryDocument,
|
|
12
|
+
import { o as emitUpgradeClicked, t as emitNodeInstalled } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
13
|
+
import { An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, Bn as TakeOverWorkflowEditLeaseDocument, Er as WorkflowDefinitionDocument, Fr as WorkflowGenerationTemplatesDocument, Gt as PushWorkflowToGitDocument, Ir as WorkflowGitCommitsDocument, Jt as RejectWorkflowPromotionDocument, Lr as WorkflowGitDiffDocument, Mr as WorkflowEnvironmentsDocument, Nt as NodeUsageStatusDocument, Rr as WorkflowGitPushesDocument, St as LinkWorkflowGitRepositoryDocument, Ur as WorkflowPromotionRequestsDocument, X as DeployWorkflowVersionToDevDocument, Xt as ReleaseWorkflowEditLeaseDocument, Yn as UnlinkWorkflowGitRepositoryDocument, Zt as RemoveNodeFromWorkflowsDocument, an as RestoreWorkflowFromGitDocument, b as CancelWorkflowPromotionDocument, bi as WorkflowVersionDrainageDocument, jt as NodeSchemaIntrospectionDocument, l as ApproveWorkflowPromotionDocument, q as DeleteWorkflowRolloutDocument, r as ActivateWorkflowVersionCheckedDocument, sr as UpdateWorkflowEnvironmentPolicyDocument, t as AcquireWorkflowEditLeaseDocument, tn as RequestWorkflowPromotionDocument, vr as WorkflowAuthoringDocument, xi as WorkflowVersioningDocument, zr as WorkflowGitRepositoryDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
14
14
|
import { n as useAgentMarksStore } from "./marksStore-DGCXjTmZ.js";
|
|
15
|
-
import { T as CreateWorkflowRefusalDialog, _ as lineOfNode, f as fileBaseName, g as isLossyFidelityItem, h as isLosslessReport, r as useWorkflowCodeExport, t as downloadWorkflowCodeExport, v as orderedExportFiles, x as sortFidelityItems } from "./useWorkflowCodeExport-
|
|
15
|
+
import { T as CreateWorkflowRefusalDialog, _ as lineOfNode, f as fileBaseName, g as isLossyFidelityItem, h as isLosslessReport, r as useWorkflowCodeExport, t as downloadWorkflowCodeExport, v as orderedExportFiles, x as sortFidelityItems } from "./useWorkflowCodeExport-DebpM48M.js";
|
|
16
|
+
import { r as RUNS_QUOTA_NAME, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
16
17
|
import { t as EntityTagPicker } from "./EntityTagPicker-BqRNsLCQ.js";
|
|
17
18
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
19
|
+
import { n as runsQuotaLevel, t as readRunsQuota } from "./runsQuota-DvXR6mRN.js";
|
|
18
20
|
import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
19
|
-
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-
|
|
21
|
+
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-D1-rYzGK.js";
|
|
20
22
|
import { n as VersionLifecycleBar, r as countLifecycle, t as VersionDiffDialog } from "./VersionDiffDialog-DSN0mU0f.js";
|
|
21
23
|
import { CF as WorkflowExportFormat, Eo as CodeReplaceStatus, QF as WorkflowTestExpectedStatus, SF as WorkflowEnvironment, xu as DrainageStatus, yP as VersioningBehavior } from "./graphql-types-CDKVWH2R.js";
|
|
22
24
|
import { n as useConnections } from "./useConnections-Cs7LCWEM.js";
|
|
@@ -258,9 +260,9 @@ function IntroductionPropertyPanel() {
|
|
|
258
260
|
* waiting for its chunk and React's Suspense throttle (about 0.5 s on first
|
|
259
261
|
* open even with the chunk cached).
|
|
260
262
|
*/
|
|
261
|
-
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-
|
|
262
|
-
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-
|
|
263
|
-
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-
|
|
263
|
+
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-BoR0vYZ3.js").then((m) => m.NodeDetailView), "NodeDetailView");
|
|
264
|
+
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-DXvLJdeW.js").then((m) => m.QuickConfigPanel), "QuickConfigPanel");
|
|
265
|
+
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-FU3fvOjh.js").then((m) => m.SidebarNodeEditor), "SidebarNodeEditor");
|
|
264
266
|
const WorkflowShareDialogOverlay = preloadableLazy(() => import("./WorkflowShareDialog-mbIwRQUY.js").then((n) => n.n).then((m) => m.WorkflowShareDialog), "WorkflowShareDialog");
|
|
265
267
|
const ConnectionFormDialogOverlay = preloadableLazy(() => import("./ConnectionFormDialog-Bg9_OdHX.js").then((n) => n.n).then((m) => m.ConnectionFormDialog), "ConnectionFormDialog");
|
|
266
268
|
/**
|
|
@@ -2622,7 +2624,7 @@ function TemplatesGrid({ templates, loading, hasMore, onLoadMore, onTemplateClic
|
|
|
2622
2624
|
}
|
|
2623
2625
|
|
|
2624
2626
|
// src/builder/components/flow-builder/components/templates/TemplatesModal.tsx
|
|
2625
|
-
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-
|
|
2627
|
+
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-CQvYqhVO.js").then((m) => ({ default: m.TemplateDetailPanel })));
|
|
2626
2628
|
/**
|
|
2627
2629
|
* Modal for browsing and selecting workflow templates
|
|
2628
2630
|
* Features:
|
|
@@ -11798,65 +11800,6 @@ function BuilderSaveController({ readOnly, locked = false }) {
|
|
|
11798
11800
|
] });
|
|
11799
11801
|
}
|
|
11800
11802
|
|
|
11801
|
-
// src/billing/runsQuota.ts
|
|
11802
|
-
/** Mirrors wspace-activity-svc `MAX_ASSIGNMENTS_PER_QUOTA`. */
|
|
11803
|
-
const MAX_ASSIGNMENTS_PER_QUOTA = 100;
|
|
11804
|
-
/** Share of the allowance at which the meter warns and offers an upgrade. */
|
|
11805
|
-
const RUNS_QUOTA_WARNING_RATIO = .8;
|
|
11806
|
-
const createdAtMs = (row) => {
|
|
11807
|
-
const ms = Date.parse(row.createdAt);
|
|
11808
|
-
return Number.isNaN(ms) ? Number.POSITIVE_INFINITY : ms;
|
|
11809
|
-
};
|
|
11810
|
-
/**
|
|
11811
|
-
* Aggregates the workspace's active `fluidgrids.runs.monthly` assignments.
|
|
11812
|
-
* Null when there is none: the quota is not provisioned, nothing to meter.
|
|
11813
|
-
*/
|
|
11814
|
-
function summarizeRunsQuota(rows, quotaName = RUNS_QUOTA_NAME) {
|
|
11815
|
-
const assignments = rows.filter((row) => row.isActive && row.quotaName === quotaName).sort((a, b) => createdAtMs(a) - createdAtMs(b)).slice(0, 100);
|
|
11816
|
-
if (assignments.length === 0) return null;
|
|
11817
|
-
const used = assignments.reduce((sum, row) => sum + row.used, 0);
|
|
11818
|
-
if (assignments.some((row) => row.noLimit || row.limit == null)) return {
|
|
11819
|
-
used,
|
|
11820
|
-
limit: null,
|
|
11821
|
-
noLimit: true
|
|
11822
|
-
};
|
|
11823
|
-
return {
|
|
11824
|
-
used,
|
|
11825
|
-
limit: assignments.reduce((sum, row) => sum + (row.limit ?? 0), 0),
|
|
11826
|
-
noLimit: false
|
|
11827
|
-
};
|
|
11828
|
-
}
|
|
11829
|
-
/** Where the workspace stands against its allowance. */
|
|
11830
|
-
function runsQuotaLevel(quota) {
|
|
11831
|
-
if (quota.noLimit || quota.limit === null) return "ok";
|
|
11832
|
-
if (quota.limit <= 0 || quota.used >= quota.limit) return "exhausted";
|
|
11833
|
-
return quota.used / quota.limit >= .8 ? "warning" : "ok";
|
|
11834
|
-
}
|
|
11835
|
-
/**
|
|
11836
|
-
* One read of the workspace's run allowance.
|
|
11837
|
-
*
|
|
11838
|
-
* Null — the meter hides — when there is no workspace, when the read errors
|
|
11839
|
-
* (FORBIDDEN, a gateway 500, a network failure) or when the quota is not
|
|
11840
|
-
* provisioned. A failed read must never render a number: "0 used" would read
|
|
11841
|
-
* as "nothing spent" when the truth is "unknown".
|
|
11842
|
-
*/
|
|
11843
|
-
async function readRunsQuota(client, workspaceId) {
|
|
11844
|
-
if (!workspaceId) return null;
|
|
11845
|
-
try {
|
|
11846
|
-
const result = await client.query({
|
|
11847
|
-
query: WorkspaceRunsQuotaDocument,
|
|
11848
|
-
variables: { workspaceId },
|
|
11849
|
-
fetchPolicy: "network-only",
|
|
11850
|
-
errorPolicy: "all"
|
|
11851
|
-
});
|
|
11852
|
-
if (result.error) return null;
|
|
11853
|
-
const rows = result.data?.workspaceQuotaAssignments;
|
|
11854
|
-
return rows ? summarizeRunsQuota(rows) : null;
|
|
11855
|
-
} catch {
|
|
11856
|
-
return null;
|
|
11857
|
-
}
|
|
11858
|
-
}
|
|
11859
|
-
|
|
11860
11803
|
// src/billing/RunsUsageMeter.tsx
|
|
11861
11804
|
/**
|
|
11862
11805
|
* Compact run-allowance meter for the builder header: "Runs 812 / 1,000" with
|
|
@@ -16552,7 +16495,7 @@ function FidelityReportList({ fidelity, source, hasNode, onShowNode }) {
|
|
|
16552
16495
|
* Behind the `fluidgrids.code-first` flag (default off); with the flag off
|
|
16553
16496
|
* the panel renders nothing and the header is exactly as before.
|
|
16554
16497
|
*/
|
|
16555
|
-
const LazyCodeEditorField = lazy(() => import("./code-editor-field-
|
|
16498
|
+
const LazyCodeEditorField = lazy(() => import("./code-editor-field-CfP0QYUD.js").then((n) => n.n).then((m) => ({ default: m.CodeEditorField })));
|
|
16556
16499
|
/** Read-only lifted-code editor with a sized placeholder while its chunk loads. */
|
|
16557
16500
|
function CodeViewEditor({ content, path, label }) {
|
|
16558
16501
|
return /* @__PURE__ */ jsx(Suspense, {
|
|
@@ -17500,7 +17443,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
17500
17443
|
paletteGatesRef.current = paletteGates;
|
|
17501
17444
|
}, [paletteGates]);
|
|
17502
17445
|
useWarmBuilderOverlays();
|
|
17503
|
-
useLazyAgentTools(() => import("./agentTools-
|
|
17446
|
+
useLazyAgentTools(() => import("./agentTools-BjhxAdlt.js").then(({ createBuilderAgentTools }) => createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current })), !editingBlocked, "Agent tools");
|
|
17504
17447
|
const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(useShallow((s) => {
|
|
17505
17448
|
return [
|
|
17506
17449
|
s.workflow.nodes,
|
|
@@ -17542,7 +17485,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
17542
17485
|
useEffect(() => {
|
|
17543
17486
|
fitViewRef.current = fitView;
|
|
17544
17487
|
}, [fitView]);
|
|
17545
|
-
useLazyAgentTools(() => import("./canvasNoteTools-
|
|
17488
|
+
useLazyAgentTools(() => import("./canvasNoteTools-CZEFFhRp.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
|
|
17546
17489
|
nodes: [{ id: nodeId }],
|
|
17547
17490
|
duration: 400,
|
|
17548
17491
|
padding: .6,
|
|
@@ -17840,4 +17783,4 @@ const FlowBuilderPage = ({ workflow, readOnly = false }) => {
|
|
|
17840
17783
|
] });
|
|
17841
17784
|
};
|
|
17842
17785
|
|
|
17843
|
-
export {
|
|
17786
|
+
export { useNodeSelectedEvent as _, useAiWorkflowTemplates as a, RunsUsageMeter as c, releaseLeaseKeptForReload as d, useWorkflowReloadStore as f, computeAttachPosition as g, TableView as h, enrichDraftNodes as i, RunsUsageMeterView as l, JsonView as m, AI_DRAFT_MAX_PROMPT_LENGTH as n, BUILDER_FULLSCREEN_ATTRIBUTE as o, notesKeyOf as p, draftToCanvas as r, BUILDER_FULLSCREEN_EVENT as s, FlowBuilderPage as t, useRunsQuota as u, FluidGridsMark as v };
|