@burdenoff/fluidgrids-fe-sdk 2026.1103.2 → 2026.1104.1

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 (49) hide show
  1. package/dist/{ExecutionDetailPage-JRBUIU5J.js → ExecutionDetailPage-WNDMCMME.js} +11 -11
  2. package/dist/{ExecutionsListPage-RC342VCZ.js → ExecutionsListPage-3KSHXY4G.js} +7 -7
  3. package/dist/{WorkflowBuilder-TCS4JELN.js → WorkflowBuilder-LG7TFPU2.js} +12 -12
  4. package/dist/{WorkflowsList-6ES2EDGZ.js → WorkflowsList-KB23QLNI.js} +7 -7
  5. package/dist/{agentTools-4JT66UQB.js → agentTools-J7A22OD5.js} +4 -4
  6. package/dist/{chunk-Y7BNGLRI.js → chunk-3HM6SO5A.js} +5 -5
  7. package/dist/{chunk-VQZEGCRF.js → chunk-4C6XRZK6.js} +1 -1
  8. package/dist/{chunk-QXACKASD.js → chunk-4YB6BMV3.js} +22 -3
  9. package/dist/{chunk-UMULDJCK.js → chunk-626EGC24.js} +6 -6
  10. package/dist/{chunk-LVTOWRAM.js → chunk-64WNLW7J.js} +2 -2
  11. package/dist/{chunk-PC3CICOW.js → chunk-7GI3457S.js} +1 -1
  12. package/dist/{chunk-MY4HMUWU.js → chunk-7S6M2BYB.js} +3 -3
  13. package/dist/{chunk-BP6YPKNK.js → chunk-B5L7VBDH.js} +4 -4
  14. package/dist/{chunk-K6HD5GC7.js → chunk-BJ5H5QV4.js} +4 -4
  15. package/dist/{chunk-742OIXMP.js → chunk-BOTM2YQG.js} +1 -1
  16. package/dist/{chunk-SHYDX2LO.js → chunk-D46ZR6XI.js} +4 -4
  17. package/dist/{chunk-BVCMAGLJ.js → chunk-D7DZB3MU.js} +1 -1
  18. package/dist/{chunk-52OIBKPO.js → chunk-FSU6LYGU.js} +1 -1
  19. package/dist/{chunk-JTQFBZTV.js → chunk-H3RSOHD5.js} +3 -2
  20. package/dist/{chunk-Y7MQ3LYB.js → chunk-H5WEPFLT.js} +2 -2
  21. package/dist/{chunk-LTINUSLK.js → chunk-IO2MKIEI.js} +12 -12
  22. package/dist/{chunk-SUIH376K.js → chunk-JFG2XCJR.js} +1 -1
  23. package/dist/{chunk-6WPW42TX.js → chunk-L2MUO3VU.js} +2 -2
  24. package/dist/{chunk-G2FPOWN5.js → chunk-LQ7KYFAK.js} +2 -2
  25. package/dist/{chunk-SIVS3XSV.js → chunk-MJGB6XAP.js} +25 -2
  26. package/dist/{chunk-EKB3EIIC.js → chunk-N3WDPUGC.js} +1 -1
  27. package/dist/{chunk-VFLHURFM.js → chunk-OXDRU5GT.js} +1 -1
  28. package/dist/{chunk-M23H4LSY.js → chunk-PN2XVTLA.js} +4 -4
  29. package/dist/{chunk-UW5GY6LQ.js → chunk-PR6QP4R7.js} +4 -4
  30. package/dist/{chunk-RFOKJE3A.js → chunk-PXVHPGUB.js} +10 -10
  31. package/dist/{chunk-ILPQAQB5.js → chunk-QA7O5PUG.js} +210 -8
  32. package/dist/{chunk-H2KIJEYM.js → chunk-QH5KODNH.js} +2 -2
  33. package/dist/{chunk-OBWB73Y7.js → chunk-VB4STO5K.js} +3 -3
  34. package/dist/{chunk-UH7JKPUF.js → chunk-WFDNMJBW.js} +1 -1
  35. package/dist/{chunk-YC76QFWZ.js → chunk-WWR7ZCS5.js} +1 -1
  36. package/dist/{chunk-N6XYVO7N.js → chunk-YGGPLCJD.js} +2 -2
  37. package/dist/executions.js +12 -12
  38. package/dist/history.js +5 -5
  39. package/dist/index.d.ts +257 -1
  40. package/dist/index.js +43 -43
  41. package/dist/{node-detail-view-CMQ7DUYM.js → node-detail-view-NWY5PDKY.js} +8 -8
  42. package/dist/nodes.js +2 -2
  43. package/dist/observability.js +5 -5
  44. package/dist/{quick-config-panel-NJ72QZPM.js → quick-config-panel-SCNELONP.js} +5 -5
  45. package/dist/settings.js +6 -6
  46. package/dist/templates.js +11 -11
  47. package/dist/workflow-builder.js +13 -13
  48. package/dist/workflows-list.js +7 -7
  49. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-YC76QFWZ.js';
1
+ import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-WWR7ZCS5.js';
2
2
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
3
- import { EventRegistrationsDocument } from './chunk-JTQFBZTV.js';
3
+ import { EventRegistrationsDocument } from './chunk-H3RSOHD5.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
5
5
  import { getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
6
6
  import { useMemo, useState, useEffect, useRef, useCallback } from 'react';
@@ -3,24 +3,24 @@ import { templatePreview } from './chunk-B6CCE2RW.js';
3
3
  import { Input } from './chunk-IEVSFCFS.js';
4
4
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter as DialogFooter$1 } from './chunk-YXMFRQYV.js';
5
5
  import { Badge as Badge$1, Button } from './chunk-BQXVT32O.js';
6
- import { LogsPanel } from './chunk-SUIH376K.js';
7
- import { computeAttachPosition, firstInputHandleId } from './chunk-742OIXMP.js';
8
- import { QuotaExhaustedDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-SIVS3XSV.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-OBWB73Y7.js';
10
- import { buildNodeDisplayMap } from './chunk-PC3CICOW.js';
6
+ import { LogsPanel } from './chunk-JFG2XCJR.js';
7
+ import { computeAttachPosition, firstInputHandleId } from './chunk-BOTM2YQG.js';
8
+ import { QuotaExhaustedDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-MJGB6XAP.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-VB4STO5K.js';
10
+ import { buildNodeDisplayMap } from './chunk-7GI3457S.js';
11
11
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
12
- import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-N6XYVO7N.js';
13
- import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-QXACKASD.js';
12
+ import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-YGGPLCJD.js';
13
+ import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-4YB6BMV3.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, throwIfResultError, emitWorkflowCreated, emitTemplateUsed, describeOperationError, 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-YC76QFWZ.js';
16
+ import { leaseCallQueue, RUNS_QUOTA_NAME, useFlowStore, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, throwIfResultError, emitWorkflowCreated, emitTemplateUsed, describeOperationError, 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-WWR7ZCS5.js';
17
17
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, useFluidGridsPermission } from './chunk-ZUVFD5KV.js';
18
18
  import { cn } from './chunk-JL7CASN5.js';
19
19
  import { BuilderReadOnlyProvider, useBuilderReadOnly } from './chunk-OCJTTHTS.js';
20
20
  import { getGlobalStoreClient } from './chunk-PXIFUMLA.js';
21
21
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
22
22
  import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, SubmitWorkflowTemplateDocument, MyWorkflowTemplateSubmissionsDocument, WithdrawWorkflowTemplateSubmissionDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument, GetNodeInstallableVersionsDocument, OrganizationPrivateNodesDocument, InstallOrganizationPrivateNodeDocument, UninstallOrganizationPrivateNodeDocument } from './chunk-G77IGC3Y.js';
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-JTQFBZTV.js';
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-H3RSOHD5.js';
24
24
  import { useTr } from './chunk-UULVIT25.js';
25
25
  import { waitForFluidGridsClient, getFluidGridsClient } from './chunk-NTWG3CJX.js';
26
26
  import * as React3 from 'react';
@@ -21179,12 +21179,12 @@ function EditLeaseBanner() {
21179
21179
  );
21180
21180
  }
21181
21181
  var LazyNodeDetailView = lazy(
21182
- () => import('./node-detail-view-CMQ7DUYM.js').then((m) => ({
21182
+ () => import('./node-detail-view-NWY5PDKY.js').then((m) => ({
21183
21183
  default: m.NodeDetailView
21184
21184
  }))
21185
21185
  );
21186
21186
  var LazyQuickConfigPanel = lazy(
21187
- () => import('./quick-config-panel-NJ72QZPM.js').then((m) => ({
21187
+ () => import('./quick-config-panel-SCNELONP.js').then((m) => ({
21188
21188
  default: m.QuickConfigPanel
21189
21189
  }))
21190
21190
  );
@@ -21246,7 +21246,7 @@ var FlowBuilder = ({ readOnly = false }) => {
21246
21246
  );
21247
21247
  useEffect(() => {
21248
21248
  let cancelled = false;
21249
- void import('./agentTools-4JT66UQB.js').then(({ createBuilderAgentTools }) => {
21249
+ void import('./agentTools-J7A22OD5.js').then(({ createBuilderAgentTools }) => {
21250
21250
  if (cancelled) return;
21251
21251
  setAgentTools(
21252
21252
  createBuilderAgentTools({
@@ -1,4 +1,4 @@
1
- import { useFlowStore } from './chunk-YC76QFWZ.js';
1
+ import { useFlowStore } from './chunk-WWR7ZCS5.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { cn } from '@burdenoff/fe-libs/utils';
@@ -1,7 +1,7 @@
1
1
  import { REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS } from './chunk-5ERAJC2I.js';
2
- import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-YC76QFWZ.js';
2
+ import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-WWR7ZCS5.js';
3
3
  import { useExecutionsStore } from './chunk-6AMNEX2Y.js';
4
- import { ExecutionsListDocument, ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument } from './chunk-JTQFBZTV.js';
4
+ import { ExecutionsListDocument, ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument } from './chunk-H3RSOHD5.js';
5
5
  import { useTr } from './chunk-UULVIT25.js';
6
6
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
7
7
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
@@ -1,5 +1,5 @@
1
- import { throwIfResultError, describeOperationError, signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-YC76QFWZ.js';
2
- import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-JTQFBZTV.js';
1
+ import { throwIfResultError, describeOperationError, signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-WWR7ZCS5.js';
2
+ import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-H3RSOHD5.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
5
5
  import { useState, useMemo, useRef, useCallback, useEffect } from 'react';
@@ -1,5 +1,5 @@
1
- import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-YC76QFWZ.js';
2
- import { ExportWorkflowCodeDocument } from './chunk-JTQFBZTV.js';
1
+ import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-WWR7ZCS5.js';
2
+ import { ExportWorkflowCodeDocument } from './chunk-H3RSOHD5.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useState, useRef, useCallback, useEffect } from 'react';
@@ -70,13 +70,36 @@ function downloadWorkflowExport(workflow) {
70
70
  blob
71
71
  );
72
72
  }
73
+ function isN8nNodeType(type) {
74
+ return typeof type === "string" && (type.startsWith("n8n-nodes-") || type.startsWith("@n8n/"));
75
+ }
76
+ function isN8nWorkflowJson(value) {
77
+ const root = asRecord(value);
78
+ if (!root || !Array.isArray(root.nodes) || root.nodes.length === 0)
79
+ return false;
80
+ if (root.connections !== void 0 && !asRecord(root.connections))
81
+ return false;
82
+ const nodes = root.nodes.map(asRecord);
83
+ return nodes.every(
84
+ (node) => node !== null && typeof node.name === "string" && typeof node.type === "string" && node.type.length > 0
85
+ ) && nodes.some((node) => isN8nNodeType(node?.type));
86
+ }
73
87
  function parseWorkflowImport(raw) {
74
88
  const parsed = JSON.parse(raw);
75
89
  const root = asRecord(parsed);
76
90
  if (!root) throw new Error("Import must contain a JSON object");
91
+ if (isN8nWorkflowJson(root)) {
92
+ return {
93
+ source: "n8n",
94
+ definitionJson: root,
95
+ name: typeof root.name === "string" && root.name.trim() ? root.name.trim() : "Imported n8n workflow",
96
+ nodeReferences: []
97
+ };
98
+ }
77
99
  const definitionJson = asRecord(root.definitionJson) ?? root;
78
100
  const name = typeof root.name === "string" && root.name.trim() ? root.name : "Imported workflow";
79
101
  return {
102
+ source: "fluidgrids",
80
103
  definitionJson,
81
104
  name,
82
105
  workflowKey: typeof root.workflowKey === "string" ? root.workflowKey : void 0,
@@ -1,4 +1,4 @@
1
- import { throwIfResultError } from './chunk-YC76QFWZ.js';
1
+ import { throwIfResultError } from './chunk-WWR7ZCS5.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
4
4
  import { useState, useRef, useCallback, useEffect } from 'react';
@@ -1,4 +1,4 @@
1
- import { NodeEndpointConfigsDocument, NodeEndpointConfigDocument, NodeManifestDocument, fetchAllNodeEndpointConfigs } from './chunk-JTQFBZTV.js';
1
+ import { NodeEndpointConfigsDocument, NodeEndpointConfigDocument, NodeManifestDocument, fetchAllNodeEndpointConfigs } from './chunk-H3RSOHD5.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
4
4
  import { useMemo, useState, useCallback, useEffect } from 'react';
@@ -1,9 +1,9 @@
1
- import { FailureTriagePanel } from './chunk-H2KIJEYM.js';
2
- import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-UH7JKPUF.js';
1
+ import { FailureTriagePanel } from './chunk-QH5KODNH.js';
2
+ import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-WFDNMJBW.js';
3
3
  import { proposalCanvasPath } from './chunk-GLYINMOR.js';
4
- import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-YC76QFWZ.js';
4
+ import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-WWR7ZCS5.js';
5
5
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ZUVFD5KV.js';
6
- import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-JTQFBZTV.js';
6
+ import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-H3RSOHD5.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
8
8
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
9
9
  import { useState, useMemo, useEffect, useRef, useCallback } from 'react';
@@ -1,11 +1,11 @@
1
1
  import { CodeEditorField, normalizeCodeLanguage } from './chunk-AASHQI77.js';
2
- import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-Y7MQ3LYB.js';
2
+ import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-H5WEPFLT.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-GTEBQQ7J.js';
4
- import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-VQZEGCRF.js';
4
+ import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-4C6XRZK6.js';
5
5
  import { readAssertRulesSetting, rowsFromRules, normaliseAssertRules, ruleFromRow, describeAssertRuleProblem, operatorSpec, ASSERT_OPERATORS, emptyAssertRuleRow } from './chunk-JDLQ6QIB.js';
6
- import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, throwIfResultError, openRunQuotaUpgradePrompt, describeOperationError } from './chunk-YC76QFWZ.js';
6
+ import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, throwIfResultError, openRunQuotaUpgradePrompt, describeOperationError } from './chunk-WWR7ZCS5.js';
7
7
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
8
- import { useRunFromNodeEligibilityQuery, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument } from './chunk-JTQFBZTV.js';
8
+ import { useRunFromNodeEligibilityQuery, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument } from './chunk-H3RSOHD5.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
10
  import { getFluidGridsClientSafe, getFluidGridsClient } from './chunk-NTWG3CJX.js';
11
11
  import { useId, useState, useMemo, useRef, useEffect, useContext, useCallback } from 'react';
@@ -1,16 +1,16 @@
1
- import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-G2FPOWN5.js';
2
- import { useDurableParityRunFields, useRunMetadata, useRunPending, ExecutionStatusBadge, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-K6HD5GC7.js';
3
- import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-6WPW42TX.js';
4
- import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-H2KIJEYM.js';
5
- import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-BVCMAGLJ.js';
6
- import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-OBWB73Y7.js';
7
- import { buildNodeDisplayMap, formatRunVersion } from './chunk-PC3CICOW.js';
1
+ import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-LQ7KYFAK.js';
2
+ import { useDurableParityRunFields, useRunMetadata, useRunPending, ExecutionStatusBadge, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-BJ5H5QV4.js';
3
+ import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-L2MUO3VU.js';
4
+ import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-QH5KODNH.js';
5
+ import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-D7DZB3MU.js';
6
+ import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-VB4STO5K.js';
7
+ import { buildNodeDisplayMap, formatRunVersion } from './chunk-7GI3457S.js';
8
8
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
9
- import { useWorkflowVersions } from './chunk-QXACKASD.js';
10
- import { throwIfResultError, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, useWorkflowTestsEnabled, describeOperationError } from './chunk-YC76QFWZ.js';
9
+ import { useWorkflowVersions } from './chunk-4YB6BMV3.js';
10
+ import { throwIfResultError, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, useWorkflowTestsEnabled, describeOperationError } from './chunk-WWR7ZCS5.js';
11
11
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ZUVFD5KV.js';
12
12
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
13
- import { RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument } from './chunk-JTQFBZTV.js';
13
+ import { RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument } from './chunk-H3RSOHD5.js';
14
14
  import { useTr } from './chunk-UULVIT25.js';
15
15
  import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
16
16
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
@@ -1,13 +1,13 @@
1
- import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-52OIBKPO.js';
2
- import { useExecutions } from './chunk-6WPW42TX.js';
3
- import { useExportWorkflowAs, downloadWorkflowExport, importAcceptAttribute, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-SIVS3XSV.js';
1
+ import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-FSU6LYGU.js';
2
+ import { useExecutions } from './chunk-L2MUO3VU.js';
3
+ import { useExportWorkflowAs, downloadWorkflowExport, importAcceptAttribute, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-MJGB6XAP.js';
4
4
  import { workflowsListControls } from './chunk-FNZZ5JJL.js';
5
- import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-QXACKASD.js';
5
+ import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, usePreviewN8nImport, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-4YB6BMV3.js';
6
6
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
7
7
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
8
- import { createThenOpen, useFluidGridsFlag, FLUIDGRIDS_FLAGS, BILLING_PLANS_PATH, describeOperationError, useFlowStore, throwIfResultError, isQuotaExhaustedFailure } from './chunk-YC76QFWZ.js';
8
+ import { createThenOpen, useFluidGridsFlag, FLUIDGRIDS_FLAGS, BILLING_PLANS_PATH, describeOperationError, useFlowStore, throwIfResultError, isQuotaExhaustedFailure } from './chunk-WWR7ZCS5.js';
9
9
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton, SdkPermissionGate } from './chunk-ZUVFD5KV.js';
10
- import { WorkflowFoldersDocument, CreateWorkflowFolderDocument, RenameWorkflowFolderDocument, MoveWorkflowFolderDocument, DeleteWorkflowFolderDocument, WorkflowProjectsDocument, CreateWorkflowProjectDocument, RenameWorkflowProjectDocument, DeleteWorkflowProjectDocument, BulkMoveWorkflowsToFolderDocument, BulkAssignWorkflowsToProjectDocument, BulkDeleteWorkflowsDocument } from './chunk-JTQFBZTV.js';
10
+ import { WorkflowFoldersDocument, CreateWorkflowFolderDocument, RenameWorkflowFolderDocument, MoveWorkflowFolderDocument, DeleteWorkflowFolderDocument, WorkflowProjectsDocument, CreateWorkflowProjectDocument, RenameWorkflowProjectDocument, DeleteWorkflowProjectDocument, BulkMoveWorkflowsToFolderDocument, BulkAssignWorkflowsToProjectDocument, BulkDeleteWorkflowsDocument } from './chunk-H3RSOHD5.js';
11
11
  import { useTr } from './chunk-UULVIT25.js';
12
12
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
13
13
  import { useState, useRef, useCallback, useMemo, useEffect } from 'react';
@@ -698,6 +698,159 @@ var CardWorkflow = ({
698
698
  )
699
699
  ] });
700
700
  };
701
+ function Section({
702
+ title,
703
+ icon,
704
+ testId,
705
+ children
706
+ }) {
707
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-1", "data-testid": testId, children: [
708
+ /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-xs font-medium text-foreground", children: [
709
+ /* @__PURE__ */ jsx(Icon, { icon, className: "size-3.5 text-muted-foreground" }),
710
+ title
711
+ ] }),
712
+ /* @__PURE__ */ jsx("ul", { className: "space-y-1 pl-5 text-xs text-muted-foreground", children })
713
+ ] });
714
+ }
715
+ function keyed(entries, keyOf) {
716
+ const seen = /* @__PURE__ */ new Map();
717
+ for (const entry of entries) {
718
+ const key = keyOf(entry);
719
+ if (!seen.has(key)) seen.set(key, entry);
720
+ }
721
+ return [...seen.entries()];
722
+ }
723
+ function N8nImportReport({ report }) {
724
+ const tr = useTr();
725
+ return /* @__PURE__ */ jsxs(
726
+ "div",
727
+ {
728
+ className: "space-y-3 rounded-lg border border-border bg-background p-3",
729
+ "data-testid": "fluidgrids-import-n8n-report",
730
+ children: [
731
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
732
+ /* @__PURE__ */ jsx(
733
+ Icon,
734
+ {
735
+ icon: "mynaui:download",
736
+ className: "mt-0.5 size-4 shrink-0 text-muted-foreground"
737
+ }
738
+ ),
739
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
740
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: tr(
741
+ "fluidgrids.workflowsList.importN8nDetected",
742
+ "n8n workflow detected"
743
+ ) }),
744
+ /* @__PURE__ */ jsx(
745
+ "p",
746
+ {
747
+ className: "text-xs text-muted-foreground",
748
+ "data-testid": "fluidgrids-import-n8n-summary",
749
+ children: tr(
750
+ "fluidgrids.workflowsList.importN8nSummary",
751
+ "{{mapped}} of {{total}} nodes convert directly \xB7 {{placeholders}} placeholders \xB7 {{connections}} connections to set up",
752
+ {
753
+ mapped: String(report.mappedNodes.length),
754
+ total: String(report.nodeCount),
755
+ placeholders: String(report.placeholders.length),
756
+ connections: String(report.connectionsNeeded.length)
757
+ }
758
+ )
759
+ }
760
+ )
761
+ ] })
762
+ ] }),
763
+ report.placeholders.length > 0 && /* @__PURE__ */ jsx(
764
+ Section,
765
+ {
766
+ title: tr(
767
+ "fluidgrids.workflowsList.importN8nPlaceholders",
768
+ "Placeholders: these nodes are kept as disabled No-op nodes, with their n8n settings in the node notes"
769
+ ),
770
+ icon: "mynaui:square-dashed",
771
+ testId: "fluidgrids-import-n8n-placeholders",
772
+ children: report.placeholders.map((placeholder) => /* @__PURE__ */ jsxs("li", { children: [
773
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: placeholder.name }),
774
+ " ",
775
+ /* @__PURE__ */ jsxs("span", { className: "font-mono", children: [
776
+ "(",
777
+ placeholder.n8nType,
778
+ ")"
779
+ ] }),
780
+ ":",
781
+ " ",
782
+ placeholder.reason
783
+ ] }, placeholder.nodeId))
784
+ }
785
+ ),
786
+ report.connectionsNeeded.length > 0 && /* @__PURE__ */ jsx(
787
+ Section,
788
+ {
789
+ title: tr(
790
+ "fluidgrids.workflowsList.importN8nConnections",
791
+ "Connections to create: n8n credentials are never imported"
792
+ ),
793
+ icon: "mynaui:key",
794
+ testId: "fluidgrids-import-n8n-connections",
795
+ children: keyed(
796
+ report.connectionsNeeded,
797
+ (connection) => `${connection.nodeId}|${connection.provider ?? ""}|${connection.n8nCredentialType ?? ""}`
798
+ ).map(([key, connection]) => /* @__PURE__ */ jsxs("li", { children: [
799
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: connection.nodeName }),
800
+ connection.provider && connection.provider !== "*" ? ` \xB7 ${connection.provider}` : "",
801
+ connection.n8nCredentialName ? ` \xB7 ${tr(
802
+ "fluidgrids.workflowsList.importN8nCredentialWas",
803
+ "was {{credential}} in n8n",
804
+ { credential: connection.n8nCredentialName }
805
+ )}` : ""
806
+ ] }, key))
807
+ }
808
+ ),
809
+ report.expressionIssues.length > 0 && /* @__PURE__ */ jsx(
810
+ Section,
811
+ {
812
+ title: tr(
813
+ "fluidgrids.workflowsList.importN8nExpressions",
814
+ "Expressions and conditions to review"
815
+ ),
816
+ icon: "mynaui:code",
817
+ testId: "fluidgrids-import-n8n-expressions",
818
+ children: keyed(
819
+ report.expressionIssues,
820
+ (issue) => `${issue.nodeName}|${issue.expression}|${issue.reason}`
821
+ ).map(([key, issue]) => /* @__PURE__ */ jsxs("li", { children: [
822
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: issue.nodeName }),
823
+ ": ",
824
+ /* @__PURE__ */ jsx("span", { className: "break-all font-mono", children: issue.expression }),
825
+ " ",
826
+ "\u2014 ",
827
+ issue.reason
828
+ ] }, key))
829
+ }
830
+ ),
831
+ report.warnings.length > 0 && /* @__PURE__ */ jsx(
832
+ Section,
833
+ {
834
+ title: tr("fluidgrids.workflowsList.importN8nNotes", "Notes"),
835
+ icon: "mynaui:info-circle",
836
+ testId: "fluidgrids-import-n8n-warnings",
837
+ children: keyed(
838
+ report.warnings,
839
+ (warning) => `${warning.nodeName ?? ""}|${warning.message}`
840
+ ).map(([key, warning]) => /* @__PURE__ */ jsxs("li", { children: [
841
+ warning.nodeName ? /* @__PURE__ */ jsxs("span", { className: "font-medium text-foreground", children: [
842
+ warning.nodeName,
843
+ ":",
844
+ " "
845
+ ] }) : null,
846
+ warning.message
847
+ ] }, key))
848
+ }
849
+ )
850
+ ]
851
+ }
852
+ );
853
+ }
701
854
  function formatMiB(bytes) {
702
855
  const mib = bytes / (1024 * 1024);
703
856
  return Number.isInteger(mib) ? String(mib) : mib.toFixed(1);
@@ -788,7 +941,17 @@ function WorkflowImportDialog({
788
941
  const [workflowKey, setWorkflowKey] = useState("");
789
942
  const [version, setVersion] = useState("");
790
943
  const [loadingUrl, setLoadingUrl] = useState(false);
944
+ const { previewN8nImport } = usePreviewN8nImport();
945
+ const [n8nPreview, setN8nPreview] = useState(null);
946
+ const [previewingN8n, setPreviewingN8n] = useState(false);
947
+ const previewRequest = useRef(0);
948
+ const dropN8nPreview = () => {
949
+ previewRequest.current += 1;
950
+ setN8nPreview(null);
951
+ setPreviewingN8n(false);
952
+ };
791
953
  const reset = () => {
954
+ dropN8nPreview();
792
955
  setRawJson("");
793
956
  setUrl("");
794
957
  setParsed(null);
@@ -800,6 +963,7 @@ function WorkflowImportDialog({
800
963
  setSubmitted(false);
801
964
  };
802
965
  const selectTypeScript = (label, files) => {
966
+ dropN8nPreview();
803
967
  setParsed(null);
804
968
  setIssues(null);
805
969
  setSubmitted(false);
@@ -809,6 +973,7 @@ function WorkflowImportDialog({
809
973
  setVersion("");
810
974
  };
811
975
  const refuseSource = (error) => {
976
+ dropN8nPreview();
812
977
  setTypeScript(null);
813
978
  setParsed(null);
814
979
  setSubmitted(false);
@@ -838,16 +1003,39 @@ function WorkflowImportDialog({
838
1003
  }
839
1004
  return true;
840
1005
  };
1006
+ const showN8nPreview = async (next) => {
1007
+ const request = previewRequest.current;
1008
+ setPreviewingN8n(true);
1009
+ try {
1010
+ const preview = await previewN8nImport(next.definitionJson);
1011
+ if (request !== previewRequest.current) return;
1012
+ setN8nPreview(preview);
1013
+ setName(preview.name);
1014
+ } catch (error) {
1015
+ if (request !== previewRequest.current) return;
1016
+ setParsed(null);
1017
+ toast.error(
1018
+ error instanceof Error ? error.message : tr(
1019
+ "fluidgrids.workflowsList.importN8nPreviewFailed",
1020
+ "The n8n workflow could not be read"
1021
+ )
1022
+ );
1023
+ } finally {
1024
+ if (request === previewRequest.current) setPreviewingN8n(false);
1025
+ }
1026
+ };
841
1027
  const parse = (value) => {
842
1028
  setTypeScript(null);
843
1029
  setIssues(null);
844
1030
  setSubmitted(false);
1031
+ dropN8nPreview();
845
1032
  try {
846
1033
  const next = parseWorkflowImport(value);
847
1034
  setParsed(next);
848
1035
  setName(next.name);
849
1036
  setWorkflowKey("");
850
1037
  setVersion(next.version ?? "");
1038
+ if (next.source === "n8n") void showN8nPreview(next);
851
1039
  } catch (error) {
852
1040
  setParsed(null);
853
1041
  toast.error(
@@ -1126,6 +1314,7 @@ function WorkflowImportDialog({
1126
1314
  onChange: (event) => {
1127
1315
  setRawJson(event.target.value);
1128
1316
  setParsed(null);
1317
+ dropN8nPreview();
1129
1318
  },
1130
1319
  onBlur: () => rawJson.trim() && parse(rawJson),
1131
1320
  placeholder: tr(
@@ -1140,7 +1329,20 @@ function WorkflowImportDialog({
1140
1329
  }
1141
1330
  ),
1142
1331
  (parsed || typeScript) && /* @__PURE__ */ jsxs("div", { className: "space-y-3 rounded-lg border border-border bg-muted/30 p-3", children: [
1143
- parsed ? /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
1332
+ parsed?.source === "n8n" ? n8nPreview ? /* @__PURE__ */ jsx(N8nImportReport, { report: n8nPreview.report }) : /* @__PURE__ */ jsx(
1333
+ "p",
1334
+ {
1335
+ className: "text-xs text-muted-foreground",
1336
+ "data-testid": "fluidgrids-import-n8n-previewing",
1337
+ children: previewingN8n ? tr(
1338
+ "fluidgrids.workflowsList.importN8nPreviewing",
1339
+ "Reading the n8n workflow\u2026"
1340
+ ) : tr(
1341
+ "fluidgrids.workflowsList.importN8nDetected",
1342
+ "n8n workflow detected"
1343
+ )
1344
+ }
1345
+ ) : parsed ? /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
1144
1346
  parsed.nodeReferences.length,
1145
1347
  " ",
1146
1348
  tr(
@@ -1223,7 +1425,7 @@ function WorkflowImportDialog({
1223
1425
  Button,
1224
1426
  {
1225
1427
  onClick: () => void handleImport(),
1226
- disabled: loading || !parsed && !typeScript || !name.trim(),
1428
+ disabled: loading || !parsed && !typeScript || !name.trim() || parsed?.source === "n8n" && !n8nPreview,
1227
1429
  children: loading ? tr("fluidgrids.workflowsList.importing", "Importing\u2026") : tr("fluidgrids.workflowsList.importConfirm", "Import workflow")
1228
1430
  }
1229
1431
  )
@@ -1,5 +1,5 @@
1
- import { throwIfResultError } from './chunk-YC76QFWZ.js';
2
- import { RunFailureClustersDocument, DismissRunFailureClusterDocument, RunFailureTriageSettingsDocument, SetRunFailureTriageEnabledDocument, FgTriageFailedRunsDocument } from './chunk-JTQFBZTV.js';
1
+ import { throwIfResultError } from './chunk-WWR7ZCS5.js';
2
+ import { RunFailureClustersDocument, DismissRunFailureClusterDocument, RunFailureTriageSettingsDocument, SetRunFailureTriageEnabledDocument, FgTriageFailedRunsDocument } from './chunk-H3RSOHD5.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useState, useCallback, useEffect } from 'react';
@@ -1,10 +1,10 @@
1
1
  import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from './chunk-JDLQ6QIB.js';
2
- import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-PC3CICOW.js';
2
+ import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-7GI3457S.js';
3
3
  import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
4
4
  import { ErrorType } from './chunk-AOLY5INN.js';
5
- import { throwIfResultError, isForbiddenError } from './chunk-YC76QFWZ.js';
5
+ import { throwIfResultError, isForbiddenError } from './chunk-WWR7ZCS5.js';
6
6
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
7
- import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-JTQFBZTV.js';
7
+ import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-H3RSOHD5.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
9
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
10
10
  import { useState, useRef, useEffect, useCallback } from 'react';
@@ -1,5 +1,5 @@
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 { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-YC76QFWZ.js';
2
+ import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-WWR7ZCS5.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useCallback, useState, useMemo, useEffect } from 'react';
@@ -3,7 +3,7 @@ import { useBuilderReadOnly, editorSeverity } from './chunk-OCJTTHTS.js';
3
3
  import { getGlobalStoreClient, createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient } from './chunk-PXIFUMLA.js';
4
4
  import { getFluidGridsConfig, validateTrustedOrigin, resetFluidGridsExecutionState, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-6AMNEX2Y.js';
5
5
  import { GetMyNodeInstallationsDocument } from './chunk-G77IGC3Y.js';
6
- import { fetchAllNodeEndpointConfigs, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowDefinitionDocument, WorkflowRunDocument } from './chunk-JTQFBZTV.js';
6
+ import { fetchAllNodeEndpointConfigs, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowDefinitionDocument, WorkflowRunDocument } from './chunk-H3RSOHD5.js';
7
7
  import { useTr, ENGLISH_FALLBACK_TRANSLATOR, FluidGridsTranslationProvider } from './chunk-UULVIT25.js';
8
8
  import { waitForFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-NTWG3CJX.js';
9
9
  import * as React from 'react';
@@ -1,5 +1,5 @@
1
- import { mergeStickyNotes, describeOperationError, throwIfResultError } from './chunk-YC76QFWZ.js';
2
- import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-JTQFBZTV.js';
1
+ import { mergeStickyNotes, describeOperationError, throwIfResultError } from './chunk-WWR7ZCS5.js';
2
+ import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-H3RSOHD5.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { memo, useState, useEffect, useMemo, useRef, useCallback } from 'react';
@@ -1,28 +1,28 @@
1
1
  import './chunk-AD3BXTJS.js';
2
- export { ExecutionsListPage } from './chunk-BP6YPKNK.js';
3
- export { ExecutionDetailPage } from './chunk-RFOKJE3A.js';
4
- import './chunk-G2FPOWN5.js';
5
- import './chunk-K6HD5GC7.js';
6
- import './chunk-6WPW42TX.js';
7
- import './chunk-H2KIJEYM.js';
8
- import './chunk-BVCMAGLJ.js';
2
+ export { ExecutionsListPage } from './chunk-B5L7VBDH.js';
3
+ export { ExecutionDetailPage } from './chunk-PXVHPGUB.js';
4
+ import './chunk-LQ7KYFAK.js';
5
+ import './chunk-BJ5H5QV4.js';
6
+ import './chunk-L2MUO3VU.js';
7
+ import './chunk-QH5KODNH.js';
8
+ import './chunk-D7DZB3MU.js';
9
9
  import './chunk-5ERAJC2I.js';
10
- import './chunk-OBWB73Y7.js';
10
+ import './chunk-VB4STO5K.js';
11
11
  import './chunk-JDLQ6QIB.js';
12
- import './chunk-PC3CICOW.js';
12
+ import './chunk-7GI3457S.js';
13
13
  import './chunk-Y53CVZVV.js';
14
14
  import './chunk-FNZZ5JJL.js';
15
- import './chunk-QXACKASD.js';
15
+ import './chunk-4YB6BMV3.js';
16
16
  import './chunk-PJAWNFJV.js';
17
17
  import './chunk-AOLY5INN.js';
18
18
  import './chunk-4VJ3MDOV.js';
19
- import './chunk-YC76QFWZ.js';
19
+ import './chunk-WWR7ZCS5.js';
20
20
  import './chunk-ZUVFD5KV.js';
21
21
  import './chunk-JL7CASN5.js';
22
22
  import './chunk-OCJTTHTS.js';
23
23
  import './chunk-PXIFUMLA.js';
24
24
  import './chunk-6AMNEX2Y.js';
25
25
  import './chunk-G77IGC3Y.js';
26
- import './chunk-JTQFBZTV.js';
26
+ import './chunk-H3RSOHD5.js';
27
27
  import './chunk-UULVIT25.js';
28
28
  import './chunk-NTWG3CJX.js';