@burdenoff/fluidgrids-fe-sdk 2026.1105.2 → 2026.1105.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +42 -3
  2. package/dist/ExecutionDetailPage-OOHJQR2L.js +30 -0
  3. package/dist/ExecutionsListPage-6HS5VQOV.js +24 -0
  4. package/dist/WorkflowBuilder-PICIS7FI.js +35 -0
  5. package/dist/WorkflowsList-SD5XQC4Q.js +23 -0
  6. package/dist/{agentTools-5N3ZEZDW.js → agentTools-UH4LU6LA.js} +9 -7
  7. package/dist/{chunk-6ZK4MRVA.js → chunk-43GSC5Y6.js} +1 -1
  8. package/dist/{chunk-CH3YUGWR.js → chunk-4XAXF5VP.js} +4 -4
  9. package/dist/{chunk-6IS7EXIY.js → chunk-5GG2FEKW.js} +2 -2
  10. package/dist/{chunk-64JN2TVX.js → chunk-5Z4F24QT.js} +10 -39
  11. package/dist/chunk-6VIG44VF.js +32 -0
  12. package/dist/{chunk-QFC6E3WD.js → chunk-ASYYYJG2.js} +4 -4
  13. package/dist/{chunk-OXXXUAWM.js → chunk-CTKWMPQQ.js} +1 -1
  14. package/dist/{chunk-QFGZXWTM.js → chunk-EIMTOK6E.js} +3 -3
  15. package/dist/{chunk-AMXJLVZN.js → chunk-EXJW7EKR.js} +2 -2
  16. package/dist/{chunk-O7CJJNW6.js → chunk-GBJWPSLJ.js} +70 -5
  17. package/dist/{chunk-X25NCWG2.js → chunk-GBQC5WDH.js} +16 -8
  18. package/dist/{chunk-3XUWPDKJ.js → chunk-GPABUQTD.js} +650 -636
  19. package/dist/{chunk-3QCRKKTI.js → chunk-HSTP2RX3.js} +267 -2149
  20. package/dist/{chunk-US5QSLPV.js → chunk-JKLZ6YZ3.js} +22 -11
  21. package/dist/{chunk-GKFMK7FF.js → chunk-JRLBPR5U.js} +3 -3
  22. package/dist/{chunk-IL343FKX.js → chunk-KHS2DZHH.js} +1 -1
  23. package/dist/{chunk-SALZ3LQB.js → chunk-KJT5TAOE.js} +3 -3
  24. package/dist/{chunk-AASHQI77.js → chunk-KZCNJAMK.js} +2 -1
  25. package/dist/{chunk-TNFBRXU7.js → chunk-LLCVVRCE.js} +9 -8
  26. package/dist/{chunk-5CFCFA6O.js → chunk-M72SMQOS.js} +8 -7
  27. package/dist/{chunk-TCIBTMJI.js → chunk-NZMUKAXG.js} +3 -69
  28. package/dist/{chunk-2KUZBEWW.js → chunk-OLRIWGYM.js} +8 -7
  29. package/dist/{chunk-62CCBMDC.js → chunk-OTOQFZFO.js} +40 -39
  30. package/dist/{chunk-EYQ7GJRW.js → chunk-PASKZCII.js} +3 -3
  31. package/dist/{chunk-3IXU7WUC.js → chunk-PDODDDHY.js} +1 -1
  32. package/dist/chunk-SDZEAIIE.js +9 -0
  33. package/dist/chunk-TGWDFLEX.js +1932 -0
  34. package/dist/{chunk-AU7LACOY.js → chunk-TYI2XOSI.js} +1 -1
  35. package/dist/{chunk-L2N6DDOI.js → chunk-U7UNWR3D.js} +2 -2
  36. package/dist/{chunk-HK76ZUAK.js → chunk-UIS7KGHW.js} +4 -4
  37. package/dist/{chunk-QPLFALVV.js → chunk-UWCD7JUU.js} +8 -7
  38. package/dist/{chunk-CNKTQ5MG.js → chunk-UYTPURFW.js} +16 -50
  39. package/dist/{chunk-AJVU5YW6.js → chunk-WBRW67HX.js} +4 -3
  40. package/dist/{chunk-J3YQCEP3.js → chunk-WC526MLS.js} +3 -3
  41. package/dist/{chunk-XFH6SLDK.js → chunk-XNARCHMT.js} +2 -2
  42. package/dist/{chunk-W5WML3OO.js → chunk-XWINH6CR.js} +1 -1
  43. package/dist/{chunk-Y6M7K4UG.js → chunk-Y4UCHFGK.js} +1 -1
  44. package/dist/{chunk-OCJTTHTS.js → chunk-Y7FKJJMF.js} +1 -9
  45. package/dist/{client-YVZMLEQX.js → client-62VHXHKN.js} +2 -2
  46. package/dist/code-editor-field-WWPDMF4O.js +3 -0
  47. package/dist/executions.js +17 -15
  48. package/dist/{global-client-N5EIFW6T.js → global-client-PJ5LANJA.js} +2 -2
  49. package/dist/history.js +11 -8
  50. package/dist/index.d.ts +10 -4
  51. package/dist/index.js +69 -52
  52. package/dist/{node-detail-view-WIWW5N6N.js → node-detail-view-P5NV5CMO.js} +14 -12
  53. package/dist/nodes.js +3 -3
  54. package/dist/observability.js +10 -8
  55. package/dist/{quick-config-panel-O64TXXK3.js → quick-config-panel-ZNSBVF4G.js} +11 -9
  56. package/dist/settings.js +11 -9
  57. package/dist/templates.js +17 -14
  58. package/dist/{workflow-builder-7vv9dCdp.d.ts → workflow-builder-C-ekFbwR.d.ts} +37 -4
  59. package/dist/workflow-builder.d.ts +1 -1
  60. package/dist/workflow-builder.js +19 -16
  61. package/dist/workflow-preview.d.ts +158 -0
  62. package/dist/workflow-preview.js +721 -0
  63. package/dist/workflows-list.js +12 -10
  64. package/package.json +5 -1
  65. package/dist/ExecutionDetailPage-HQB2SWBP.js +0 -28
  66. package/dist/ExecutionsListPage-RSLL634L.js +0 -22
  67. package/dist/WorkflowBuilder-E3PNZX74.js +0 -32
  68. package/dist/WorkflowsList-473FRRP2.js +0 -21
  69. package/dist/code-editor-field-XWUVOKTA.js +0 -2
@@ -186,6 +186,8 @@ function emitRunCompletedOnce(payload) {
186
186
  var inFlight = null;
187
187
  var refreshGeneration = 0;
188
188
  var lastRefreshed = null;
189
+ var settledAttempts = 0;
190
+ var lastFailedAttempt = 0;
189
191
  function normalizeTokens(value) {
190
192
  if (typeof value === "string") {
191
193
  return value.trim() ? { authToken: value } : null;
@@ -205,24 +207,23 @@ function storeInConfig(tokens) {
205
207
  }
206
208
  function refreshTokens(callback, store) {
207
209
  if (inFlight) return inFlight;
210
+ const fail = (message) => {
211
+ settledAttempts += 1;
212
+ lastFailedAttempt = settledAttempts;
213
+ emitFluidGridsEvent("auth:failed", { message });
214
+ return null;
215
+ };
208
216
  const run = (async () => {
209
217
  try {
210
218
  const tokens = normalizeTokens(await callback());
211
- if (!tokens) {
212
- emitFluidGridsEvent("auth:failed", {
213
- message: "onTokenExpired returned no token."
214
- });
215
- return null;
216
- }
219
+ if (!tokens) return fail("onTokenExpired returned no token.");
217
220
  store(tokens);
221
+ settledAttempts += 1;
218
222
  refreshGeneration += 1;
219
223
  lastRefreshed = tokens;
220
224
  return tokens;
221
225
  } catch (error) {
222
- emitFluidGridsEvent("auth:failed", {
223
- message: describeOperationError(error, "Token refresh failed.")
224
- });
225
- return null;
226
+ return fail(describeOperationError(error, "Token refresh failed."));
226
227
  }
227
228
  })();
228
229
  inFlight = run;
@@ -248,16 +249,26 @@ function createFluidGridsTokenRefreshLink(options = {}) {
248
249
  const store = options.onTokenRefreshed ?? storeInConfig;
249
250
  return new Observable((observer) => {
250
251
  const sentInGeneration = refreshGeneration;
252
+ const sentAfterAttempts = settledAttempts;
251
253
  let retried = false;
252
254
  let closed = false;
253
255
  let current = null;
256
+ const pickRefresh = (callback) => {
257
+ if (refreshGeneration !== sentInGeneration && lastRefreshed) {
258
+ return Promise.resolve(lastRefreshed);
259
+ }
260
+ if (lastFailedAttempt > sentAfterAttempts) {
261
+ return Promise.resolve(null);
262
+ }
263
+ return refreshTokens(callback, store);
264
+ };
254
265
  const retryOrFail = (fail) => {
255
266
  const callback = options.onTokenExpired ?? config.auth?.onTokenExpired;
256
267
  if (!callback) return false;
257
268
  retried = true;
258
269
  current?.unsubscribe();
259
270
  current = null;
260
- const refreshed = refreshGeneration !== sentInGeneration && lastRefreshed ? Promise.resolve(lastRefreshed) : refreshTokens(callback, store);
271
+ const refreshed = pickRefresh(callback);
261
272
  void refreshed.then((tokens) => {
262
273
  if (closed) return;
263
274
  if (!tokens) {
@@ -1,8 +1,8 @@
1
- import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-3QCRKKTI.js';
1
+ import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-HSTP2RX3.js';
2
2
  import { ExportWorkflowCodeDocument, ShareWorkflowDocument, WorkflowSharingDocument } from './chunk-Z3ABLERJ.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
5
- import { describeOperationError, throwIfResultError } from './chunk-US5QSLPV.js';
4
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
+ import { describeOperationError, throwIfResultError } from './chunk-JKLZ6YZ3.js';
6
6
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
7
7
  import { createSharePrincipalLister, ResourceShareDialog } from '@burdenoff/fe-libs/connections';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { FluidgridsEntityTagsDocument, AvailableFluidgridsTagsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, UntagFluidgridsEntityDocument, ReplaceFluidgridsEntityTagsDocument, CreateFluidgridsTagDocument, DataTablesTagsDocument } from './chunk-Z3ABLERJ.js';
2
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
2
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
3
3
  import { useState, useCallback, useEffect } from 'react';
4
4
 
5
5
  var FLUIDGRIDS_ENTITY_TYPES = [
@@ -1,8 +1,8 @@
1
1
  import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-5ERAJC2I.js';
2
- import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-3QCRKKTI.js';
2
+ import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-HSTP2RX3.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
5
- import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-US5QSLPV.js';
4
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
+ import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-JKLZ6YZ3.js';
6
6
  import { useCallback, useState, useMemo, useEffect } from 'react';
7
7
  import { Icon } from '@iconify/react';
8
8
  import { toast } from 'sonner';
@@ -1,4 +1,5 @@
1
- import { useBuilderReadOnly, toCodeMirrorDiagnostics } from './chunk-OCJTTHTS.js';
1
+ import { useBuilderReadOnly } from './chunk-SDZEAIIE.js';
2
+ import { toCodeMirrorDiagnostics } from './chunk-Y7FKJJMF.js';
2
3
  import { useMemo, useRef, useEffect, useState } from 'react';
3
4
  import CodeMirror, { EditorView } from '@uiw/react-codemirror';
4
5
  import { lintGutter, setDiagnostics } from '@codemirror/lint';
@@ -1,13 +1,14 @@
1
- import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-Y6M7K4UG.js';
1
+ import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-Y4UCHFGK.js';
2
2
  import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
3
- import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-62CCBMDC.js';
4
- import { canvasFromDefinition } from './chunk-64JN2TVX.js';
5
- import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-QFGZXWTM.js';
6
- import { useFlowStore, refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, mergeStickyNotes, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes } from './chunk-3QCRKKTI.js';
3
+ import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-OTOQFZFO.js';
4
+ import { canvasFromDefinition } from './chunk-6VIG44VF.js';
5
+ import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-EIMTOK6E.js';
6
+ import { refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes } from './chunk-HSTP2RX3.js';
7
+ import { useFlowStore, mergeStickyNotes } from './chunk-TGWDFLEX.js';
7
8
  import { WorkflowDefinitionDocument } from './chunk-Z3ABLERJ.js';
8
9
  import { useTr } from './chunk-UULVIT25.js';
9
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
10
- import { throwIfResultError } from './chunk-US5QSLPV.js';
10
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
11
+ import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
11
12
  import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
12
13
  import { useLocation, useNavigate, useParams } from 'react-router';
13
14
  import { toast } from 'sonner';
@@ -793,7 +794,7 @@ function WorkflowItem({
793
794
  setInstalling(true);
794
795
  setInstallErrors([]);
795
796
  try {
796
- const { getGlobalStoreClient } = await import('./global-client-N5EIFW6T.js');
797
+ const { getGlobalStoreClient } = await import('./global-client-PJ5LANJA.js');
797
798
  const { InstallWorkflowNodeDocument } = await import('./global-operations-BZDHTSYP.js');
798
799
  const { getFluidGridsConfig: getFluidGridsConfig2 } = await import('./config-66FUPSG5.js');
799
800
  const storeClient = getGlobalStoreClient();
@@ -1,16 +1,17 @@
1
- import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-Y6M7K4UG.js';
2
- import { useExecutions } from './chunk-J3YQCEP3.js';
3
- import { useExportWorkflowAs, WorkflowShareDialog, downloadWorkflowExport, importAcceptAttribute, canEditWorkflow, canShareWorkflow, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-GKFMK7FF.js';
1
+ import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-Y4UCHFGK.js';
2
+ import { useExecutions } from './chunk-WC526MLS.js';
3
+ import { useExportWorkflowAs, WorkflowShareDialog, downloadWorkflowExport, importAcceptAttribute, canEditWorkflow, canShareWorkflow, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-JRLBPR5U.js';
4
4
  import { workflowsListControls } from './chunk-FNZZ5JJL.js';
5
- import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, usePreviewN8nImport, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-QFGZXWTM.js';
5
+ import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, usePreviewN8nImport, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-EIMTOK6E.js';
6
6
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
7
7
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
8
- import { createThenOpen, FluidGridsContext, useFluidGridsFlag, FLUIDGRIDS_FLAGS, BILLING_PLANS_PATH, useFlowStore, isQuotaExhaustedFailure } from './chunk-3QCRKKTI.js';
8
+ import { createThenOpen, FluidGridsContext, useFluidGridsFlag, FLUIDGRIDS_FLAGS, BILLING_PLANS_PATH, isQuotaExhaustedFailure } from './chunk-HSTP2RX3.js';
9
9
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton, SdkPermissionGate } from './chunk-5375NUIO.js';
10
+ import { useFlowStore } from './chunk-TGWDFLEX.js';
10
11
  import { WorkflowFoldersDocument, CreateWorkflowFolderDocument, RenameWorkflowFolderDocument, MoveWorkflowFolderDocument, DeleteWorkflowFolderDocument, WorkflowProjectsDocument, CreateWorkflowProjectDocument, RenameWorkflowProjectDocument, DeleteWorkflowProjectDocument, BulkMoveWorkflowsToFolderDocument, BulkAssignWorkflowsToProjectDocument, BulkDeleteWorkflowsDocument } from './chunk-Z3ABLERJ.js';
11
12
  import { useTr } from './chunk-UULVIT25.js';
12
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
13
- import { describeOperationError, throwIfResultError } from './chunk-US5QSLPV.js';
13
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
14
+ import { describeOperationError, throwIfResultError } from './chunk-JKLZ6YZ3.js';
14
15
  import { useState, useRef, useCallback, useContext, useMemo, useEffect } from 'react';
15
16
  import { useNavigate } from 'react-router';
16
17
  import { v4 } from 'uuid';
@@ -1,7 +1,7 @@
1
1
  import { RunFailureClustersDocument, DismissRunFailureClusterDocument, RunFailureTriageSettingsDocument, SetRunFailureTriageEnabledDocument, FgTriageFailedRunsDocument } from './chunk-Z3ABLERJ.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
4
- import { throwIfResultError } from './chunk-US5QSLPV.js';
3
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
4
+ import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
5
5
  import { useState, useCallback, useEffect } from 'react';
6
6
  import { Icon } from '@iconify/react';
7
7
  import { Button } from '@burdenoff/fe-libs/ui';
@@ -325,70 +325,4 @@ function FailureTriagePanel({
325
325
  );
326
326
  }
327
327
 
328
- // src/modules/observability/utils.ts
329
- function percentage(value, total) {
330
- if (total <= 0) return 0;
331
- return Math.round(value / total * 1e3) / 10;
332
- }
333
- function getFailureBreakdown(runs) {
334
- const counts = /* @__PURE__ */ new Map();
335
- for (const run of runs) {
336
- const key = run.errorType || "UNKNOWN";
337
- counts.set(key, (counts.get(key) ?? 0) + 1);
338
- }
339
- return [...counts.entries()].map(([key, count]) => ({ key, count })).sort((a, b) => b.count - a.count || a.key.localeCompare(b.key));
340
- }
341
- function getTopFailingWorkflows(runs) {
342
- const counts = /* @__PURE__ */ new Map();
343
- for (const run of runs) {
344
- const current = counts.get(run.workflowKey);
345
- if (current) {
346
- current.count += 1;
347
- } else {
348
- counts.set(run.workflowKey, {
349
- workflowKey: run.workflowKey,
350
- label: run.workflow?.name || run.workflowKey,
351
- count: 1
352
- });
353
- }
354
- }
355
- return [...counts.values()].sort(
356
- (a, b) => b.count - a.count || a.label.localeCompare(b.label)
357
- );
358
- }
359
- function getTopFailingNodes(nodeUsageStats) {
360
- return [...nodeUsageStats].filter((stat) => stat.failureCount > 0).sort(
361
- (a, b) => b.failureCount - a.failureCount || a.nodeType.localeCompare(b.nodeType)
362
- );
363
- }
364
- function formatDuration(seconds) {
365
- if (seconds === null || seconds === void 0 || !Number.isFinite(seconds)) {
366
- return "\u2014";
367
- }
368
- if (seconds < 1) return `${Math.round(seconds * 1e3)}ms`;
369
- if (seconds < 60) return `${seconds.toFixed(1)}s`;
370
- const minutes = Math.floor(seconds / 60);
371
- const remainingSeconds = Math.round(seconds % 60);
372
- return `${minutes}m ${remainingSeconds}s`;
373
- }
374
- function formatBytes(bytes) {
375
- if (!Number.isFinite(bytes) || bytes < 0) return "\u2014";
376
- if (bytes < 1024) return `${bytes} B`;
377
- const units = ["KB", "MB", "GB", "TB"];
378
- let value = bytes / 1024;
379
- let unit = units[0];
380
- for (let i = 1; i < units.length && value >= 1024; i += 1) {
381
- value /= 1024;
382
- unit = units[i];
383
- }
384
- return `${value.toFixed(value >= 10 ? 0 : 1)} ${unit}`;
385
- }
386
- function prettyJson(value) {
387
- try {
388
- return JSON.stringify(value, null, 2) ?? "null";
389
- } catch {
390
- return String(value);
391
- }
392
- }
393
-
394
- export { BUCKET_LABELS, FailureTriagePanel, OPEN_STATUSES, dismissRunFailureCluster, fetchRunFailureClusters, formatBytes, formatDuration, getFailureBreakdown, getTopFailingNodes, getTopFailingWorkflows, percentage, prettyJson };
328
+ export { BUCKET_LABELS, FailureTriagePanel, OPEN_STATUSES, dismissRunFailureCluster, fetchRunFailureClusters };
@@ -1,15 +1,16 @@
1
- import { CodeEditorField, normalizeCodeLanguage } from './chunk-AASHQI77.js';
2
- import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-AJVU5YW6.js';
1
+ import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-WBRW67HX.js';
2
+ import { CodeEditorField, normalizeCodeLanguage } from './chunk-KZCNJAMK.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-GTEBQQ7J.js';
4
- import { AgentDefinitionSelectField } from './chunk-XFH6SLDK.js';
4
+ import { AgentDefinitionSelectField } from './chunk-XNARCHMT.js';
5
5
  import { isAgentNodeType } from './chunk-WZ3EJVS6.js';
6
6
  import { readAssertRulesSetting, rowsFromRules, normaliseAssertRules, ruleFromRow, describeAssertRuleProblem, operatorSpec, ASSERT_OPERATORS, emptyAssertRuleRow } from './chunk-JDLQ6QIB.js';
7
- import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, openRunQuotaUpgradePrompt } from './chunk-3QCRKKTI.js';
8
- import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
7
+ import { isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, openRunQuotaUpgradePrompt } from './chunk-HSTP2RX3.js';
8
+ import { useBuilderReadOnly } from './chunk-SDZEAIIE.js';
9
+ import { useFlowStore } from './chunk-TGWDFLEX.js';
9
10
  import { useRunFromNodeEligibilityQuery, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument } from './chunk-Z3ABLERJ.js';
10
11
  import { useTr } from './chunk-UULVIT25.js';
11
- import { getFluidGridsClientSafe, getFluidGridsClient } from './chunk-3IXU7WUC.js';
12
- import { throwIfResultError, describeOperationError } from './chunk-US5QSLPV.js';
12
+ import { getFluidGridsClientSafe, getFluidGridsClient } from './chunk-PDODDDHY.js';
13
+ import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
13
14
  import { useId, useState, useMemo, useRef, useEffect, useContext, useCallback } from 'react';
14
15
  import { Icon } from '@iconify/react';
15
16
  import { cn } from '@burdenoff/fe-libs/utils';
@@ -1,28 +1,29 @@
1
+ import { computeAttachPosition, firstInputHandleId } from './chunk-XWINH6CR.js';
1
2
  import { deepClone, applyTemplateInputs } from './chunk-GEMNVFPK.js';
2
3
  import { templatePreview } from './chunk-B6CCE2RW.js';
3
4
  import { Input } from './chunk-IEVSFCFS.js';
4
5
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter as DialogFooter$1 } from './chunk-YXMFRQYV.js';
5
6
  import { Badge as Badge$1, Button } from './chunk-BQXVT32O.js';
6
- import { LogsPanel } from './chunk-6ZK4MRVA.js';
7
- import { computeAttachPosition, firstInputHandleId } from './chunk-W5WML3OO.js';
8
- import { QuotaExhaustedDialog, WorkflowShareDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-GKFMK7FF.js';
9
- import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-EYQ7GJRW.js';
10
- import { buildNodeDisplayMap } from './chunk-IL343FKX.js';
7
+ import { LogsPanel } from './chunk-43GSC5Y6.js';
8
+ import { QuotaExhaustedDialog, WorkflowShareDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-JRLBPR5U.js';
9
+ import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-PASKZCII.js';
10
+ import { buildNodeDisplayMap } from './chunk-KHS2DZHH.js';
11
11
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
12
- import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-64JN2TVX.js';
13
- import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-QFGZXWTM.js';
12
+ import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-5Z4F24QT.js';
13
+ import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-EIMTOK6E.js';
14
14
  import { useRequestedProposal } from './chunk-GLYINMOR.js';
15
15
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
16
- import { leaseCallQueue, RUNS_QUOTA_NAME, useFlowStore, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, useIsValidConnection, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, useSaveStatusStore, useManualSave, useDurableFunctionNodesEnabled, CODE_WORKFLOW_NODE_TYPE, bannerOf, editStateFor, useSaveWorkflow, STICKY_NOTE_TYPE, filterPaletteNodes, useFluidGridsAnalytics, useGuardedNavigate, sessionBeforeReload, forgetSessionForReload, releasesOnClose, touchesSavedFields, isLocked, watchLeavingLosesChanges, workflowFingerprint, savedEverythingBeforeLeaving, buildStickyNode, NODES_METADATA, NodeTypeIcon, shouldReleaseForIdle, tickAction, rememberSessionForReload, leavingLosesChanges, buildOperationSeed, useDurableParityEnabled, useConnections, ConnectionFormDialog, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useFlowValidator, saveIndicatorOf, departingSave, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, useRunGuard, getNodeDetail, isImageIcon, NODES, synchronizeOperationUpdate, NodePropertyPanel, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, isTriggerOperation, canRenderOperationPanel, resolveOperationName, ConnectionSelector, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, editingLeaseLocked, autosaveAllowedFor, isFlowComplete, rememberRevision, phaseAfterTakeOver } from './chunk-3QCRKKTI.js';
16
+ import { leaseCallQueue, RUNS_QUOTA_NAME, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, useSaveStatusStore, useManualSave, useDurableFunctionNodesEnabled, bannerOf, editStateFor, useSaveWorkflow, filterPaletteNodes, useFluidGridsAnalytics, useGuardedNavigate, sessionBeforeReload, forgetSessionForReload, releasesOnClose, touchesSavedFields, isLocked, watchLeavingLosesChanges, workflowFingerprint, savedEverythingBeforeLeaving, buildStickyNode, NODES_METADATA, shouldReleaseForIdle, tickAction, rememberSessionForReload, leavingLosesChanges, buildOperationSeed, useDurableParityEnabled, useConnections, ConnectionFormDialog, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useFlowValidator, saveIndicatorOf, departingSave, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, useRunGuard, getNodeDetail, NODES, NodePropertyPanel, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, ConnectionSelector, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, editingLeaseLocked, autosaveAllowedFor, isFlowComplete, rememberRevision, phaseAfterTakeOver } from './chunk-HSTP2RX3.js';
17
17
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, useFluidGridsPermission, SdkPermissionGate } from './chunk-5375NUIO.js';
18
18
  import { cn } from './chunk-JL7CASN5.js';
19
- import { BuilderReadOnlyProvider, useBuilderReadOnly } from './chunk-OCJTTHTS.js';
20
- import { getGlobalStoreClient } from './chunk-AU7LACOY.js';
19
+ import { BuilderReadOnlyProvider, useBuilderReadOnly } from './chunk-SDZEAIIE.js';
20
+ import { useFlowStore, useIsValidConnection, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, CODE_WORKFLOW_NODE_TYPE, STICKY_NOTE_TYPE, NodeTypeIcon, isImageIcon, synchronizeOperationUpdate, isTriggerOperation, canRenderOperationPanel, resolveOperationName } from './chunk-TGWDFLEX.js';
21
+ import { getGlobalStoreClient } from './chunk-TYI2XOSI.js';
21
22
  import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, SubmitWorkflowTemplateDocument, MyWorkflowTemplateSubmissionsDocument, WithdrawWorkflowTemplateSubmissionDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument, GetNodeInstallableVersionsDocument, OrganizationPrivateNodesDocument, InstallOrganizationPrivateNodeDocument, UninstallOrganizationPrivateNodeDocument } from './chunk-G77IGC3Y.js';
22
23
  import { WorkspaceRunsQuotaDocument, WorkflowGenerationTemplatesDocument, ReleaseWorkflowEditLeaseDocument, NodeSchemaIntrospectionDocument, AcquireWorkflowEditLeaseDocument, WorkflowEnvironmentsDocument, WorkflowPromotionRequestsDocument, DeployWorkflowVersionToDevDocument, RequestWorkflowPromotionDocument, ApproveWorkflowPromotionDocument, RejectWorkflowPromotionDocument, CancelWorkflowPromotionDocument, UpdateWorkflowEnvironmentPolicyDocument, WorkflowGitRepositoryDocument, WorkflowGitPushesDocument, WorkflowGitCommitsDocument, LinkWorkflowGitRepositoryDocument, UnlinkWorkflowGitRepositoryDocument, PushWorkflowToGitDocument, WorkflowGitDiffDocument, RestoreWorkflowFromGitDocument, WorkflowAuthoringDocument, WorkflowEditLeaseDocument, WorkflowVersioningDocument, WorkflowVersionDrainageDocument, ActivateWorkflowVersionCheckedDocument, WorkflowDefinitionDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument, SetWorkflowRolloutDocument, DeleteWorkflowRolloutDocument, TakeOverWorkflowEditLeaseDocument } from './chunk-Z3ABLERJ.js';
23
24
  import { useTr } from './chunk-UULVIT25.js';
24
- import { waitForFluidGridsClient, getFluidGridsClient } from './chunk-3IXU7WUC.js';
25
- import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-US5QSLPV.js';
25
+ import { waitForFluidGridsClient, getFluidGridsClient } from './chunk-PDODDDHY.js';
26
+ import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-JKLZ6YZ3.js';
26
27
  import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
27
28
  import * as React3 from 'react';
28
29
  import React3__default, { forwardRef, lazy, memo, createContext, useState, useRef, useCallback, useEffect, useContext, useMemo, useLayoutEffect, Suspense, useDeferredValue } from 'react';
@@ -34,10 +35,10 @@ import { useQuery, useMutation } from '@apollo/client/react';
34
35
  import { gql } from '@apollo/client/core';
35
36
  import { Sparkles, Star, Download, Eye, Maximize2, Undo2, Redo2, LayoutGrid, Keyboard, Plus, Trash2, GitBranch, Loader2, AlertCircle, Search, RefreshCw, History, GitCompareArrows, Play, RotateCcw, Layers, Upload, Rocket, ArrowRight, Check, X, Link2, Unlink, GitCompare, ExternalLink, GitCommitHorizontal, Share2, CircleHelp, CheckCircle2, Package, SlidersHorizontal, FlaskConical, Pencil, Info, Copy, BadgeCheck, DollarSign, Type, Code, Hash, List, Braces, Workflow, PlusCircle, ChevronDown, ChevronRight, AlertTriangle } from 'lucide-react';
36
37
  import { Icon } from '@iconify/react';
38
+ import { Handle, Position, getBezierPath, MarkerType, useOnSelectionChange, ReactFlowProvider, useReactFlow, ReactFlow, Background, useStore, MiniMap, EdgeLabelRenderer, useNodes, useNodesState, useEdgesState, addEdge, Controls, Panel } from '@xyflow/react';
37
39
  import { create } from 'zustand';
38
40
  import { toast } from 'sonner';
39
41
  import { useShallow, shallow } from 'zustand/shallow';
40
- import { Handle, Position, getBezierPath, MarkerType, ReactFlowProvider, useReactFlow, ReactFlow, Background, useOnSelectionChange, useStore, MiniMap, EdgeLabelRenderer, useNodes, useNodesState, useEdgesState, addEdge, Controls, Panel } from '@xyflow/react';
41
42
  import { produce } from 'immer';
42
43
  import { Card as Card$1, Badge, CardContent as CardContent$1, Button as Button$1, Popover, PopoverTrigger, PopoverContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, Toaster, Tabs, TabsList, TabsTrigger, TabsContent, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardDescription as CardDescription$1, ScrollArea, Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, Label, Textarea, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, AlertDialogAction, TooltipProvider, Switch, Input as Input$1, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, Tooltip, TooltipTrigger, TooltipContent, Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, DialogFooter, DropdownMenuLabel, DropdownMenuSeparator } from '@burdenoff/fe-libs/ui';
43
44
  import { isEmpty } from 'radash';
@@ -1791,6 +1792,23 @@ function buildNodeCheck(requiredNodeTypes, installedAppIds) {
1791
1792
  canImport: missingPaid.length === 0
1792
1793
  };
1793
1794
  }
1795
+ function nodeSelectionPayload(nodes) {
1796
+ if (nodes.length === 0) return { nodeId: null };
1797
+ if (nodes.length > 1) return void 0;
1798
+ const [node] = nodes;
1799
+ if (!node) return void 0;
1800
+ return { nodeId: node.id, nodeType: node.type };
1801
+ }
1802
+ function useNodeSelectedEvent() {
1803
+ const lastReported = useRef(null);
1804
+ const onChange = useCallback(({ nodes }) => {
1805
+ const payload = nodeSelectionPayload(nodes);
1806
+ if (!payload || payload.nodeId === lastReported.current) return;
1807
+ lastReported.current = payload.nodeId;
1808
+ emitFluidGridsEvent("node:selected", payload);
1809
+ }, []);
1810
+ useOnSelectionChange({ onChange });
1811
+ }
1794
1812
  var FLUIDGRIDS_BRAND = "FluidGrids";
1795
1813
  var FLUIDGRIDS_SITE_URL = "https://www.fluidgrids.ai";
1796
1814
  var ENGLISH_LABEL = `Powered by ${FLUIDGRIDS_BRAND}`;
@@ -5530,7 +5548,7 @@ function DesktopSidebarFragment({
5530
5548
  (n) => !!n.storeProductId
5531
5549
  );
5532
5550
  if (nodesToInstall.length > 0) {
5533
- const { getGlobalStoreClient: getStore } = await import('./global-client-N5EIFW6T.js');
5551
+ const { getGlobalStoreClient: getStore } = await import('./global-client-PJ5LANJA.js');
5534
5552
  const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-BZDHTSYP.js');
5535
5553
  const { getFluidGridsConfig: getFluidGridsConfig3 } = await import('./config-66FUPSG5.js');
5536
5554
  const storeClient = getStore();
@@ -5592,7 +5610,7 @@ function DesktopSidebarFragment({
5592
5610
  overrides.templateInputs
5593
5611
  );
5594
5612
  }
5595
- const { getFluidGridsClient: getFluidGridsClient2 } = await import('./client-YVZMLEQX.js');
5613
+ const { getFluidGridsClient: getFluidGridsClient2 } = await import('./client-62VHXHKN.js');
5596
5614
  const { getFluidGridsConfig: getFluidGridsConfig2 } = await import('./config-66FUPSG5.js');
5597
5615
  const { gql: gql5 } = await import('@apollo/client/core');
5598
5616
  const IMPORT_MUTATION = gql5`
@@ -5650,7 +5668,7 @@ function DesktopSidebarFragment({
5650
5668
  category: content.defaultCategory || template.category
5651
5669
  });
5652
5670
  try {
5653
- const { getGlobalStoreClient: getStoreClient } = await import('./global-client-N5EIFW6T.js');
5671
+ const { getGlobalStoreClient: getStoreClient } = await import('./global-client-PJ5LANJA.js');
5654
5672
  const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-BZDHTSYP.js');
5655
5673
  const storeClient = getStoreClient();
5656
5674
  if (storeClient) {
@@ -5750,7 +5768,7 @@ function DesktopSidebarFragment({
5750
5768
  ),
5751
5769
  { id: "template-load" }
5752
5770
  );
5753
- const { getGlobalStoreClient: getGlobalStoreClient2 } = await import('./global-client-N5EIFW6T.js');
5771
+ const { getGlobalStoreClient: getGlobalStoreClient2 } = await import('./global-client-PJ5LANJA.js');
5754
5772
  const { gql: gql5 } = await import('@apollo/client/core');
5755
5773
  const GET_TEMPLATE_DETAIL = gql5`
5756
5774
  query GetWorkflowTemplateDetail($id: ID!) {
@@ -6006,23 +6024,6 @@ function useDeleteKeyCode() {
6006
6024
  });
6007
6025
  return deleteKeyCode;
6008
6026
  }
6009
- function nodeSelectionPayload(nodes) {
6010
- if (nodes.length === 0) return { nodeId: null };
6011
- if (nodes.length > 1) return void 0;
6012
- const [node] = nodes;
6013
- if (!node) return void 0;
6014
- return { nodeId: node.id, nodeType: node.type };
6015
- }
6016
- function useNodeSelectedEvent() {
6017
- const lastReported = useRef(null);
6018
- const onChange = useCallback(({ nodes }) => {
6019
- const payload = nodeSelectionPayload(nodes);
6020
- if (!payload || payload.nodeId === lastReported.current) return;
6021
- lastReported.current = payload.nodeId;
6022
- emitFluidGridsEvent("node:selected", payload);
6023
- }, []);
6024
- useOnSelectionChange({ onChange });
6025
- }
6026
6027
  function useOnNodesDelete(nodes) {
6027
6028
  const [nodePropertiesSelectedNode, nodePropertiesSetSelectedNode] = useFlowStore(
6028
6029
  useShallow((state) => [
@@ -20180,7 +20181,7 @@ function FidelityReportList({
20180
20181
  );
20181
20182
  }
20182
20183
  var LazyCodeEditorField = lazy(
20183
- () => import('./code-editor-field-XWUVOKTA.js').then((m) => ({
20184
+ () => import('./code-editor-field-WWPDMF4O.js').then((m) => ({
20184
20185
  default: m.CodeEditorField
20185
20186
  }))
20186
20187
  );
@@ -21240,12 +21241,12 @@ function EditLeaseBanner() {
21240
21241
  );
21241
21242
  }
21242
21243
  var LazyNodeDetailView = lazy(
21243
- () => import('./node-detail-view-WIWW5N6N.js').then((m) => ({
21244
+ () => import('./node-detail-view-P5NV5CMO.js').then((m) => ({
21244
21245
  default: m.NodeDetailView
21245
21246
  }))
21246
21247
  );
21247
21248
  var LazyQuickConfigPanel = lazy(
21248
- () => import('./quick-config-panel-O64TXXK3.js').then((m) => ({
21249
+ () => import('./quick-config-panel-ZNSBVF4G.js').then((m) => ({
21249
21250
  default: m.QuickConfigPanel
21250
21251
  }))
21251
21252
  );
@@ -21307,7 +21308,7 @@ var FlowBuilder = ({ readOnly = false }) => {
21307
21308
  );
21308
21309
  useEffect(() => {
21309
21310
  let cancelled = false;
21310
- void import('./agentTools-5N3ZEZDW.js').then(({ createBuilderAgentTools }) => {
21311
+ void import('./agentTools-UH4LU6LA.js').then(({ createBuilderAgentTools }) => {
21311
21312
  if (cancelled) return;
21312
21313
  setAgentTools(
21313
21314
  createBuilderAgentTools({
@@ -21647,4 +21648,4 @@ var FlowBuilderPage = ({
21647
21648
  ] });
21648
21649
  };
21649
21650
 
21650
- export { AI_DRAFT_MAX_PROMPT_LENGTH, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsMark, RunsUsageMeter, RunsUsageMeterView, TEMPLATE_STORE_CATEGORIES, TemplateCard, buildNodeCheck, buildRequiredNodeTypes, draftToCanvas, enrichDraftNodes, readRunsQuota, releaseLeaseKeptForReload, runsQuotaLevel, summarizeRunsQuota, useAiWorkflowTemplates, useImportWorkflowTemplate, useInstalledNodes, usePublishToStore, useRunsQuota, useTemplateSubmissions, useWorkflowReloadStore, useWorkflowTemplates };
21651
+ export { AI_DRAFT_MAX_PROMPT_LENGTH, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsMark, RunsUsageMeter, RunsUsageMeterView, TEMPLATE_STORE_CATEGORIES, TemplateCard, buildNodeCheck, buildRequiredNodeTypes, draftToCanvas, enrichDraftNodes, readRunsQuota, releaseLeaseKeptForReload, runsQuotaLevel, summarizeRunsQuota, useAiWorkflowTemplates, useImportWorkflowTemplate, useInstalledNodes, useNodeSelectedEvent, usePublishToStore, useRunsQuota, useTemplateSubmissions, useWorkflowReloadStore, useWorkflowTemplates };
@@ -1,11 +1,11 @@
1
1
  import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from './chunk-JDLQ6QIB.js';
2
- import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-IL343FKX.js';
2
+ import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-KHS2DZHH.js';
3
3
  import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
4
4
  import { ErrorType } from './chunk-H4ERTSMX.js';
5
5
  import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-Z3ABLERJ.js';
6
6
  import { useTr } from './chunk-UULVIT25.js';
7
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
8
- import { throwIfResultError, isForbiddenError } from './chunk-US5QSLPV.js';
7
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
8
+ import { throwIfResultError, isForbiddenError } from './chunk-JKLZ6YZ3.js';
9
9
  import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
10
10
  import { useState, useRef, useEffect, useCallback } from 'react';
11
11
  import { TagBadge, TagsWidget } from '@burdenoff/fe-libs/tag';
@@ -1,4 +1,4 @@
1
- import { createLiveTokenReader, createFluidGridsTokenRefreshLink } from './chunk-US5QSLPV.js';
1
+ import { createLiveTokenReader, createFluidGridsTokenRefreshLink } from './chunk-JKLZ6YZ3.js';
2
2
  import { createHttpLink, split, ApolloClient, InMemoryCache } from '@apollo/client/core';
3
3
  import { setContext } from '@apollo/client/link/context';
4
4
  import { getMainDefinition } from '@apollo/client/utilities';
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ var BuilderReadOnlyContext = createContext(false);
4
+ var BuilderReadOnlyProvider = BuilderReadOnlyContext.Provider;
5
+ function useBuilderReadOnly() {
6
+ return useContext(BuilderReadOnlyContext);
7
+ }
8
+
9
+ export { BuilderReadOnlyProvider, useBuilderReadOnly };