@burdenoff/fluidgrids-fe-sdk 2026.1111.16 → 2026.1111.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/AiStudioPage-BHVEU4Wp.js +774 -0
- package/dist/ApprovalInboxPage-dbBDSJ-f.js +558 -0
- package/dist/DataSinkDashboardPage-1h2QsMzH.js +270 -0
- package/dist/DataTablesPage-BZy2z0LB.js +1690 -0
- package/dist/EntityTagPicker-BqRNsLCQ.js +135 -0
- package/dist/{ExecutionDetailPage-D-0_POAf.js → ExecutionDetailPage-BdcZmLT4.js} +799 -4420
- package/dist/ExecutionDetailPage-DvQ667OE.d.ts +10 -0
- package/dist/ExecutionsListPage-BCUJoAIE.js +2742 -0
- package/dist/{FailureTriagePanel-BHiduL7A.js → FailureTriagePanel-B9hDQymi.js} +4 -97
- package/dist/{FluidGridsProvider-DmvFADFa.js → FluidGridsProvider-dvZSNtSW.js} +10 -350
- package/dist/HistoryPage-BLoRpJ1R.d.ts +6 -0
- package/dist/{HistoryPage-BbUgxx1I.js → HistoryPage-U0tqupBN.js} +6 -4
- package/dist/HumanRequestCard-D-ooVPDn.js +439 -0
- package/dist/{InsightsPage-s6f5bU-8.js → InsightsPage-CALo16eB.js} +17 -328
- package/dist/ManagedAiPolicyAuthority-BxwJ3ptd.js +40 -0
- package/dist/{ManagedAiPolicyAuthority-CGux_DaV.d.ts → ManagedAiPolicyAuthority-DM3t3wNr.d.ts} +1 -5
- package/dist/ManagedAiPolicyAuthorityContext-CNkxIOZ1.js +10 -0
- package/dist/{MissingNodesInstallModal-B-9gHy2K.js → MissingNodesInstallModal-CMybsI8h.js} +3 -2
- package/dist/{NodesPage-ClvhUfbh.js → NodesPage-Bf5PhfBK.js} +7 -3
- package/dist/NodesPage-DEbnz9iU.d.ts +6 -0
- package/dist/{PublishCustomNodeAction-D2F7oN0S.js → PublishCustomNodeAction-5XXnSA3H.js} +3 -45
- package/dist/QuotaExhaustedDialog-7IFSaLyi.js +54 -0
- package/dist/RunnerStatusPill-Ctg4TJcP.js +187 -0
- package/dist/RunnersPage-CLCOCclc.js +467 -0
- package/dist/{ManagedAiPolicyAuthority-DsSaz-vg.js → SettingsPage-CJLZvv4J.js} +743 -773
- package/dist/SettingsPage-DMHQFj5-.d.ts +9 -0
- package/dist/TagFilterSelect-DCBOH6Ou.js +41 -0
- package/dist/TaskQueuesPage-9VgSnLdL.js +951 -0
- package/dist/TemplateCard-DsC0KNH1.js +1416 -0
- package/dist/{TemplateConfigurationModal-D_Mvgxqa.js → TemplateConfigurationModal-BhGWIzpm.js} +3 -2
- package/dist/{TemplateDetailPanel-DfFfUcOe.js → TemplateDetailPanel-D4cUVr-m.js} +3 -3
- package/dist/TemplatePreview-FayF6jxh.js +231 -0
- package/dist/TemplatesPage-BG3H-6v6.d.ts +10 -0
- package/dist/{TemplatesPage-Cku13bav.js → TemplatesPage-CsDNT54N.js} +11 -228
- package/dist/VariablesPage-67WR_lVE.js +949 -0
- package/dist/{VersionDiffDialog-Dq2xlPFI.js → VersionDiffDialog-DSN0mU0f.js} +2 -1
- package/dist/WorkflowBuilder-CPnXEL5J.js +555 -0
- package/dist/{WorkflowSearchRedirect-CaoOOpEl.js → WorkflowBuilder-YXRysvZc.js} +19 -585
- package/dist/{WorkflowProposalCard-8Vr56kQa.js → WorkflowProposalCard-qrEeNyYG.js} +4 -405
- package/dist/WorkflowSearchRedirect-DwDNZ_q5.js +36 -0
- package/dist/WorkflowShareDialog-mbIwRQUY.js +168 -0
- package/dist/WorkflowsList-CcNDQge5.d.ts +6 -0
- package/dist/{WorkflowsList-B2j1Pehb.js → WorkflowsList-DiiGyZkT.js} +12 -6
- package/dist/agent-form-Bfvm32j1.js +83 -0
- package/dist/{agentTools-DJ5o2ekg.js → agentTools-8s_25Q_F.js} +3 -2
- package/dist/{ai-usage-D5p7ZeRR.js → ai-usage-glCwHyQz.js} +1 -1
- package/dist/api-BrCHB5oA.js +224 -0
- package/dist/api-C8e0iV-Q.js +55 -0
- package/dist/button-DG7y_FVJ.js +48 -0
- package/dist/{canvasNoteTools-D3zUdEeg.js → canvasNoteTools-B6pYARgU.js} +2 -2
- package/dist/client-C9XSzSXr.js +1147 -0
- package/dist/code-editor-field-9-GdVE_8.js +111 -0
- package/dist/{codec-client-DstqyzTN.js → codec-client-CJ95Rmqo.js} +1 -1
- package/dist/constants-B2lhWNoN.js +202 -0
- package/dist/constants-XdvUxeWK.d.ts +162 -0
- package/dist/dialog-Cjb4lB4D.js +105 -0
- package/dist/executions.d.ts +1 -1
- package/dist/executions.js +2 -1
- package/dist/feature-flags-DM5myWaD.js +296 -0
- package/dist/flags.d.ts +3 -0
- package/dist/flags.js +4 -0
- package/dist/{flow-builder-DEzT8TQu.js → flow-builder-CZDKRc6f.js} +662 -10716
- package/dist/{node-endpoint-configs-DHFGA5MQ.js → graphql-operation-types-kX-MMjgW.js} +1 -1194
- package/dist/{graphql-types-XcDLtFwU.js → graphql-types-CDKVWH2R.js} +2 -202
- package/dist/history.d.ts +1 -1
- package/dist/history.js +1 -1
- package/dist/{index-DRf25-D3.d.ts → index-6JR2vD9J.d.ts} +33 -215
- package/dist/index-72XFgvbn.d.ts +132 -0
- package/dist/index-BcdtKBM-.d.ts +56 -0
- package/dist/{index-B3BWqafN.d.ts → index-DjiFgEQl.d.ts} +5 -131
- package/dist/index.d.ts +13 -9
- package/dist/index.js +52 -5300
- package/dist/{node-detail-view-LNqeIqN-.js → node-detail-view-CV4ZRwqh.js} +13 -8
- package/dist/node-editor-tab-body-DU-dh35X.js +174 -0
- package/dist/node-endpoint-configs-B5bjNMDW.js +37 -0
- package/dist/node-registry-refresh-Dy0uRg9f.js +84 -0
- package/dist/nodes.d.ts +1 -1
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -1
- package/dist/popover-BJHvrFGR.js +472 -0
- package/dist/{quick-config-panel-D3ogsaFL.js → quick-config-panel-ws3pLvbt.js} +3 -2
- package/dist/rolldown-runtime-hDbaFkMy.js +18 -0
- package/dist/run-display-BycKYSU0.js +46 -0
- package/dist/run-list-links-ByYC0OlV.js +98 -0
- package/dist/schedule-panel-C0mfGQSD.js +7542 -0
- package/dist/settings.d.ts +2 -1
- package/dist/settings.js +2 -1
- package/dist/shared-CMfn30xT.js +196 -0
- package/dist/sidebar-node-editor-CR1PiZO-.js +177 -0
- package/dist/templates.d.ts +1 -1
- package/dist/templates.js +2 -1
- package/dist/theme-provider-B3mIuz2d.js +11 -0
- package/dist/{useAgentDefinitions-NFtLytDR.js → useAgentDefinitions-B0dam3_o.js} +3 -397
- package/dist/useConnections-Cs7LCWEM.js +401 -0
- package/dist/useDurableParity-CzUQMFJ3.js +415 -0
- package/dist/useEntityTags-DhnsZcTl.js +236 -0
- package/dist/{useExecutions-DAzeWHS6.js → useExecutions-9aLuOt1c.js} +4 -3
- package/dist/{useObservability-COCZ0hUS.js → useObservability-CfEw3ZFD.js} +2 -2
- package/dist/{useRunHistory-CsYUbouO.js → useRunHistory-B1xJDwl1.js} +4 -3
- package/dist/{WorkflowShareDialog-6RRDe-_v.js → useWorkflowCodeExport-Bu2QYJzA.js} +7 -210
- package/dist/{useWorkflows-w4Dx2fF2.js → useWorkflows-BlVVu8NM.js} +3 -2
- package/dist/utils-uaL5UVxb.js +65 -0
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +4 -2
- package/dist/workflow-host.d.ts +6 -0
- package/dist/workflow-host.js +9 -0
- package/dist/workflow-pages.d.ts +55 -0
- package/dist/workflow-pages.js +113 -0
- package/dist/workflows-list.d.ts +1 -1
- package/dist/workflows-list.js +1 -1
- package/package.json +13 -1
- package/dist/ExecutionDetailPage-MvsnOnE1.d.ts +0 -4
- package/dist/HistoryPage-BqUizaFv.d.ts +0 -3
- package/dist/NodesPage-C97-9K2Y.d.ts +0 -3
- package/dist/TemplatesPage-D0qnXzHh.d.ts +0 -4
- package/dist/WorkflowsList-0d5GSKdh.d.ts +0 -3
- package/dist/agent-form-BvMWhQ42.js +0 -496
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { _ as throwIfResultError, h as isForbiddenError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
|
-
import {
|
|
4
|
+
import { F as CreateWorkflowTestCaseDocument, I as CreateWorkflowTestCaseFromRunDocument, Sn as RunWorkflowTestsDocument, Ut as ProposeRunFixDocument, Wr as WorkflowProposalDocument, Wt as ProposeWorkflowChangeDocument, Y as DeleteWorkflowTestCaseDocument, Yt as RejectWorkflowProposalDocument, _i as WorkflowTestRunsDocument, c as ApplyWorkflowProposalDocument, hi as WorkflowTestRunDocument, mi as WorkflowTestCasesDocument, ur as UpdateWorkflowTestCaseDocument, x as CancelWorkflowProposalDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
5
|
+
import { $F as WorkflowTestRunSource, $u as ErrorType, QF as WorkflowTestExpectedStatus, ZF as WorkflowTestAssertionOperator, eI as WorkflowTestRunStatus } from "./graphql-types-CDKVWH2R.js";
|
|
5
6
|
import { a as notifyFluidGridsAiCreditsUpdated } from "./aiCreditsBridge-BuE92tKo.js";
|
|
6
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
7
8
|
import { Icon } from "@iconify/react";
|
|
8
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
10
|
import { Badge, Button } from "@burdenoff/fe-libs/ui";
|
|
10
|
-
import { TagBadge, TagsWidget } from "@burdenoff/fe-libs/tag";
|
|
11
11
|
|
|
12
12
|
// src/builder/lib/assert-rules.ts
|
|
13
13
|
/** Every operator, in the order the editors offer them. */
|
|
@@ -323,407 +323,6 @@ function ruleFromRow(row) {
|
|
|
323
323
|
return rule;
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
-
// src/hooks/useEntityTags.ts
|
|
327
|
-
/**
|
|
328
|
-
* Entity tag hooks — thin wrappers over the generic FluidGrids tag API
|
|
329
|
-
* (wspace-workflow-svc `tags` module → wspace-tags-svc).
|
|
330
|
-
*
|
|
331
|
-
* Uses the shared Apollo client directly rather than generated hooks, matching
|
|
332
|
-
* the convention in useWorkflows.ts (works in embeds and other contexts that
|
|
333
|
-
* mount the SDK without an ApolloProvider above them).
|
|
334
|
-
*/
|
|
335
|
-
/**
|
|
336
|
-
* Entity types accepted by the FluidGrids tag API (wspace-workflow-svc
|
|
337
|
-
* `src/modules/tags/entity-tags.ts`). Workflows are tagged by `workflowKey`,
|
|
338
|
-
* every other type by its id. Connections are tagged in the integrations
|
|
339
|
-
* service, not here.
|
|
340
|
-
*/
|
|
341
|
-
const FLUIDGRIDS_ENTITY_TYPES = [
|
|
342
|
-
"FLUIDGRIDS_WORKFLOW",
|
|
343
|
-
"FLUIDGRIDS_RUN",
|
|
344
|
-
"FLUIDGRIDS_DATA_TABLE",
|
|
345
|
-
"FLUIDGRIDS_TRIGGER",
|
|
346
|
-
"FLUIDGRIDS_SCHEDULE"
|
|
347
|
-
];
|
|
348
|
-
/** Display label for an assignment, degrading to the tag id when tags-svc omits the projection. */
|
|
349
|
-
function tagLabel(assignment) {
|
|
350
|
-
return assignment.tagInfo?.label ?? assignment.tagInfo?.key ?? assignment.tagId.slice(0, 8);
|
|
351
|
-
}
|
|
352
|
-
/** Tags currently assigned to an entity. */
|
|
353
|
-
function useEntityTags(entityType, entityId) {
|
|
354
|
-
const [tags, setTags] = useState([]);
|
|
355
|
-
const [loading, setLoading] = useState(false);
|
|
356
|
-
const [error, setError] = useState(null);
|
|
357
|
-
const refetch = useCallback(async () => {
|
|
358
|
-
if (!entityId) {
|
|
359
|
-
setTags([]);
|
|
360
|
-
return [];
|
|
361
|
-
}
|
|
362
|
-
setLoading(true);
|
|
363
|
-
setError(null);
|
|
364
|
-
try {
|
|
365
|
-
const { data } = await getFluidGridsClient().query({
|
|
366
|
-
query: FluidgridsEntityTagsDocument,
|
|
367
|
-
variables: { input: {
|
|
368
|
-
entityType,
|
|
369
|
-
entityId
|
|
370
|
-
} },
|
|
371
|
-
fetchPolicy: "network-only"
|
|
372
|
-
});
|
|
373
|
-
const next = data?.fluidgridsEntityTags ?? [];
|
|
374
|
-
setTags(next);
|
|
375
|
-
return next;
|
|
376
|
-
} catch (err) {
|
|
377
|
-
setError(err);
|
|
378
|
-
return [];
|
|
379
|
-
} finally {
|
|
380
|
-
setLoading(false);
|
|
381
|
-
}
|
|
382
|
-
}, [entityType, entityId]);
|
|
383
|
-
useEffect(() => {
|
|
384
|
-
refetch();
|
|
385
|
-
}, [refetch]);
|
|
386
|
-
return {
|
|
387
|
-
tags,
|
|
388
|
-
loading,
|
|
389
|
-
error,
|
|
390
|
-
refetch
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
/** All assignable tags in the workspace. */
|
|
394
|
-
function useAvailableTags(limit = 50, options = {}) {
|
|
395
|
-
const [availableTags, setAvailableTags] = useState([]);
|
|
396
|
-
const [loading, setLoading] = useState(false);
|
|
397
|
-
const skip = options.skip ?? false;
|
|
398
|
-
const fetchTags = useCallback(async () => {
|
|
399
|
-
if (skip) return;
|
|
400
|
-
setLoading(true);
|
|
401
|
-
try {
|
|
402
|
-
const { data } = await getFluidGridsClient().query({
|
|
403
|
-
query: AvailableFluidgridsTagsDocument,
|
|
404
|
-
variables: { limit },
|
|
405
|
-
fetchPolicy: "network-only"
|
|
406
|
-
});
|
|
407
|
-
setAvailableTags(data?.availableFluidgridsTags ?? []);
|
|
408
|
-
} catch {
|
|
409
|
-
setAvailableTags([]);
|
|
410
|
-
} finally {
|
|
411
|
-
setLoading(false);
|
|
412
|
-
}
|
|
413
|
-
}, [limit, skip]);
|
|
414
|
-
useEffect(() => {
|
|
415
|
-
fetchTags();
|
|
416
|
-
}, [fetchTags]);
|
|
417
|
-
return {
|
|
418
|
-
availableTags,
|
|
419
|
-
loading,
|
|
420
|
-
refetch: fetchTags
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
/** Search assignable tags by label. */
|
|
424
|
-
function useSearchTags() {
|
|
425
|
-
return useCallback(async (query, limit = 20) => {
|
|
426
|
-
if (!query.trim()) return [];
|
|
427
|
-
try {
|
|
428
|
-
const { data } = await getFluidGridsClient().query({
|
|
429
|
-
query: SearchFluidgridsTagsDocument,
|
|
430
|
-
variables: {
|
|
431
|
-
query,
|
|
432
|
-
limit
|
|
433
|
-
},
|
|
434
|
-
fetchPolicy: "network-only"
|
|
435
|
-
});
|
|
436
|
-
return data?.searchFluidgridsTags ?? [];
|
|
437
|
-
} catch {
|
|
438
|
-
return [];
|
|
439
|
-
}
|
|
440
|
-
}, []);
|
|
441
|
-
}
|
|
442
|
-
/** Assign a tag to an entity. */
|
|
443
|
-
function useTagEntity() {
|
|
444
|
-
return useCallback(async (entityType, entityId, tagId) => {
|
|
445
|
-
const { data } = await getFluidGridsClient().mutate({
|
|
446
|
-
mutation: TagFluidgridsEntityDocument,
|
|
447
|
-
variables: { input: {
|
|
448
|
-
entityType,
|
|
449
|
-
entityId,
|
|
450
|
-
tagId,
|
|
451
|
-
source: "MANUAL"
|
|
452
|
-
} }
|
|
453
|
-
});
|
|
454
|
-
return Boolean(data?.tagFluidgridsEntity);
|
|
455
|
-
}, []);
|
|
456
|
-
}
|
|
457
|
-
/** Remove a tag from an entity. */
|
|
458
|
-
function useUntagEntity() {
|
|
459
|
-
return useCallback(async (entityType, entityId, tagId) => {
|
|
460
|
-
const { data } = await getFluidGridsClient().mutate({
|
|
461
|
-
mutation: UntagFluidgridsEntityDocument,
|
|
462
|
-
variables: { input: {
|
|
463
|
-
entityType,
|
|
464
|
-
entityId,
|
|
465
|
-
tagId
|
|
466
|
-
} }
|
|
467
|
-
});
|
|
468
|
-
return Boolean(data?.untagFluidgridsEntity);
|
|
469
|
-
}, []);
|
|
470
|
-
}
|
|
471
|
-
/** Replace the full tag set on an entity. */
|
|
472
|
-
function useReplaceEntityTags() {
|
|
473
|
-
return useCallback(async (entityType, entityId, tagIds) => {
|
|
474
|
-
const { data } = await getFluidGridsClient().mutate({
|
|
475
|
-
mutation: ReplaceFluidgridsEntityTagsDocument,
|
|
476
|
-
variables: { input: {
|
|
477
|
-
entityType,
|
|
478
|
-
entityId,
|
|
479
|
-
tagIds
|
|
480
|
-
} }
|
|
481
|
-
});
|
|
482
|
-
return data?.replaceFluidgridsEntityTags ?? [];
|
|
483
|
-
}, []);
|
|
484
|
-
}
|
|
485
|
-
/** Create a new assignable tag (inline creation from the picker). */
|
|
486
|
-
function useCreateTag() {
|
|
487
|
-
return useCallback(async (label, color) => {
|
|
488
|
-
const { data } = await getFluidGridsClient().mutate({
|
|
489
|
-
mutation: CreateFluidgridsTagDocument,
|
|
490
|
-
variables: { input: {
|
|
491
|
-
label,
|
|
492
|
-
color
|
|
493
|
-
} }
|
|
494
|
-
});
|
|
495
|
-
return data?.createFluidgridsTag ?? null;
|
|
496
|
-
}, []);
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Create-time tagging: collect tag ids while the entity does not exist yet,
|
|
500
|
-
* then flush them once it does.
|
|
501
|
-
*
|
|
502
|
-
* The flush is best-effort — the entity already exists by then, so a tag
|
|
503
|
-
* failure must never block navigation; the detail-surface picker lets the
|
|
504
|
-
* user retry.
|
|
505
|
-
*/
|
|
506
|
-
function useDraftEntityTags(entityType) {
|
|
507
|
-
const [draftTagIds, setDraftTagIds] = useState([]);
|
|
508
|
-
const tagEntity = useTagEntity();
|
|
509
|
-
return {
|
|
510
|
-
draftTagIds,
|
|
511
|
-
setDraftTagIds,
|
|
512
|
-
flushTags: useCallback(async (entityId) => {
|
|
513
|
-
if (!entityId || draftTagIds.length === 0) return;
|
|
514
|
-
await Promise.all(draftTagIds.map((tagId) => tagEntity(entityType, entityId, tagId).catch(() => false)));
|
|
515
|
-
}, [
|
|
516
|
-
draftTagIds,
|
|
517
|
-
entityType,
|
|
518
|
-
tagEntity
|
|
519
|
-
])
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
/**
|
|
523
|
-
* Tag overlay for the Data Tables list: tableId -> assignments (G47).
|
|
524
|
-
*
|
|
525
|
-
* Separate from the list query, like {@link useWorkflowTagOverlay}: when
|
|
526
|
-
* `tagAssignments` is not in the supergraph yet, only the chips go missing.
|
|
527
|
-
*/
|
|
528
|
-
function useDataTableTagOverlay(limit = 200) {
|
|
529
|
-
const [tagsById, setTagsById] = useState({});
|
|
530
|
-
const fetchOverlay = useCallback(async () => {
|
|
531
|
-
try {
|
|
532
|
-
const { data } = await getFluidGridsClient().query({
|
|
533
|
-
query: DataTablesTagsDocument,
|
|
534
|
-
variables: { limit },
|
|
535
|
-
fetchPolicy: "network-only"
|
|
536
|
-
});
|
|
537
|
-
const next = {};
|
|
538
|
-
for (const table of data?.dataTables?.tables ?? []) {
|
|
539
|
-
const assignments = table.tagAssignments ?? [];
|
|
540
|
-
if (assignments.length > 0) next[table.id] = assignments;
|
|
541
|
-
}
|
|
542
|
-
setTagsById(next);
|
|
543
|
-
} catch {
|
|
544
|
-
setTagsById({});
|
|
545
|
-
}
|
|
546
|
-
}, [limit]);
|
|
547
|
-
useEffect(() => {
|
|
548
|
-
fetchOverlay();
|
|
549
|
-
}, [fetchOverlay]);
|
|
550
|
-
return {
|
|
551
|
-
tagsById,
|
|
552
|
-
refetch: fetchOverlay
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
// src/components/shared/EntityTagPicker.tsx
|
|
557
|
-
/**
|
|
558
|
-
* EntityTagPicker — universal tag strip for FluidGrids entities.
|
|
559
|
-
*
|
|
560
|
-
* Reuse-first: the shared `TagsWidget` from `@burdenoff/fe-libs/tag` supplies
|
|
561
|
-
* the search/create/vocabulary UX and the tags-svc graph sync; this wrapper
|
|
562
|
-
* only owns persistence, which goes through the FluidGrids tag API
|
|
563
|
-
* (`tagFluidgridsEntity` / `untagFluidgridsEntity` → wspace-tags-svc
|
|
564
|
-
* assignment rows). We never stand up a parallel tag store.
|
|
565
|
-
*
|
|
566
|
-
* Workflows are tagged by `workflowKey`, not the version row id — pass the key
|
|
567
|
-
* as `entityId` so every version of a workflow shares one tag set. Runs, data
|
|
568
|
-
* tables, triggers and schedules are tagged by their id.
|
|
569
|
-
*
|
|
570
|
-
* Draft mode: omit `entityId` (create forms). Nothing is fetched or persisted;
|
|
571
|
-
* selections are emitted through `onDraftChange` for the parent to flush with
|
|
572
|
-
* `useDraftEntityTags` once the entity exists.
|
|
573
|
-
*/
|
|
574
|
-
function toTagItem(assignment) {
|
|
575
|
-
return {
|
|
576
|
-
id: assignment.tagId,
|
|
577
|
-
key: assignment.tagInfo?.key ?? assignment.tagId,
|
|
578
|
-
label: assignment.tagInfo?.label ?? assignment.tagInfo?.key ?? "Tag",
|
|
579
|
-
color: assignment.tagInfo?.color ?? null
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
function EntityTagPicker({ entityType, entityId, onDraftChange, readOnly = false, onChange, className }) {
|
|
583
|
-
const draftMode = !entityId;
|
|
584
|
-
const { workspaceId } = getFluidGridsConfig();
|
|
585
|
-
const { tags: assignments, refetch } = useEntityTags(entityType, entityId);
|
|
586
|
-
const tagEntity = useTagEntity();
|
|
587
|
-
const untagEntity = useUntagEntity();
|
|
588
|
-
const [current, setCurrent] = useState([]);
|
|
589
|
-
const currentRef = useRef([]);
|
|
590
|
-
const assignmentKey = assignments.map((a) => a.tagId).join("|");
|
|
591
|
-
const syncedKey = useRef(null);
|
|
592
|
-
useEffect(() => {
|
|
593
|
-
if (draftMode || syncedKey.current === assignmentKey) return;
|
|
594
|
-
syncedKey.current = assignmentKey;
|
|
595
|
-
const synced = assignments.map(toTagItem);
|
|
596
|
-
currentRef.current = synced;
|
|
597
|
-
setCurrent(synced);
|
|
598
|
-
}, [
|
|
599
|
-
assignmentKey,
|
|
600
|
-
assignments,
|
|
601
|
-
draftMode
|
|
602
|
-
]);
|
|
603
|
-
const handleAdd = useCallback(async (tag) => {
|
|
604
|
-
if (currentRef.current.some((t) => t.id === tag.id)) return;
|
|
605
|
-
const next = [...currentRef.current, tag];
|
|
606
|
-
currentRef.current = next;
|
|
607
|
-
setCurrent(next);
|
|
608
|
-
if (draftMode) {
|
|
609
|
-
onDraftChange?.(next.map((t) => t.id));
|
|
610
|
-
return;
|
|
611
|
-
}
|
|
612
|
-
try {
|
|
613
|
-
await tagEntity(entityType, entityId, tag.id);
|
|
614
|
-
await refetch();
|
|
615
|
-
onChange?.();
|
|
616
|
-
} catch {
|
|
617
|
-
const rolledBack = currentRef.current.filter((t) => t.id !== tag.id);
|
|
618
|
-
currentRef.current = rolledBack;
|
|
619
|
-
setCurrent(rolledBack);
|
|
620
|
-
}
|
|
621
|
-
}, [
|
|
622
|
-
draftMode,
|
|
623
|
-
entityId,
|
|
624
|
-
entityType,
|
|
625
|
-
onChange,
|
|
626
|
-
onDraftChange,
|
|
627
|
-
refetch,
|
|
628
|
-
tagEntity
|
|
629
|
-
]);
|
|
630
|
-
const handleRemove = useCallback(async (tagId) => {
|
|
631
|
-
const removed = currentRef.current.find((t) => t.id === tagId);
|
|
632
|
-
const next = currentRef.current.filter((t) => t.id !== tagId);
|
|
633
|
-
currentRef.current = next;
|
|
634
|
-
setCurrent(next);
|
|
635
|
-
if (draftMode) {
|
|
636
|
-
onDraftChange?.(next.map((t) => t.id));
|
|
637
|
-
return;
|
|
638
|
-
}
|
|
639
|
-
try {
|
|
640
|
-
await untagEntity(entityType, entityId, tagId);
|
|
641
|
-
await refetch();
|
|
642
|
-
onChange?.();
|
|
643
|
-
} catch {
|
|
644
|
-
if (removed) {
|
|
645
|
-
const rolledBack = [...currentRef.current, removed];
|
|
646
|
-
currentRef.current = rolledBack;
|
|
647
|
-
setCurrent(rolledBack);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}, [
|
|
651
|
-
draftMode,
|
|
652
|
-
entityId,
|
|
653
|
-
entityType,
|
|
654
|
-
onChange,
|
|
655
|
-
onDraftChange,
|
|
656
|
-
refetch,
|
|
657
|
-
untagEntity
|
|
658
|
-
]);
|
|
659
|
-
if (readOnly) {
|
|
660
|
-
if (current.length === 0) return null;
|
|
661
|
-
return /* @__PURE__ */ jsx("div", {
|
|
662
|
-
className: `flex flex-wrap items-center gap-1 ${className ?? ""}`,
|
|
663
|
-
children: current.map((tag) => /* @__PURE__ */ jsx(TagBadge, {
|
|
664
|
-
id: tag.id,
|
|
665
|
-
label: tag.label,
|
|
666
|
-
color: tag.color ?? void 0,
|
|
667
|
-
size: "sm"
|
|
668
|
-
}, tag.id))
|
|
669
|
-
});
|
|
670
|
-
}
|
|
671
|
-
return /* @__PURE__ */ jsx(TagsWidget, {
|
|
672
|
-
entityType,
|
|
673
|
-
entityId: entityId ?? "",
|
|
674
|
-
workspaceId: workspaceId || void 0,
|
|
675
|
-
tags: current,
|
|
676
|
-
onAdd: handleAdd,
|
|
677
|
-
onRemove: handleRemove,
|
|
678
|
-
syncGraphNotifications: !draftMode,
|
|
679
|
-
className
|
|
680
|
-
});
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
// src/modules/executions/utils/run-display.ts
|
|
684
|
-
/**
|
|
685
|
-
* Versions are stored as "v1"/"v2" (legacy: "1.0.0"). Render without
|
|
686
|
-
* double-prefixing: "v1" stays "v1", "1.0.0" becomes "v1.0.0".
|
|
687
|
-
*/
|
|
688
|
-
function formatRunVersion(version) {
|
|
689
|
-
if (!version) return "";
|
|
690
|
-
return version.startsWith("v") ? version : `v${version}`;
|
|
691
|
-
}
|
|
692
|
-
function asString(value) {
|
|
693
|
-
return typeof value === "string" && value.trim() ? value : void 0;
|
|
694
|
-
}
|
|
695
|
-
/**
|
|
696
|
-
* Build a nodeId → display mapping from a workflow definitionJson.
|
|
697
|
-
* Label priority: user-set node label → manifest name → node type.
|
|
698
|
-
* Returns an empty map for missing/malformed definitions (e.g. runs of
|
|
699
|
-
* deleted workflows) — callers fall back to the raw nodeId.
|
|
700
|
-
*/
|
|
701
|
-
function buildNodeDisplayMap(definitionJson) {
|
|
702
|
-
const map = {};
|
|
703
|
-
const nodes = definitionJson?.data?.nodes;
|
|
704
|
-
if (!Array.isArray(nodes)) return map;
|
|
705
|
-
for (const node of nodes) {
|
|
706
|
-
const id = asString(node?.id);
|
|
707
|
-
if (!id) continue;
|
|
708
|
-
const label = asString(node?.data?.label) ?? asString(node?.data?.nodeData?.name) ?? asString(node?.type);
|
|
709
|
-
if (!label) continue;
|
|
710
|
-
const operation = asString(node?.data?.operation_name);
|
|
711
|
-
map[id] = {
|
|
712
|
-
label,
|
|
713
|
-
operation: operation === "execute" ? void 0 : operation
|
|
714
|
-
};
|
|
715
|
-
}
|
|
716
|
-
return map;
|
|
717
|
-
}
|
|
718
|
-
/**
|
|
719
|
-
* "GitHub · searchIssues" title for a node, falling back to the raw nodeId
|
|
720
|
-
* when the definition doesn't know this node.
|
|
721
|
-
*/
|
|
722
|
-
function nodeDisplayTitle(display, fallback) {
|
|
723
|
-
if (!display) return fallback;
|
|
724
|
-
return display.operation ? `${display.label} · ${display.operation}` : display.label;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
326
|
// src/builder/lib/workflow-tests.ts
|
|
728
327
|
/**
|
|
729
328
|
* Workflow test suites (BOFF-9960): the editable form of a saved test case,
|
|
@@ -1643,4 +1242,4 @@ function WorkflowProposalCard({ proposal, isDeciding = false, onOpenWorkflow, on
|
|
|
1643
1242
|
});
|
|
1644
1243
|
}
|
|
1645
1244
|
|
|
1646
|
-
export {
|
|
1245
|
+
export { rowsFromRules as C, readAssertRulesSetting as S, ASSERT_OPERATORS as _, TEST_STATUS_TONE_CLASS as a, normaliseAssertRules as b, draftToInput as c, isTestRunOpen as d, nextSortOrder as f, testStatusTone as g, testStatusLabel as h, useWorkflowTests as i, emptyTestCaseDraft as l, testRunSummaryText as m, useWorkflowProposal as n, canSaveRunAsTestCase as o, pinnedOutputsFromCanvas as p, saveRunAsTestCase as r, draftFromTestCase as s, WorkflowProposalCard as t, enabledCaseIds as u, describeAssertRuleProblem as v, ruleFromRow as w, operatorSpec as x, emptyAssertRuleRow as y };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
+
import { m as useWorkflowDefinition } from "./useWorkflows-BlVVu8NM.js";
|
|
4
|
+
import { Navigate, useParams } from "react-router";
|
|
5
|
+
import { Icon } from "@iconify/react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
// src/pages/WorkflowSearchRedirect.tsx
|
|
9
|
+
var WorkflowSearchRedirect_exports = /* @__PURE__ */ __exportAll({ WorkflowSearchRedirect: () => WorkflowSearchRedirect });
|
|
10
|
+
/**
|
|
11
|
+
* Global search indexes WorkflowDefinition by its database id, but the
|
|
12
|
+
* builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +
|
|
13
|
+
* version. This page bridges the two: it resolves the id to its current
|
|
14
|
+
* workflowKey/version and redirects there.
|
|
15
|
+
*/
|
|
16
|
+
function WorkflowSearchRedirect() {
|
|
17
|
+
const { id } = useParams();
|
|
18
|
+
const { workflow, loading, error } = useWorkflowDefinition(void 0, id);
|
|
19
|
+
if (loading) return /* @__PURE__ */ jsxs("div", {
|
|
20
|
+
className: "flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground",
|
|
21
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
22
|
+
icon: "svg-spinners:ring-resize",
|
|
23
|
+
className: "size-4"
|
|
24
|
+
}), "Opening workflow…"]
|
|
25
|
+
});
|
|
26
|
+
if (error || !workflow) return /* @__PURE__ */ jsx(Navigate, {
|
|
27
|
+
to: "../list",
|
|
28
|
+
replace: true
|
|
29
|
+
});
|
|
30
|
+
return /* @__PURE__ */ jsx(Navigate, {
|
|
31
|
+
to: `../workflow/${workflow.workflowKey}/${workflow.version}`,
|
|
32
|
+
replace: true
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { WorkflowSearchRedirect_exports as n, WorkflowSearchRedirect as t };
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
+
import { n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
4
|
+
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
|
+
import { JF as WorkflowShareRole, hF as WorkflowAccess, nI as WorkflowVisibility, qF as WorkflowSharePrincipalType } from "./graphql-types-CDKVWH2R.js";
|
|
6
|
+
import { Mn as ShareWorkflowDocument, li as WorkflowSharingDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
7
|
+
import { useMemo } from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
import { ResourceShareDialog, createSharePrincipalLister } from "@burdenoff/fe-libs/connections";
|
|
10
|
+
|
|
11
|
+
// src/utils/workflow-sharing.ts
|
|
12
|
+
/** Whether someone reaching a workflow this way may change who it is shared with. */
|
|
13
|
+
function canShareWorkflow(access) {
|
|
14
|
+
return access === "OWNER" || access === "EDITOR" || access === "ADMINISTRATOR";
|
|
15
|
+
}
|
|
16
|
+
/** Whether someone reaching a workflow this way may change or run it. */
|
|
17
|
+
function canEditWorkflow(access) {
|
|
18
|
+
return access !== "VIEWER";
|
|
19
|
+
}
|
|
20
|
+
const VISIBILITY_OUT = {
|
|
21
|
+
WORKSPACE: "WORKSPACE",
|
|
22
|
+
RESTRICTED: "RESTRICTED"
|
|
23
|
+
};
|
|
24
|
+
const VISIBILITY_IN = {
|
|
25
|
+
["WORKSPACE"]: "WORKSPACE",
|
|
26
|
+
["RESTRICTED"]: "RESTRICTED"
|
|
27
|
+
};
|
|
28
|
+
const PRINCIPAL_OUT = {
|
|
29
|
+
USER: "USER",
|
|
30
|
+
GROUP: "GROUP",
|
|
31
|
+
PROJECT: "PROJECT"
|
|
32
|
+
};
|
|
33
|
+
const PRINCIPAL_IN = {
|
|
34
|
+
["USER"]: "USER",
|
|
35
|
+
["GROUP"]: "GROUP",
|
|
36
|
+
["PROJECT"]: "PROJECT"
|
|
37
|
+
};
|
|
38
|
+
const ROLE_OUT = {
|
|
39
|
+
VIEWER: "VIEWER",
|
|
40
|
+
EDITOR: "EDITOR"
|
|
41
|
+
};
|
|
42
|
+
const ROLE_IN = {
|
|
43
|
+
["VIEWER"]: "VIEWER",
|
|
44
|
+
["EDITOR"]: "EDITOR"
|
|
45
|
+
};
|
|
46
|
+
/** The service's answer as the dialog sees it; `name` is what the title shows. */
|
|
47
|
+
function toResourceSharing(sharing, name = sharing.workflowKey) {
|
|
48
|
+
const shares = sharing.shares.map((share) => ({
|
|
49
|
+
principalType: PRINCIPAL_IN[share.principalType],
|
|
50
|
+
principalId: share.principalId,
|
|
51
|
+
role: ROLE_IN[share.role]
|
|
52
|
+
}));
|
|
53
|
+
return {
|
|
54
|
+
id: sharing.workflowKey,
|
|
55
|
+
name,
|
|
56
|
+
ownerId: sharing.ownerId ?? "",
|
|
57
|
+
visibility: VISIBILITY_IN[sharing.visibility],
|
|
58
|
+
canManage: canShareWorkflow(sharing.myAccess),
|
|
59
|
+
administrator: sharing.canTransferOwnership,
|
|
60
|
+
shares
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** The workflow service behind the generic Share dialog. */
|
|
64
|
+
function workflowSharingApi(client, listPrincipals) {
|
|
65
|
+
return {
|
|
66
|
+
async getSharing(workflowKey) {
|
|
67
|
+
const result = await client.query({
|
|
68
|
+
query: WorkflowSharingDocument,
|
|
69
|
+
variables: { workflowKey },
|
|
70
|
+
fetchPolicy: "network-only"
|
|
71
|
+
});
|
|
72
|
+
if (!result.data) throw new Error("Workflow not found");
|
|
73
|
+
return toResourceSharing(result.data.workflowSharing);
|
|
74
|
+
},
|
|
75
|
+
listPrincipals,
|
|
76
|
+
async share(input) {
|
|
77
|
+
const result = await client.mutate({
|
|
78
|
+
mutation: ShareWorkflowDocument,
|
|
79
|
+
variables: { input: {
|
|
80
|
+
workflowKey: input.resourceId,
|
|
81
|
+
visibility: VISIBILITY_OUT[input.visibility],
|
|
82
|
+
shares: input.shares.map((share) => ({
|
|
83
|
+
principalType: PRINCIPAL_OUT[share.principalType],
|
|
84
|
+
principalId: share.principalId,
|
|
85
|
+
role: ROLE_OUT[share.role]
|
|
86
|
+
})),
|
|
87
|
+
...input.ownerId ? { ownerId: input.ownerId } : {}
|
|
88
|
+
} }
|
|
89
|
+
});
|
|
90
|
+
if (!result.data) throw new Error("Workflow not found");
|
|
91
|
+
return toResourceSharing(result.data.shareWorkflow);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// src/components/WorkflowShareDialog.tsx
|
|
97
|
+
/**
|
|
98
|
+
* WorkflowShareDialog — who can reach a workflow (BOFF-9726).
|
|
99
|
+
*
|
|
100
|
+
* The workflow version of fe-libs' ResourceShareDialog: a workflow is shared
|
|
101
|
+
* with people, groups or workspace projects as "Can view" or "Can edit", or
|
|
102
|
+
* left to the whole workspace. The workflow service decides who may change
|
|
103
|
+
* the sharing (its owner, an editor it is shared with, or a workspace admin)
|
|
104
|
+
* and answers NOT_FOUND to anyone else; this dialog only shows what the
|
|
105
|
+
* caller may do and sends the complete new sharing back.
|
|
106
|
+
*/
|
|
107
|
+
var WorkflowShareDialog_exports = /* @__PURE__ */ __exportAll({ WorkflowShareDialog: () => WorkflowShareDialog });
|
|
108
|
+
function workflowShareCopy(tr, name) {
|
|
109
|
+
return {
|
|
110
|
+
title: (loaded) => tr("fluidgrids.sharing.title", "Share {{name}}", { name: name || loaded }),
|
|
111
|
+
titleLoading: tr("fluidgrids.sharing.titleLoading", "Share workflow"),
|
|
112
|
+
loading: tr("fluidgrids.sharing.loading", "Loading sharing…"),
|
|
113
|
+
readOnly: tr("fluidgrids.sharing.readOnly", "Only the owner, editors and workspace admins can change who can open this workflow."),
|
|
114
|
+
save: tr("fluidgrids.sharing.save", "Save"),
|
|
115
|
+
cancel: tr("fluidgrids.sharing.cancel", "Cancel"),
|
|
116
|
+
close: tr("fluidgrids.sharing.close", "Close"),
|
|
117
|
+
owner: tr("fluidgrids.sharing.owner", "Owner"),
|
|
118
|
+
add: tr("fluidgrids.sharing.add", "Share with people, groups or projects"),
|
|
119
|
+
addPlaceholder: tr("fluidgrids.sharing.addPlaceholder", "Search by name or email"),
|
|
120
|
+
sharedWith: tr("fluidgrids.sharing.sharedWith", "Shared with"),
|
|
121
|
+
onlyOwner: tr("fluidgrids.sharing.onlyOwner", "No one else yet. Only the owner and workspace admins can open it."),
|
|
122
|
+
none: tr("fluidgrids.sharing.none", "No one in particular."),
|
|
123
|
+
principalType: {
|
|
124
|
+
USER: tr("fluidgrids.sharing.type.user", "Person"),
|
|
125
|
+
GROUP: tr("fluidgrids.sharing.type.group", "Group"),
|
|
126
|
+
PROJECT: tr("fluidgrids.sharing.type.project", "Project")
|
|
127
|
+
},
|
|
128
|
+
roleFor: (grantee) => tr("fluidgrids.sharing.roleFor", "Access for {{name}}", { name: grantee }),
|
|
129
|
+
remove: (grantee) => tr("fluidgrids.sharing.remove", "Stop sharing with {{name}}", { name: grantee }),
|
|
130
|
+
visibility: {
|
|
131
|
+
legend: tr("fluidgrids.sharing.visibility.label", "Who can open this workflow"),
|
|
132
|
+
restricted: tr("fluidgrids.sharing.visibility.restricted", "Only people I choose"),
|
|
133
|
+
restrictedHint: tr("fluidgrids.sharing.visibility.restrictedHint", "You, the people, groups or projects you share it with, and workspace admins. Everyone else cannot find it."),
|
|
134
|
+
workspace: tr("fluidgrids.sharing.visibility.workspace", "Everyone in this workspace"),
|
|
135
|
+
workspaceHint: tr("fluidgrids.sharing.visibility.workspaceHint", "Anyone in the workspace can open it, as their workspace role allows.")
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function WorkflowShareDialog({ open, onClose, workflowKey, workflowName, workspaceId, client, onShared, api: apiOverride }) {
|
|
140
|
+
const tr = useTr();
|
|
141
|
+
const api = useMemo(() => {
|
|
142
|
+
if (apiOverride) return apiOverride;
|
|
143
|
+
const apollo = client ?? getFluidGridsClient();
|
|
144
|
+
return workflowSharingApi(apollo, createSharePrincipalLister(apollo));
|
|
145
|
+
}, [apiOverride, client]);
|
|
146
|
+
const copy = useMemo(() => workflowShareCopy(tr, workflowName), [tr, workflowName]);
|
|
147
|
+
const roles = useMemo(() => [{
|
|
148
|
+
value: "VIEWER",
|
|
149
|
+
label: tr("fluidgrids.sharing.role.viewer", "Can view")
|
|
150
|
+
}, {
|
|
151
|
+
value: "EDITOR",
|
|
152
|
+
label: tr("fluidgrids.sharing.role.editor", "Can edit")
|
|
153
|
+
}], [tr]);
|
|
154
|
+
return /* @__PURE__ */ jsx(ResourceShareDialog, {
|
|
155
|
+
open,
|
|
156
|
+
onClose,
|
|
157
|
+
api,
|
|
158
|
+
resourceId: workflowKey,
|
|
159
|
+
workspaceId,
|
|
160
|
+
roles,
|
|
161
|
+
copy,
|
|
162
|
+
testIdPrefix: "share-workflow",
|
|
163
|
+
translate: tr,
|
|
164
|
+
onShared: onShared ? () => onShared() : void 0
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export { canShareWorkflow as i, WorkflowShareDialog_exports as n, canEditWorkflow as r, WorkflowShareDialog as t };
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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-BlVVu8NM.js";
|
|
4
|
+
import { Dt as createThenOpen, t as FluidGridsContext } from "./FluidGridsProvider-dvZSNtSW.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-Bu2QYJzA.js";
|
|
5
6
|
import { f as BILLING_PLANS_PATH, y as isQuotaExhaustedFailure } from "./fluidgridsEvents-CNdcrUNN.js";
|
|
6
7
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
7
|
-
import {
|
|
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-7IFSaLyi.js";
|
|
8
10
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
+
import { CF as WorkflowExportFormat, gF as WorkflowAccessFilter } from "./graphql-types-CDKVWH2R.js";
|
|
12
|
+
import { i as canShareWorkflow, r as canEditWorkflow, t as WorkflowShareDialog } from "./WorkflowShareDialog-mbIwRQUY.js";
|
|
13
|
+
import { l as useFluidGridsFlag, t as FLUIDGRIDS_FLAGS } from "./feature-flags-DM5myWaD.js";
|
|
14
|
+
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
15
|
+
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-9aLuOt1c.js";
|
|
11
17
|
import { a as firstWorkflowProgress, i as builderPathFor, r as GUIDED_TOUR_STATE } from "./firstWorkflow-C_h0KMB2.js";
|
|
12
18
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
13
19
|
import { i as workflowsListControls } from "./pageControlSpecs-DZJ9K37m.js";
|