@burdenoff/fluidgrids-fe-sdk 2026.922.13 → 2026.923.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExecutionDetailPage-BD7CS4KL.js +12 -0
- package/dist/{ExecutionDetailPage-OSDL7NDT.js.map → ExecutionDetailPage-BD7CS4KL.js.map} +1 -1
- package/dist/ExecutionsListPage-VOGSLA7T.js +11 -0
- package/dist/{ExecutionsListPage-AATDFFIH.js.map → ExecutionsListPage-VOGSLA7T.js.map} +1 -1
- package/dist/{WorkflowBuilder-D7RKU4UK.js → WorkflowBuilder-WLJBVVHS.js} +8 -8
- package/dist/{WorkflowBuilder-D7RKU4UK.js.map → WorkflowBuilder-WLJBVVHS.js.map} +1 -1
- package/dist/{WorkflowsList-JHM7Q5HE.js → WorkflowsList-QREUMT55.js} +6 -6
- package/dist/{WorkflowsList-JHM7Q5HE.js.map → WorkflowsList-QREUMT55.js.map} +1 -1
- package/dist/{chunk-5IAMVAGX.js → chunk-4C6UYNC5.js} +43 -5
- package/dist/chunk-4C6UYNC5.js.map +1 -0
- package/dist/chunk-5A7GP6O7.js +729 -0
- package/dist/chunk-5A7GP6O7.js.map +1 -0
- package/dist/{chunk-MTWEYC2W.js → chunk-5PZDLMC4.js} +4 -4
- package/dist/{chunk-MTWEYC2W.js.map → chunk-5PZDLMC4.js.map} +1 -1
- package/dist/chunk-FKOUPL6Z.js +753 -0
- package/dist/chunk-FKOUPL6Z.js.map +1 -0
- package/dist/{chunk-EUZZLC3N.js → chunk-HNVWIVJH.js} +202 -6
- package/dist/chunk-HNVWIVJH.js.map +1 -0
- package/dist/{chunk-PTGKDQ5K.js → chunk-LH2YML5F.js} +8 -2
- package/dist/chunk-LH2YML5F.js.map +1 -0
- package/dist/chunk-NK32XOQN.js +248 -0
- package/dist/chunk-NK32XOQN.js.map +1 -0
- package/dist/{chunk-CVVNQCFM.js → chunk-Q4RPP67K.js} +4 -4
- package/dist/{chunk-CVVNQCFM.js.map → chunk-Q4RPP67K.js.map} +1 -1
- package/dist/{chunk-UNW4I442.js → chunk-Q7RJYGQK.js} +3 -3
- package/dist/{chunk-UNW4I442.js.map → chunk-Q7RJYGQK.js.map} +1 -1
- package/dist/{chunk-RJQJAN6J.js → chunk-TEZV7I6A.js} +4 -4
- package/dist/{chunk-RJQJAN6J.js.map → chunk-TEZV7I6A.js.map} +1 -1
- package/dist/{chunk-XQYAM47Y.js → chunk-TOHTP3BT.js} +4 -4
- package/dist/{chunk-XQYAM47Y.js.map → chunk-TOHTP3BT.js.map} +1 -1
- package/dist/{chunk-IPVHC2DM.js → chunk-TVLE7GNH.js} +374 -7
- package/dist/chunk-TVLE7GNH.js.map +1 -0
- package/dist/{chunk-ISS73LG3.js → chunk-VPWQN7KV.js} +3 -3
- package/dist/{chunk-ISS73LG3.js.map → chunk-VPWQN7KV.js.map} +1 -1
- package/dist/{chunk-R6JFXZXN.js → chunk-VTPBYPDV.js} +47 -5
- package/dist/chunk-VTPBYPDV.js.map +1 -0
- package/dist/{chunk-GWRX2T3K.js → chunk-XF7QA3QT.js} +417 -155
- package/dist/chunk-XF7QA3QT.js.map +1 -0
- package/dist/executions.js +7 -6
- package/dist/history.js +4 -4
- package/dist/index.d.ts +71 -1
- package/dist/index.js +26 -23
- package/dist/index.js.map +1 -1
- package/dist/nodes.js +2 -2
- package/dist/observability-5ShR4Phm.d.ts +134 -0
- package/dist/observability.d.ts +2 -0
- package/dist/observability.js +8 -0
- package/dist/observability.js.map +1 -0
- package/dist/settings.js +5 -1
- package/dist/templates.js +6 -6
- package/dist/workflow-builder.js +7 -7
- package/dist/workflows-list.js +4 -4
- package/package.json +5 -1
- package/dist/ExecutionDetailPage-OSDL7NDT.js +0 -11
- package/dist/ExecutionsListPage-AATDFFIH.js +0 -10
- package/dist/chunk-5IAMVAGX.js.map +0 -1
- package/dist/chunk-EUZZLC3N.js.map +0 -1
- package/dist/chunk-GWRX2T3K.js.map +0 -1
- package/dist/chunk-IPVHC2DM.js.map +0 -1
- package/dist/chunk-PTGKDQ5K.js.map +0 -1
- package/dist/chunk-R6JFXZXN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/observability/hooks/useObservability.ts","../src/modules/observability/types.ts","../src/modules/observability/components/LogStreamingTab.tsx"],"names":["useState","useEffect","useCallback"],"mappings":"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","file":"chunk-5A7GP6O7.js","sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n describeOperationError,\n throwIfResultError,\n} from \"../../../graphql/errors\";\nimport {\n CREATE_LOG_STREAM_DESTINATION,\n DELETE_LOG_STREAM_DESTINATION,\n LOG_STREAM_DESTINATIONS,\n OBSERVABILITY_DATA_SINK_DATA,\n OBSERVABILITY_DATA_SINKS,\n OBSERVABILITY_DASHBOARD_SUMMARY,\n OBSERVABILITY_FAILED_RUNS,\n REPLAY_WORKFLOW_RUN,\n RETRY_WORKFLOW_RUNS,\n TEST_LOG_STREAM_DESTINATION,\n UPDATE_LOG_STREAM_DESTINATION,\n} from \"../operations\";\nimport type {\n DashboardSummary,\n DataSinkData,\n DataSinkSummary,\n FailedRun,\n LogStreamDestination,\n LogStreamDestinationInput,\n LogStreamDestinationResponse,\n MutationResponse,\n TriggerResponse,\n} from \"../types\";\n\ninterface DestinationQueryData {\n logStreamDestinations: LogStreamDestination[];\n}\n\ninterface DestinationMutationData {\n createLogStreamDestination?: LogStreamDestinationResponse;\n updateLogStreamDestination?: LogStreamDestinationResponse;\n deleteLogStreamDestination?: MutationResponse;\n testLogStreamDestination?: MutationResponse;\n}\n\ninterface SummaryQueryData {\n dashboardSummary: DashboardSummary;\n}\n\ninterface FailedRunsQueryData {\n workflowRuns: {\n total: number;\n hasMore: boolean;\n items: FailedRun[];\n };\n}\n\ninterface TriggerMutationData {\n replayWorkflowRun?: TriggerResponse;\n retryWorkflowRuns?: TriggerResponse[];\n}\n\ninterface DataSinksQueryData {\n listDataSinks: {\n totalCount: number;\n pageInfo: { hasNextPage: boolean; endCursor?: string | null };\n edges: Array<{ cursor: string; node: DataSinkSummary }>;\n };\n}\n\ninterface DataSinkDataQueryData {\n getDataSinkData?: DataSinkData | null;\n}\n\ninterface UseAsyncState<T> {\n data: T | null;\n loading: boolean;\n error: Error | null;\n}\n\nfunction useAsyncRefresh<T>(\n fetcher: () => Promise<T>,\n initial: T | null,\n): UseAsyncState<T> & { refetch: () => Promise<T | null> } {\n const [data, setData] = useState<T | null>(initial);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const next = await fetcher();\n setData(next);\n return next;\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n }, [fetcher]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useLogStreamDestinations() {\n const fetchDestinations = useCallback(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DestinationQueryData>({\n query: LOG_STREAM_DESTINATIONS,\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.logStreamDestinations ?? [];\n }, []);\n\n const state = useAsyncRefresh(fetchDestinations, []);\n return { destinations: state.data ?? [], ...state, refetch: state.refetch };\n}\n\nexport function useLogStreamDestinationActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const run = useCallback(\n async <T>(operation: () => Promise<T>): Promise<T | null> => {\n setLoading(true);\n setError(null);\n try {\n return await operation();\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n const create = useCallback(\n (input: LogStreamDestinationInput) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: CREATE_LOG_STREAM_DESTINATION,\n variables: { input },\n }),\n );\n return result.data?.createLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const update = useCallback(\n (id: string, input: Partial<LogStreamDestinationInput>) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: UPDATE_LOG_STREAM_DESTINATION,\n variables: { id, input },\n }),\n );\n return result.data?.updateLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const remove = useCallback(\n (id: string) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: DELETE_LOG_STREAM_DESTINATION,\n variables: { id },\n }),\n );\n return result.data?.deleteLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const test = useCallback(\n (id: string) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: TEST_LOG_STREAM_DESTINATION,\n variables: { id },\n }),\n );\n return result.data?.testLogStreamDestination ?? null;\n }),\n [run],\n );\n\n return { create, update, remove, test, loading, error };\n}\n\nexport function useRunReplayActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const replay = useCallback(async (runId: string) => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<TriggerMutationData>({\n mutation: REPLAY_WORKFLOW_RUN,\n variables: { runId },\n }),\n );\n return result.data?.replayWorkflowRun ?? null;\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const retryMany = useCallback(async (runIds: string[]) => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<TriggerMutationData>({\n mutation: RETRY_WORKFLOW_RUNS,\n variables: { runIds },\n }),\n );\n return result.data?.retryWorkflowRuns ?? [];\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return [];\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { replay, retryMany, loading, error };\n}\n\nexport function useInsightsData() {\n const fetchInsights = useCallback(async () => {\n const client = getFluidGridsClient();\n const [summaryResult, failedResult] = await Promise.all([\n client.query<SummaryQueryData>({\n query: OBSERVABILITY_DASHBOARD_SUMMARY,\n fetchPolicy: \"network-only\",\n }),\n client.query<FailedRunsQueryData>({\n query: OBSERVABILITY_FAILED_RUNS,\n variables: {\n input: {\n status: \"FAILED\",\n limit: 100,\n offset: 0,\n },\n },\n fetchPolicy: \"network-only\",\n }),\n ]);\n throwIfResultError(summaryResult);\n throwIfResultError(failedResult);\n return {\n summary: summaryResult.data?.dashboardSummary ?? null,\n failedRuns: failedResult.data?.workflowRuns.items ?? [],\n };\n }, []);\n\n const state = useAsyncRefresh(fetchInsights, null);\n return {\n summary: state.data?.summary ?? null,\n failedRuns: state.data?.failedRuns ?? [],\n loading: state.loading,\n error: state.error,\n refetch: state.refetch,\n };\n}\n\nexport function useDataSinks(search: string) {\n const fetchSinks = useCallback(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataSinksQueryData>({\n query: OBSERVABILITY_DATA_SINKS,\n variables: { first: 50, isActive: true, search: search || undefined },\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.listDataSinks ?? null;\n }, [search]);\n\n const state = useAsyncRefresh(fetchSinks, null);\n return {\n sinks: state.data?.edges.map((edge) => edge.node) ?? [],\n totalCount: state.data?.totalCount ?? 0,\n hasNextPage: state.data?.pageInfo.hasNextPage ?? false,\n ...state,\n };\n}\n\nexport function useDataSinkData(sink: DataSinkSummary | null) {\n const fetchData = useCallback(async () => {\n if (!sink) return null;\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataSinkDataQueryData>({\n query: OBSERVABILITY_DATA_SINK_DATA,\n variables: { id: sink.id, limit: 100, offset: 0 },\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.getDataSinkData ?? null;\n }, [sink]);\n\n const state = useAsyncRefresh(fetchData, null);\n return { sinkData: state.data, ...state };\n}\n","export type LogStreamProvider = \"SYSLOG\" | \"WEBHOOK\" | \"SENTRY\";\n\nexport type LogStreamEventType =\n | \"LOG_ERROR\"\n | \"LOG_WARN\"\n | \"NODE_FAILED\"\n | \"NODE_RETRIED\"\n | \"RUN_CANCELLED\"\n | \"RUN_COMPLETED\"\n | \"RUN_FAILED\"\n | \"RUN_STARTED\";\n\nexport interface LogStreamDestination {\n id: string;\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n config?: Record<string, unknown> | null;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n hasSecret: boolean;\n lastDispatchError?: string | null;\n lastDispatchStatus?: string | null;\n lastDispatchedAt?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface LogStreamDestinationInput {\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n config?: Record<string, unknown>;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n secret?: string;\n}\n\nexport interface MutationResponse {\n success: boolean;\n message: string;\n}\n\nexport interface LogStreamDestinationResponse extends MutationResponse {\n destination?: LogStreamDestination | null;\n}\n\nexport interface TriggerResponse {\n runId: string;\n status: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n}\n\nexport interface DashboardSummary {\n workflowsCount: number;\n activeWorkflowsCount: number;\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n runsCancelledCount: number;\n runsWaitingCount: number;\n runsCompletedLast24h: number;\n runsFailedLast24h: number;\n runsCompletedLast7d: number;\n runsFailedLast7d: number;\n runsCompletedLast30d: number;\n runsFailedLast30d: number;\n totalNodesExecutedCount: number;\n avgWorkflowExecutionTimeSeconds?: number | null;\n avgNodeExecutionTimeSeconds?: number | null;\n workflowSuccessRate?: number | null;\n nodeUsageStats: NodeUsageStat[];\n recentRuns: RecentRun[];\n}\n\nexport interface NodeUsageStat {\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime?: number | null;\n}\n\nexport interface RecentRun {\n id: string;\n workflowKey: string;\n version: string;\n status: string;\n startedAt?: string | null;\n completedAt?: string | null;\n duration?: number | null;\n}\n\nexport interface FailedRun {\n id: string;\n workflowKey: string;\n status: string;\n errorType?: string | null;\n errorMessage?: string | null;\n triggerNodeId: string;\n startedAt?: string | null;\n completedAt?: string | null;\n duration?: number | null;\n workflow?: { name: string } | null;\n}\n\nexport interface DataSinkSummary {\n id: string;\n key: string;\n name?: string | null;\n description?: string | null;\n status: string;\n setupState: string;\n isActive: boolean;\n sizeBytes: number;\n lastRefreshedAt: string;\n nextRefreshAt?: string | null;\n dataStats?: { dataSizeBytes: number; hash: string } | null;\n linkedWorkflowCount: number;\n linkedParserCount: number;\n}\n\nexport interface DataSinkData {\n cached: boolean;\n extracted?: unknown;\n fetchedAt: string;\n hasMore?: boolean | null;\n limit?: number | null;\n offset?: number | null;\n raw: unknown;\n totalCount?: number | null;\n version: number;\n}\n\nexport function isLogStreamProvider(value: string): value is LogStreamProvider {\n return value === \"SYSLOG\" || value === \"WEBHOOK\" || value === \"SENTRY\";\n}\n\nexport const LOG_STREAM_EVENT_TYPES: readonly LogStreamEventType[] = [\n \"LOG_ERROR\",\n \"LOG_WARN\",\n \"NODE_FAILED\",\n \"NODE_RETRIED\",\n \"RUN_CANCELLED\",\n \"RUN_COMPLETED\",\n \"RUN_FAILED\",\n \"RUN_STARTED\",\n];\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Card,\n CardContent,\n CardHeader,\n Input,\n Label,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n LOG_STREAM_EVENT_TYPES,\n type LogStreamDestination,\n type LogStreamDestinationInput,\n type LogStreamEventType,\n type LogStreamProvider,\n} from \"../types\";\nimport {\n useLogStreamDestinationActions,\n useLogStreamDestinations,\n} from \"../hooks/useObservability\";\n\ninterface DestinationFormState {\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n secret: string;\n configText: string;\n}\n\nconst DEFAULT_EVENT_FILTERS: LogStreamEventType[] = [\n \"RUN_FAILED\",\n \"NODE_FAILED\",\n \"LOG_ERROR\",\n];\n\nconst PROVIDERS: LogStreamProvider[] = [\"WEBHOOK\", \"SYSLOG\", \"SENTRY\"];\n\nfunction emptyForm(): DestinationFormState {\n return {\n name: \"\",\n provider: \"WEBHOOK\",\n endpoint: \"\",\n eventFilters: DEFAULT_EVENT_FILTERS,\n isEnabled: true,\n secret: \"\",\n configText: \"{}\",\n };\n}\n\nfunction formFromDestination(\n destination: LogStreamDestination,\n): DestinationFormState {\n return {\n name: destination.name,\n provider: destination.provider,\n endpoint: destination.endpoint,\n eventFilters: destination.eventFilters,\n isEnabled: destination.isEnabled,\n secret: \"\",\n configText: JSON.stringify(destination.config ?? {}, null, 2),\n };\n}\n\nfunction eventLabel(event: LogStreamEventType): string {\n return event\n .toLowerCase()\n .split(\"_\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction endpointPlaceholder(provider: LogStreamProvider): string {\n switch (provider) {\n case \"SYSLOG\":\n return \"logs.example.com:514\";\n case \"SENTRY\":\n return \"https://public@sentry.example/1\";\n case \"WEBHOOK\":\n return \"https://hooks.example.com/workflows\";\n }\n}\n\nfunction parseConfig(configText: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(configText || \"{}\");\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n return parsed as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction formToInput(\n form: DestinationFormState,\n): LogStreamDestinationInput | null {\n const config = parseConfig(form.configText);\n if (!config || !form.name.trim() || !form.endpoint.trim()) return null;\n return {\n name: form.name.trim(),\n provider: form.provider,\n endpoint: form.endpoint.trim(),\n eventFilters: form.eventFilters,\n isEnabled: form.isEnabled,\n config,\n ...(form.secret ? { secret: form.secret } : {}),\n };\n}\n\nexport function LogStreamingTab() {\n const tr = useTr();\n const { destinations, loading, error, refetch } = useLogStreamDestinations();\n const actions = useLogStreamDestinationActions();\n const [form, setForm] = useState<DestinationFormState>(emptyForm);\n const [editingId, setEditingId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n\n const editingDestination = useMemo(\n () => destinations.find((destination) => destination.id === editingId),\n [destinations, editingId],\n );\n\n useEffect(() => {\n if (editingDestination) setForm(formFromDestination(editingDestination));\n }, [editingDestination]);\n\n const resetForm = useCallback(() => {\n setForm(emptyForm());\n setEditingId(null);\n setShowForm(false);\n }, []);\n\n const save = useCallback(async () => {\n const input = formToInput(form);\n if (!input) {\n toast.error(\n tr(\n \"fluidgrids.settings.logStreaming.invalidForm\",\n \"Enter a name, endpoint, and valid JSON configuration.\",\n ),\n );\n return;\n }\n const result = editingId\n ? await actions.update(editingId, input)\n : await actions.create(input);\n if (!result?.success) {\n toast.error(\n result?.message ||\n tr(\n \"fluidgrids.settings.logStreaming.saveFailed\",\n \"Could not save log streaming destination.\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.saved\",\n \"Log streaming destination saved.\",\n ),\n );\n resetForm();\n await refetch();\n }, [actions, editingId, form, refetch, resetForm, tr]);\n\n const remove = useCallback(\n async (destination: LogStreamDestination) => {\n if (!window.confirm(`Delete “${destination.name}”?`)) return;\n const result = await actions.remove(destination.id);\n if (!result?.success) {\n toast.error(\n result?.message ||\n tr(\n \"fluidgrids.settings.logStreaming.deleteFailed\",\n \"Could not delete destination.\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.deleted\",\n \"Log streaming destination deleted.\",\n ),\n );\n if (editingId === destination.id) resetForm();\n await refetch();\n },\n [actions, editingId, refetch, resetForm, tr],\n );\n\n const sendTest = useCallback(\n async (destination: LogStreamDestination) => {\n const result = await actions.test(destination.id);\n if (!result) return;\n if (result.success) {\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.testSucceeded\",\n \"Test event delivered.\",\n ),\n );\n } else {\n toast.error(\n result.message ||\n tr(\n \"fluidgrids.settings.logStreaming.testFailed\",\n \"Test event could not be delivered.\",\n ),\n );\n }\n await refetch();\n },\n [actions, refetch, tr],\n );\n\n const toggleEvent = (event: LogStreamEventType) => {\n setForm((current) => ({\n ...current,\n eventFilters: current.eventFilters.includes(event)\n ? current.eventFilters.filter((item) => item !== event)\n : [...current.eventFilters, event],\n }));\n };\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"fluidgrids.settings.logStreaming.title\", \"Log streaming\")}\n </h2>\n <p className=\"mt-1 max-w-2xl text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.description\",\n \"Send workflow run and node events to workspace-managed observability destinations. Secrets are write-only and never returned.\",\n )}\n </p>\n </div>\n <Button\n onClick={() => {\n setForm(emptyForm());\n setEditingId(null);\n setShowForm(true);\n }}\n disabled={actions.loading}\n >\n <Icon icon=\"mdi:plus\" className=\"mr-1\" width={16} />\n {tr(\"fluidgrids.settings.logStreaming.add\", \"Add destination\")}\n </Button>\n </div>\n\n {error && (\n <div\n role=\"alert\"\n className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle p-4 text-sm text-status-error-text\"\n >\n {error.message}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-3\"\n onClick={() => void refetch()}\n >\n {tr(\"fluidgrids.settings.logStreaming.retry\", \"Retry\")}\n </Button>\n </div>\n )}\n\n {showForm && (\n <Card className=\"border-border-secondary bg-background-secondary\">\n <CardHeader>\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"font-medium text-text-primary\">\n {editingId\n ? tr(\n \"fluidgrids.settings.logStreaming.edit\",\n \"Edit destination\",\n )\n : tr(\n \"fluidgrids.settings.logStreaming.new\",\n \"New destination\",\n )}\n </h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={resetForm}>\n <Icon icon=\"mdi:close\" width={18} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-name\">\n {tr(\"fluidgrids.settings.logStreaming.name\", \"Name\")}\n </Label>\n <Input\n id=\"log-stream-name\"\n value={form.name}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n name: event.target.value,\n }))\n }\n placeholder=\"Production error stream\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-provider\">\n {tr(\"fluidgrids.settings.logStreaming.provider\", \"Provider\")}\n </Label>\n <select\n id=\"log-stream-provider\"\n value={form.provider}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n provider: event.target.value as LogStreamProvider,\n endpoint: \"\",\n }))\n }\n className=\"w-full rounded-md border border-border-secondary bg-background-primary px-3 py-2 text-sm text-text-primary\"\n >\n {PROVIDERS.map((provider) => (\n <option key={provider} value={provider}>\n {provider}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-endpoint\">\n {tr(\"fluidgrids.settings.logStreaming.endpoint\", \"Endpoint\")}\n </Label>\n <Input\n id=\"log-stream-endpoint\"\n value={form.endpoint}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n endpoint: event.target.value,\n }))\n }\n placeholder={endpointPlaceholder(form.provider)}\n type={\n form.provider === \"WEBHOOK\" || form.provider === \"SENTRY\"\n ? \"url\"\n : \"text\"\n }\n />\n </div>\n {form.provider === \"WEBHOOK\" && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-secret\">\n {tr(\n \"fluidgrids.settings.logStreaming.secret\",\n \"Signing secret\",\n )}\n </Label>\n <Input\n id=\"log-stream-secret\"\n value={form.secret}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n secret: event.target.value,\n }))\n }\n placeholder={\n editingId\n ? \"Leave blank to keep the current secret\"\n : \"Enter a signing secret\"\n }\n type=\"password\"\n autoComplete=\"new-password\"\n />\n </div>\n )}\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-config\">\n {tr(\n \"fluidgrids.settings.logStreaming.config\",\n \"Provider configuration (JSON)\",\n )}\n </Label>\n <textarea\n id=\"log-stream-config\"\n value={form.configText}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n configText: event.target.value,\n }))\n }\n className=\"min-h-24 w-full rounded-md border border-border-secondary bg-background-primary px-3 py-2 font-mono text-xs text-text-primary\"\n spellCheck={false}\n />\n </div>\n <fieldset className=\"space-y-2\">\n <legend className=\"text-sm font-medium text-text-primary\">\n {tr(\n \"fluidgrids.settings.logStreaming.events\",\n \"Events to stream\",\n )}\n </legend>\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-4\">\n {LOG_STREAM_EVENT_TYPES.map((event) => (\n <label\n key={event}\n className=\"flex items-center gap-2 text-sm text-text-secondary\"\n >\n <input\n type=\"checkbox\"\n checked={form.eventFilters.includes(event)}\n onChange={() => toggleEvent(event)}\n className=\"size-4 rounded border-border-secondary accent-action-primary-bg\"\n />\n {eventLabel(event)}\n </label>\n ))}\n </div>\n </fieldset>\n <label className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <input\n type=\"checkbox\"\n checked={form.isEnabled}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n isEnabled: event.target.checked,\n }))\n }\n className=\"size-4 rounded border-border-secondary accent-action-primary-bg\"\n />\n {tr(\n \"fluidgrids.settings.logStreaming.enabled\",\n \"Destination enabled\",\n )}\n </label>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={resetForm}>\n {tr(\"fluidgrids.settings.logStreaming.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={() => void save()} disabled={actions.loading}>\n {actions.loading\n ? tr(\"fluidgrids.settings.logStreaming.saving\", \"Saving…\")\n : tr(\n \"fluidgrids.settings.logStreaming.save\",\n \"Save destination\",\n )}\n </Button>\n </div>\n </CardContent>\n </Card>\n )}\n\n <div className=\"space-y-3\">\n {loading && destinations.length === 0 && (\n <div className=\"rounded-lg border border-border-secondary bg-background-secondary p-6 text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.loading\",\n \"Loading destinations…\",\n )}\n </div>\n )}\n {!loading && destinations.length === 0 && (\n <div className=\"rounded-lg border border-dashed border-border-secondary bg-background-secondary p-8 text-center\">\n <Icon\n icon=\"mdi:transit-connection-variant\"\n className=\"mx-auto mb-3 text-text-secondary\"\n width={32}\n />\n <p className=\"font-medium text-text-primary\">\n {tr(\n \"fluidgrids.settings.logStreaming.emptyTitle\",\n \"No log destinations yet\",\n )}\n </p>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.emptyDescription\",\n \"Add a webhook, syslog target, or Sentry DSN to start streaming events.\",\n )}\n </p>\n </div>\n )}\n {destinations.map((destination) => (\n <Card\n key={destination.id}\n className=\"border-border-secondary bg-background-secondary\"\n >\n <CardContent className=\"flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"font-medium text-text-primary\">\n {destination.name}\n </h3>\n <span className=\"rounded-full bg-background-tertiary px-2 py-0.5 text-xs text-text-secondary\">\n {destination.provider}\n </span>\n <span\n className={\n destination.isEnabled\n ? \"text-xs text-status-success-text\"\n : \"text-xs text-text-secondary\"\n }\n >\n {destination.isEnabled\n ? tr(\n \"fluidgrids.settings.logStreaming.enabledBadge\",\n \"Enabled\",\n )\n : tr(\n \"fluidgrids.settings.logStreaming.disabledBadge\",\n \"Disabled\",\n )}\n </span>\n </div>\n <p className=\"mt-1 truncate text-sm text-text-secondary\">\n {destination.endpoint}\n </p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {destination.eventFilters.length > 0\n ? destination.eventFilters.map(eventLabel).join(\", \")\n : tr(\n \"fluidgrids.settings.logStreaming.allEvents\",\n \"All events\",\n )}\n {destination.hasSecret && \" · Secret configured\"}\n </p>\n {destination.lastDispatchError && (\n <p className=\"mt-2 text-xs text-status-error-text\">\n {destination.lastDispatchError}\n </p>\n )}\n </div>\n <div className=\"flex shrink-0 flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void sendTest(destination)}\n disabled={actions.loading}\n >\n <Icon\n icon=\"mdi:send-check-outline\"\n className=\"mr-1\"\n width={15}\n />\n {tr(\"fluidgrids.settings.logStreaming.test\", \"Send test\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setEditingId(destination.id);\n setShowForm(true);\n }}\n disabled={actions.loading}\n >\n {tr(\"fluidgrids.settings.logStreaming.editButton\", \"Edit\")}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void remove(destination)}\n disabled={actions.loading}\n >\n <Icon\n icon=\"mdi:trash-can-outline\"\n className=\"text-status-error-text\"\n width={17}\n />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.settings.logStreaming.delete\", \"Delete\")}\n </span>\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FluidGridsProvider, Card } from './chunk-
|
|
1
|
+
import { FluidGridsProvider, Card } from './chunk-XF7QA3QT.js';
|
|
2
2
|
import { Input } from './chunk-P5PKRQAO.js';
|
|
3
3
|
import { Button } from './chunk-DBOMRIP5.js';
|
|
4
4
|
import { cn } from './chunk-3ZYUGTIT.js';
|
|
5
|
-
import { useWorkflowDefinition } from './chunk-
|
|
5
|
+
import { useWorkflowDefinition } from './chunk-Q4RPP67K.js';
|
|
6
6
|
import { useFlowStore } from './chunk-YMD3T6J2.js';
|
|
7
7
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
8
8
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
@@ -537,5 +537,5 @@ function WorkflowSearchRedirect() {
|
|
|
537
537
|
}
|
|
538
538
|
|
|
539
539
|
export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };
|
|
540
|
-
//# sourceMappingURL=chunk-
|
|
541
|
-
//# sourceMappingURL=chunk-
|
|
540
|
+
//# sourceMappingURL=chunk-5PZDLMC4.js.map
|
|
541
|
+
//# sourceMappingURL=chunk-5PZDLMC4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/builder/components/ui/sonner.tsx","../src/components/WorkflowBuilderCore.tsx","../src/components/WorkflowBuilder.tsx","../src/pages/WorkflowSearchRedirect.tsx"],"names":["Sonner","jsx","jsxs"],"mappings":"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","file":"chunk-MTWEYC2W.js","sourcesContent":["import { useTheme } from \"@burdenoff/fe-libs/shared/hooks/shell\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { resolvedTheme = \"light\" } = useTheme();\n\n return (\n <Sonner\n theme={resolvedTheme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useCallback, useEffect, useState, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n Handle,\n Position,\n type NodeTypes,\n MarkerType,\n type NodeProps,\n useReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport \"@xyflow/react/dist/style.css\";\n\nimport { useFlowStore } from \"../builder/stores/flow-store\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Card } from \"../ui/card\";\nimport { cn } from \"../utils/cn\";\nimport type { WorkflowData, FlowNode } from \"../types\";\nimport { ArrowLeft, Play, Save, Trash2 } from \"lucide-react\";\nimport { Toaster } from \"../builder/components/ui/sonner\";\nimport { useTr } from \"../hooks/useTr\";\n\nexport interface WorkflowBuilderCoreProps {\n /** Initial workflow data to render */\n workflow?: WorkflowData;\n /** Readonly mode - disables editing */\n readonly?: boolean;\n /** Hide the header toolbar */\n hideHeader?: boolean;\n /** Hide the sidebar */\n hideSidebar?: boolean;\n /** Hide the logs panel */\n hideLogsPanel?: boolean;\n /** Callback when workflow is saved */\n onSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onExecute?: (runId: string) => void;\n /** Callback when a node is clicked */\n onNodeClick?: (node: FlowNode) => void;\n /** Callback when back button is clicked */\n onBack?: () => void;\n /** Custom className */\n className?: string;\n}\n\n// Default edge options\nconst defaultEdgeOptions = {\n type: \"smoothstep\",\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 21,\n height: 21,\n },\n style: {\n stroke: \"#888\",\n },\n};\n\n// Handle styles\nconst handleStyle: React.CSSProperties = {\n width: 10,\n height: 10,\n background: \"#3b82f6\", // blue-500\n border: \"2px solid white\",\n};\n\n// Base node styles\nconst baseNodeStyle: React.CSSProperties = {\n padding: \"8px 16px\",\n borderRadius: \"8px\",\n fontWeight: 500,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n position: \"relative\",\n color: \"white\",\n};\n\n// Node type → colour mapping\nconst NODE_COLORS: Record<string, string> = {\n \"trigger:api\": \"#22c55e\",\n end: \"#ef4444\",\n \"internal:if\": \"#8b5cf6\",\n \"internal:switch\": \"#8b5cf6\",\n \"internal:loop\": \"#f59e0b\",\n \"internal:merge\": \"#6366f1\",\n \"internal:set\": \"#3b82f6\",\n \"internal:filter\": \"#06b6d4\",\n \"internal:aggregate\": \"#0891b2\",\n \"internal:wait\": \"#64748b\",\n \"internal:noop\": \"#94a3b8\",\n \"internal:http\": \"#f97316\",\n default: \"#3b82f6\",\n};\n\nfunction getNodeColor(type: string): string {\n return NODE_COLORS[type] ?? NODE_COLORS.default;\n}\n\n// Trigger Node component - has only source handle (bottom)\nfunction TriggerNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"trigger:api\") }}>\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.triggerNodeLabel\",\n \"API Trigger\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// End Node component - has only target handle (top)\nfunction EndNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"end\") }}>\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\"fluidgrids.components.workflowBuilderCore.endNodeLabel\", \"End\")}\n </div>\n );\n}\n\n// Action Node component - has both source (bottom) and target (top) handles\nfunction ActionNode({ data, type }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n const color = getNodeColor(type || \"default\");\n return (\n <div\n style={{\n ...baseNodeStyle,\n background: color,\n minWidth: 120,\n textAlign: \"center\",\n }}\n >\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.actionNodeLabel\",\n \"Action\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// Define node types\nconst NODE_TYPES: NodeTypes = {\n \"trigger:api\": TriggerNode,\n end: EndNode,\n \"internal:if\": ActionNode,\n \"internal:switch\": ActionNode,\n \"internal:loop\": ActionNode,\n \"internal:merge\": ActionNode,\n \"internal:set\": ActionNode,\n \"internal:filter\": ActionNode,\n \"internal:aggregate\": ActionNode,\n \"internal:wait\": ActionNode,\n \"internal:noop\": ActionNode,\n \"internal:http\": ActionNode,\n \"internal:subworkflow\": ActionNode,\n default: ActionNode,\n};\n\n// Counter for unique node ids\nlet nodeIdCounter = 0;\n\nfunction FlowBuilderInner({\n workflow,\n readonly = false,\n hideHeader = false,\n hideSidebar = false,\n hideLogsPanel = false,\n onSave,\n onExecute,\n onNodeClick,\n onBack,\n className,\n}: WorkflowBuilderCoreProps) {\n const reactFlowInstance = useReactFlow();\n const tr = useTr();\n\n const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);\n const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);\n\n const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(\n useShallow((s) => [\n s.workflow.nodes,\n s.workflow.edges,\n s.actions.nodes.onNodesChange,\n s.actions.edges.onEdgesChange,\n s.actions.edges.onConnect,\n ]),\n );\n\n const [workflowName, setWorkflowName] = useState(\n workflow?.name || \"Untitled Workflow\",\n );\n\n // Selected node for properties panel\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n // Ref for the ReactFlow wrapper (needed for drop position calculation)\n const reactFlowWrapper = useRef<HTMLDivElement>(null);\n\n // Initialize workflow on mount\n useEffect(() => {\n resetWorkflow();\n if (workflow) {\n setWorkflow(workflow);\n setWorkflowName(workflow.name || \"Untitled Workflow\");\n }\n }, [workflow, resetWorkflow, setWorkflow]);\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setWorkflowName(e.target.value);\n setWorkflow({ name: e.target.value });\n };\n\n const handleSave = () => {\n const savedWorkflow: WorkflowData = {\n id: workflow?.id || \"\",\n workflowKey: workflow?.workflowKey || \"\",\n name: workflowName,\n version: workflow?.version || \"1\",\n alias: workflow?.alias,\n nodes: nodes as FlowNode[],\n edges,\n sidebar: {\n active: \"none\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n onSave?.(savedWorkflow);\n };\n\n const handleExecute = () => {\n // Generate a run ID and trigger execution\n const runId = `run-${Date.now()}`;\n onExecute?.(runId);\n };\n\n // ---- Node click → select in sidebar ----\n const handleNodeClick = useCallback(\n (\n _event: React.MouseEvent,\n node: { id: string; [key: string]: unknown },\n ) => {\n setSelectedNodeId(node.id);\n onNodeClick?.(node as unknown as FlowNode);\n },\n [onNodeClick],\n );\n\n // Deselect when clicking the pane\n const handlePaneClick = useCallback(() => {\n setSelectedNodeId(null);\n }, []);\n\n // ---- Drag-and-drop from external palette ----\n const handleDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n }, []);\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault();\n\n const raw = event.dataTransfer.getData(\"application/json\");\n if (!raw) return;\n\n let payload: { id?: string; type?: string; label?: string };\n try {\n payload = JSON.parse(raw);\n } catch {\n return;\n }\n\n const nodeType = payload.type || payload.id || \"default\";\n const label = payload.label || nodeType;\n\n // Calculate drop position in flow coordinates\n const bounds = reactFlowWrapper.current?.getBoundingClientRect();\n if (!bounds) return;\n\n const position = reactFlowInstance.screenToFlowPosition({\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top,\n });\n\n nodeIdCounter += 1;\n const newNodeId = `${nodeType}-${Date.now()}-${nodeIdCounter}`;\n const newNode: FlowNode = {\n id: newNodeId,\n type: nodeType,\n position,\n data: { label },\n };\n\n // Append to the existing nodes via the store\n const currentNodes = useFlowStore.getState().workflow.nodes;\n setNodes([...currentNodes, newNode]);\n },\n [reactFlowInstance, setNodes],\n );\n\n // ---- Selected node helpers ----\n const selectedNode = selectedNodeId\n ? (nodes.find((n) => n.id === selectedNodeId) as FlowNode | undefined)\n : null;\n\n const handleSelectedNodeLabelChange = useCallback(\n (newLabel: string) => {\n if (!selectedNodeId) return;\n const currentNodes = useFlowStore.getState().workflow.nodes;\n const updated = currentNodes.map((n) =>\n n.id === selectedNodeId\n ? { ...n, data: { ...n.data, label: newLabel } }\n : n,\n );\n setNodes(updated);\n },\n [selectedNodeId, setNodes],\n );\n\n const handleDeleteSelectedNode = useCallback(() => {\n if (!selectedNode) return;\n if (selectedNode.deletable === false) return; // can't delete trigger/end\n deleteNode(selectedNode);\n setSelectedNodeId(null);\n }, [selectedNode, deleteNode]);\n\n return (\n <div\n className={cn(\"flex flex-col flex-1 h-full w-full min-h-0\", className)}\n >\n {/* Header */}\n {!hideHeader && (\n <Card className=\"h-14 shrink-0 border-0 rounded-none bg-gradient-to-r from-primary/20 to-transparent p-2 flex items-center justify-between border-b\">\n <div className=\"flex items-center gap-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </Button>\n )}\n <Input\n className=\"font-semibold max-w-[300px]\"\n value={workflowName}\n onChange={handleNameChange}\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder\",\n \"Workflow Name\",\n )}\n disabled={readonly}\n />\n </div>\n\n {!readonly && (\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleSave}>\n <Save className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.save\", \"Save\")}\n </Button>\n <Button size=\"sm\" onClick={handleExecute}>\n <Play className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.run\", \"Run\")}\n </Button>\n </div>\n )}\n </Card>\n )}\n\n {/* Main content */}\n <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n {/* Canvas */}\n <div className=\"flex-1 h-full relative\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readonly ? undefined : onNodesChange}\n onEdgesChange={readonly ? undefined : onEdgesChange}\n onConnect={readonly ? undefined : onConnect}\n onNodeClick={readonly ? undefined : handleNodeClick}\n onPaneClick={handlePaneClick}\n onDragOver={readonly ? undefined : handleDragOver}\n onDrop={readonly ? undefined : handleDrop}\n nodeTypes={NODE_TYPES}\n defaultEdgeOptions={defaultEdgeOptions}\n fitView\n snapToGrid\n snapGrid={[16, 16]}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={readonly ? null : \"Backspace\"}\n >\n <Background gap={24} />\n <Controls />\n <MiniMap />\n </ReactFlow>\n </div>\n\n {/* Sidebar — Node Properties */}\n {!hideSidebar && !readonly && (\n <div className=\"w-60 shrink-0 border-l bg-card overflow-y-auto\">\n <div className=\"p-4 border-b\">\n <div className=\"text-sm font-semibold\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodePropertiesHeading\",\n \"Node Properties\",\n )}\n </div>\n </div>\n\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node ID */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeIdLabel\",\n \"Node ID\",\n )}\n </label>\n <code className=\"block text-xs bg-muted px-2 py-1 rounded font-mono break-all\">\n {selectedNode.id}\n </code>\n </div>\n\n {/* Node Type */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeTypeLabel\",\n \"Type\",\n )}\n </label>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-block w-3 h-3 rounded-full shrink-0\"\n style={{\n background: getNodeColor(\n selectedNode.type || \"default\",\n ),\n }}\n />\n <code className=\"text-xs font-mono\">\n {selectedNode.type}\n </code>\n </div>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelLabel\",\n \"Label\",\n )}\n </label>\n <Input\n value={\n (selectedNode.data as { label?: string })?.label ?? \"\"\n }\n onChange={(e) =>\n handleSelectedNodeLabelChange(e.target.value)\n }\n className=\"text-sm\"\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder\",\n \"Node label\",\n )}\n />\n </div>\n\n {/* Position */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.positionLabel\",\n \"Position\",\n )}\n </label>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-muted-foreground\">\n <div>\n X:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.x)}\n </span>\n </div>\n <div>\n Y:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.y)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Connected edges */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.connectionsLabel\",\n \"Connections\",\n )}\n </label>\n <div className=\"text-xs text-muted-foreground\">\n {(() => {\n const inbound = edges.filter(\n (e) => e.target === selectedNode.id,\n );\n const outbound = edges.filter(\n (e) => e.source === selectedNode.id,\n );\n return (\n <>\n <div>\n {inbound.length} inbound, {outbound.length} outbound\n </div>\n </>\n );\n })()}\n </div>\n </div>\n\n {/* Delete */}\n {selectedNode.deletable !== false && (\n <div className=\"pt-2 border-t\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={handleDeleteSelectedNode}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {tr(\n \"fluidgrids.components.workflowBuilderCore.deleteNode\",\n \"Delete Node\",\n )}\n </Button>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4\">\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.noSelectionHint\",\n \"Click a node on the canvas to view and edit its properties.\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.dragPaletteHint\",\n \"Drag nodes from the palette on the left to add them to the workflow.\",\n )}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Logs panel placeholder */}\n {!hideLogsPanel && (\n <div className=\"h-32 border-t bg-card p-2\">\n <div className=\"text-sm font-medium mb-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsHeading\",\n \"Execution Logs\",\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsEmpty\",\n \"Execution logs will appear here when you run the workflow\",\n )}\n </p>\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowBuilderCore(props: WorkflowBuilderCoreProps) {\n return (\n <ReactFlowProvider>\n <FlowBuilderInner {...props} />\n <Toaster richColors position=\"bottom-center\" duration={2000} />\n </ReactFlowProvider>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport {\n WorkflowBuilderCore,\n type WorkflowBuilderCoreProps,\n} from \"./WorkflowBuilderCore\";\nimport type { WorkflowData } from \"../types\";\n\nexport interface WorkflowBuilderProps extends Omit<\n WorkflowBuilderCoreProps,\n \"workflow\"\n> {\n /** Workflow ID to load */\n workflowId?: string;\n /** Workflow version to load */\n workflowVersion?: string;\n /** Initial workflow data (bypasses API fetch) */\n initialWorkflow?: WorkflowData;\n /** Workspace API Gateway URL */\n apiGatewayUrl?: string;\n /** Global API Gateway URL (for store operations) */\n globalApiUrl?: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current tenant ID */\n tenantId?: string;\n /** Organization ID */\n organizationId?: string;\n /** Optional: Provide your own workspace Apollo client */\n workspaceClient?: ApolloClient;\n /** Optional: Provide your own global Apollo client */\n globalClient?: ApolloClient;\n}\n\n/**\n * WorkflowBuilder - Standalone workflow builder component with Apollo client support\n *\n * Use this component when you want to embed the workflow builder in any React app.\n * You can either:\n * 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended\n * 2. Provide URLs and let the component create clients internally\n *\n * @example Dual Client Injection (Recommended)\n * ```tsx\n * import { createFluidGridsClients } from '@fluidgrids/fe-sdk';\n *\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'ws-123',\n * });\n *\n * <WorkflowBuilder\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n *\n * @example URL-based (Simpler, less flexible)\n * ```tsx\n * <WorkflowBuilder\n * apiGatewayUrl=\"http://localhost:4000/workspaces/graphql\"\n * globalApiUrl=\"http://localhost:4000/global/graphql\"\n * authToken={token}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n */\nexport function WorkflowBuilder({\n workflowId,\n workflowVersion,\n initialWorkflow,\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n ...coreProps\n}: WorkflowBuilderProps) {\n // If initialWorkflow is provided, use it directly\n // Otherwise, the workflow will need to be loaded from the API\n const workflow =\n initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);\n\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n globalApiUrl={globalApiUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n organizationId={organizationId}\n workspaceClient={workspaceClient}\n globalClient={globalClient}\n >\n <WorkflowBuilderCore workflow={workflow} {...coreProps} />\n </FluidGridsProvider>\n );\n}\n\nfunction createDefaultWorkflow(id?: string, version?: string): WorkflowData {\n return {\n id: id || `workflow-${Date.now()}`,\n workflowKey: id || `workflow-${Date.now()}`,\n name: \"Untitled Workflow\",\n version: version || \"1\",\n nodes: [],\n edges: [],\n sidebar: {\n active: \"store-browse\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n}\n","import { Navigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { useWorkflowDefinition } from \"../hooks/useWorkflows\";\n\n/**\n * Global search indexes WorkflowDefinition by its database id, but the\n * builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +\n * version. This page bridges the two: it resolves the id to its current\n * workflowKey/version and redirects there.\n */\nexport function WorkflowSearchRedirect() {\n const { id } = useParams<{ id: string }>();\n const { workflow, loading, error } = useWorkflowDefinition(undefined, id);\n\n if (loading) {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Icon icon=\"svg-spinners:ring-resize\" className=\"size-4\" />\n Opening workflow…\n </div>\n );\n }\n\n if (error || !workflow) {\n return <Navigate to=\"../list\" replace />;\n }\n\n return (\n <Navigate\n to={`../workflow/${workflow.workflowKey}/${workflow.version}`}\n replace\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder/components/ui/sonner.tsx","../src/components/WorkflowBuilderCore.tsx","../src/components/WorkflowBuilder.tsx","../src/pages/WorkflowSearchRedirect.tsx"],"names":["Sonner","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,IAAM,OAAA,GAAU,CAAC,EAAE,GAAG,OAAM,KAAoB;AAC9C,EAAA,MAAM,EAAE,aAAA,GAAgB,OAAA,EAAQ,GAAI,QAAA,EAAS;AAE7C,EAAA,uBACE,GAAA;AAAA,IAACA,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,aAAA;AAAA,MACP,SAAA,EAAU,eAAA;AAAA,MACV,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EACE,uIAAA;AAAA,UACF,WAAA,EAAa,sCAAA;AAAA,UACb,YAAA,EACE,kEAAA;AAAA,UACF,YAAA,EACE;AAAA;AACJ,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;ACyBA,IAAM,kBAAA,GAAqB;AAAA,EACzB,IAAA,EAAM,YAAA;AAAA,EACN,SAAA,EAAW;AAAA,IACT,MAAM,UAAA,CAAW,WAAA;AAAA,IACjB,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAGA,IAAM,WAAA,GAAmC;AAAA,EACvC,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,MAAA,EAAQ;AACV,CAAA;AAGA,IAAM,aAAA,GAAqC;AAAA,EACzC,OAAA,EAAS,UAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,GAAA;AAAA,EACZ,SAAA,EACE,uEAAA;AAAA,EACF,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAGA,IAAM,WAAA,GAAsC;AAAA,EAC1C,aAAA,EAAe,SAAA;AAAA,EACf,GAAA,EAAK,SAAA;AAAA,EACL,aAAA,EAAe,SAAA;AAAA,EACf,iBAAA,EAAmB,SAAA;AAAA,EACnB,eAAA,EAAiB,SAAA;AAAA,EACjB,gBAAA,EAAkB,SAAA;AAAA,EAClB,cAAA,EAAgB,SAAA;AAAA,EAChB,iBAAA,EAAmB,SAAA;AAAA,EACnB,oBAAA,EAAsB,SAAA;AAAA,EACtB,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,SAAA;AAAA,EACjB,OAAA,EAAS;AACX,CAAA;AAEA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,WAAA,CAAY,IAAI,CAAA,IAAK,WAAA,CAAY,OAAA;AAC1C;AAGA,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAc;AACxC,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,QAAS,IAAA,CAA4B,KAAA;AAC3C,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,eAAe,UAAA,EAAY,YAAA,CAAa,aAAa,CAAA,EAAE,EACrE,QAAA,EAAA;AAAA,IAAA,KAAA,IACC,EAAA;AAAA,MACE,4DAAA;AAAA,MACA;AAAA,KACF;AAAA,oBACFC,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa;AAAA,GAAA,EACvE,CAAA;AAEJ;AAGA,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAAc;AACpC,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,QAAS,IAAA,CAA4B,KAAA;AAC3C,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,eAAe,UAAA,EAAY,YAAA,CAAa,KAAK,CAAA,EAAE,EAC9D,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,UAAO,IAAA,EAAK,QAAA,EAAS,UAAU,QAAA,CAAS,GAAA,EAAK,OAAO,WAAA,EAAa,CAAA;AAAA,IACjE,KAAA,IACC,EAAA,CAAG,wDAAA,EAA0D,KAAK;AAAA,GAAA,EACtE,CAAA;AAEJ;AAGA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,IAAA,EAAK,EAAc;AAC7C,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,QAAS,IAAA,CAA4B,KAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,IAAQ,SAAS,CAAA;AAC5C,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,GAAG,aAAA;AAAA,QACH,UAAA,EAAY,KAAA;AAAA,QACZ,QAAA,EAAU,GAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACb;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,UAAO,IAAA,EAAK,QAAA,EAAS,UAAU,QAAA,CAAS,GAAA,EAAK,OAAO,WAAA,EAAa,CAAA;AAAA,QACjE,KAAA,IACC,EAAA;AAAA,UACE,2DAAA;AAAA,UACA;AAAA,SACF;AAAA,wBACFA,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa;AAAA;AAAA;AAAA,GACvE;AAEJ;AAGA,IAAM,UAAA,GAAwB;AAAA,EAC5B,aAAA,EAAe,WAAA;AAAA,EACf,GAAA,EAAK,OAAA;AAAA,EACL,aAAA,EAAe,UAAA;AAAA,EACf,iBAAA,EAAmB,UAAA;AAAA,EACnB,eAAA,EAAiB,UAAA;AAAA,EACjB,gBAAA,EAAkB,UAAA;AAAA,EAClB,cAAA,EAAgB,UAAA;AAAA,EAChB,iBAAA,EAAmB,UAAA;AAAA,EACnB,oBAAA,EAAsB,UAAA;AAAA,EACtB,eAAA,EAAiB,UAAA;AAAA,EACjB,eAAA,EAAiB,UAAA;AAAA,EACjB,eAAA,EAAiB,UAAA;AAAA,EACjB,sBAAA,EAAwB,UAAA;AAAA,EACxB,OAAA,EAAS;AACX,CAAA;AAGA,IAAI,aAAA,GAAgB,CAAA;AAEpB,SAAS,gBAAA,CAAiB;AAAA,EACxB,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa,KAAA;AAAA,EACb,WAAA,GAAc,KAAA;AAAA,EACd,aAAA,GAAgB,KAAA;AAAA,EAChB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,oBAAoB,YAAA,EAAa;AACvC,EAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,EAAA,MAAM,cAAc,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,WAAW,CAAA;AAC7D,EAAA,MAAM,gBAAgB,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,aAAa,CAAA;AACjE,EAAA,MAAM,aAAa,YAAA,CAAa,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,UAAU,CAAA;AACjE,EAAA,MAAM,WAAW,YAAA,CAAa,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAE7D,EAAA,MAAM,CAAC,KAAA,EAAO,KAAA,EAAO,aAAA,EAAe,aAAA,EAAe,SAAS,CAAA,GAAI,YAAA;AAAA,IAC9D,UAAA,CAAW,CAAC,CAAA,KAAM;AAAA,MAChB,EAAE,QAAA,CAAS,KAAA;AAAA,MACX,EAAE,QAAA,CAAS,KAAA;AAAA,MACX,CAAA,CAAE,QAAQ,KAAA,CAAM,aAAA;AAAA,MAChB,CAAA,CAAE,QAAQ,KAAA,CAAM,aAAA;AAAA,MAChB,CAAA,CAAE,QAAQ,KAAA,CAAM;AAAA,KACjB;AAAA,GACH;AAEA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA;AAAA,IACtC,UAAU,IAAA,IAAQ;AAAA,GACpB;AAGA,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAwB,IAAI,CAAA;AAGxE,EAAA,MAAM,gBAAA,GAAmB,OAAuB,IAAI,CAAA;AAGpD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,EAAc;AACd,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,MAAA,eAAA,CAAgB,QAAA,CAAS,QAAQ,mBAAmB,CAAA;AAAA,IACtD;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,aAAA,EAAe,WAAW,CAAC,CAAA;AAEzC,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AACnE,IAAA,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9B,IAAA,WAAA,CAAY,EAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,aAAA,GAA8B;AAAA,MAClC,EAAA,EAAI,UAAU,EAAA,IAAM,EAAA;AAAA,MACpB,WAAA,EAAa,UAAU,WAAA,IAAe,EAAA;AAAA,MACtC,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,UAAU,OAAA,IAAW,GAAA;AAAA,MAC9B,OAAO,QAAA,EAAU,KAAA;AAAA,MACjB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA,UACN,cAAA,EAAgB;AAAA,YACd,YAAA,EAAc;AAAA;AAChB;AACF;AACF,KACF;AACA,IAAA,MAAA,GAAS,aAAa,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAE1B,IAAA,MAAM,KAAA,GAAQ,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAC/B,IAAA,SAAA,GAAY,KAAK,CAAA;AAAA,EACnB,CAAA;AAGA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CACE,QACA,IAAA,KACG;AACH,MAAA,iBAAA,CAAkB,KAAK,EAAE,CAAA;AACzB,MAAA,WAAA,GAAc,IAA2B,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAGA,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,CAAC,KAAA,KAA2B;AAC7D,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,KAAA,CAAM,aAAa,UAAA,GAAa,MAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,KAAA,KAA2B;AAC1B,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,YAAA,CAAa,OAAA,CAAQ,kBAAkB,CAAA;AACzD,MAAA,IAAI,CAAC,GAAA,EAAK;AAEV,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,EAAA,IAAM,SAAA;AAC/C,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,QAAA;AAG/B,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,OAAA,EAAS,qBAAA,EAAsB;AAC/D,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,MAAA,MAAM,QAAA,GAAW,kBAAkB,oBAAA,CAAqB;AAAA,QACtD,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,IAAA;AAAA,QAC1B,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO;AAAA,OAC3B,CAAA;AAED,MAAA,aAAA,IAAiB,CAAA;AACjB,MAAA,MAAM,SAAA,GAAY,GAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,GAAA,EAAK,IAAI,aAAa,CAAA,CAAA;AAC5D,MAAA,MAAM,OAAA,GAAoB;AAAA,QACxB,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA;AAAA,QACA,IAAA,EAAM,EAAE,KAAA;AAAM,OAChB;AAGA,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,QAAA,EAAS,CAAE,QAAA,CAAS,KAAA;AACtD,MAAA,QAAA,CAAS,CAAC,GAAG,YAAA,EAAc,OAAO,CAAC,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,mBAAmB,QAAQ;AAAA,GAC9B;AAGA,EAAA,MAAM,YAAA,GAAe,iBAChB,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,cAAc,CAAA,GAC1C,IAAA;AAEJ,EAAA,MAAM,6BAAA,GAAgC,WAAA;AAAA,IACpC,CAAC,QAAA,KAAqB;AACpB,MAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,QAAA,EAAS,CAAE,QAAA,CAAS,KAAA;AACtD,MAAA,MAAM,UAAU,YAAA,CAAa,GAAA;AAAA,QAAI,CAAC,CAAA,KAChC,CAAA,CAAE,EAAA,KAAO,cAAA,GACL,EAAE,GAAG,CAAA,EAAG,IAAA,EAAM,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,QAAA,IAAW,GAC7C;AAAA,OACN;AACA,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,gBAAgB,QAAQ;AAAA,GAC3B;AAEA,EAAA,MAAM,wBAAA,GAA2B,YAAY,MAAM;AACjD,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,IAAI,YAAA,CAAa,cAAc,KAAA,EAAO;AACtC,IAAA,UAAA,CAAW,YAAY,CAAA;AACvB,IAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,MAGpE,QAAA,EAAA;AAAA,QAAA,CAAC,UAAA,oBACA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,oIAAA,EACd,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,MAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAQ,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,MAAA,EAC3C,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAS,CAAA,EAChC,CAAA;AAAA,4BAEFA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,6BAAA;AAAA,gBACV,KAAA,EAAO,YAAA;AAAA,gBACP,QAAA,EAAU,gBAAA;AAAA,gBACV,WAAA,EAAa,EAAA;AAAA,kBACX,mEAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,QAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF,CAAA;AAAA,UAEC,CAAC,QAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,SAAS,UAAA,EAC3C,QAAA,EAAA;AAAA,8BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,cAC7B,EAAA,CAAG,kDAAkD,MAAM;AAAA,aAAA,EAC9D,CAAA;AAAA,4BACA,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAS,aAAA,EACzB,QAAA,EAAA;AAAA,8BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,cAC7B,EAAA,CAAG,iDAAiD,KAAK;AAAA,aAAA,EAC5D;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAIF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAEb,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAAyB,KAAK,gBAAA,EAC3C,QAAA,kBAAA,IAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA;AAAA,cACA,KAAA;AAAA,cACA,aAAA,EAAe,WAAW,MAAA,GAAY,aAAA;AAAA,cACtC,aAAA,EAAe,WAAW,MAAA,GAAY,aAAA;AAAA,cACtC,SAAA,EAAW,WAAW,MAAA,GAAY,SAAA;AAAA,cAClC,WAAA,EAAa,WAAW,MAAA,GAAY,eAAA;AAAA,cACpC,WAAA,EAAa,eAAA;AAAA,cACb,UAAA,EAAY,WAAW,MAAA,GAAY,cAAA;AAAA,cACnC,MAAA,EAAQ,WAAW,MAAA,GAAY,UAAA;AAAA,cAC/B,SAAA,EAAW,UAAA;AAAA,cACX,kBAAA;AAAA,cACA,OAAA,EAAO,IAAA;AAAA,cACP,UAAA,EAAU,IAAA;AAAA,cACV,QAAA,EAAU,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,cACjB,UAAA,EAAY,EAAE,eAAA,EAAiB,IAAA,EAAK;AAAA,cACpC,aAAA,EAAe,WAAW,IAAA,GAAO,WAAA;AAAA,cAEjC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,GAAA,EAAK,EAAA,EAAI,CAAA;AAAA,gCACrBA,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,gCACVA,IAAC,OAAA,EAAA,EAAQ;AAAA;AAAA;AAAA,WACX,EACF,CAAA;AAAA,UAGC,CAAC,WAAA,IAAe,CAAC,4BAChB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,cAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACZ,QAAA,EAAA,EAAA;AAAA,cACC,iEAAA;AAAA,cACA;AAAA,eAEJ,CAAA,EACF,CAAA;AAAA,YAEC,YAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAEb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,uDAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACb,uBAAa,EAAA,EAChB;AAAA,eAAA,EACF,CAAA;AAAA,mCAGC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,yDAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,GAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,4CAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACL,UAAA,EAAY,YAAA;AAAA,0BACV,aAAa,IAAA,IAAQ;AAAA;AACvB;AACF;AAAA,mBACF;AAAA,kCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACb,uBAAa,IAAA,EAChB;AAAA,iBAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,mCAGC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,0DAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACAA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EACG,YAAA,CAAa,IAAA,EAA6B,KAAA,IAAS,EAAA;AAAA,oBAEtD,UAAU,CAAC,CAAA,KACT,6BAAA,CAA8B,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,oBAE9C,SAAA,EAAU,SAAA;AAAA,oBACV,WAAA,EAAa,EAAA;AAAA,sBACX,gEAAA;AAAA,sBACA;AAAA;AACF;AAAA;AACF,eAAA,EACF,CAAA;AAAA,mCAGC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,yDAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,kCAAA,IAAA,CAAC,KAAA,EAAA,EAAI,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,oBACA,GAAA;AAAA,oCACHA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EACb,eAAK,KAAA,CAAM,YAAA,CAAa,QAAA,CAAS,CAAC,CAAA,EACrC;AAAA,mBAAA,EACF,CAAA;AAAA,uCACC,KAAA,EAAA,EAAI,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,oBACA,GAAA;AAAA,oCACHA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EACb,eAAK,KAAA,CAAM,YAAA,CAAa,QAAA,CAAS,CAAC,CAAA,EACrC;AAAA,mBAAA,EACF;AAAA,iBAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,mCAGC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,4DAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACX,QAAA,EAAA,CAAA,MAAM;AACN,kBAAA,MAAM,UAAU,KAAA,CAAM,MAAA;AAAA,oBACpB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,YAAA,CAAa;AAAA,mBACnC;AACA,kBAAA,MAAM,WAAW,KAAA,CAAM,MAAA;AAAA,oBACrB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,YAAA,CAAa;AAAA,mBACnC;AACA,kBAAA,uBACEA,GAAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,OAAA,CAAQ,MAAA;AAAA,oBAAO,YAAA;AAAA,oBAAW,QAAA,CAAS,MAAA;AAAA,oBAAO;AAAA,mBAAA,EAC7C,CAAA,EACF,CAAA;AAAA,gBAEJ,IAAG,EACL;AAAA,eAAA,EACF,CAAA;AAAA,cAGC,aAAa,SAAA,KAAc,KAAA,oBAC1BA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,kBAAA,IAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,aAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,SAAA,EAAU,QAAA;AAAA,kBACV,OAAA,EAAS,wBAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oCAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,oBAC/B,EAAA;AAAA,sBACC,sDAAA;AAAA,sBACA;AAAA;AACF;AAAA;AAAA,eACF,EACF;AAAA,aAAA,EAEJ,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA,EAAA;AAAA,gBACC,2DAAA;AAAA,gBACA;AAAA,eACF,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACV,QAAA,EAAA,EAAA;AAAA,gBACC,2DAAA;AAAA,gBACA;AAAA,eACF,EACF;AAAA,aAAA,EACF;AAAA,WAAA,EAEJ;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGC,CAAC,aAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA,EAAA;AAAA,YACC,gEAAA;AAAA,YACA;AAAA,WACF,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA,EAAA;AAAA,YACC,8DAAA;AAAA,YACA;AAAA,WACF,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,4BACG,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAAA,oBAC7BA,IAAC,OAAA,EAAA,EAAQ,UAAA,EAAU,MAAC,QAAA,EAAS,eAAA,EAAgB,UAAU,GAAA,EAAM;AAAA,GAAA,EAC/D,CAAA;AAEJ;ACthBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,UAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyB;AAGvB,EAAA,MAAM,QAAA,GACJ,eAAA,IAAmB,qBAAA,CAAsB,UAAA,EAAY,eAAe,CAAA;AAEtE,EAAA,uBACEA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,aAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MAEA,QAAA,kBAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAqB,GAAG,SAAA,EAAW;AAAA;AAAA,GAC1D;AAEJ;AAEA,SAAS,qBAAA,CAAsB,IAAa,OAAA,EAAgC;AAC1E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,EAAA,IAAM,CAAA,SAAA,EAAY,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,IAChC,WAAA,EAAa,EAAA,IAAM,CAAA,SAAA,EAAY,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,IACzC,IAAA,EAAM,mBAAA;AAAA,IACN,SAAS,OAAA,IAAW,GAAA;AAAA,IACpB,OAAO,EAAC;AAAA,IACR,OAAO,EAAC;AAAA,IACR,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,cAAA,EAAgB;AAAA,UACd,YAAA,EAAc;AAAA;AAChB;AACF;AACF,GACF;AACF;ACpHO,SAAS,sBAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,SAAA,EAA0B;AACzC,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,OAAM,GAAI,qBAAA,CAAsB,QAAW,EAAE,CAAA;AAExE,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,0BAAA,EAA2B,WAAU,QAAA,EAAS,CAAA;AAAA,MAAE;AAAA,KAAA,EAE7D,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,KAAA,IAAS,CAAC,QAAA,EAAU;AACtB,IAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,SAAA,EAAU,SAAO,IAAA,EAAC,CAAA;AAAA,EACxC;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAI,CAAA,YAAA,EAAe,QAAA,CAAS,WAAW,CAAA,CAAA,EAAI,SAAS,OAAO,CAAA,CAAA;AAAA,MAC3D,OAAA,EAAO;AAAA;AAAA,GACT;AAEJ","file":"chunk-5PZDLMC4.js","sourcesContent":["import { useTheme } from \"@burdenoff/fe-libs/shared/hooks/shell\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { resolvedTheme = \"light\" } = useTheme();\n\n return (\n <Sonner\n theme={resolvedTheme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useCallback, useEffect, useState, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n MiniMap,\n Handle,\n Position,\n type NodeTypes,\n MarkerType,\n type NodeProps,\n useReactFlow,\n ReactFlowProvider,\n} from \"@xyflow/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport \"@xyflow/react/dist/style.css\";\n\nimport { useFlowStore } from \"../builder/stores/flow-store\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Card } from \"../ui/card\";\nimport { cn } from \"../utils/cn\";\nimport type { WorkflowData, FlowNode } from \"../types\";\nimport { ArrowLeft, Play, Save, Trash2 } from \"lucide-react\";\nimport { Toaster } from \"../builder/components/ui/sonner\";\nimport { useTr } from \"../hooks/useTr\";\n\nexport interface WorkflowBuilderCoreProps {\n /** Initial workflow data to render */\n workflow?: WorkflowData;\n /** Readonly mode - disables editing */\n readonly?: boolean;\n /** Hide the header toolbar */\n hideHeader?: boolean;\n /** Hide the sidebar */\n hideSidebar?: boolean;\n /** Hide the logs panel */\n hideLogsPanel?: boolean;\n /** Callback when workflow is saved */\n onSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onExecute?: (runId: string) => void;\n /** Callback when a node is clicked */\n onNodeClick?: (node: FlowNode) => void;\n /** Callback when back button is clicked */\n onBack?: () => void;\n /** Custom className */\n className?: string;\n}\n\n// Default edge options\nconst defaultEdgeOptions = {\n type: \"smoothstep\",\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 21,\n height: 21,\n },\n style: {\n stroke: \"#888\",\n },\n};\n\n// Handle styles\nconst handleStyle: React.CSSProperties = {\n width: 10,\n height: 10,\n background: \"#3b82f6\", // blue-500\n border: \"2px solid white\",\n};\n\n// Base node styles\nconst baseNodeStyle: React.CSSProperties = {\n padding: \"8px 16px\",\n borderRadius: \"8px\",\n fontWeight: 500,\n boxShadow:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n position: \"relative\",\n color: \"white\",\n};\n\n// Node type → colour mapping\nconst NODE_COLORS: Record<string, string> = {\n \"trigger:api\": \"#22c55e\",\n end: \"#ef4444\",\n \"internal:if\": \"#8b5cf6\",\n \"internal:switch\": \"#8b5cf6\",\n \"internal:loop\": \"#f59e0b\",\n \"internal:merge\": \"#6366f1\",\n \"internal:set\": \"#3b82f6\",\n \"internal:filter\": \"#06b6d4\",\n \"internal:aggregate\": \"#0891b2\",\n \"internal:wait\": \"#64748b\",\n \"internal:noop\": \"#94a3b8\",\n \"internal:http\": \"#f97316\",\n default: \"#3b82f6\",\n};\n\nfunction getNodeColor(type: string): string {\n return NODE_COLORS[type] ?? NODE_COLORS.default;\n}\n\n// Trigger Node component - has only source handle (bottom)\nfunction TriggerNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"trigger:api\") }}>\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.triggerNodeLabel\",\n \"API Trigger\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// End Node component - has only target handle (top)\nfunction EndNode({ data }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n return (\n <div style={{ ...baseNodeStyle, background: getNodeColor(\"end\") }}>\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\"fluidgrids.components.workflowBuilderCore.endNodeLabel\", \"End\")}\n </div>\n );\n}\n\n// Action Node component - has both source (bottom) and target (top) handles\nfunction ActionNode({ data, type }: NodeProps) {\n const tr = useTr();\n const label = (data as { label?: string }).label;\n const color = getNodeColor(type || \"default\");\n return (\n <div\n style={{\n ...baseNodeStyle,\n background: color,\n minWidth: 120,\n textAlign: \"center\",\n }}\n >\n <Handle type=\"target\" position={Position.Top} style={handleStyle} />\n {label ||\n tr(\n \"fluidgrids.components.workflowBuilderCore.actionNodeLabel\",\n \"Action\",\n )}\n <Handle type=\"source\" position={Position.Bottom} style={handleStyle} />\n </div>\n );\n}\n\n// Define node types\nconst NODE_TYPES: NodeTypes = {\n \"trigger:api\": TriggerNode,\n end: EndNode,\n \"internal:if\": ActionNode,\n \"internal:switch\": ActionNode,\n \"internal:loop\": ActionNode,\n \"internal:merge\": ActionNode,\n \"internal:set\": ActionNode,\n \"internal:filter\": ActionNode,\n \"internal:aggregate\": ActionNode,\n \"internal:wait\": ActionNode,\n \"internal:noop\": ActionNode,\n \"internal:http\": ActionNode,\n \"internal:subworkflow\": ActionNode,\n default: ActionNode,\n};\n\n// Counter for unique node ids\nlet nodeIdCounter = 0;\n\nfunction FlowBuilderInner({\n workflow,\n readonly = false,\n hideHeader = false,\n hideSidebar = false,\n hideLogsPanel = false,\n onSave,\n onExecute,\n onNodeClick,\n onBack,\n className,\n}: WorkflowBuilderCoreProps) {\n const reactFlowInstance = useReactFlow();\n const tr = useTr();\n\n const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);\n const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);\n\n const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(\n useShallow((s) => [\n s.workflow.nodes,\n s.workflow.edges,\n s.actions.nodes.onNodesChange,\n s.actions.edges.onEdgesChange,\n s.actions.edges.onConnect,\n ]),\n );\n\n const [workflowName, setWorkflowName] = useState(\n workflow?.name || \"Untitled Workflow\",\n );\n\n // Selected node for properties panel\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n // Ref for the ReactFlow wrapper (needed for drop position calculation)\n const reactFlowWrapper = useRef<HTMLDivElement>(null);\n\n // Initialize workflow on mount\n useEffect(() => {\n resetWorkflow();\n if (workflow) {\n setWorkflow(workflow);\n setWorkflowName(workflow.name || \"Untitled Workflow\");\n }\n }, [workflow, resetWorkflow, setWorkflow]);\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setWorkflowName(e.target.value);\n setWorkflow({ name: e.target.value });\n };\n\n const handleSave = () => {\n const savedWorkflow: WorkflowData = {\n id: workflow?.id || \"\",\n workflowKey: workflow?.workflowKey || \"\",\n name: workflowName,\n version: workflow?.version || \"1\",\n alias: workflow?.alias,\n nodes: nodes as FlowNode[],\n edges,\n sidebar: {\n active: \"none\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n onSave?.(savedWorkflow);\n };\n\n const handleExecute = () => {\n // Generate a run ID and trigger execution\n const runId = `run-${Date.now()}`;\n onExecute?.(runId);\n };\n\n // ---- Node click → select in sidebar ----\n const handleNodeClick = useCallback(\n (\n _event: React.MouseEvent,\n node: { id: string; [key: string]: unknown },\n ) => {\n setSelectedNodeId(node.id);\n onNodeClick?.(node as unknown as FlowNode);\n },\n [onNodeClick],\n );\n\n // Deselect when clicking the pane\n const handlePaneClick = useCallback(() => {\n setSelectedNodeId(null);\n }, []);\n\n // ---- Drag-and-drop from external palette ----\n const handleDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n }, []);\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault();\n\n const raw = event.dataTransfer.getData(\"application/json\");\n if (!raw) return;\n\n let payload: { id?: string; type?: string; label?: string };\n try {\n payload = JSON.parse(raw);\n } catch {\n return;\n }\n\n const nodeType = payload.type || payload.id || \"default\";\n const label = payload.label || nodeType;\n\n // Calculate drop position in flow coordinates\n const bounds = reactFlowWrapper.current?.getBoundingClientRect();\n if (!bounds) return;\n\n const position = reactFlowInstance.screenToFlowPosition({\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top,\n });\n\n nodeIdCounter += 1;\n const newNodeId = `${nodeType}-${Date.now()}-${nodeIdCounter}`;\n const newNode: FlowNode = {\n id: newNodeId,\n type: nodeType,\n position,\n data: { label },\n };\n\n // Append to the existing nodes via the store\n const currentNodes = useFlowStore.getState().workflow.nodes;\n setNodes([...currentNodes, newNode]);\n },\n [reactFlowInstance, setNodes],\n );\n\n // ---- Selected node helpers ----\n const selectedNode = selectedNodeId\n ? (nodes.find((n) => n.id === selectedNodeId) as FlowNode | undefined)\n : null;\n\n const handleSelectedNodeLabelChange = useCallback(\n (newLabel: string) => {\n if (!selectedNodeId) return;\n const currentNodes = useFlowStore.getState().workflow.nodes;\n const updated = currentNodes.map((n) =>\n n.id === selectedNodeId\n ? { ...n, data: { ...n.data, label: newLabel } }\n : n,\n );\n setNodes(updated);\n },\n [selectedNodeId, setNodes],\n );\n\n const handleDeleteSelectedNode = useCallback(() => {\n if (!selectedNode) return;\n if (selectedNode.deletable === false) return; // can't delete trigger/end\n deleteNode(selectedNode);\n setSelectedNodeId(null);\n }, [selectedNode, deleteNode]);\n\n return (\n <div\n className={cn(\"flex flex-col flex-1 h-full w-full min-h-0\", className)}\n >\n {/* Header */}\n {!hideHeader && (\n <Card className=\"h-14 shrink-0 border-0 rounded-none bg-gradient-to-r from-primary/20 to-transparent p-2 flex items-center justify-between border-b\">\n <div className=\"flex items-center gap-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </Button>\n )}\n <Input\n className=\"font-semibold max-w-[300px]\"\n value={workflowName}\n onChange={handleNameChange}\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder\",\n \"Workflow Name\",\n )}\n disabled={readonly}\n />\n </div>\n\n {!readonly && (\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleSave}>\n <Save className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.save\", \"Save\")}\n </Button>\n <Button size=\"sm\" onClick={handleExecute}>\n <Play className=\"size-4 mr-1\" />\n {tr(\"fluidgrids.components.workflowBuilderCore.run\", \"Run\")}\n </Button>\n </div>\n )}\n </Card>\n )}\n\n {/* Main content */}\n <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n {/* Canvas */}\n <div className=\"flex-1 h-full relative\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readonly ? undefined : onNodesChange}\n onEdgesChange={readonly ? undefined : onEdgesChange}\n onConnect={readonly ? undefined : onConnect}\n onNodeClick={readonly ? undefined : handleNodeClick}\n onPaneClick={handlePaneClick}\n onDragOver={readonly ? undefined : handleDragOver}\n onDrop={readonly ? undefined : handleDrop}\n nodeTypes={NODE_TYPES}\n defaultEdgeOptions={defaultEdgeOptions}\n fitView\n snapToGrid\n snapGrid={[16, 16]}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={readonly ? null : \"Backspace\"}\n >\n <Background gap={24} />\n <Controls />\n <MiniMap />\n </ReactFlow>\n </div>\n\n {/* Sidebar — Node Properties */}\n {!hideSidebar && !readonly && (\n <div className=\"w-60 shrink-0 border-l bg-card overflow-y-auto\">\n <div className=\"p-4 border-b\">\n <div className=\"text-sm font-semibold\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodePropertiesHeading\",\n \"Node Properties\",\n )}\n </div>\n </div>\n\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node ID */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeIdLabel\",\n \"Node ID\",\n )}\n </label>\n <code className=\"block text-xs bg-muted px-2 py-1 rounded font-mono break-all\">\n {selectedNode.id}\n </code>\n </div>\n\n {/* Node Type */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeTypeLabel\",\n \"Type\",\n )}\n </label>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-block w-3 h-3 rounded-full shrink-0\"\n style={{\n background: getNodeColor(\n selectedNode.type || \"default\",\n ),\n }}\n />\n <code className=\"text-xs font-mono\">\n {selectedNode.type}\n </code>\n </div>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelLabel\",\n \"Label\",\n )}\n </label>\n <Input\n value={\n (selectedNode.data as { label?: string })?.label ?? \"\"\n }\n onChange={(e) =>\n handleSelectedNodeLabelChange(e.target.value)\n }\n className=\"text-sm\"\n placeholder={tr(\n \"fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder\",\n \"Node label\",\n )}\n />\n </div>\n\n {/* Position */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.positionLabel\",\n \"Position\",\n )}\n </label>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-muted-foreground\">\n <div>\n X:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.x)}\n </span>\n </div>\n <div>\n Y:{\" \"}\n <span className=\"font-mono\">\n {Math.round(selectedNode.position.y)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Connected edges */}\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.connectionsLabel\",\n \"Connections\",\n )}\n </label>\n <div className=\"text-xs text-muted-foreground\">\n {(() => {\n const inbound = edges.filter(\n (e) => e.target === selectedNode.id,\n );\n const outbound = edges.filter(\n (e) => e.source === selectedNode.id,\n );\n return (\n <>\n <div>\n {inbound.length} inbound, {outbound.length} outbound\n </div>\n </>\n );\n })()}\n </div>\n </div>\n\n {/* Delete */}\n {selectedNode.deletable !== false && (\n <div className=\"pt-2 border-t\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={handleDeleteSelectedNode}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {tr(\n \"fluidgrids.components.workflowBuilderCore.deleteNode\",\n \"Delete Node\",\n )}\n </Button>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4\">\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.noSelectionHint\",\n \"Click a node on the canvas to view and edit its properties.\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground mt-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.dragPaletteHint\",\n \"Drag nodes from the palette on the left to add them to the workflow.\",\n )}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Logs panel placeholder */}\n {!hideLogsPanel && (\n <div className=\"h-32 border-t bg-card p-2\">\n <div className=\"text-sm font-medium mb-2\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsHeading\",\n \"Execution Logs\",\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.components.workflowBuilderCore.executionLogsEmpty\",\n \"Execution logs will appear here when you run the workflow\",\n )}\n </p>\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowBuilderCore(props: WorkflowBuilderCoreProps) {\n return (\n <ReactFlowProvider>\n <FlowBuilderInner {...props} />\n <Toaster richColors position=\"bottom-center\" duration={2000} />\n </ReactFlowProvider>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport {\n WorkflowBuilderCore,\n type WorkflowBuilderCoreProps,\n} from \"./WorkflowBuilderCore\";\nimport type { WorkflowData } from \"../types\";\n\nexport interface WorkflowBuilderProps extends Omit<\n WorkflowBuilderCoreProps,\n \"workflow\"\n> {\n /** Workflow ID to load */\n workflowId?: string;\n /** Workflow version to load */\n workflowVersion?: string;\n /** Initial workflow data (bypasses API fetch) */\n initialWorkflow?: WorkflowData;\n /** Workspace API Gateway URL */\n apiGatewayUrl?: string;\n /** Global API Gateway URL (for store operations) */\n globalApiUrl?: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current tenant ID */\n tenantId?: string;\n /** Organization ID */\n organizationId?: string;\n /** Optional: Provide your own workspace Apollo client */\n workspaceClient?: ApolloClient;\n /** Optional: Provide your own global Apollo client */\n globalClient?: ApolloClient;\n}\n\n/**\n * WorkflowBuilder - Standalone workflow builder component with Apollo client support\n *\n * Use this component when you want to embed the workflow builder in any React app.\n * You can either:\n * 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended\n * 2. Provide URLs and let the component create clients internally\n *\n * @example Dual Client Injection (Recommended)\n * ```tsx\n * import { createFluidGridsClients } from '@fluidgrids/fe-sdk';\n *\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'ws-123',\n * });\n *\n * <WorkflowBuilder\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n *\n * @example URL-based (Simpler, less flexible)\n * ```tsx\n * <WorkflowBuilder\n * apiGatewayUrl=\"http://localhost:4000/workspaces/graphql\"\n * globalApiUrl=\"http://localhost:4000/global/graphql\"\n * authToken={token}\n * workspaceId=\"ws-123\"\n * onSave={(workflow) => console.log(workflow)}\n * />\n * ```\n */\nexport function WorkflowBuilder({\n workflowId,\n workflowVersion,\n initialWorkflow,\n apiGatewayUrl,\n globalApiUrl,\n authToken,\n workspaceId,\n tenantId,\n organizationId,\n workspaceClient,\n globalClient,\n ...coreProps\n}: WorkflowBuilderProps) {\n // If initialWorkflow is provided, use it directly\n // Otherwise, the workflow will need to be loaded from the API\n const workflow =\n initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);\n\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n globalApiUrl={globalApiUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n organizationId={organizationId}\n workspaceClient={workspaceClient}\n globalClient={globalClient}\n >\n <WorkflowBuilderCore workflow={workflow} {...coreProps} />\n </FluidGridsProvider>\n );\n}\n\nfunction createDefaultWorkflow(id?: string, version?: string): WorkflowData {\n return {\n id: id || `workflow-${Date.now()}`,\n workflowKey: id || `workflow-${Date.now()}`,\n name: \"Untitled Workflow\",\n version: version || \"1\",\n nodes: [],\n edges: [],\n sidebar: {\n active: \"store-browse\",\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n };\n}\n","import { Navigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { useWorkflowDefinition } from \"../hooks/useWorkflows\";\n\n/**\n * Global search indexes WorkflowDefinition by its database id, but the\n * builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +\n * version. This page bridges the two: it resolves the id to its current\n * workflowKey/version and redirects there.\n */\nexport function WorkflowSearchRedirect() {\n const { id } = useParams<{ id: string }>();\n const { workflow, loading, error } = useWorkflowDefinition(undefined, id);\n\n if (loading) {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Icon icon=\"svg-spinners:ring-resize\" className=\"size-4\" />\n Opening workflow…\n </div>\n );\n }\n\n if (error || !workflow) {\n return <Navigate to=\"../list\" replace />;\n }\n\n return (\n <Navigate\n to={`../workflow/${workflow.workflowKey}/${workflow.version}`}\n replace\n />\n );\n}\n"]}
|