@burdenoff/fluidgrids-fe-sdk 2026.731.5 → 2026.731.6

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 (36) hide show
  1. package/dist/ExecutionDetailPage-VCVJ2EOP.js +8 -0
  2. package/dist/{ExecutionDetailPage-Q2H7KMHW.js.map → ExecutionDetailPage-VCVJ2EOP.js.map} +1 -1
  3. package/dist/ExecutionsListPage-NXTMFIRZ.js +8 -0
  4. package/dist/{ExecutionsListPage-4FIHJBZV.js.map → ExecutionsListPage-NXTMFIRZ.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-53YLICIC.js → WorkflowBuilder-IGQYC2UR.js} +6 -6
  6. package/dist/{WorkflowBuilder-53YLICIC.js.map → WorkflowBuilder-IGQYC2UR.js.map} +1 -1
  7. package/dist/WorkflowsList-S2MGY2UT.js +10 -0
  8. package/dist/{WorkflowsList-GTW56K3E.js.map → WorkflowsList-S2MGY2UT.js.map} +1 -1
  9. package/dist/{blocks-3FQ3K737.js → blocks-K5JPCH3D.js} +4 -4
  10. package/dist/{blocks-3FQ3K737.js.map → blocks-K5JPCH3D.js.map} +1 -1
  11. package/dist/{chunk-NGCKF56I.js → chunk-2XMPJHCW.js} +220 -102
  12. package/dist/chunk-2XMPJHCW.js.map +1 -0
  13. package/dist/{chunk-4BY7JVRA.js → chunk-6AK7GFWB.js} +3 -3
  14. package/dist/{chunk-4BY7JVRA.js.map → chunk-6AK7GFWB.js.map} +1 -1
  15. package/dist/{chunk-SBZ6J6UD.js → chunk-IVKT244I.js} +3 -3
  16. package/dist/{chunk-SBZ6J6UD.js.map → chunk-IVKT244I.js.map} +1 -1
  17. package/dist/{chunk-DBQLVCEW.js → chunk-JIZFSX6X.js} +3 -3
  18. package/dist/{chunk-DBQLVCEW.js.map → chunk-JIZFSX6X.js.map} +1 -1
  19. package/dist/{chunk-K7326LE2.js → chunk-NMS2QUXG.js} +7 -7
  20. package/dist/chunk-NMS2QUXG.js.map +1 -0
  21. package/dist/{chunk-IBPEITOH.js → chunk-TKAS26Q3.js} +4 -4
  22. package/dist/{chunk-IBPEITOH.js.map → chunk-TKAS26Q3.js.map} +1 -1
  23. package/dist/{chunk-ATNBIPGD.js → chunk-USFXD36A.js} +4 -4
  24. package/dist/{chunk-ATNBIPGD.js.map → chunk-USFXD36A.js.map} +1 -1
  25. package/dist/{chunk-IU65EQOS.js → chunk-XEYNX7YJ.js} +4 -2
  26. package/dist/chunk-XEYNX7YJ.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +129 -131
  29. package/dist/index.js.map +1 -1
  30. package/package.json +1 -1
  31. package/dist/ExecutionDetailPage-Q2H7KMHW.js +0 -8
  32. package/dist/ExecutionsListPage-4FIHJBZV.js +0 -8
  33. package/dist/WorkflowsList-GTW56K3E.js +0 -10
  34. package/dist/chunk-IU65EQOS.js.map +0 -1
  35. package/dist/chunk-K7326LE2.js.map +0 -1
  36. package/dist/chunk-NGCKF56I.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ export { ExecutionDetailPage } from './chunk-TKAS26Q3.js';
2
+ import './chunk-6AK7GFWB.js';
3
+ import './chunk-UIY2HBWA.js';
4
+ import './chunk-3ZYUGTIT.js';
5
+ import './chunk-XEYNX7YJ.js';
6
+ import './chunk-5BDQNSP3.js';
7
+ //# sourceMappingURL=ExecutionDetailPage-VCVJ2EOP.js.map
8
+ //# sourceMappingURL=ExecutionDetailPage-VCVJ2EOP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-Q2H7KMHW.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-VCVJ2EOP.js"}
@@ -0,0 +1,8 @@
1
+ export { ExecutionsListPage } from './chunk-USFXD36A.js';
2
+ import './chunk-6AK7GFWB.js';
3
+ import './chunk-NMS2QUXG.js';
4
+ import './chunk-XEYNX7YJ.js';
5
+ import './chunk-5BDQNSP3.js';
6
+ import './chunk-WWU2O2SR.js';
7
+ //# sourceMappingURL=ExecutionsListPage-NXTMFIRZ.js.map
8
+ //# sourceMappingURL=ExecutionsListPage-NXTMFIRZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-4FIHJBZV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-NXTMFIRZ.js"}
@@ -1,16 +1,16 @@
1
- export { WorkflowBuilder } from './chunk-NGCKF56I.js';
1
+ export { WorkflowBuilder } from './chunk-2XMPJHCW.js';
2
2
  import './chunk-MRVS73S2.js';
3
3
  import './chunk-DBOMRIP5.js';
4
- import './chunk-SBZ6J6UD.js';
4
+ import './chunk-IVKT244I.js';
5
5
  import './chunk-BQXHJIER.js';
6
6
  import './chunk-PNOA7CQV.js';
7
- import './chunk-K7326LE2.js';
7
+ import './chunk-NMS2QUXG.js';
8
8
  import './chunk-KU64CCSV.js';
9
9
  import './chunk-UIY2HBWA.js';
10
10
  import './chunk-3ZYUGTIT.js';
11
- import './chunk-IU65EQOS.js';
11
+ import './chunk-XEYNX7YJ.js';
12
12
  import './chunk-5BDQNSP3.js';
13
13
  import './chunk-WWU2O2SR.js';
14
14
  import './chunk-XQP33UJR.js';
15
- //# sourceMappingURL=WorkflowBuilder-53YLICIC.js.map
16
- //# sourceMappingURL=WorkflowBuilder-53YLICIC.js.map
15
+ //# sourceMappingURL=WorkflowBuilder-IGQYC2UR.js.map
16
+ //# sourceMappingURL=WorkflowBuilder-IGQYC2UR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-53YLICIC.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-IGQYC2UR.js"}
@@ -0,0 +1,10 @@
1
+ export { WorkflowsList } from './chunk-JIZFSX6X.js';
2
+ import './chunk-NMS2QUXG.js';
3
+ import './chunk-KU64CCSV.js';
4
+ import './chunk-UIY2HBWA.js';
5
+ import './chunk-3ZYUGTIT.js';
6
+ import './chunk-XEYNX7YJ.js';
7
+ import './chunk-5BDQNSP3.js';
8
+ import './chunk-WWU2O2SR.js';
9
+ //# sourceMappingURL=WorkflowsList-S2MGY2UT.js.map
10
+ //# sourceMappingURL=WorkflowsList-S2MGY2UT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-GTW56K3E.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-S2MGY2UT.js"}
@@ -1,11 +1,11 @@
1
- export { AVAILABLE_NODES, NODES, NODES_METADATA, NODE_CONFIGS, NODE_TYPES, ensureNodeConfigsLoaded, fetchNodeManifest, isNodeConfigsInitialized, onNodeTypesUpdate, refetchStoreNodes, registerWorkflowNodeTypes } from './chunk-SBZ6J6UD.js';
1
+ export { AVAILABLE_NODES, NODES, NODES_METADATA, NODE_CONFIGS, NODE_TYPES, ensureNodeConfigsLoaded, fetchNodeManifest, isNodeConfigsInitialized, onNodeTypesUpdate, refetchStoreNodes, registerWorkflowNodeTypes } from './chunk-IVKT244I.js';
2
2
  import './chunk-BQXHJIER.js';
3
3
  import './chunk-PNOA7CQV.js';
4
4
  import './chunk-KU64CCSV.js';
5
5
  import './chunk-UIY2HBWA.js';
6
6
  import './chunk-3ZYUGTIT.js';
7
- import './chunk-IU65EQOS.js';
7
+ import './chunk-XEYNX7YJ.js';
8
8
  import './chunk-5BDQNSP3.js';
9
9
  import './chunk-WWU2O2SR.js';
10
- //# sourceMappingURL=blocks-3FQ3K737.js.map
11
- //# sourceMappingURL=blocks-3FQ3K737.js.map
10
+ //# sourceMappingURL=blocks-K5JPCH3D.js.map
11
+ //# sourceMappingURL=blocks-K5JPCH3D.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"blocks-3FQ3K737.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"blocks-K5JPCH3D.js"}
@@ -1,13 +1,13 @@
1
1
  import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, Input as Input$1, DialogFooter } from './chunk-MRVS73S2.js';
2
2
  import { Badge as Badge$1, Button } from './chunk-DBOMRIP5.js';
3
- import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, useSaveWorkflow, STICKY_NOTE_TYPE, useNodeExecution, getNodeDetail, ConnectionSelector, mergeStickyNotes, buildStickyNode, NODES_METADATA, NODE_CONFIGS, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-SBZ6J6UD.js';
3
+ import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, useSaveWorkflow, STICKY_NOTE_TYPE, useNodeExecution, getNodeDetail, ConnectionSelector, mergeStickyNotes, buildStickyNode, NODES_METADATA, NODE_CONFIGS, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-IVKT244I.js';
4
4
  import { createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient, getGlobalStoreClient } from './chunk-BQXHJIER.js';
5
5
  import { BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, GetMyNodeInstallationsDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-PNOA7CQV.js';
6
- import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-K7326LE2.js';
6
+ import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-NMS2QUXG.js';
7
7
  import { useFlowStore } from './chunk-KU64CCSV.js';
8
8
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS } from './chunk-UIY2HBWA.js';
9
9
  import { cn } from './chunk-3ZYUGTIT.js';
10
- import { throwIfResultError, NodeSchemaIntrospectionDocument, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-IU65EQOS.js';
10
+ import { throwIfResultError, NodeSchemaIntrospectionDocument, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-XEYNX7YJ.js';
11
11
  import { createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
12
12
  import { validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig, getFluidGridsConfig } from './chunk-WWU2O2SR.js';
13
13
  import { deepClone, applyTemplateInputs } from './chunk-XQP33UJR.js';
@@ -21,7 +21,7 @@ import { Handle, Position, getBezierPath, MarkerType, ReactFlowProvider, useReac
21
21
  import { produce } from 'immer';
22
22
  import { cn as cn$1 } from '@burdenoff/fe-libs/utils';
23
23
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
24
- import { Card as Card$1, Badge, CardContent as CardContent$1, Button as Button$1, Input, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, DropdownMenuItem, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Popover, PopoverTrigger, PopoverContent, Toaster, Tabs, TabsList, TabsTrigger, TabsContent, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardDescription as CardDescription$1, ScrollArea, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, Label, DropdownMenuLabel, DropdownMenuSeparator, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea } from '@burdenoff/fe-libs/ui';
24
+ import { Card as Card$1, Badge, CardContent as CardContent$1, Button as Button$1, Input, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, TooltipProvider, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, DropdownMenuItem, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Popover, PopoverTrigger, PopoverContent, Tooltip, TooltipTrigger, TooltipContent, Toaster, Tabs, TabsList, TabsTrigger, TabsContent, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardDescription as CardDescription$1, ScrollArea, Label, DropdownMenuLabel, DropdownMenuSeparator, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea } from '@burdenoff/fe-libs/ui';
25
25
  import { isEmpty } from 'radash';
26
26
  import { gql } from '@apollo/client';
27
27
  import { ApolloProvider, useQuery, useMutation } from '@apollo/client/react';
@@ -38,6 +38,7 @@ import { nanoid } from 'nanoid/non-secure';
38
38
  import CodeMirror from '@uiw/react-codemirror';
39
39
  import { javascript } from '@codemirror/lang-javascript';
40
40
  import { python } from '@codemirror/lang-python';
41
+ import { useActorProfiles, buildActorFallback } from '@burdenoff/fe-libs/shared';
41
42
  import { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';
42
43
 
43
44
  function useNodeList(nodes) {
@@ -4074,7 +4075,7 @@ function DesktopSidebarFragment({
4074
4075
  if (nodes) {
4075
4076
  const requiredNodeTypes = [];
4076
4077
  try {
4077
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-3FQ3K737.js');
4078
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-K5JPCH3D.js');
4078
4079
  await ensureNodeConfigsLoaded2().catch(() => {
4079
4080
  });
4080
4081
  const workflowNodeTypes = [
@@ -13297,6 +13298,65 @@ var STATUS_STYLES = {
13297
13298
  ARCHIVED: { label: "Archived", variant: "outline" },
13298
13299
  DEPRECATED: { label: "Deprecated", variant: "destructive" }
13299
13300
  };
13301
+ function relativeTime(dateStr) {
13302
+ if (!dateStr) return "";
13303
+ const then = new Date(dateStr).getTime();
13304
+ if (Number.isNaN(then)) return "";
13305
+ const seconds = Math.round((Date.now() - then) / 1e3);
13306
+ if (seconds < 60) return "just now";
13307
+ const minutes = Math.round(seconds / 60);
13308
+ if (minutes < 60) return `${minutes}m ago`;
13309
+ const hours = Math.round(minutes / 60);
13310
+ if (hours < 24) return `${hours}h ago`;
13311
+ const days = Math.round(hours / 24);
13312
+ if (days < 30) return `${days}d ago`;
13313
+ return new Intl.DateTimeFormat("en-US", {
13314
+ year: "numeric",
13315
+ month: "short",
13316
+ day: "numeric"
13317
+ }).format(new Date(dateStr));
13318
+ }
13319
+ function absoluteTime(dateStr) {
13320
+ if (!dateStr) return "";
13321
+ try {
13322
+ return new Intl.DateTimeFormat("en-US", {
13323
+ year: "numeric",
13324
+ month: "short",
13325
+ day: "numeric",
13326
+ hour: "2-digit",
13327
+ minute: "2-digit"
13328
+ }).format(new Date(dateStr));
13329
+ } catch {
13330
+ return dateStr;
13331
+ }
13332
+ }
13333
+ function ActionButton({
13334
+ label,
13335
+ onClick,
13336
+ disabled,
13337
+ busy,
13338
+ icon,
13339
+ destructive
13340
+ }) {
13341
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [
13342
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
13343
+ Button$1,
13344
+ {
13345
+ variant: "ghost",
13346
+ size: "sm",
13347
+ className: cn$1(
13348
+ "size-7 p-0",
13349
+ destructive && "text-[var(--color-status-error-text)] hover:text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]"
13350
+ ),
13351
+ disabled,
13352
+ onClick,
13353
+ "aria-label": label,
13354
+ children: busy ? /* @__PURE__ */ jsx(Loader2, { className: "size-3.5 animate-spin" }) : icon
13355
+ }
13356
+ ) }),
13357
+ /* @__PURE__ */ jsx(TooltipContent, { className: "z-[130]", children: label })
13358
+ ] });
13359
+ }
13300
13360
  function VersionHistoryPanel({ className }) {
13301
13361
  const params = useParams();
13302
13362
  const navigate = useNavigate();
@@ -13309,6 +13369,23 @@ function VersionHistoryPanel({ className }) {
13309
13369
  const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);
13310
13370
  const [busy, setBusy] = useState(null);
13311
13371
  const [deleteTarget, setDeleteTarget] = useState(null);
13372
+ const config = getFluidGridsConfig();
13373
+ const actorInputs = useMemo(() => {
13374
+ const ids = /* @__PURE__ */ new Set();
13375
+ for (const v of versions) {
13376
+ if (v.createdById) ids.add(v.createdById);
13377
+ }
13378
+ return [...ids].map((actorId) => ({ actorId, actorType: "user" }));
13379
+ }, [versions]);
13380
+ const actorProfiles = useActorProfiles(actorInputs, {
13381
+ workspaceId: config.workspaceId || void 0,
13382
+ orgId: config.organizationId,
13383
+ authToken: config.authToken
13384
+ });
13385
+ const authorName = (createdById) => {
13386
+ if (!createdById) return null;
13387
+ return actorProfiles[createdById]?.displayName ?? buildActorFallback({ actorId: createdById, actorType: "user" }).displayName;
13388
+ };
13312
13389
  const handleRestore = async (version) => {
13313
13390
  setBusy(`restore:${version}`);
13314
13391
  try {
@@ -13391,111 +13468,152 @@ function VersionHistoryPanel({ className }) {
13391
13468
  }
13392
13469
  ) }),
13393
13470
  /* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "w-[380px] sm:w-[420px]", children: [
13394
- /* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsxs(SheetTitle, { className: "flex items-center gap-2", children: [
13395
- /* @__PURE__ */ jsx(History, { className: "size-5" }),
13396
- "Version History"
13397
- ] }) }),
13398
- /* @__PURE__ */ jsx("div", { className: "mt-4 space-y-2 overflow-y-auto max-h-[calc(100vh-120px)]", children: loading ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center py-8", children: [
13471
+ /* @__PURE__ */ jsxs(SheetHeader, { children: [
13472
+ /* @__PURE__ */ jsxs(SheetTitle, { className: "flex items-center gap-2", children: [
13473
+ /* @__PURE__ */ jsx(History, { className: "size-5" }),
13474
+ "Version History"
13475
+ ] }),
13476
+ !loading && versions.length > 0 && /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
13477
+ versions.length,
13478
+ " ",
13479
+ versions.length === 1 ? "version" : "versions",
13480
+ " ",
13481
+ "\xB7 the Active version handles automatic triggers"
13482
+ ] })
13483
+ ] }),
13484
+ /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ jsx("div", { className: "mt-4 overflow-y-auto max-h-[calc(100vh-140px)] pr-1", children: loading ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center py-8", children: [
13399
13485
  /* @__PURE__ */ jsx(Loader2, { className: "size-5 animate-spin text-muted-foreground" }),
13400
13486
  /* @__PURE__ */ jsx("span", { className: "ml-2 text-muted-foreground text-sm", children: "Loading versions..." })
13401
- ] }) : versions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm text-center py-8", children: "No versions found." }) : versions.map((v) => {
13487
+ ] }) : versions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm text-center py-8", children: "No versions found." }) : /* @__PURE__ */ jsx("ul", { children: versions.map((v, index) => {
13402
13488
  const isCurrent = v.version === currentVersion;
13403
13489
  const isActive = v.status === "ACTIVE";
13490
+ const isLast = index === versions.length - 1;
13404
13491
  const statusInfo = STATUS_STYLES[v.status ?? "DRAFT"] ?? STATUS_STYLES.DRAFT;
13405
- return /* @__PURE__ */ jsxs(
13406
- "div",
13407
- {
13408
- className: `p-3 rounded-lg border transition-colors ${isCurrent ? "border-primary/50 bg-primary/5" : "border-border hover:bg-accent/50"}`,
13409
- children: [
13410
- /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
13411
- /* @__PURE__ */ jsx("span", { className: "font-mono text-sm font-medium", children: v.version }),
13412
- /* @__PURE__ */ jsx(
13413
- Badge,
13414
- {
13415
- variant: statusInfo.variant,
13416
- className: "text-[10px] px-1.5 py-0 h-5",
13417
- children: statusInfo.label
13418
- }
13419
- ),
13420
- isCurrent && /* @__PURE__ */ jsx(
13421
- Badge,
13422
- {
13423
- variant: "outline",
13424
- className: "text-[10px] px-1.5 py-0 h-5 border-primary text-primary",
13425
- children: "Current"
13426
- }
13492
+ const author = authorName(v.createdById);
13493
+ return /* @__PURE__ */ jsxs("li", { className: "flex gap-3", children: [
13494
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center pt-4", children: [
13495
+ /* @__PURE__ */ jsx(
13496
+ "span",
13497
+ {
13498
+ className: cn$1(
13499
+ "size-2.5 shrink-0 rounded-full border-2",
13500
+ isActive ? "border-[var(--color-status-success-bg)] bg-[var(--color-status-success-bg)]" : isCurrent ? "border-primary bg-primary" : "border-border bg-background"
13427
13501
  )
13428
- ] }) }),
13429
- v.alias && /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
13430
- "Alias: ",
13431
- v.alias
13432
- ] }),
13433
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: v.updatedAt ? new Intl.DateTimeFormat("en-US", {
13434
- year: "numeric",
13435
- month: "short",
13436
- day: "numeric",
13437
- hour: "2-digit",
13438
- minute: "2-digit"
13439
- }).format(new Date(v.updatedAt)) : "N/A" }),
13440
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2 mt-2", children: [
13441
- !isCurrent && /* @__PURE__ */ jsx(
13442
- Button$1,
13443
- {
13444
- variant: "ghost",
13445
- size: "sm",
13446
- className: "h-7 text-xs",
13447
- onClick: () => handleSwitchVersion(v.version),
13448
- children: "View"
13449
- }
13450
- ),
13451
- !isActive && /* @__PURE__ */ jsxs(
13452
- Button$1,
13453
- {
13454
- variant: "outline",
13455
- size: "sm",
13456
- className: "h-7 text-xs",
13457
- disabled: busy !== null,
13458
- onClick: () => handleActivate(v.id, v.version),
13459
- children: [
13460
- busy === `activate:${v.version}` ? /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin mr-1" }) : /* @__PURE__ */ jsx(Play, { className: "size-3 mr-1" }),
13461
- "Activate"
13462
- ]
13463
- }
13464
- ),
13465
- !isCurrent && /* @__PURE__ */ jsxs(
13466
- Button$1,
13467
- {
13468
- variant: "outline",
13469
- size: "sm",
13470
- className: "h-7 text-xs",
13471
- disabled: busy !== null,
13472
- onClick: () => handleRestore(v.version),
13473
- children: [
13474
- busy === `restore:${v.version}` ? /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin mr-1" }) : /* @__PURE__ */ jsx(RotateCcw, { className: "size-3 mr-1" }),
13475
- "Restore"
13476
- ]
13477
- }
13478
- ),
13479
- !isCurrent && !isActive && /* @__PURE__ */ jsxs(
13480
- Button$1,
13502
+ }
13503
+ ),
13504
+ !isLast && /* @__PURE__ */ jsx("span", { className: "w-px flex-1 bg-border" })
13505
+ ] }),
13506
+ /* @__PURE__ */ jsxs(
13507
+ "div",
13508
+ {
13509
+ className: cn$1(
13510
+ "mb-2 flex-1 rounded-lg border p-3 transition-colors",
13511
+ isCurrent ? "border-primary/50 bg-primary/5" : "border-border hover:bg-accent/50"
13512
+ ),
13513
+ children: [
13514
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
13515
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
13516
+ /* @__PURE__ */ jsx(
13517
+ "button",
13518
+ {
13519
+ type: "button",
13520
+ className: cn$1(
13521
+ "font-mono text-sm font-semibold text-foreground",
13522
+ !isCurrent && "cursor-pointer hover:text-primary"
13523
+ ),
13524
+ onClick: () => !isCurrent && handleSwitchVersion(v.version),
13525
+ title: isCurrent ? void 0 : `Open ${v.version} in the builder`,
13526
+ children: v.version
13527
+ }
13528
+ ),
13529
+ /* @__PURE__ */ jsx(
13530
+ Badge,
13531
+ {
13532
+ variant: statusInfo.variant,
13533
+ className: "text-[10px] px-1.5 py-0 h-5",
13534
+ children: statusInfo.label
13535
+ }
13536
+ ),
13537
+ isCurrent && /* @__PURE__ */ jsx(
13538
+ Badge,
13539
+ {
13540
+ variant: "outline",
13541
+ className: "text-[10px] px-1.5 py-0 h-5 border-primary text-primary",
13542
+ children: "Current"
13543
+ }
13544
+ ),
13545
+ v.alias && /* @__PURE__ */ jsxs(
13546
+ Badge,
13547
+ {
13548
+ variant: "outline",
13549
+ className: "text-[10px] px-1.5 py-0 h-5 font-mono",
13550
+ title: "Version alias",
13551
+ children: [
13552
+ "@",
13553
+ v.alias
13554
+ ]
13555
+ }
13556
+ )
13557
+ ] }),
13558
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center", children: [
13559
+ !isCurrent && /* @__PURE__ */ jsx(
13560
+ ActionButton,
13561
+ {
13562
+ label: "View in builder",
13563
+ icon: /* @__PURE__ */ jsx(Eye, { className: "size-3.5" }),
13564
+ disabled: busy !== null,
13565
+ onClick: () => handleSwitchVersion(v.version)
13566
+ }
13567
+ ),
13568
+ !isActive && /* @__PURE__ */ jsx(
13569
+ ActionButton,
13570
+ {
13571
+ label: "Activate this version",
13572
+ icon: /* @__PURE__ */ jsx(Play, { className: "size-3.5" }),
13573
+ disabled: busy !== null,
13574
+ busy: busy === `activate:${v.version}`,
13575
+ onClick: () => handleActivate(v.id, v.version)
13576
+ }
13577
+ ),
13578
+ !isCurrent && /* @__PURE__ */ jsx(
13579
+ ActionButton,
13580
+ {
13581
+ label: "Restore as new draft",
13582
+ icon: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3.5" }),
13583
+ disabled: busy !== null,
13584
+ busy: busy === `restore:${v.version}`,
13585
+ onClick: () => handleRestore(v.version)
13586
+ }
13587
+ ),
13588
+ !isCurrent && !isActive && /* @__PURE__ */ jsx(
13589
+ ActionButton,
13590
+ {
13591
+ label: "Delete version",
13592
+ destructive: true,
13593
+ icon: /* @__PURE__ */ jsx(Trash2, { className: "size-3.5" }),
13594
+ disabled: busy !== null,
13595
+ busy: busy === `delete:${v.version}`,
13596
+ onClick: () => setDeleteTarget(v.version)
13597
+ }
13598
+ )
13599
+ ] })
13600
+ ] }),
13601
+ /* @__PURE__ */ jsxs(
13602
+ "p",
13481
13603
  {
13482
- variant: "ghost",
13483
- size: "sm",
13484
- className: "h-7 text-xs text-[var(--color-status-error-text)] hover:text-[var(--color-status-error-text)]",
13485
- disabled: busy !== null,
13486
- onClick: () => setDeleteTarget(v.version),
13604
+ className: "mt-1.5 text-xs text-muted-foreground",
13605
+ title: absoluteTime(v.updatedAt),
13487
13606
  children: [
13488
- busy === `delete:${v.version}` ? /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin mr-1" }) : /* @__PURE__ */ jsx(Trash2, { className: "size-3 mr-1" }),
13489
- "Delete"
13607
+ author ? `${author} \xB7 ` : "",
13608
+ relativeTime(v.updatedAt)
13490
13609
  ]
13491
13610
  }
13492
13611
  )
13493
- ] })
13494
- ]
13495
- },
13496
- v.id
13497
- );
13498
- }) })
13612
+ ]
13613
+ }
13614
+ )
13615
+ ] }, v.id);
13616
+ }) }) }) })
13499
13617
  ] }),
13500
13618
  /* @__PURE__ */ jsx(
13501
13619
  AlertDialog,
@@ -14192,7 +14310,7 @@ function WorkflowItem({
14192
14310
  };
14193
14311
  const requiredNodeTypes = [];
14194
14312
  try {
14195
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-3FQ3K737.js');
14313
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-K5JPCH3D.js');
14196
14314
  await ensureNodeConfigsLoaded2().catch(() => {
14197
14315
  });
14198
14316
  const workflowNodeTypes = [
@@ -14490,5 +14608,5 @@ function WorkflowBuilder() {
14490
14608
  }
14491
14609
 
14492
14610
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsProvider, TemplateCard, WorkflowBuilder, useFluidGridsContext, useImportWorkflowTemplate, useWorkflowTemplates };
14493
- //# sourceMappingURL=chunk-NGCKF56I.js.map
14494
- //# sourceMappingURL=chunk-NGCKF56I.js.map
14611
+ //# sourceMappingURL=chunk-2XMPJHCW.js.map
14612
+ //# sourceMappingURL=chunk-2XMPJHCW.js.map