@burdenoff/fluidgrids-fe-sdk 2026.922.13 → 2026.923.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 (59) hide show
  1. package/dist/ExecutionDetailPage-22KHNXBI.js +12 -0
  2. package/dist/{ExecutionDetailPage-OSDL7NDT.js.map → ExecutionDetailPage-22KHNXBI.js.map} +1 -1
  3. package/dist/ExecutionsListPage-NQWK2NCN.js +11 -0
  4. package/dist/{ExecutionsListPage-AATDFFIH.js.map → ExecutionsListPage-NQWK2NCN.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-D7RKU4UK.js → WorkflowBuilder-2PLQT5OZ.js} +8 -8
  6. package/dist/{WorkflowBuilder-D7RKU4UK.js.map → WorkflowBuilder-2PLQT5OZ.js.map} +1 -1
  7. package/dist/{WorkflowsList-JHM7Q5HE.js → WorkflowsList-M2GOHL6L.js} +6 -6
  8. package/dist/{WorkflowsList-JHM7Q5HE.js.map → WorkflowsList-M2GOHL6L.js.map} +1 -1
  9. package/dist/chunk-24A4C63H.js +607 -0
  10. package/dist/chunk-24A4C63H.js.map +1 -0
  11. package/dist/{chunk-EUZZLC3N.js → chunk-AQBWMYKP.js} +166 -6
  12. package/dist/chunk-AQBWMYKP.js.map +1 -0
  13. package/dist/{chunk-MTWEYC2W.js → chunk-C7OR5C6R.js} +4 -4
  14. package/dist/{chunk-MTWEYC2W.js.map → chunk-C7OR5C6R.js.map} +1 -1
  15. package/dist/chunk-EGQB462S.js +526 -0
  16. package/dist/chunk-EGQB462S.js.map +1 -0
  17. package/dist/{chunk-PTGKDQ5K.js → chunk-ILH7U6VB.js} +8 -2
  18. package/dist/chunk-ILH7U6VB.js.map +1 -0
  19. package/dist/{chunk-GWRX2T3K.js → chunk-JMJRE5RT.js} +6 -6
  20. package/dist/{chunk-GWRX2T3K.js.map → chunk-JMJRE5RT.js.map} +1 -1
  21. package/dist/chunk-NK32XOQN.js +248 -0
  22. package/dist/chunk-NK32XOQN.js.map +1 -0
  23. package/dist/{chunk-XQYAM47Y.js → chunk-PTI43PVQ.js} +4 -4
  24. package/dist/{chunk-XQYAM47Y.js.map → chunk-PTI43PVQ.js.map} +1 -1
  25. package/dist/{chunk-CVVNQCFM.js → chunk-Q4RPP67K.js} +4 -4
  26. package/dist/{chunk-CVVNQCFM.js.map → chunk-Q4RPP67K.js.map} +1 -1
  27. package/dist/{chunk-UNW4I442.js → chunk-Q7RJYGQK.js} +3 -3
  28. package/dist/{chunk-UNW4I442.js.map → chunk-Q7RJYGQK.js.map} +1 -1
  29. package/dist/{chunk-RJQJAN6J.js → chunk-RRBFISAU.js} +4 -4
  30. package/dist/{chunk-RJQJAN6J.js.map → chunk-RRBFISAU.js.map} +1 -1
  31. package/dist/{chunk-ISS73LG3.js → chunk-VPWQN7KV.js} +3 -3
  32. package/dist/{chunk-ISS73LG3.js.map → chunk-VPWQN7KV.js.map} +1 -1
  33. package/dist/{chunk-R6JFXZXN.js → chunk-WTKMWWSI.js} +41 -5
  34. package/dist/chunk-WTKMWWSI.js.map +1 -0
  35. package/dist/{chunk-IPVHC2DM.js → chunk-XQ7FGXPM.js} +3 -3
  36. package/dist/{chunk-IPVHC2DM.js.map → chunk-XQ7FGXPM.js.map} +1 -1
  37. package/dist/{chunk-5IAMVAGX.js → chunk-YNDQYVT2.js} +43 -5
  38. package/dist/chunk-YNDQYVT2.js.map +1 -0
  39. package/dist/executions.js +7 -6
  40. package/dist/history.js +4 -4
  41. package/dist/index.d.ts +71 -1
  42. package/dist/index.js +26 -23
  43. package/dist/index.js.map +1 -1
  44. package/dist/nodes.js +2 -2
  45. package/dist/observability-5ShR4Phm.d.ts +134 -0
  46. package/dist/observability.d.ts +2 -0
  47. package/dist/observability.js +8 -0
  48. package/dist/observability.js.map +1 -0
  49. package/dist/settings.js +5 -1
  50. package/dist/templates.js +6 -6
  51. package/dist/workflow-builder.js +7 -7
  52. package/dist/workflows-list.js +4 -4
  53. package/package.json +5 -1
  54. package/dist/ExecutionDetailPage-OSDL7NDT.js +0 -11
  55. package/dist/ExecutionsListPage-AATDFFIH.js +0 -10
  56. package/dist/chunk-5IAMVAGX.js.map +0 -1
  57. package/dist/chunk-EUZZLC3N.js.map +0 -1
  58. package/dist/chunk-PTGKDQ5K.js.map +0 -1
  59. package/dist/chunk-R6JFXZXN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/SharePopup.tsx","../src/builder/components/ui/card-workflow.tsx","../src/pages/WorkflowsList.tsx"],"names":["useState","toast","jsxs","jsx","Button","useNavigate","uuidv4","Icon","cn"],"mappings":"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","file":"chunk-IPVHC2DM.js","sourcesContent":["import { useState } from \"react\";\nimport { Copy, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/ui\";\nimport { config } from \"../config\";\nimport { useTr } from \"../hooks/useTr\";\n\ninterface SharePopupProps {\n url: string;\n embedSrc: string;\n}\n\nexport default function SharePopup({\n url = window.location.href,\n embedSrc = `${config.fluidgridFrontendUrl}/workflow-view/565201ec-e803-4281-ad39-a135c46daa89/1.0`,\n}: SharePopupProps) {\n const tr = useTr();\n const [isOpen, setIsOpen] = useState(false);\n const [width, setWidth] = useState(600);\n const [height, setHeight] = useState(400);\n const [activeTab, setActiveTab] = useState<\"link\" | \"embed\">(\"link\");\n\n const embedCode = `<iframe src=\"${embedSrc}\" width=\"${width}\" height=\"${height}\"></iframe>`;\n\n const copyToClipboard = (text: string, message: string) => {\n navigator.clipboard.writeText(text);\n toast.success(message);\n };\n\n if (!isOpen) {\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(true)}>\n <Share2 className=\"h-4 w-4\" />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.components.sharePopup.openLabel\", \"Share\")}\n </span>\n </Button>\n );\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n <div\n className=\"bg-card rounded-lg p-6 max-w-md w-full mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex justify-between items-center mb-4\">\n <h2 className=\"text-lg font-semibold\">\n {tr(\"fluidgrids.components.sharePopup.title\", \"Share\")}\n </h2>\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(false)}>\n &times;\n </Button>\n </div>\n\n <div className=\"flex gap-2 mb-4\">\n <Button\n variant={activeTab === \"link\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"link\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabShareLink\", \"Share Link\")}\n </Button>\n <Button\n variant={activeTab === \"embed\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"embed\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabEmbed\", \"Embed\")}\n </Button>\n </div>\n\n {activeTab === \"link\" && (\n <div className=\"flex items-center space-x-2\">\n <input\n readOnly\n value={url}\n className=\"flex-1 h-9 px-3 rounded-md border bg-background text-sm\"\n />\n <Button\n size=\"sm\"\n onClick={() =>\n copyToClipboard(\n url,\n tr(\n \"fluidgrids.components.sharePopup.linkCopiedToast\",\n \"Link copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n\n {activeTab === \"embed\" && (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.widthLabel\", \"Width\")}\n </label>\n <input\n type=\"number\"\n value={width}\n onChange={(e) => setWidth(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.heightLabel\", \"Height\")}\n </label>\n <input\n type=\"number\"\n value={height}\n onChange={(e) => setHeight(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\n \"fluidgrids.components.sharePopup.embedCodeLabel\",\n \"Embed Code\",\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n readOnly\n value={embedCode}\n className=\"w-full h-9 px-3 pr-12 rounded-md border bg-background text-sm font-mono\"\n />\n <Button\n size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7\"\n onClick={() =>\n copyToClipboard(\n embedCode,\n tr(\n \"fluidgrids.components.sharePopup.embedCopiedToast\",\n \"Embed code copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Card,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { TagBadge } from \"@burdenoff/fe-libs/tag\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { isQuotaExhaustedError } from \"@burdenoff/fe-libs/shared/utils\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { useFlowStore } from \"../../stores/flow-store\";\nimport { useNavigate } from \"react-router\";\nimport { config } from \"../../../config\";\nimport SharePopup from \"../../../components/SharePopup\";\nimport {\n useDuplicateWorkflow,\n useDeleteWorkflow,\n} from \"../../../hooks/useWorkflows\";\nimport { SdkPermissionGate } from \"../../../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../../../permissions/constants\";\nimport { QuotaExhaustedDialog } from \"../../../components/shared/QuotaExhaustedDialog\";\nimport { useTr } from \"../../../hooks/useTr\";\n\ninterface WorkflowTagChip {\n id: string;\n label: string;\n color?: string;\n}\n\ninterface WorkflowData {\n id?: string;\n workflow_key: string;\n version: string;\n name: string;\n description?: string;\n status?: string;\n alias?: string;\n updated_at?: string;\n created_at?: string;\n total_versions?: number;\n /** Resolved tag assignments, rendered as read-only chips. */\n tags?: WorkflowTagChip[];\n}\n\n/** Status pill: colored dot + label, calmer than a filled badge. */\nconst STATUS_STYLES: Record<string, { label: string; dotClass: string }> = {\n DRAFT: { label: \"Draft\", dotClass: \"bg-muted-foreground/60\" },\n ACTIVE: {\n label: \"Active\",\n dotClass: \"bg-[var(--color-status-success-text)]\",\n },\n ARCHIVED: { label: \"Archived\", dotClass: \"bg-muted-foreground/30\" },\n DEPRECATED: {\n label: \"Deprecated\",\n dotClass: \"bg-[var(--color-status-error-text)]\",\n },\n};\n\n/** Compact relative timestamp (\"2h ago\"); absolute date beyond a week. */\nfunction relativeTime(iso?: string): string {\n if (!iso) return \"—\";\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return \"—\";\n const mins = Math.floor((Date.now() - then) / 60_000);\n if (mins < 1) return \"just now\";\n if (mins < 60) return `${mins}m ago`;\n const hrs = Math.floor(mins / 60);\n if (hrs < 24) return `${hrs}h ago`;\n const days = Math.floor(hrs / 24);\n if (days < 7) return `${days}d ago`;\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n }).format(new Date(then));\n}\n\nexport const CardWorkflow = ({\n workflow,\n onUpdateSuccess,\n}: {\n workflow: WorkflowData;\n onUpdateSuccess: () => void;\n}) => {\n const tr = useTr();\n const navigate = useNavigate();\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { duplicateWorkflow: duplicateWorkflowMutation } =\n useDuplicateWorkflow();\n const { deleteWorkflow: deleteWorkflowMutation } = useDeleteWorkflow();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [showQuotaExhausted, setShowQuotaExhausted] = useState(false);\n\n async function handleDuplicateWorkflow() {\n try {\n // Reset the store first to clear any existing state\n resetWorkflow();\n\n const result = await duplicateWorkflowMutation(\n workflow.workflow_key,\n workflow.version,\n {\n newWorkflowKey: `${workflow.workflow_key}_copy_${Date.now()}`,\n },\n );\n\n if (result?.success && result.workflow) {\n navigate(\n `../workflow/${result.workflow.workflowKey}/${result.workflow.version}`,\n );\n } else {\n throw new Error(result?.message || \"Failed to duplicate workflow\");\n }\n } catch (error) {\n // duplicateWorkflowMutation re-throws on failure, preserving the\n // original GraphQL error as `.cause` — check that (not the wrapped\n // message) to detect QUOTA_EXHAUSTED.\n const cause = error instanceof Error ? error.cause : undefined;\n if (isQuotaExhaustedError(cause) || isQuotaExhaustedError(error)) {\n setShowQuotaExhausted(true);\n return;\n }\n console.error(\"Error duplicating workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.duplicateErrorToast\", \"Error duplicating workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n const handleDeleteWorkflow = async (): Promise<void> => {\n if (!workflow.workflow_key) {\n console.error(\"Workflow ID is required to delete.\");\n return;\n }\n setIsDeleting(true);\n try {\n // Omit version to delete ALL versions of this workflow\n const success = await deleteWorkflowMutation(workflow.workflow_key);\n if (success) {\n setShowDeleteDialog(false);\n }\n } catch (error) {\n console.error(\"Error deleting workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.deleteErrorToast\", \"Error deleting workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n onUpdateSuccess();\n }\n };\n\n const handleOnEdit = () => {\n navigate(\"../workflow/\" + workflow.workflow_key + \"/\" + workflow.version);\n };\n\n /**\n * The whole card opens the builder (n8n-style). Inner controls — action\n * buttons, the share overlay (a non-portaled `fixed` div whose clicks bubble\n * through the card), and the dialog — must not trigger navigation.\n */\n const handleCardClick = (e: React.MouseEvent<HTMLDivElement>) => {\n const el = e.target as HTMLElement;\n if (el.closest(\"button, a, input, [role='dialog'], .fixed\")) return;\n handleOnEdit();\n };\n\n const statusInfo =\n STATUS_STYLES[workflow.status ?? \"DRAFT\"] ?? STATUS_STYLES.DRAFT;\n const updatedExact = workflow.updated_at\n ? new Date(workflow.updated_at).toLocaleString()\n : undefined;\n\n return (\n <TooltipProvider>\n <Card\n role=\"button\"\n tabIndex={0}\n aria-label={`${tr(\"fluidgrids.builder.cardWorkflow.openWorkflowAriaLabel\", \"Open workflow\")} ${workflow.name}`}\n onClick={handleCardClick}\n onKeyDown={(e) => {\n if (\n e.target === e.currentTarget &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n handleOnEdit();\n }\n }}\n className={cn(\n \"group relative flex min-h-44 cursor-pointer flex-col gap-0 rounded-xl border-border bg-card p-0\",\n \"transition-all duration-150 hover:-translate-y-0.5 hover:border-primary/40 hover:shadow-lg\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50\",\n )}\n >\n {/* Header: icon square + name/description + status pill */}\n <div className=\"flex flex-1 items-start gap-3 p-4\">\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-primary/20 bg-primary/10 text-primary\">\n <Icon icon=\"mdi:transit-connection-variant\" className=\"size-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <h3 className=\"truncate font-semibold leading-6 text-card-foreground\">\n {workflow?.name}\n </h3>\n <span className=\"mt-0.5 inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n <span\n className={cn(\"size-1.5 rounded-full\", statusInfo.dotClass)}\n />\n {statusInfo.label}\n </span>\n </div>\n <p className=\"mt-1 line-clamp-2 text-xs leading-snug text-muted-foreground\">\n {workflow.description ||\n tr(\n \"fluidgrids.builder.cardWorkflow.noDescription\",\n \"No description\",\n )}\n </p>\n {workflow.tags && workflow.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap items-center gap-1\">\n {workflow.tags.slice(0, 3).map((tag) => (\n <TagBadge\n key={tag.id}\n id={tag.id}\n label={tag.label}\n color={tag.color}\n size=\"sm\"\n />\n ))}\n {workflow.tags.length > 3 && (\n <span className=\"text-[11px] text-muted-foreground\">\n +{workflow.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Footer: metadata + actions (actions brighten on hover/focus) */}\n <div className=\"flex items-center justify-between gap-2 border-t border-border px-4 py-1.5\">\n <div\n className=\"flex min-w-0 items-center gap-1.5 text-[11px] text-muted-foreground\"\n title={updatedExact}\n >\n <Icon icon=\"mdi:clock-outline\" className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {tr(\"fluidgrids.builder.cardWorkflow.updatedPrefix\", \"Updated\")}{\" \"}\n {relativeTime(workflow.updated_at)}\n </span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"shrink-0 font-mono\">\n {workflow.version}\n {workflow.alias ? ` (${workflow.alias})` : \"\"}\n </span>\n {workflow.total_versions && workflow.total_versions > 1 ? (\n <span className=\"shrink-0\">\n · {workflow.total_versions}{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.versionsSuffix\",\n \"versions\",\n )}\n </span>\n ) : null}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-0.5 opacity-60 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={handleOnEdit}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n >\n <Icon icon=\"mynaui:edit\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <SharePopup\n url={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n embedSrc={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n />\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.shareWorkflow\",\n \"Share workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => handleDuplicateWorkflow()}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n >\n <Icon icon=\"mynaui:copy\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_DELETE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 text-[var(--color-status-error-text)] hover:text-[var(--color-status-error-text)]\"\n onClick={() => setShowDeleteDialog(true)}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n >\n <Icon icon=\"mynaui:trash\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n </div>\n </div>\n </Card>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogTitle\",\n \"Delete Workflow\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionPrefix\",\n \"Are you sure you want to delete workflow\",\n )}{\" \"}\n &quot;{workflow.name}&quot;{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionSuffix\",\n \"and all its versions? This action cannot be undone.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isDeleting}>\n {tr(\"fluidgrids.builder.cardWorkflow.cancelButton\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDeleteWorkflow}\n disabled={isDeleting}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isDeleting\n ? tr(\n \"fluidgrids.builder.cardWorkflow.deletingButton\",\n \"Deleting...\",\n )\n : tr(\"fluidgrids.builder.cardWorkflow.deleteButton\", \"Delete\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n <QuotaExhaustedDialog\n open={showQuotaExhausted}\n onOpenChange={setShowQuotaExhausted}\n onUpgrade={() => {\n setShowQuotaExhausted(false);\n navigate(\"/billing\");\n }}\n />\n </TooltipProvider>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Icon } from \"@iconify/react\";\n\nimport {\n Badge,\n Button,\n IllustratedEmptyState,\n Input,\n Skeleton,\n} from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { CardWorkflow } from \"../builder/components/ui/card-workflow\";\nimport { useWorkflowDefinitions } from \"../hooks/useWorkflows\";\nimport { useTr } from \"../hooks/useTr\";\nimport { SdkPermissionButton } from \"../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../permissions/constants\";\n\nfunction useStatusFilters() {\n const tr = useTr();\n return useMemo(\n () => [\n {\n value: \"ACTIVE\",\n label: tr(\"fluidgrids.workflowsList.statusActive\", \"Active\"),\n },\n {\n value: \"DRAFT\",\n label: tr(\"fluidgrids.workflowsList.statusDraft\", \"Draft\"),\n },\n {\n value: \"ARCHIVED\",\n label: tr(\"fluidgrids.workflowsList.statusArchived\", \"Archived\"),\n },\n {\n value: \"DEPRECATED\",\n label: tr(\"fluidgrids.workflowsList.statusDeprecated\", \"Deprecated\"),\n },\n ],\n [tr],\n );\n}\n\nfunction SkeletonCard() {\n return (\n <div className=\"flex min-h-40 flex-col justify-between rounded-xl border border-border bg-card p-6\">\n <div className=\"space-y-2.5\">\n <Skeleton className=\"h-6 w-2/3 bg-card-foreground/15\" />\n <Skeleton className=\"h-4 w-full bg-card-foreground/10\" />\n </div>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"mr-4 h-6 w-full bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n </div>\n </div>\n );\n}\n\nexport function WorkflowsList() {\n const tr = useTr();\n const navigate = useNavigate();\n const STATUS_FILTERS = useStatusFilters();\n const { workflows, loading, error, tagsByKey, refetch } =\n useWorkflowDefinitions({\n limit: 100,\n latestOnly: true,\n });\n\n const [search, setSearch] = useState(\"\");\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n const [tagFilter, setTagFilter] = useState<string | null>(null);\n\n // Only offer chips for statuses that actually occur in this workspace.\n const presentStatuses = useMemo(() => {\n const seen = new Set<string>(workflows.map((w) => w.status ?? \"DRAFT\"));\n return STATUS_FILTERS.filter((s) => seen.has(s.value));\n }, [workflows, STATUS_FILTERS]);\n\n // Tags present across the listed workflows, for the filter chips. Tag ids\n // come from the assignments so the filter works on ids, not labels\n // (two vocabularies can share a label).\n const presentTags = useMemo(() => {\n const byId = new Map<string, { id: string; label: string }>();\n for (const w of workflows) {\n for (const a of tagsByKey[w.workflowKey] ?? []) {\n if (!byId.has(a.tagId)) {\n byId.set(a.tagId, {\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\"fluidgrids.workflowsList.tagFallbackLabel\", \"Tag\"),\n });\n }\n }\n }\n return [...byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n }, [workflows, tagsByKey, tr]);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n return workflows.filter((w) => {\n if (statusFilter && (w.status ?? \"DRAFT\") !== statusFilter) return false;\n // Tags come from the list query's tagAssignments projection; no separate\n // overlay request is needed, avoiding duplicate workflowDefinitions calls.\n if (\n tagFilter &&\n !(tagsByKey[w.workflowKey] ?? []).some((a) => a.tagId === tagFilter)\n )\n return false;\n if (!q) return true;\n return [w.name, w.description, w.alias]\n .filter((v): v is string => typeof v === \"string\")\n .some((v) => v.toLowerCase().includes(q));\n });\n }, [workflows, search, statusFilter, tagFilter, tagsByKey]);\n\n const createButton = (\n <SdkPermissionButton\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n deniedTooltip={tr(\n \"fluidgrids.workflowsList.createDeniedTooltip\",\n \"You don't have permission to create workflows\",\n )}\n >\n <Button\n variant=\"default\"\n size=\"default\"\n className=\"font-bold text-primary-foreground\"\n onClick={() => navigate(`../workflow/${uuidv4()}/v1`)}\n data-tour=\"fluidgrids-list-create\"\n >\n <Icon icon=\"mynaui:plus\" className=\"size-5 text-primary-foreground\" />\n {tr(\"fluidgrids.workflowsList.createButton\", \"Create Workflow\")}\n </Button>\n </SdkPermissionButton>\n );\n\n return (\n // min-h-screen (matching the sibling pages) makes short content still fill\n // the viewport, keeping the shell footer below the fold.\n <main className=\"flex min-h-screen w-full flex-col bg-background-primary\">\n <div\n className=\"flex flex-1 flex-col gap-5 p-4 sm:p-6\"\n data-tour=\"fluidgrids-list-results\"\n >\n {/* Page header */}\n <div\n className=\"flex flex-wrap items-start justify-between gap-3\"\n data-tour=\"fluidgrids-list-header\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2.5\">\n <h1 className=\"text-2xl font-bold tracking-tight\">\n {tr(\"fluidgrids.workflowsList.title\", \"Workflows\")}\n </h1>\n {!loading && !error && (\n <Badge variant=\"secondary\" className=\"font-mono\">\n {workflows.length}\n </Badge>\n )}\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {tr(\n \"fluidgrids.workflowsList.subtitle\",\n \"Build, run, and manage your automations. Open a workflow to edit it in the visual builder.\",\n )}\n </p>\n </div>\n {createButton}\n </div>\n\n {/* Toolbar: search + status chips (only useful once something exists) */}\n {!loading && !error && workflows.length > 0 && (\n <div\n className=\"flex flex-wrap items-center gap-3\"\n data-tour=\"fluidgrids-list-toolbar\"\n >\n <div className=\"relative w-full max-w-xs\">\n <Icon\n icon=\"mynaui:search\"\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={tr(\n \"fluidgrids.workflowsList.searchPlaceholder\",\n \"Search workflows…\",\n )}\n aria-label={tr(\n \"fluidgrids.workflowsList.searchAriaLabel\",\n \"Search workflows\",\n )}\n className=\"pl-8\"\n />\n </div>\n {presentStatuses.length > 1 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={() => setStatusFilter(null)}\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === null\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {tr(\"fluidgrids.workflowsList.statusFilterAll\", \"All\")}\n </button>\n {presentStatuses.map((s) => (\n <button\n key={s.value}\n type=\"button\"\n onClick={() =>\n setStatusFilter((cur) =>\n cur === s.value ? null : s.value,\n )\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === s.value\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {s.label}\n </button>\n ))}\n </div>\n )}\n {presentTags.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Icon\n icon=\"mdi:tag-outline\"\n className=\"size-4 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n {presentTags.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n onClick={() =>\n setTagFilter((cur) => (cur === t.id ? null : t.id))\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n tagFilter === t.id\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {t.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {Array.from({ length: 6 }, (_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n ) : error ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex max-w-md flex-col items-center gap-3 rounded-xl border border-border bg-card p-8 text-center\">\n <Icon\n icon=\"mynaui:danger-triangle\"\n className=\"size-8 text-destructive\"\n />\n <div>\n <p className=\"font-semibold\">\n {tr(\n \"fluidgrids.workflowsList.loadErrorTitle\",\n \"Couldn't load workflows\",\n )}\n </p>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {error.message}\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\n <Icon icon=\"mynaui:refresh\" className=\"size-4\" />\n {tr(\"fluidgrids.workflowsList.tryAgainButton\", \"Try again\")}\n </Button>\n </div>\n </div>\n ) : workflows.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <IllustratedEmptyState\n illustration=\"onboarding\"\n title={tr(\n \"fluidgrids.workflowsList.emptyStateTitle\",\n \"Create your first workflow\",\n )}\n description={tr(\n \"fluidgrids.workflowsList.emptyStateDescription\",\n \"Workflows automate multi-step processes — sync signups into your CRM, post alerts to Slack, or transform data between apps. Start from a blank canvas or a template.\",\n )}\n action={createButton}\n />\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Icon\n icon=\"mynaui:search\"\n className=\"size-8 text-muted-foreground\"\n />\n <p className=\"font-medium\">\n {tr(\n \"fluidgrids.workflowsList.noFilterMatchTitle\",\n \"No workflows match your filters\",\n )}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setSearch(\"\");\n setStatusFilter(null);\n setTagFilter(null);\n }}\n >\n {tr(\n \"fluidgrids.workflowsList.clearFiltersButton\",\n \"Clear filters\",\n )}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {filtered.map((workflow) => (\n <CardWorkflow\n key={workflow.id}\n workflow={{\n id: workflow.id,\n workflow_key: workflow.workflowKey,\n version: workflow.version,\n name: workflow.name,\n description: workflow.description ?? undefined,\n status: workflow.status ?? undefined,\n alias: workflow.alias ?? undefined,\n updated_at: workflow.updatedAt ?? undefined,\n created_at: workflow.createdAt ?? undefined,\n total_versions: workflow.totalVersions ?? undefined,\n tags: (tagsByKey[workflow.workflowKey] ?? []).map((a) => ({\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\n \"fluidgrids.workflowsList.cardTagFallbackLabel\",\n \"Tag\",\n ),\n color: a.tagInfo?.color ?? undefined,\n })),\n }}\n onUpdateSuccess={() => refetch()}\n />\n ))}\n </div>\n )}\n </div>\n </main>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/SharePopup.tsx","../src/builder/components/ui/card-workflow.tsx","../src/pages/WorkflowsList.tsx"],"names":["useState","toast","jsxs","jsx","Button","useNavigate","uuidv4","Icon","cn"],"mappings":"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","file":"chunk-XQ7FGXPM.js","sourcesContent":["import { useState } from \"react\";\nimport { Copy, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/ui\";\nimport { config } from \"../config\";\nimport { useTr } from \"../hooks/useTr\";\n\ninterface SharePopupProps {\n url: string;\n embedSrc: string;\n}\n\nexport default function SharePopup({\n url = window.location.href,\n embedSrc = `${config.fluidgridFrontendUrl}/workflow-view/565201ec-e803-4281-ad39-a135c46daa89/1.0`,\n}: SharePopupProps) {\n const tr = useTr();\n const [isOpen, setIsOpen] = useState(false);\n const [width, setWidth] = useState(600);\n const [height, setHeight] = useState(400);\n const [activeTab, setActiveTab] = useState<\"link\" | \"embed\">(\"link\");\n\n const embedCode = `<iframe src=\"${embedSrc}\" width=\"${width}\" height=\"${height}\"></iframe>`;\n\n const copyToClipboard = (text: string, message: string) => {\n navigator.clipboard.writeText(text);\n toast.success(message);\n };\n\n if (!isOpen) {\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(true)}>\n <Share2 className=\"h-4 w-4\" />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.components.sharePopup.openLabel\", \"Share\")}\n </span>\n </Button>\n );\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n <div\n className=\"bg-card rounded-lg p-6 max-w-md w-full mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex justify-between items-center mb-4\">\n <h2 className=\"text-lg font-semibold\">\n {tr(\"fluidgrids.components.sharePopup.title\", \"Share\")}\n </h2>\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(false)}>\n &times;\n </Button>\n </div>\n\n <div className=\"flex gap-2 mb-4\">\n <Button\n variant={activeTab === \"link\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"link\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabShareLink\", \"Share Link\")}\n </Button>\n <Button\n variant={activeTab === \"embed\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"embed\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabEmbed\", \"Embed\")}\n </Button>\n </div>\n\n {activeTab === \"link\" && (\n <div className=\"flex items-center space-x-2\">\n <input\n readOnly\n value={url}\n className=\"flex-1 h-9 px-3 rounded-md border bg-background text-sm\"\n />\n <Button\n size=\"sm\"\n onClick={() =>\n copyToClipboard(\n url,\n tr(\n \"fluidgrids.components.sharePopup.linkCopiedToast\",\n \"Link copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n\n {activeTab === \"embed\" && (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.widthLabel\", \"Width\")}\n </label>\n <input\n type=\"number\"\n value={width}\n onChange={(e) => setWidth(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.heightLabel\", \"Height\")}\n </label>\n <input\n type=\"number\"\n value={height}\n onChange={(e) => setHeight(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\n \"fluidgrids.components.sharePopup.embedCodeLabel\",\n \"Embed Code\",\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n readOnly\n value={embedCode}\n className=\"w-full h-9 px-3 pr-12 rounded-md border bg-background text-sm font-mono\"\n />\n <Button\n size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7\"\n onClick={() =>\n copyToClipboard(\n embedCode,\n tr(\n \"fluidgrids.components.sharePopup.embedCopiedToast\",\n \"Embed code copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Card,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { TagBadge } from \"@burdenoff/fe-libs/tag\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { isQuotaExhaustedError } from \"@burdenoff/fe-libs/shared/utils\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { useFlowStore } from \"../../stores/flow-store\";\nimport { useNavigate } from \"react-router\";\nimport { config } from \"../../../config\";\nimport SharePopup from \"../../../components/SharePopup\";\nimport {\n useDuplicateWorkflow,\n useDeleteWorkflow,\n} from \"../../../hooks/useWorkflows\";\nimport { SdkPermissionGate } from \"../../../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../../../permissions/constants\";\nimport { QuotaExhaustedDialog } from \"../../../components/shared/QuotaExhaustedDialog\";\nimport { useTr } from \"../../../hooks/useTr\";\n\ninterface WorkflowTagChip {\n id: string;\n label: string;\n color?: string;\n}\n\ninterface WorkflowData {\n id?: string;\n workflow_key: string;\n version: string;\n name: string;\n description?: string;\n status?: string;\n alias?: string;\n updated_at?: string;\n created_at?: string;\n total_versions?: number;\n /** Resolved tag assignments, rendered as read-only chips. */\n tags?: WorkflowTagChip[];\n}\n\n/** Status pill: colored dot + label, calmer than a filled badge. */\nconst STATUS_STYLES: Record<string, { label: string; dotClass: string }> = {\n DRAFT: { label: \"Draft\", dotClass: \"bg-muted-foreground/60\" },\n ACTIVE: {\n label: \"Active\",\n dotClass: \"bg-[var(--color-status-success-text)]\",\n },\n ARCHIVED: { label: \"Archived\", dotClass: \"bg-muted-foreground/30\" },\n DEPRECATED: {\n label: \"Deprecated\",\n dotClass: \"bg-[var(--color-status-error-text)]\",\n },\n};\n\n/** Compact relative timestamp (\"2h ago\"); absolute date beyond a week. */\nfunction relativeTime(iso?: string): string {\n if (!iso) return \"—\";\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return \"—\";\n const mins = Math.floor((Date.now() - then) / 60_000);\n if (mins < 1) return \"just now\";\n if (mins < 60) return `${mins}m ago`;\n const hrs = Math.floor(mins / 60);\n if (hrs < 24) return `${hrs}h ago`;\n const days = Math.floor(hrs / 24);\n if (days < 7) return `${days}d ago`;\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n }).format(new Date(then));\n}\n\nexport const CardWorkflow = ({\n workflow,\n onUpdateSuccess,\n}: {\n workflow: WorkflowData;\n onUpdateSuccess: () => void;\n}) => {\n const tr = useTr();\n const navigate = useNavigate();\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { duplicateWorkflow: duplicateWorkflowMutation } =\n useDuplicateWorkflow();\n const { deleteWorkflow: deleteWorkflowMutation } = useDeleteWorkflow();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [showQuotaExhausted, setShowQuotaExhausted] = useState(false);\n\n async function handleDuplicateWorkflow() {\n try {\n // Reset the store first to clear any existing state\n resetWorkflow();\n\n const result = await duplicateWorkflowMutation(\n workflow.workflow_key,\n workflow.version,\n {\n newWorkflowKey: `${workflow.workflow_key}_copy_${Date.now()}`,\n },\n );\n\n if (result?.success && result.workflow) {\n navigate(\n `../workflow/${result.workflow.workflowKey}/${result.workflow.version}`,\n );\n } else {\n throw new Error(result?.message || \"Failed to duplicate workflow\");\n }\n } catch (error) {\n // duplicateWorkflowMutation re-throws on failure, preserving the\n // original GraphQL error as `.cause` — check that (not the wrapped\n // message) to detect QUOTA_EXHAUSTED.\n const cause = error instanceof Error ? error.cause : undefined;\n if (isQuotaExhaustedError(cause) || isQuotaExhaustedError(error)) {\n setShowQuotaExhausted(true);\n return;\n }\n console.error(\"Error duplicating workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.duplicateErrorToast\", \"Error duplicating workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n const handleDeleteWorkflow = async (): Promise<void> => {\n if (!workflow.workflow_key) {\n console.error(\"Workflow ID is required to delete.\");\n return;\n }\n setIsDeleting(true);\n try {\n // Omit version to delete ALL versions of this workflow\n const success = await deleteWorkflowMutation(workflow.workflow_key);\n if (success) {\n setShowDeleteDialog(false);\n }\n } catch (error) {\n console.error(\"Error deleting workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.deleteErrorToast\", \"Error deleting workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n onUpdateSuccess();\n }\n };\n\n const handleOnEdit = () => {\n navigate(\"../workflow/\" + workflow.workflow_key + \"/\" + workflow.version);\n };\n\n /**\n * The whole card opens the builder (n8n-style). Inner controls — action\n * buttons, the share overlay (a non-portaled `fixed` div whose clicks bubble\n * through the card), and the dialog — must not trigger navigation.\n */\n const handleCardClick = (e: React.MouseEvent<HTMLDivElement>) => {\n const el = e.target as HTMLElement;\n if (el.closest(\"button, a, input, [role='dialog'], .fixed\")) return;\n handleOnEdit();\n };\n\n const statusInfo =\n STATUS_STYLES[workflow.status ?? \"DRAFT\"] ?? STATUS_STYLES.DRAFT;\n const updatedExact = workflow.updated_at\n ? new Date(workflow.updated_at).toLocaleString()\n : undefined;\n\n return (\n <TooltipProvider>\n <Card\n role=\"button\"\n tabIndex={0}\n aria-label={`${tr(\"fluidgrids.builder.cardWorkflow.openWorkflowAriaLabel\", \"Open workflow\")} ${workflow.name}`}\n onClick={handleCardClick}\n onKeyDown={(e) => {\n if (\n e.target === e.currentTarget &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n handleOnEdit();\n }\n }}\n className={cn(\n \"group relative flex min-h-44 cursor-pointer flex-col gap-0 rounded-xl border-border bg-card p-0\",\n \"transition-all duration-150 hover:-translate-y-0.5 hover:border-primary/40 hover:shadow-lg\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50\",\n )}\n >\n {/* Header: icon square + name/description + status pill */}\n <div className=\"flex flex-1 items-start gap-3 p-4\">\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-primary/20 bg-primary/10 text-primary\">\n <Icon icon=\"mdi:transit-connection-variant\" className=\"size-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <h3 className=\"truncate font-semibold leading-6 text-card-foreground\">\n {workflow?.name}\n </h3>\n <span className=\"mt-0.5 inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n <span\n className={cn(\"size-1.5 rounded-full\", statusInfo.dotClass)}\n />\n {statusInfo.label}\n </span>\n </div>\n <p className=\"mt-1 line-clamp-2 text-xs leading-snug text-muted-foreground\">\n {workflow.description ||\n tr(\n \"fluidgrids.builder.cardWorkflow.noDescription\",\n \"No description\",\n )}\n </p>\n {workflow.tags && workflow.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap items-center gap-1\">\n {workflow.tags.slice(0, 3).map((tag) => (\n <TagBadge\n key={tag.id}\n id={tag.id}\n label={tag.label}\n color={tag.color}\n size=\"sm\"\n />\n ))}\n {workflow.tags.length > 3 && (\n <span className=\"text-[11px] text-muted-foreground\">\n +{workflow.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Footer: metadata + actions (actions brighten on hover/focus) */}\n <div className=\"flex items-center justify-between gap-2 border-t border-border px-4 py-1.5\">\n <div\n className=\"flex min-w-0 items-center gap-1.5 text-[11px] text-muted-foreground\"\n title={updatedExact}\n >\n <Icon icon=\"mdi:clock-outline\" className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {tr(\"fluidgrids.builder.cardWorkflow.updatedPrefix\", \"Updated\")}{\" \"}\n {relativeTime(workflow.updated_at)}\n </span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"shrink-0 font-mono\">\n {workflow.version}\n {workflow.alias ? ` (${workflow.alias})` : \"\"}\n </span>\n {workflow.total_versions && workflow.total_versions > 1 ? (\n <span className=\"shrink-0\">\n · {workflow.total_versions}{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.versionsSuffix\",\n \"versions\",\n )}\n </span>\n ) : null}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-0.5 opacity-60 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={handleOnEdit}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n >\n <Icon icon=\"mynaui:edit\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <SharePopup\n url={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n embedSrc={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n />\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.shareWorkflow\",\n \"Share workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => handleDuplicateWorkflow()}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n >\n <Icon icon=\"mynaui:copy\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_DELETE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 text-[var(--color-status-error-text)] hover:text-[var(--color-status-error-text)]\"\n onClick={() => setShowDeleteDialog(true)}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n >\n <Icon icon=\"mynaui:trash\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n </div>\n </div>\n </Card>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogTitle\",\n \"Delete Workflow\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionPrefix\",\n \"Are you sure you want to delete workflow\",\n )}{\" \"}\n &quot;{workflow.name}&quot;{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionSuffix\",\n \"and all its versions? This action cannot be undone.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isDeleting}>\n {tr(\"fluidgrids.builder.cardWorkflow.cancelButton\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDeleteWorkflow}\n disabled={isDeleting}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isDeleting\n ? tr(\n \"fluidgrids.builder.cardWorkflow.deletingButton\",\n \"Deleting...\",\n )\n : tr(\"fluidgrids.builder.cardWorkflow.deleteButton\", \"Delete\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n <QuotaExhaustedDialog\n open={showQuotaExhausted}\n onOpenChange={setShowQuotaExhausted}\n onUpgrade={() => {\n setShowQuotaExhausted(false);\n navigate(\"/billing\");\n }}\n />\n </TooltipProvider>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Icon } from \"@iconify/react\";\n\nimport {\n Badge,\n Button,\n IllustratedEmptyState,\n Input,\n Skeleton,\n} from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { CardWorkflow } from \"../builder/components/ui/card-workflow\";\nimport { useWorkflowDefinitions } from \"../hooks/useWorkflows\";\nimport { useTr } from \"../hooks/useTr\";\nimport { SdkPermissionButton } from \"../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../permissions/constants\";\n\nfunction useStatusFilters() {\n const tr = useTr();\n return useMemo(\n () => [\n {\n value: \"ACTIVE\",\n label: tr(\"fluidgrids.workflowsList.statusActive\", \"Active\"),\n },\n {\n value: \"DRAFT\",\n label: tr(\"fluidgrids.workflowsList.statusDraft\", \"Draft\"),\n },\n {\n value: \"ARCHIVED\",\n label: tr(\"fluidgrids.workflowsList.statusArchived\", \"Archived\"),\n },\n {\n value: \"DEPRECATED\",\n label: tr(\"fluidgrids.workflowsList.statusDeprecated\", \"Deprecated\"),\n },\n ],\n [tr],\n );\n}\n\nfunction SkeletonCard() {\n return (\n <div className=\"flex min-h-40 flex-col justify-between rounded-xl border border-border bg-card p-6\">\n <div className=\"space-y-2.5\">\n <Skeleton className=\"h-6 w-2/3 bg-card-foreground/15\" />\n <Skeleton className=\"h-4 w-full bg-card-foreground/10\" />\n </div>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"mr-4 h-6 w-full bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n </div>\n </div>\n );\n}\n\nexport function WorkflowsList() {\n const tr = useTr();\n const navigate = useNavigate();\n const STATUS_FILTERS = useStatusFilters();\n const { workflows, loading, error, tagsByKey, refetch } =\n useWorkflowDefinitions({\n limit: 100,\n latestOnly: true,\n });\n\n const [search, setSearch] = useState(\"\");\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n const [tagFilter, setTagFilter] = useState<string | null>(null);\n\n // Only offer chips for statuses that actually occur in this workspace.\n const presentStatuses = useMemo(() => {\n const seen = new Set<string>(workflows.map((w) => w.status ?? \"DRAFT\"));\n return STATUS_FILTERS.filter((s) => seen.has(s.value));\n }, [workflows, STATUS_FILTERS]);\n\n // Tags present across the listed workflows, for the filter chips. Tag ids\n // come from the assignments so the filter works on ids, not labels\n // (two vocabularies can share a label).\n const presentTags = useMemo(() => {\n const byId = new Map<string, { id: string; label: string }>();\n for (const w of workflows) {\n for (const a of tagsByKey[w.workflowKey] ?? []) {\n if (!byId.has(a.tagId)) {\n byId.set(a.tagId, {\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\"fluidgrids.workflowsList.tagFallbackLabel\", \"Tag\"),\n });\n }\n }\n }\n return [...byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n }, [workflows, tagsByKey, tr]);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n return workflows.filter((w) => {\n if (statusFilter && (w.status ?? \"DRAFT\") !== statusFilter) return false;\n // Tags come from the list query's tagAssignments projection; no separate\n // overlay request is needed, avoiding duplicate workflowDefinitions calls.\n if (\n tagFilter &&\n !(tagsByKey[w.workflowKey] ?? []).some((a) => a.tagId === tagFilter)\n )\n return false;\n if (!q) return true;\n return [w.name, w.description, w.alias]\n .filter((v): v is string => typeof v === \"string\")\n .some((v) => v.toLowerCase().includes(q));\n });\n }, [workflows, search, statusFilter, tagFilter, tagsByKey]);\n\n const createButton = (\n <SdkPermissionButton\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n deniedTooltip={tr(\n \"fluidgrids.workflowsList.createDeniedTooltip\",\n \"You don't have permission to create workflows\",\n )}\n >\n <Button\n variant=\"default\"\n size=\"default\"\n className=\"font-bold text-primary-foreground\"\n onClick={() => navigate(`../workflow/${uuidv4()}/v1`)}\n data-tour=\"fluidgrids-list-create\"\n >\n <Icon icon=\"mynaui:plus\" className=\"size-5 text-primary-foreground\" />\n {tr(\"fluidgrids.workflowsList.createButton\", \"Create Workflow\")}\n </Button>\n </SdkPermissionButton>\n );\n\n return (\n // min-h-screen (matching the sibling pages) makes short content still fill\n // the viewport, keeping the shell footer below the fold.\n <main className=\"flex min-h-screen w-full flex-col bg-background-primary\">\n <div\n className=\"flex flex-1 flex-col gap-5 p-4 sm:p-6\"\n data-tour=\"fluidgrids-list-results\"\n >\n {/* Page header */}\n <div\n className=\"flex flex-wrap items-start justify-between gap-3\"\n data-tour=\"fluidgrids-list-header\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2.5\">\n <h1 className=\"text-2xl font-bold tracking-tight\">\n {tr(\"fluidgrids.workflowsList.title\", \"Workflows\")}\n </h1>\n {!loading && !error && (\n <Badge variant=\"secondary\" className=\"font-mono\">\n {workflows.length}\n </Badge>\n )}\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {tr(\n \"fluidgrids.workflowsList.subtitle\",\n \"Build, run, and manage your automations. Open a workflow to edit it in the visual builder.\",\n )}\n </p>\n </div>\n {createButton}\n </div>\n\n {/* Toolbar: search + status chips (only useful once something exists) */}\n {!loading && !error && workflows.length > 0 && (\n <div\n className=\"flex flex-wrap items-center gap-3\"\n data-tour=\"fluidgrids-list-toolbar\"\n >\n <div className=\"relative w-full max-w-xs\">\n <Icon\n icon=\"mynaui:search\"\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={tr(\n \"fluidgrids.workflowsList.searchPlaceholder\",\n \"Search workflows…\",\n )}\n aria-label={tr(\n \"fluidgrids.workflowsList.searchAriaLabel\",\n \"Search workflows\",\n )}\n className=\"pl-8\"\n />\n </div>\n {presentStatuses.length > 1 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={() => setStatusFilter(null)}\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === null\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {tr(\"fluidgrids.workflowsList.statusFilterAll\", \"All\")}\n </button>\n {presentStatuses.map((s) => (\n <button\n key={s.value}\n type=\"button\"\n onClick={() =>\n setStatusFilter((cur) =>\n cur === s.value ? null : s.value,\n )\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === s.value\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {s.label}\n </button>\n ))}\n </div>\n )}\n {presentTags.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Icon\n icon=\"mdi:tag-outline\"\n className=\"size-4 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n {presentTags.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n onClick={() =>\n setTagFilter((cur) => (cur === t.id ? null : t.id))\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n tagFilter === t.id\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {t.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {Array.from({ length: 6 }, (_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n ) : error ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex max-w-md flex-col items-center gap-3 rounded-xl border border-border bg-card p-8 text-center\">\n <Icon\n icon=\"mynaui:danger-triangle\"\n className=\"size-8 text-destructive\"\n />\n <div>\n <p className=\"font-semibold\">\n {tr(\n \"fluidgrids.workflowsList.loadErrorTitle\",\n \"Couldn't load workflows\",\n )}\n </p>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {error.message}\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\n <Icon icon=\"mynaui:refresh\" className=\"size-4\" />\n {tr(\"fluidgrids.workflowsList.tryAgainButton\", \"Try again\")}\n </Button>\n </div>\n </div>\n ) : workflows.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <IllustratedEmptyState\n illustration=\"onboarding\"\n title={tr(\n \"fluidgrids.workflowsList.emptyStateTitle\",\n \"Create your first workflow\",\n )}\n description={tr(\n \"fluidgrids.workflowsList.emptyStateDescription\",\n \"Workflows automate multi-step processes — sync signups into your CRM, post alerts to Slack, or transform data between apps. Start from a blank canvas or a template.\",\n )}\n action={createButton}\n />\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Icon\n icon=\"mynaui:search\"\n className=\"size-8 text-muted-foreground\"\n />\n <p className=\"font-medium\">\n {tr(\n \"fluidgrids.workflowsList.noFilterMatchTitle\",\n \"No workflows match your filters\",\n )}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setSearch(\"\");\n setStatusFilter(null);\n setTagFilter(null);\n }}\n >\n {tr(\n \"fluidgrids.workflowsList.clearFiltersButton\",\n \"Clear filters\",\n )}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {filtered.map((workflow) => (\n <CardWorkflow\n key={workflow.id}\n workflow={{\n id: workflow.id,\n workflow_key: workflow.workflowKey,\n version: workflow.version,\n name: workflow.name,\n description: workflow.description ?? undefined,\n status: workflow.status ?? undefined,\n alias: workflow.alias ?? undefined,\n updated_at: workflow.updatedAt ?? undefined,\n created_at: workflow.createdAt ?? undefined,\n total_versions: workflow.totalVersions ?? undefined,\n tags: (tagsByKey[workflow.workflowKey] ?? []).map((a) => ({\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\n \"fluidgrids.workflowsList.cardTagFallbackLabel\",\n \"Tag\",\n ),\n color: a.tagInfo?.color ?? undefined,\n })),\n }}\n onUpdateSuccess={() => refetch()}\n />\n ))}\n </div>\n )}\n </div>\n </main>\n );\n}\n"]}
@@ -1,13 +1,14 @@
1
- import { useExecution, buildNodeDisplayMap, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer } from './chunk-EUZZLC3N.js';
1
+ import { useExecution, buildNodeDisplayMap, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer } from './chunk-AQBWMYKP.js';
2
2
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-W23ZXNKU.js';
3
- import { throwIfResultError } from './chunk-LMO5ASOE.js';
4
3
  import { getFluidGridsConfig } from './chunk-WWU2O2SR.js';
5
- import { getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
6
4
  import { RunLogsDocument, RunLogAppendedDocument } from './chunk-BHITFSOK.js';
5
+ import { throwIfResultError } from './chunk-LMO5ASOE.js';
7
6
  import { useTr } from './chunk-7YWBH2A5.js';
7
+ import { getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
8
8
  import { useState, useMemo, useCallback, useRef, useEffect } from 'react';
9
9
  import { useParams, useNavigate, Link } from 'react-router';
10
10
  import { Icon } from '@iconify/react';
11
+ import { toast } from 'sonner';
11
12
  import { Button } from '@burdenoff/fe-libs/button';
12
13
  import { AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from '@burdenoff/fe-libs/ui';
13
14
  import { useActorProfiles, buildActorFallback } from '@burdenoff/fe-libs/shared';
@@ -198,6 +199,7 @@ function ExecutionDetailPage() {
198
199
  resumeExecution,
199
200
  cancelExecution,
200
201
  retryNode,
202
+ replayExecution,
201
203
  terminateExecution,
202
204
  loading: actionLoading
203
205
  } = useExecutionActions();
@@ -241,6 +243,26 @@ function ExecutionDetailPage() {
241
243
  await retryNode(runId, nodeId);
242
244
  refetch();
243
245
  };
246
+ const handleReplay = async () => {
247
+ if (!runId) return;
248
+ const replayed = await replayExecution(runId);
249
+ if (!replayed) {
250
+ toast.error(
251
+ tr(
252
+ "fluidgrids.executions.executionDetail.replayFailed",
253
+ "Could not replay this run"
254
+ )
255
+ );
256
+ return;
257
+ }
258
+ toast.success(
259
+ tr(
260
+ "fluidgrids.executions.executionDetail.replayStarted",
261
+ "Replay started in test mode"
262
+ )
263
+ );
264
+ navigate(`../runs/${replayed.runId}`);
265
+ };
244
266
  const handleViewChildRun = useCallback(
245
267
  (childRunId) => {
246
268
  navigate(`../runs/${childRunId}`);
@@ -569,6 +591,22 @@ function ExecutionDetailPage() {
569
591
  ]
570
592
  }
571
593
  ),
594
+ canControlRuns && execution.status !== "RUNNING" && execution.status !== "PENDING" && execution.status !== "WAITING" && /* @__PURE__ */ jsxs(
595
+ Button,
596
+ {
597
+ variant: "outline",
598
+ size: "sm",
599
+ onClick: () => void handleReplay(),
600
+ disabled: actionLoading,
601
+ children: [
602
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:replay", className: "mr-1", width: 16 }),
603
+ tr(
604
+ "fluidgrids.executions.executionDetail.replayButton",
605
+ "Replay in test mode"
606
+ )
607
+ ]
608
+ }
609
+ ),
572
610
  /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: refetch, children: [
573
611
  /* @__PURE__ */ jsx(Icon, { icon: "mdi:refresh", className: "mr-1", width: 16 }),
574
612
  tr(
@@ -831,5 +869,5 @@ function ExecutionDetailPage() {
831
869
  }
832
870
 
833
871
  export { ExecutionDetailPage };
834
- //# sourceMappingURL=chunk-5IAMVAGX.js.map
835
- //# sourceMappingURL=chunk-5IAMVAGX.js.map
872
+ //# sourceMappingURL=chunk-YNDQYVT2.js.map
873
+ //# sourceMappingURL=chunk-YNDQYVT2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/executions/hooks/useRunLogs.ts","../src/modules/executions/pages/ExecutionDetailPage.tsx"],"names":["useState","useMemo","useCallback"],"mappings":"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","file":"chunk-YNDQYVT2.js","sourcesContent":["/**\n * useRunLogs — a GitHub-Actions-style live tail for a workflow run.\n *\n * Two sources feed one ordered list:\n *\n * backfill `workflowRunLogs`, keyset-paginated. The source of truth, and\n * the only thing that can show a run that finished before the page\n * was opened.\n * live `runLogAppended`, which carries ONLY lines appended after the\n * subscription opens — it is a pub/sub stream with no history.\n *\n * So the order matters: query first, then subscribe, then de-duplicate by line\n * `id`. Line ids are assigned by the executor precisely so the live copy and\n * the persisted copy of a line can be matched.\n *\n * If the subscription never connects (a proxy that blocks SSE, a gateway\n * hiccup) the hook falls back to polling the cursor while the run is active,\n * so a live tail degrades to a slower live tail rather than to nothing.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { getFluidGridsClientSafe } from \"../../../graphql/client\";\nimport { throwIfResultError } from \"../../../graphql/errors\";\nimport { RUN_LOGS, RUN_LOG_APPENDED } from \"../graphql/operations\";\nimport type { RunLogLevel, RunLogLine } from \"../types\";\n\n/** How often to re-query when the live subscription is unavailable. */\nconst POLL_INTERVAL_MS = 2000;\n\n/** Page size for backfill. Large enough that a typical run arrives in one round trip. */\nconst PAGE_SIZE = 500;\n\ninterface RunLogsData {\n workflowRunLogs: {\n lines: RunLogLine[];\n nextCursor: string | null;\n hasMore: boolean;\n limitReached: boolean;\n };\n}\n\ninterface RunLogAppendedData {\n runLogAppended: RunLogLine[];\n}\n\nexport interface UseRunLogsOptions {\n /** Keep tailing. Set false once the run reaches a terminal state. */\n live?: boolean;\n /** Server-side severity filter. Applied to backfill; live lines are filtered client-side. */\n minLevel?: RunLogLevel | null;\n /** Include lines from sub-workflow runs nested under this one. */\n includeChildRuns?: boolean;\n}\n\nexport interface UseRunLogsResult {\n lines: RunLogLine[];\n loading: boolean;\n error: Error | null;\n /** True when the run has more lines after the current page — drives \"Load more\". */\n hasMore: boolean;\n /** True when the run hit its log cap and lines were dropped server-side. */\n limitReached: boolean;\n /** True while a live subscription is delivering (as opposed to polling). */\n streaming: boolean;\n /** Fetch the next page, continuing forward from the newest line held. */\n loadMore: () => Promise<void>;\n /** Discard everything and re-read from the start. */\n refetch: () => Promise<void>;\n}\n\nexport function useRunLogs(\n runId: string | undefined,\n options: UseRunLogsOptions = {},\n): UseRunLogsResult {\n const { live = false, minLevel = null, includeChildRuns = false } = options;\n\n const [lines, setLines] = useState<RunLogLine[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [limitReached, setLimitReached] = useState(false);\n const [streaming, setStreaming] = useState(false);\n\n /**\n * Ids already rendered. A line can arrive twice — once live and once in a\n * later backfill page — and the two copies are byte-identical by design, so\n * the id is all that is needed to collapse them.\n */\n const seenIds = useRef<Set<string>>(new Set());\n /** Cursor of the newest line we hold; where the next forward read starts. */\n const cursor = useRef<string | null>(null);\n\n const append = useCallback((incoming: RunLogLine[]) => {\n if (incoming.length === 0) return;\n\n const fresh = incoming.filter((line) => !seenIds.current.has(line.id));\n if (fresh.length === 0) return;\n for (const line of fresh) seenIds.current.add(line.id);\n\n setLines((prev) =>\n // Sort on every append rather than trusting arrival order: live lines and\n // a backfill page can interleave, and a run's nodes are executed by\n // several worker replicas whose batches need not arrive in order.\n [...prev, ...fresh].sort((a, b) =>\n a.timestamp === b.timestamp\n ? a.id.localeCompare(b.id)\n : a.timestamp.localeCompare(b.timestamp),\n ),\n );\n }, []);\n\n /** Read one page forward from `cursor`. */\n const fetchPage = useCallback(\n async (after: string | null): Promise<void> => {\n const client = getFluidGridsClientSafe();\n if (!client || !runId) return;\n\n const result = await client.query<RunLogsData>({\n query: RUN_LOGS,\n variables: {\n runId,\n after,\n limit: PAGE_SIZE,\n minLevel,\n includeChildRuns,\n },\n fetchPolicy: \"network-only\",\n });\n throwIfResultError(result);\n\n const page = result.data?.workflowRunLogs;\n if (!page) return;\n\n append(page.lines);\n setHasMore(page.hasMore);\n setLimitReached(page.limitReached);\n if (page.nextCursor) cursor.current = page.nextCursor;\n },\n [runId, minLevel, includeChildRuns, append],\n );\n\n const refetch = useCallback(async () => {\n seenIds.current = new Set();\n cursor.current = null;\n setLines([]);\n setLoading(true);\n setError(null);\n try {\n await fetchPage(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [fetchPage]);\n\n const loadMore = useCallback(async () => {\n try {\n await fetchPage(cursor.current);\n } catch (err) {\n setError(err as Error);\n }\n }, [fetchPage]);\n\n // Initial load, and a full reset whenever the run or a server-side filter\n // changes — the cursor is only meaningful for one filter combination.\n useEffect(() => {\n if (!runId) {\n setLoading(false);\n return;\n }\n void refetch();\n }, [runId, refetch]);\n\n // Live tail. Falls back to polling when the subscription cannot deliver.\n useEffect(() => {\n const client = getFluidGridsClientSafe();\n if (!runId || !live || !client) {\n setStreaming(false);\n return;\n }\n\n let cancelled = false;\n let poll: ReturnType<typeof setInterval> | null = null;\n\n const startPolling = (): void => {\n if (poll || cancelled) return;\n setStreaming(false);\n poll = setInterval(() => {\n void fetchPage(cursor.current).catch(() => {\n // A transient read failure must not tear down the tail; the next\n // tick retries from the same cursor.\n });\n }, POLL_INTERVAL_MS);\n };\n\n const subscription = client\n .subscribe<RunLogAppendedData>({\n query: RUN_LOG_APPENDED,\n variables: { runId },\n })\n .subscribe({\n next: ({ data }) => {\n if (cancelled) return;\n setStreaming(true);\n append(data?.runLogAppended ?? []);\n },\n error: () => {\n // Subscriptions are an accelerator, never the only path to the data.\n startPolling();\n },\n complete: () => {\n if (!cancelled) startPolling();\n },\n });\n\n // Poll until the first live line proves the stream works. Without this a\n // subscription that connects but never errors (a proxy holding the\n // response open) would silently show nothing.\n const readinessProbe = setTimeout(startPolling, POLL_INTERVAL_MS * 2);\n\n return () => {\n cancelled = true;\n clearTimeout(readinessProbe);\n if (poll) clearInterval(poll);\n subscription.unsubscribe();\n setStreaming(false);\n };\n }, [runId, live, fetchPage, append]);\n\n // One catch-up read when the run stops being live.\n //\n // A run appends its last few lines — the final node completing, `run-complete`\n // — between the last poll and the moment the caller flips `live` to false.\n // Tearing the tail down without this leaves the log visibly short of the run\n // it describes, and only a manual reload would recover it.\n const wasLive = useRef(false);\n useEffect(() => {\n if (live) {\n wasLive.current = true;\n return;\n }\n if (!wasLive.current) return;\n wasLive.current = false;\n\n void fetchPage(cursor.current).catch(() => {\n // Nothing to recover to; the reader can still refetch by hand.\n });\n }, [live, fetchPage]);\n\n // Live lines bypass the server-side filter, so re-apply it here to keep the\n // rendered list consistent with what the query would have returned.\n const filtered = useMemo(() => {\n if (!minLevel) return lines;\n const order: RunLogLevel[] = [\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"];\n const floor = order.indexOf(minLevel);\n return lines.filter((line) => order.indexOf(line.level) >= floor);\n }, [lines, minLevel]);\n\n return {\n lines: filtered,\n loading,\n error,\n hasMore,\n limitReached,\n streaming,\n loadMore,\n refetch,\n };\n}\n","import { useState, useCallback, useMemo } from \"react\";\nimport { useParams, Link, useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@burdenoff/fe-libs/ui\";\nimport {\n ExecutionStatusBadge,\n NodeTimeline,\n RunLogViewer,\n} from \"../components\";\nimport {\n useExecution,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useRunLogs } from \"../hooks/useRunLogs\";\nimport type { RunLogLevel } from \"../types\";\nimport { buildNodeDisplayMap, formatRunVersion } from \"../utils/run-display\";\nimport {\n useActorProfiles,\n buildActorFallback,\n type ActorInput,\n} from \"@burdenoff/fe-libs/shared\";\nimport { getFluidGridsConfig } from \"../../../config\";\nimport { useFluidGridsPermission } from \"../../../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../../../permissions/constants\";\nimport { useTr } from \"../../../hooks/useTr\";\n\ntype DetailTab = \"timeline\" | \"logs\" | \"input\" | \"context\";\n\nexport function ExecutionDetailPage() {\n const tr = useTr();\n const { runId } = useParams<{ runId: string }>();\n const navigate = useNavigate();\n\n const [activeTab, setActiveTab] = useState<DetailTab>(\"timeline\");\n const [autoRefreshEnabled, setAutoRefreshEnabled] = useState(true);\n const [showTerminateDialog, setShowTerminateDialog] = useState(false);\n const { allowed: canControlRuns } = useFluidGridsPermission(\n FLUIDGRIDS_PERMISSIONS.WORKFLOW_RUN_EXECUTE,\n );\n\n const [minLogLevel, setMinLogLevel] = useState<RunLogLevel | null>(null);\n\n // Data fetching\n const { execution, loading, error, refetch } = useExecution(runId);\n\n // nodeId → human label/operation from the run's workflow definition.\n const nodeDisplay = useMemo(\n () => buildNodeDisplayMap(execution?.workflow?.definitionJson),\n [execution?.workflow?.definitionJson],\n );\n\n // Resolve the triggering actor's display name (best-effort, cached).\n const fgConfig = getFluidGridsConfig();\n const actorInputs = useMemo<ActorInput[]>(\n () =>\n execution?.triggeredById\n ? [{ actorId: execution.triggeredById, actorType: \"user\" }]\n : [],\n [execution?.triggeredById],\n );\n const actorProfiles = useActorProfiles(actorInputs, {\n workspaceId: fgConfig.workspaceId || undefined,\n orgId: fgConfig.organizationId,\n authToken: fgConfig.authToken,\n });\n const triggeredByLabel = execution?.triggeredById\n ? (actorProfiles[execution.triggeredById]?.displayName ??\n buildActorFallback({\n actorId: execution.triggeredById,\n actorType: \"user\",\n }).displayName)\n : null;\n const {\n pauseExecution,\n resumeExecution,\n cancelExecution,\n retryNode,\n replayExecution,\n terminateExecution,\n loading: actionLoading,\n } = useExecutionActions();\n\n // Auto-refresh for running executions\n const isActive =\n execution?.status === \"RUNNING\" ||\n execution?.status === \"PENDING\" ||\n execution?.status === \"WAITING\";\n\n // The log viewer maintains its own live tail (subscription, with a polling\n // fallback), so this only refreshes the run header and node states.\n useAutoRefresh(\n useCallback(() => {\n refetch();\n }, [refetch]),\n autoRefreshEnabled && isActive,\n 2000,\n );\n\n const runLogs = useRunLogs(runId, {\n // Only tail while the run can still produce lines; a finished run's log is\n // complete after the first read.\n live: isActive,\n minLevel: minLogLevel,\n });\n\n // Handlers\n const handlePause = async () => {\n if (!runId) return;\n await pauseExecution(runId);\n refetch();\n };\n\n const handleResume = async () => {\n if (!runId) return;\n await resumeExecution(runId);\n refetch();\n };\n\n const handleCancel = async () => {\n if (!runId) return;\n await cancelExecution(runId);\n refetch();\n };\n\n const handleTerminate = async () => {\n if (!runId) return;\n await terminateExecution(runId, \"User terminated\");\n setShowTerminateDialog(false);\n refetch();\n };\n\n const handleRetryNode = async (nodeId: string) => {\n if (!runId) return;\n await retryNode(runId, nodeId);\n refetch();\n };\n\n const handleReplay = async () => {\n if (!runId) return;\n const replayed = await replayExecution(runId);\n if (!replayed) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionDetail.replayFailed\",\n \"Could not replay this run\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionDetail.replayStarted\",\n \"Replay started in test mode\",\n ),\n );\n navigate(`../runs/${replayed.runId}`);\n };\n\n const handleViewChildRun = useCallback(\n (childRunId: string) => {\n navigate(`../runs/${childRunId}`);\n },\n [navigate],\n );\n\n // Formatting helpers\n const formatDuration = (ms?: number): string => {\n if (!ms) return \"-\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000)\n return `${Math.round(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n return `${Math.round(ms / 3600000)}h ${Math.round((ms % 3600000) / 60000)}m`;\n };\n\n const formatDateTime = (dateStr?: string): string => {\n if (!dateStr) return \"-\";\n const date = new Date(dateStr);\n return date.toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n };\n\n // Loading state\n if (loading && !execution) {\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n <div className=\"animate-pulse\">\n <div className=\"h-8 w-48 bg-background-tertiary rounded mb-4\" />\n <div className=\"h-4 w-32 bg-background-tertiary rounded mb-8\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6\">\n {[...Array(4)].map((_, i) => (\n <div key={i} className=\"h-24 bg-background-tertiary rounded-lg\" />\n ))}\n </div>\n <div className=\"h-96 bg-background-tertiary rounded-lg\" />\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n <Link\n to=\"../runs\"\n className=\"text-action-primary-text hover:underline text-sm mb-4 inline-block\"\n >\n ←{\" \"}\n {tr(\n \"fluidgrids.executions.executionDetail.backToExecutions\",\n \"Back to Executions\",\n )}\n </Link>\n <div className=\"bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg p-6 text-center\">\n <Icon\n icon=\"mdi:alert-circle\"\n className=\"mx-auto text-[var(--color-status-error-text)] mb-4\"\n width={48}\n />\n <h2 className=\"text-lg font-medium text-[var(--color-status-error-text)] mb-2\">\n {tr(\n \"fluidgrids.executions.executionDetail.loadErrorTitle\",\n \"Failed to load execution\",\n )}\n </h2>\n <p className=\"text-[var(--color-status-error-text)] mb-4\">\n {error.message}\n </p>\n <Button variant=\"outline\" onClick={refetch}>\n {tr(\"fluidgrids.executions.executionDetail.tryAgain\", \"Try Again\")}\n </Button>\n </div>\n </div>\n );\n }\n\n // Not found state\n if (!execution) {\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n <Link\n to=\"../runs\"\n className=\"text-action-primary-text hover:underline text-sm mb-4 inline-block\"\n >\n ←{\" \"}\n {tr(\n \"fluidgrids.executions.executionDetail.backToExecutions\",\n \"Back to Executions\",\n )}\n </Link>\n <div className=\"bg-background-secondary border border-border-secondary rounded-lg p-6 text-center\">\n <Icon\n icon=\"mdi:file-find-outline\"\n className=\"mx-auto text-text-secondary mb-4\"\n width={48}\n />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">\n {tr(\n \"fluidgrids.executions.executionDetail.notFoundTitle\",\n \"Execution not found\",\n )}\n </h2>\n <p className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.notFoundDescriptionPrefix\",\n \"The execution with ID\",\n )}{\" \"}\n &quot;{runId}&quot;{\" \"}\n {tr(\n \"fluidgrids.executions.executionDetail.notFoundDescriptionSuffix\",\n \"could not be found.\",\n )}\n </p>\n </div>\n </div>\n );\n }\n\n const tabs: Array<{ id: DetailTab; label: string; icon: string }> = [\n {\n id: \"timeline\",\n label: tr(\n \"fluidgrids.executions.executionDetail.timelineTab\",\n \"Timeline\",\n ),\n icon: \"mdi:timeline\",\n },\n {\n id: \"logs\",\n label: tr(\"fluidgrids.executions.executionDetail.logsTab\", \"Logs\"),\n icon: \"mdi:text-box-outline\",\n },\n {\n id: \"input\",\n label: tr(\"fluidgrids.executions.executionDetail.inputTab\", \"Input Data\"),\n icon: \"mdi:code-json\",\n },\n {\n id: \"context\",\n label: tr(\"fluidgrids.executions.executionDetail.contextTab\", \"Context\"),\n icon: \"mdi:information-outline\",\n },\n ];\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Back link */}\n <Link\n to=\"../runs\"\n className=\"text-action-primary-text hover:underline text-sm mb-4 inline-block\"\n >\n ←{\" \"}\n {tr(\n \"fluidgrids.executions.executionDetail.backToExecutions\",\n \"Back to Executions\",\n )}\n </Link>\n\n {/* Sub-workflow parent breadcrumb */}\n {execution.parentRunId && (\n <div className=\"flex items-center gap-2 mb-3 text-sm\">\n <Icon icon=\"mdi:sitemap\" className=\"text-indigo-500\" width={16} />\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.subWorkflowOf\",\n \"Sub-workflow of\",\n )}\n </span>\n <Link\n to={`../runs/${execution.parentRunId}`}\n className=\"text-indigo-600 hover:underline font-medium\"\n >\n {tr(\n \"fluidgrids.executions.executionDetail.parentRunLinkPrefix\",\n \"Parent Run\",\n )}{\" \"}\n {execution.parentRunId.slice(0, 12)}...\n </Link>\n </div>\n )}\n\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-start lg:justify-between gap-4 mb-6\">\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {execution.workflow?.name || execution.workflowKey}\n </h1>\n <ExecutionStatusBadge status={execution.status} size=\"lg\" />\n {execution.parentRunId && (\n <span className=\"px-2 py-0.5 text-xs bg-indigo-100 text-indigo-700 rounded\">\n {tr(\n \"fluidgrids.executions.executionDetail.subWorkflowBadge\",\n \"Sub-Workflow\",\n )}\n </span>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:identifier\" width={16} />\n <code className=\"font-mono\">{execution.id.slice(0, 12)}...</code>\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:tag-outline\" width={16} />\n {formatRunVersion(execution.version)}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:clock-outline\" width={16} />\n {formatDateTime(execution.startedAt || execution.createdAt)}\n </span>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* Auto-refresh toggle */}\n {isActive && (\n <label className=\"flex items-center gap-2 text-sm text-text-secondary mr-4\">\n <input\n type=\"checkbox\"\n checked={autoRefreshEnabled}\n onChange={(e) => setAutoRefreshEnabled(e.target.checked)}\n className=\"w-4 h-4 rounded\"\n />\n {tr(\n \"fluidgrids.executions.executionDetail.autoRefreshToggle\",\n \"Auto-refresh\",\n )}\n </label>\n )}\n\n {/* Control buttons based on status */}\n {canControlRuns && execution.status === \"RUNNING\" && (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handlePause}\n disabled={actionLoading}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.pauseButton\",\n \"Pause\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n disabled={actionLoading}\n className=\"border-[var(--color-status-warning-border)] text-[var(--color-status-warning-text)] hover:bg-[var(--color-status-warning-bg-subtle)]\"\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.cancelButton\",\n \"Cancel\",\n )}\n </Button>\n </>\n )}\n\n {canControlRuns && execution.status === \"WAITING\" && (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleResume}\n disabled={actionLoading}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.resumeButton\",\n \"Resume\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n disabled={actionLoading}\n className=\"border-[var(--color-status-warning-border)] text-[var(--color-status-warning-text)] hover:bg-[var(--color-status-warning-bg-subtle)]\"\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.cancelButton\",\n \"Cancel\",\n )}\n </Button>\n </>\n )}\n\n {canControlRuns && execution.status === \"PENDING\" && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n disabled={actionLoading}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.cancelButton\",\n \"Cancel\",\n )}\n </Button>\n )}\n\n {canControlRuns &&\n (execution.status === \"RUNNING\" ||\n execution.status === \"WAITING\") && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowTerminateDialog(true)}\n disabled={actionLoading}\n className=\"border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n <Icon icon=\"mdi:close-octagon\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.terminateButton\",\n \"Terminate\",\n )}\n </Button>\n )}\n\n {canControlRuns &&\n execution.status !== \"RUNNING\" &&\n execution.status !== \"PENDING\" &&\n execution.status !== \"WAITING\" && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void handleReplay()}\n disabled={actionLoading}\n >\n <Icon icon=\"mdi:replay\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.replayButton\",\n \"Replay in test mode\",\n )}\n </Button>\n )}\n\n <Button variant=\"outline\" size=\"sm\" onClick={refetch}>\n <Icon icon=\"mdi:refresh\" className=\"mr-1\" width={16} />\n {tr(\n \"fluidgrids.executions.executionDetail.refreshButton\",\n \"Refresh\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6\">\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-4\">\n <div className=\"text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.durationStat\",\n \"Duration\",\n )}\n </div>\n <div className=\"text-xl font-bold text-text-primary mt-1\">\n {formatDuration(execution.duration)}\n </div>\n </div>\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-4\">\n <div className=\"text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.progressStat\",\n \"Progress\",\n )}\n </div>\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"flex-1 h-2 bg-background-tertiary rounded-full overflow-hidden\">\n <div\n className={`h-full ${\n execution.status === \"FAILED\"\n ? \"bg-[var(--color-status-error-bg)]\"\n : execution.status === \"COMPLETED\"\n ? \"bg-[var(--color-status-success-bg)]\"\n : \"bg-[var(--color-status-info-bg)]\"\n }`}\n style={{ width: `${execution.progress}%` }}\n />\n </div>\n <span className=\"text-xl font-bold text-text-primary\">\n {Math.round(execution.progress)}%\n </span>\n </div>\n </div>\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-4\">\n <div className=\"text-sm text-text-secondary\">\n {tr(\"fluidgrids.executions.executionDetail.nodesStat\", \"Nodes\")}\n </div>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xl font-bold text-[var(--color-status-success-text)]\">\n {execution.completedNodes ?? 0}\n </span>\n <span className=\"text-text-secondary\">/</span>\n <span className=\"text-xl font-bold text-text-primary\">\n {execution.totalNodes ?? 0}\n </span>\n {(execution.failedNodes ?? 0) > 0 && (\n <span className=\"text-sm text-[var(--color-status-error-text)] ml-2\">\n ({execution.failedNodes}{\" \"}\n {tr(\n \"fluidgrids.executions.executionDetail.failedNodesSuffix\",\n \"failed\",\n )}\n )\n </span>\n )}\n </div>\n </div>\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-4\">\n <div className=\"text-sm text-text-secondary\">\n {tr(\"fluidgrids.executions.executionDetail.triggerStat\", \"Trigger\")}\n </div>\n <div className=\"text-lg font-medium text-text-primary mt-1 truncate\">\n {execution.triggerNodeId\n ? (nodeDisplay[execution.triggerNodeId]?.label ??\n execution.triggerNodeId)\n : \"—\"}\n </div>\n </div>\n </div>\n\n {/* Error Banner */}\n {execution.errorMessage && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)] mb-2\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\"fluidgrids.executions.executionDetail.errorLabel\", \"Error\")}\n {execution.errorType ? ` (${execution.errorType})` : \"\"}\n </span>\n </div>\n <p className=\"text-[var(--color-status-error-text)]\">\n {execution.errorMessage}\n </p>\n </div>\n )}\n\n {/* Tabs */}\n <div className=\"border-b border-border-secondary mb-6\">\n <nav className=\"flex gap-4 -mb-px\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`\n flex items-center gap-2 px-4 py-3 border-b-2 text-sm font-medium transition-colors\n ${\n activeTab === tab.id\n ? \"border-action-primary-bg text-action-primary-text\"\n : \"border-transparent text-text-secondary hover:text-text-primary hover:border-border-primary\"\n }\n `}\n >\n <Icon icon={tab.icon} width={18} />\n {tab.label}\n </button>\n ))}\n </nav>\n </div>\n\n {/* Tab Content */}\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary\">\n {activeTab === \"timeline\" && (\n <div className=\"p-4 sm:p-6\">\n <NodeTimeline\n nodeStates={execution.nodeStates ?? []}\n nodeDisplay={nodeDisplay}\n triggerNodeId={execution.triggerNodeId ?? undefined}\n onRetryNode={canControlRuns ? handleRetryNode : undefined}\n onViewChildRun={handleViewChildRun}\n />\n </div>\n )}\n\n {activeTab === \"logs\" && (\n <div className=\"p-4 sm:p-6\">\n <RunLogViewer\n runId={runId!}\n lines={runLogs.lines}\n nodeStates={execution.nodeStates ?? []}\n nodeDisplay={nodeDisplay}\n loading={runLogs.loading}\n error={runLogs.error}\n hasMore={runLogs.hasMore}\n limitReached={runLogs.limitReached}\n streaming={runLogs.streaming}\n active={isActive}\n minLevel={minLogLevel}\n onMinLevelChange={setMinLogLevel}\n onLoadMore={() => void runLogs.loadMore()}\n />\n </div>\n )}\n\n {activeTab === \"input\" && (\n <div className=\"p-4 sm:p-6\">\n <h3 className=\"text-lg font-medium text-text-primary mb-4\">\n {tr(\n \"fluidgrids.executions.executionDetail.triggerDataHeading\",\n \"Trigger Data\",\n )}\n </h3>\n <div className=\"bg-background-primary rounded p-4 max-h-[400px] overflow-auto\">\n <pre className=\"text-sm text-text-primary font-mono whitespace-pre-wrap break-words\">\n {JSON.stringify(execution.triggerData ?? null, null, 2)}\n </pre>\n </div>\n </div>\n )}\n\n {activeTab === \"context\" && (\n <div className=\"p-4 sm:p-6\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div>\n <h3 className=\"text-lg font-medium text-text-primary mb-4\">\n {tr(\n \"fluidgrids.executions.executionDetail.executionContextHeading\",\n \"Execution Context\",\n )}\n </h3>\n <div className=\"bg-background-primary rounded p-4 max-h-[300px] overflow-auto\">\n <pre className=\"text-sm text-text-primary font-mono whitespace-pre-wrap break-words\">\n {JSON.stringify(execution.context ?? null, null, 2)}\n </pre>\n </div>\n </div>\n <div>\n <h3 className=\"text-lg font-medium text-text-primary mb-4\">\n {tr(\n \"fluidgrids.executions.executionDetail.executionDetailsHeading\",\n \"Execution Details\",\n )}\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.runIdRow\",\n \"Run ID\",\n )}\n </span>\n <code className=\"font-mono text-text-primary\">\n {execution.id}\n </code>\n </div>\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.workflowRow\",\n \"Workflow\",\n )}\n </span>\n <span className=\"text-text-primary\">\n {execution.workflow?.name || execution.workflowKey}\n </span>\n </div>\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.workflowKeyRow\",\n \"Workflow Key\",\n )}\n </span>\n <code className=\"font-mono text-text-primary\">\n {execution.workflowKey}\n </code>\n </div>\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.versionRow\",\n \"Version\",\n )}\n </span>\n <span className=\"text-text-primary\">\n {formatRunVersion(execution.version)}\n </span>\n </div>\n {execution.triggeredById && (\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.triggeredByRow\",\n \"Triggered By\",\n )}\n </span>\n <span\n className=\"text-text-primary\"\n title={execution.triggeredById}\n >\n {triggeredByLabel}\n </span>\n </div>\n )}\n {execution.parentRunId && (\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.parentRunRow\",\n \"Parent Run\",\n )}\n </span>\n <Link\n to={`/runs/${execution.parentRunId}`}\n className=\"text-action-primary-text hover:underline font-mono\"\n >\n {execution.parentRunId.slice(0, 12)}...\n </Link>\n </div>\n )}\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.createdRow\",\n \"Created\",\n )}\n </span>\n <span className=\"text-text-primary\">\n {formatDateTime(execution.createdAt)}\n </span>\n </div>\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.startedRow\",\n \"Started\",\n )}\n </span>\n <span className=\"text-text-primary\">\n {formatDateTime(execution.startedAt)}\n </span>\n </div>\n {execution.completedAt && (\n <div className=\"flex justify-between py-2 border-b border-border-secondary\">\n <span className=\"text-text-secondary\">\n {tr(\n \"fluidgrids.executions.executionDetail.completedRow\",\n \"Completed\",\n )}\n </span>\n <span className=\"text-text-primary\">\n {formatDateTime(execution.completedAt)}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <AlertDialog\n open={showTerminateDialog}\n onOpenChange={setShowTerminateDialog}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"fluidgrids.executions.executionDetail.terminateDialogTitle\",\n \"Terminate Execution\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"fluidgrids.executions.executionDetail.terminateDialogDescription\",\n \"Are you sure you want to force terminate this execution? This will immediately stop the running workflow and cannot be resumed.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={actionLoading}>\n {tr(\n \"fluidgrids.executions.executionDetail.cancelButton\",\n \"Cancel\",\n )}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleTerminate}\n disabled={actionLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {actionLoading\n ? tr(\n \"fluidgrids.executions.executionDetail.terminatingButton\",\n \"Terminating...\",\n )\n : tr(\n \"fluidgrids.executions.executionDetail.terminateButton\",\n \"Terminate\",\n )}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n"]}
@@ -1,14 +1,15 @@
1
1
  import './chunk-RXMBIJ5Z.js';
2
- export { ExecutionsListPage } from './chunk-R6JFXZXN.js';
3
- export { ExecutionDetailPage } from './chunk-5IAMVAGX.js';
4
- import './chunk-EUZZLC3N.js';
2
+ export { ExecutionsListPage } from './chunk-WTKMWWSI.js';
3
+ export { ExecutionDetailPage } from './chunk-YNDQYVT2.js';
4
+ import './chunk-AQBWMYKP.js';
5
+ import './chunk-NK32XOQN.js';
5
6
  import './chunk-W23ZXNKU.js';
6
7
  import './chunk-3ZYUGTIT.js';
7
- import './chunk-CVVNQCFM.js';
8
- import './chunk-LMO5ASOE.js';
8
+ import './chunk-Q4RPP67K.js';
9
9
  import './chunk-WWU2O2SR.js';
10
- import './chunk-5BDQNSP3.js';
11
10
  import './chunk-BHITFSOK.js';
11
+ import './chunk-LMO5ASOE.js';
12
12
  import './chunk-7YWBH2A5.js';
13
+ import './chunk-5BDQNSP3.js';
13
14
  //# sourceMappingURL=executions.js.map
14
15
  //# sourceMappingURL=executions.js.map