@burdenoff/fluidgrids-fe-sdk 2026.1105.3 → 2026.1106.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 (60) hide show
  1. package/README.md +16 -3
  2. package/dist/{ExecutionDetailPage-JXGPSLS3.js → ExecutionDetailPage-OOHJQR2L.js} +14 -14
  3. package/dist/{ExecutionsListPage-U3TC5JUI.js → ExecutionsListPage-6HS5VQOV.js} +10 -10
  4. package/dist/{WorkflowBuilder-6DOD6WWH.js → WorkflowBuilder-PICIS7FI.js} +16 -16
  5. package/dist/{WorkflowsList-XOWRQNST.js → WorkflowsList-SD5XQC4Q.js} +10 -10
  6. package/dist/{agentTools-YQBN33WG.js → agentTools-UH4LU6LA.js} +7 -7
  7. package/dist/{chunk-MY7SEUXM.js → chunk-43GSC5Y6.js} +1 -1
  8. package/dist/{chunk-EKDUYCTS.js → chunk-4XAXF5VP.js} +4 -4
  9. package/dist/{chunk-G774FI2E.js → chunk-5GG2FEKW.js} +2 -2
  10. package/dist/{chunk-TJAG2DQT.js → chunk-5Z4F24QT.js} +3 -3
  11. package/dist/{chunk-JYYN3CLL.js → chunk-6VIG44VF.js} +1 -1
  12. package/dist/{chunk-2WUVF4EQ.js → chunk-ASYYYJG2.js} +4 -4
  13. package/dist/{chunk-OXXXUAWM.js → chunk-CTKWMPQQ.js} +1 -1
  14. package/dist/{chunk-YGOGJDN4.js → chunk-EIMTOK6E.js} +3 -3
  15. package/dist/{chunk-AMXJLVZN.js → chunk-EXJW7EKR.js} +2 -2
  16. package/dist/{chunk-MP44TAOO.js → chunk-GBJWPSLJ.js} +70 -5
  17. package/dist/{chunk-LDWBMCX4.js → chunk-GBQC5WDH.js} +16 -9
  18. package/dist/{chunk-3ZYRLGDF.js → chunk-GPABUQTD.js} +650 -636
  19. package/dist/{chunk-ZBPRNWKY.js → chunk-HSTP2RX3.js} +35 -6
  20. package/dist/{chunk-US5QSLPV.js → chunk-JKLZ6YZ3.js} +22 -11
  21. package/dist/{chunk-KAWRHIJZ.js → chunk-JRLBPR5U.js} +3 -3
  22. package/dist/{chunk-IL343FKX.js → chunk-KHS2DZHH.js} +1 -1
  23. package/dist/{chunk-4NNF7DIB.js → chunk-KJT5TAOE.js} +3 -3
  24. package/dist/{chunk-TLHX4DK4.js → chunk-LLCVVRCE.js} +9 -9
  25. package/dist/{chunk-IJ7UIDCW.js → chunk-M72SMQOS.js} +8 -8
  26. package/dist/{chunk-TCIBTMJI.js → chunk-NZMUKAXG.js} +3 -69
  27. package/dist/{chunk-G33OMSW6.js → chunk-OLRIWGYM.js} +6 -6
  28. package/dist/{chunk-NMQENSPW.js → chunk-OTOQFZFO.js} +38 -38
  29. package/dist/{chunk-EYQ7GJRW.js → chunk-PASKZCII.js} +3 -3
  30. package/dist/{chunk-3IXU7WUC.js → chunk-PDODDDHY.js} +1 -1
  31. package/dist/{chunk-5DVP2UYH.js → chunk-TGWDFLEX.js} +11 -3
  32. package/dist/{chunk-AU7LACOY.js → chunk-TYI2XOSI.js} +1 -1
  33. package/dist/{chunk-L2N6DDOI.js → chunk-U7UNWR3D.js} +2 -2
  34. package/dist/{chunk-NZFPCTIS.js → chunk-UIS7KGHW.js} +4 -4
  35. package/dist/{chunk-KN37RIFC.js → chunk-UWCD7JUU.js} +8 -8
  36. package/dist/{chunk-MA6I4KY5.js → chunk-UYTPURFW.js} +16 -50
  37. package/dist/{chunk-ZLBTUCC2.js → chunk-WBRW67HX.js} +3 -3
  38. package/dist/{chunk-VESQH55Q.js → chunk-WC526MLS.js} +3 -3
  39. package/dist/{chunk-22U3TUKZ.js → chunk-XNARCHMT.js} +2 -2
  40. package/dist/{chunk-3MZOYJ5I.js → chunk-XWINH6CR.js} +1 -1
  41. package/dist/{chunk-FVWRGL7S.js → chunk-Y4UCHFGK.js} +1 -1
  42. package/dist/{client-YVZMLEQX.js → client-62VHXHKN.js} +2 -2
  43. package/dist/executions.js +15 -15
  44. package/dist/{global-client-N5EIFW6T.js → global-client-PJ5LANJA.js} +2 -2
  45. package/dist/history.js +9 -9
  46. package/dist/index.d.ts +10 -4
  47. package/dist/index.js +67 -53
  48. package/dist/{node-detail-view-U5HOP2WX.js → node-detail-view-P5NV5CMO.js} +11 -11
  49. package/dist/nodes.js +3 -3
  50. package/dist/observability.js +8 -8
  51. package/dist/{quick-config-panel-XAISBW6Y.js → quick-config-panel-ZNSBVF4G.js} +8 -8
  52. package/dist/settings.js +9 -9
  53. package/dist/templates.js +15 -15
  54. package/dist/{workflow-builder-7vv9dCdp.d.ts → workflow-builder-C-ekFbwR.d.ts} +37 -4
  55. package/dist/workflow-builder.d.ts +1 -1
  56. package/dist/workflow-builder.js +17 -17
  57. package/dist/workflow-preview.d.ts +10 -3
  58. package/dist/workflow-preview.js +78 -43
  59. package/dist/workflows-list.js +10 -10
  60. package/package.json +1 -1
package/README.md CHANGED
@@ -256,6 +256,10 @@ import { WorkflowPreviewCanvas, previewCanvasFromDefinition, previewRevealOrder
256
256
  - `resolveNodeMeta(nodeType)` (optional, keep it stable) supplies registry names
257
257
  and icons; without it a card uses the node's saved manifest, then a name and
258
258
  icon derived from its type.
259
+ - Edges follow the builder's rule: an edge whose source or target handle the
260
+ builder's card for that node does not have (read from the node's stored data,
261
+ as the builder reads it) is not drawn, so the preview never shows a
262
+ connection the builder drops.
259
263
  - Nodes cannot be dragged, connected, selected or deleted; pan and zoom work.
260
264
  - `prefers-reduced-motion: reduce` turns every animation off.
261
265
 
@@ -292,16 +296,25 @@ embedding props (also settable with `setFluidGridsConfig`):
292
296
  values are validated (`themeToCssVariables`) and applied document-wide as
293
297
  inline properties on `<html>`, restored on unmount (`applyFluidGridsTheme`,
294
298
  `useFluidGridsTheme`). The public embed viewer also reads `accent`, `radius`
295
- and `font` query parameters next to `theme`.
299
+ and `font` query parameters next to `theme`; its single `radius` sets
300
+ `radius.base`, `radius.card`, `radius.button` and `radius.input` (builder node
301
+ cards follow `--radius-card`).
296
302
  - **`auth.onTokenExpired`** — called once per expired-session failure (401,
297
303
  `UNAUTHENTICATED`, expired/revoked credential); concurrent failures share one
298
304
  call; the request is retried once with the new token; on rejection the SDK
299
- emits `auth:failed` and surfaces the original error. Host-injected Apollo
305
+ emits `auth:failed` and surfaces the original error. A failed refresh is
306
+ reported once: requests already in flight with the expired token fail with
307
+ their own error without a second call or event; a request sent after the
308
+ failure may refresh again. Host-injected Apollo
300
309
  clients add `createFluidGridsTokenRefreshLink()` before their auth link.
301
310
  - **`onEvent`** — typed `FluidGridsEventMap`: `workflow:saved`,
302
311
  `workflow:activated`, `run:started`, `run:completed`, `node:selected`,
303
312
  `error`, `auth:failed`. Contract version `FLUIDGRIDS_EVENTS_VERSION` (semver:
304
- additive = minor, payload break = major).
313
+ additive = minor, payload break = major). The standalone `WorkflowBuilder` /
314
+ `WorkflowBuilderCore` canvas saves and runs locally (`onSave` / `onExecute`),
315
+ so it emits only `node:selected`.
316
+ - `FluidGridsRoot`, `WorkflowBuilder` and `WorkflowBuilderCore` work without a
317
+ host `ThemeProvider`; they reuse the host's when there is one.
305
318
 
306
319
  Full guide: [docs.fluidgrids.ai/developers/embedding](https://docs.fluidgrids.ai/developers/embedding).
307
320
 
@@ -1,30 +1,30 @@
1
- export { ExecutionDetailPage } from './chunk-3ZYRLGDF.js';
2
- import './chunk-2WUVF4EQ.js';
3
- import './chunk-MA6I4KY5.js';
4
- import './chunk-VESQH55Q.js';
5
- import './chunk-TCIBTMJI.js';
1
+ export { ExecutionDetailPage } from './chunk-GPABUQTD.js';
2
+ import './chunk-ASYYYJG2.js';
3
+ import './chunk-UYTPURFW.js';
4
+ import './chunk-WC526MLS.js';
5
+ import './chunk-NZMUKAXG.js';
6
6
  import './chunk-NZAYYUQ4.js';
7
- import './chunk-AMXJLVZN.js';
7
+ import './chunk-EXJW7EKR.js';
8
8
  import './chunk-WZ3EJVS6.js';
9
9
  import './chunk-5ERAJC2I.js';
10
- import './chunk-EYQ7GJRW.js';
10
+ import './chunk-PASKZCII.js';
11
11
  import './chunk-JDLQ6QIB.js';
12
- import './chunk-IL343FKX.js';
12
+ import './chunk-KHS2DZHH.js';
13
13
  import './chunk-Y53CVZVV.js';
14
14
  import './chunk-FNZZ5JJL.js';
15
- import './chunk-YGOGJDN4.js';
15
+ import './chunk-EIMTOK6E.js';
16
16
  import './chunk-PJAWNFJV.js';
17
17
  import './chunk-H4ERTSMX.js';
18
- import './chunk-ZBPRNWKY.js';
18
+ import './chunk-HSTP2RX3.js';
19
19
  import './chunk-5375NUIO.js';
20
20
  import './chunk-JL7CASN5.js';
21
21
  import './chunk-SDZEAIIE.js';
22
- import './chunk-5DVP2UYH.js';
22
+ import './chunk-TGWDFLEX.js';
23
23
  import './chunk-Y7FKJJMF.js';
24
- import './chunk-AU7LACOY.js';
24
+ import './chunk-TYI2XOSI.js';
25
25
  import './chunk-G77IGC3Y.js';
26
26
  import './chunk-Z3ABLERJ.js';
27
27
  import './chunk-UULVIT25.js';
28
- import './chunk-3IXU7WUC.js';
29
- import './chunk-US5QSLPV.js';
28
+ import './chunk-PDODDDHY.js';
29
+ import './chunk-JKLZ6YZ3.js';
30
30
  import './chunk-UEG2WC3G.js';
@@ -1,24 +1,24 @@
1
- export { ExecutionsListPage } from './chunk-NZFPCTIS.js';
2
- import './chunk-MA6I4KY5.js';
3
- import './chunk-VESQH55Q.js';
1
+ export { ExecutionsListPage } from './chunk-UIS7KGHW.js';
2
+ import './chunk-UYTPURFW.js';
3
+ import './chunk-WC526MLS.js';
4
4
  import './chunk-WZ3EJVS6.js';
5
5
  import './chunk-5ERAJC2I.js';
6
- import './chunk-IL343FKX.js';
6
+ import './chunk-KHS2DZHH.js';
7
7
  import './chunk-FNZZ5JJL.js';
8
- import './chunk-YGOGJDN4.js';
8
+ import './chunk-EIMTOK6E.js';
9
9
  import './chunk-PJAWNFJV.js';
10
10
  import './chunk-H4ERTSMX.js';
11
11
  import './chunk-4VJ3MDOV.js';
12
- import './chunk-ZBPRNWKY.js';
12
+ import './chunk-HSTP2RX3.js';
13
13
  import './chunk-5375NUIO.js';
14
14
  import './chunk-JL7CASN5.js';
15
15
  import './chunk-SDZEAIIE.js';
16
- import './chunk-5DVP2UYH.js';
16
+ import './chunk-TGWDFLEX.js';
17
17
  import './chunk-Y7FKJJMF.js';
18
- import './chunk-AU7LACOY.js';
18
+ import './chunk-TYI2XOSI.js';
19
19
  import './chunk-G77IGC3Y.js';
20
20
  import './chunk-Z3ABLERJ.js';
21
21
  import './chunk-UULVIT25.js';
22
- import './chunk-3IXU7WUC.js';
23
- import './chunk-US5QSLPV.js';
22
+ import './chunk-PDODDDHY.js';
23
+ import './chunk-JKLZ6YZ3.js';
24
24
  import './chunk-UEG2WC3G.js';
@@ -1,35 +1,35 @@
1
- export { WorkflowBuilder } from './chunk-TLHX4DK4.js';
2
- import './chunk-FVWRGL7S.js';
1
+ export { WorkflowBuilder } from './chunk-LLCVVRCE.js';
2
+ import './chunk-Y4UCHFGK.js';
3
3
  import './chunk-PIKYQE7P.js';
4
- import './chunk-NMQENSPW.js';
5
- import './chunk-3MZOYJ5I.js';
4
+ import './chunk-OTOQFZFO.js';
5
+ import './chunk-XWINH6CR.js';
6
6
  import './chunk-GEMNVFPK.js';
7
7
  import './chunk-B6CCE2RW.js';
8
8
  import './chunk-IEVSFCFS.js';
9
9
  import './chunk-YXMFRQYV.js';
10
10
  import './chunk-BQXVT32O.js';
11
- import './chunk-MY7SEUXM.js';
12
- import './chunk-KAWRHIJZ.js';
13
- import './chunk-EYQ7GJRW.js';
11
+ import './chunk-43GSC5Y6.js';
12
+ import './chunk-JRLBPR5U.js';
13
+ import './chunk-PASKZCII.js';
14
14
  import './chunk-JDLQ6QIB.js';
15
- import './chunk-IL343FKX.js';
15
+ import './chunk-KHS2DZHH.js';
16
16
  import './chunk-Y53CVZVV.js';
17
- import './chunk-TJAG2DQT.js';
18
- import './chunk-JYYN3CLL.js';
19
- import './chunk-YGOGJDN4.js';
17
+ import './chunk-5Z4F24QT.js';
18
+ import './chunk-6VIG44VF.js';
19
+ import './chunk-EIMTOK6E.js';
20
20
  import './chunk-GLYINMOR.js';
21
21
  import './chunk-H4ERTSMX.js';
22
22
  import './chunk-4VJ3MDOV.js';
23
- import './chunk-ZBPRNWKY.js';
23
+ import './chunk-HSTP2RX3.js';
24
24
  import './chunk-5375NUIO.js';
25
25
  import './chunk-JL7CASN5.js';
26
26
  import './chunk-SDZEAIIE.js';
27
- import './chunk-5DVP2UYH.js';
27
+ import './chunk-TGWDFLEX.js';
28
28
  import './chunk-Y7FKJJMF.js';
29
- import './chunk-AU7LACOY.js';
29
+ import './chunk-TYI2XOSI.js';
30
30
  import './chunk-G77IGC3Y.js';
31
31
  import './chunk-Z3ABLERJ.js';
32
32
  import './chunk-UULVIT25.js';
33
- import './chunk-3IXU7WUC.js';
34
- import './chunk-US5QSLPV.js';
33
+ import './chunk-PDODDDHY.js';
34
+ import './chunk-JKLZ6YZ3.js';
35
35
  import './chunk-UEG2WC3G.js';
@@ -1,23 +1,23 @@
1
- export { WorkflowsList } from './chunk-IJ7UIDCW.js';
2
- import './chunk-FVWRGL7S.js';
3
- import './chunk-VESQH55Q.js';
1
+ export { WorkflowsList } from './chunk-M72SMQOS.js';
2
+ import './chunk-Y4UCHFGK.js';
3
+ import './chunk-WC526MLS.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-KAWRHIJZ.js';
5
+ import './chunk-JRLBPR5U.js';
6
6
  import './chunk-FNZZ5JJL.js';
7
- import './chunk-YGOGJDN4.js';
7
+ import './chunk-EIMTOK6E.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-H4ERTSMX.js';
10
10
  import './chunk-4VJ3MDOV.js';
11
- import './chunk-ZBPRNWKY.js';
11
+ import './chunk-HSTP2RX3.js';
12
12
  import './chunk-5375NUIO.js';
13
13
  import './chunk-JL7CASN5.js';
14
14
  import './chunk-SDZEAIIE.js';
15
- import './chunk-5DVP2UYH.js';
15
+ import './chunk-TGWDFLEX.js';
16
16
  import './chunk-Y7FKJJMF.js';
17
- import './chunk-AU7LACOY.js';
17
+ import './chunk-TYI2XOSI.js';
18
18
  import './chunk-G77IGC3Y.js';
19
19
  import './chunk-Z3ABLERJ.js';
20
20
  import './chunk-UULVIT25.js';
21
- import './chunk-3IXU7WUC.js';
22
- import './chunk-US5QSLPV.js';
21
+ import './chunk-PDODDDHY.js';
22
+ import './chunk-JKLZ6YZ3.js';
23
23
  import './chunk-UEG2WC3G.js';
@@ -1,17 +1,17 @@
1
- import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-ZLBTUCC2.js';
2
- import { computeAttachPosition } from './chunk-3MZOYJ5I.js';
3
- import { NODE_CONFIGS, createConfiguredNode, isNodeConfigsInitialized, useSaveStatusStore, autosaveAllowedFor, isFlowComplete, isNodeTypeHiddenFromPalette } from './chunk-ZBPRNWKY.js';
1
+ import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-WBRW67HX.js';
2
+ import { computeAttachPosition } from './chunk-XWINH6CR.js';
3
+ import { NODE_CONFIGS, createConfiguredNode, isNodeConfigsInitialized, useSaveStatusStore, autosaveAllowedFor, isFlowComplete, isNodeTypeHiddenFromPalette } from './chunk-HSTP2RX3.js';
4
4
  import './chunk-5375NUIO.js';
5
5
  import './chunk-JL7CASN5.js';
6
6
  import './chunk-SDZEAIIE.js';
7
- import { resolveOutputHandles, resolveInputHandles, useFlowStore } from './chunk-5DVP2UYH.js';
7
+ import { resolveOutputHandles, resolveInputHandles, useFlowStore } from './chunk-TGWDFLEX.js';
8
8
  import './chunk-Y7FKJJMF.js';
9
- import './chunk-AU7LACOY.js';
9
+ import './chunk-TYI2XOSI.js';
10
10
  import './chunk-G77IGC3Y.js';
11
11
  import './chunk-Z3ABLERJ.js';
12
12
  import './chunk-UULVIT25.js';
13
- import './chunk-3IXU7WUC.js';
14
- import './chunk-US5QSLPV.js';
13
+ import './chunk-PDODDDHY.js';
14
+ import './chunk-JKLZ6YZ3.js';
15
15
  import './chunk-UEG2WC3G.js';
16
16
  import { defineAgentTool, AgentToolError } from '@burdenoff/fe-libs/shared/agent-tools';
17
17
  import { z } from 'zod';
@@ -1,4 +1,4 @@
1
- import { useFlowStore } from './chunk-5DVP2UYH.js';
1
+ import { useFlowStore } from './chunk-TGWDFLEX.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { cn } from '@burdenoff/fe-libs/utils';
@@ -1,10 +1,10 @@
1
- import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-NMQENSPW.js';
2
- import { QuotaExhaustedDialog } from './chunk-KAWRHIJZ.js';
1
+ import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-OTOQFZFO.js';
2
+ import { QuotaExhaustedDialog } from './chunk-JRLBPR5U.js';
3
3
  import { templatesControls } from './chunk-FNZZ5JJL.js';
4
- import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-YGOGJDN4.js';
4
+ import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-EIMTOK6E.js';
5
5
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
6
6
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
7
- import { BILLING_PLANS_PATH, useFluidGridsAnalytics, emitTemplateUsed, isQuotaExhaustedFailure } from './chunk-ZBPRNWKY.js';
7
+ import { BILLING_PLANS_PATH, useFluidGridsAnalytics, emitTemplateUsed, isQuotaExhaustedFailure } from './chunk-HSTP2RX3.js';
8
8
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS } from './chunk-5375NUIO.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
10
  import { useState, useEffect, useCallback, useMemo } from 'react';
@@ -1,6 +1,6 @@
1
- import { versionsOfWorkflow, VersionDiffDialog } from './chunk-TJAG2DQT.js';
1
+ import { versionsOfWorkflow, VersionDiffDialog } from './chunk-5Z4F24QT.js';
2
2
  import { historyControls } from './chunk-FNZZ5JJL.js';
3
- import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-YGOGJDN4.js';
3
+ import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-EIMTOK6E.js';
4
4
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
5
5
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
6
6
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,8 +1,8 @@
1
- import { canvasFromDefinition } from './chunk-JYYN3CLL.js';
1
+ import { canvasFromDefinition } from './chunk-6VIG44VF.js';
2
2
  import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-Z3ABLERJ.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
5
- import { describeOperationError, throwIfResultError } from './chunk-US5QSLPV.js';
4
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
+ import { describeOperationError, throwIfResultError } from './chunk-JKLZ6YZ3.js';
6
6
  import { memo, useState, useEffect, useMemo, useRef, useCallback } from 'react';
7
7
  import { ArrowLeftRight, Eye, RotateCcw, Loader2 } from 'lucide-react';
8
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Button, Badge, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Tabs, TabsList, TabsTrigger, TabsContent } from '@burdenoff/fe-libs/ui';
@@ -1,4 +1,4 @@
1
- import { mergeStickyNotes } from './chunk-5DVP2UYH.js';
1
+ import { mergeStickyNotes } from './chunk-TGWDFLEX.js';
2
2
 
3
3
  // src/builder/live/definition-canvas.ts
4
4
  function isRecord(value) {
@@ -1,8 +1,8 @@
1
- import { signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-ZBPRNWKY.js';
1
+ import { signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-HSTP2RX3.js';
2
2
  import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-Z3ABLERJ.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-3IXU7WUC.js';
5
- import { throwIfResultError, describeOperationError } from './chunk-US5QSLPV.js';
4
+ import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-PDODDDHY.js';
5
+ import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
6
6
  import { useState, useMemo, useRef, useCallback, useEffect } from 'react';
7
7
  import { Icon } from '@iconify/react';
8
8
  import { Button } from '@burdenoff/fe-libs/button';
@@ -579,7 +579,7 @@ function HistoryRow({
579
579
  href: event.payloadUrl ?? void 0,
580
580
  target: "_blank",
581
581
  rel: "noreferrer noopener",
582
- className: "text-action-primary-text hover:underline",
582
+ className: "text-text-link hover:text-text-linkHover hover:underline",
583
583
  children: tr(
584
584
  "fluidgrids.executions.history.offloadedPayload",
585
585
  "Download payload"
@@ -1,6 +1,6 @@
1
1
  import { NodeEndpointConfigsDocument, NodeEndpointConfigDocument, NodeManifestDocument, fetchAllNodeEndpointConfigs } from './chunk-Z3ABLERJ.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
3
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
4
4
  import { useMemo, useState, useCallback, useEffect } from 'react';
5
5
  import { useNavigate } from 'react-router';
6
6
  import { Icon } from '@iconify/react';
@@ -1,8 +1,8 @@
1
- import { useFluidGridsAnalytics, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-ZBPRNWKY.js';
1
+ import { useFluidGridsAnalytics, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-HSTP2RX3.js';
2
2
  import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, ImportWorkflowDocument, PreviewN8nImportDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-Z3ABLERJ.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
5
- import { throwIfResultError, emitFluidGridsEvent, emitOperationErrorEvent } from './chunk-US5QSLPV.js';
4
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
+ import { throwIfResultError, emitFluidGridsEvent, emitOperationErrorEvent } from './chunk-JKLZ6YZ3.js';
6
6
  import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
7
7
  import { useState, useCallback, useEffect, useMemo } from 'react';
8
8
 
@@ -1,6 +1,6 @@
1
1
  import { useTr } from './chunk-UULVIT25.js';
2
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
3
- import { throwIfResultError, describeOperationError } from './chunk-US5QSLPV.js';
2
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
3
+ import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
4
4
  import { useState, useCallback, useEffect, useMemo } from 'react';
5
5
  import { gql } from '@apollo/client';
6
6
  import { Button } from '@burdenoff/fe-libs/button';
@@ -1,13 +1,13 @@
1
- import { formatBytes, getFailureBreakdown, getTopFailingWorkflows, getTopFailingNodes, percentage, FailureTriagePanel, formatDuration, prettyJson } from './chunk-TCIBTMJI.js';
1
+ import { FailureTriagePanel } from './chunk-NZMUKAXG.js';
2
2
  import { aiSpendPeriod, AI_SPEND_RANGE_DAYS, evidenceFacts, monthlySavingLabel, evidenceWindowDays, shortRunId, DISMISS_REASONS, MAX_DISMISS_NOTE_LENGTH, aiCost, formatTokens, runsOfWorkflowPath } from './chunk-NZAYYUQ4.js';
3
- import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-4NNF7DIB.js';
3
+ import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-KJT5TAOE.js';
4
4
  import { proposalCanvasPath } from './chunk-GLYINMOR.js';
5
- import { useContinuousOptimisationEnabled } from './chunk-ZBPRNWKY.js';
5
+ import { useContinuousOptimisationEnabled } from './chunk-HSTP2RX3.js';
6
6
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-5375NUIO.js';
7
7
  import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, WorkspaceAiUsageDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-Z3ABLERJ.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
- import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
10
- import { throwIfResultError } from './chunk-US5QSLPV.js';
9
+ import { getFluidGridsClient } from './chunk-PDODDDHY.js';
10
+ import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
11
11
  import { useState, useMemo, useEffect, useRef, useCallback } from 'react';
12
12
  import { Icon } from '@iconify/react';
13
13
  import { Button } from '@burdenoff/fe-libs/button';
@@ -17,6 +17,71 @@ import { useNavigate, Link } from 'react-router';
17
17
  import { toast } from 'sonner';
18
18
  import { Lightbulb, Scissors, Timer, ShieldCheck, DatabaseZap, BadgeDollarSign, RotateCcw } from 'lucide-react';
19
19
 
20
+ // src/modules/observability/utils.ts
21
+ function percentage(value, total) {
22
+ if (total <= 0) return 0;
23
+ return Math.round(value / total * 1e3) / 10;
24
+ }
25
+ function getFailureBreakdown(runs) {
26
+ const counts = /* @__PURE__ */ new Map();
27
+ for (const run of runs) {
28
+ const key = run.errorType || "UNKNOWN";
29
+ counts.set(key, (counts.get(key) ?? 0) + 1);
30
+ }
31
+ return [...counts.entries()].map(([key, count]) => ({ key, count })).sort((a, b) => b.count - a.count || a.key.localeCompare(b.key));
32
+ }
33
+ function getTopFailingWorkflows(runs) {
34
+ const counts = /* @__PURE__ */ new Map();
35
+ for (const run of runs) {
36
+ const current = counts.get(run.workflowKey);
37
+ if (current) {
38
+ current.count += 1;
39
+ } else {
40
+ counts.set(run.workflowKey, {
41
+ workflowKey: run.workflowKey,
42
+ label: run.workflow?.name || run.workflowKey,
43
+ count: 1
44
+ });
45
+ }
46
+ }
47
+ return [...counts.values()].sort(
48
+ (a, b) => b.count - a.count || a.label.localeCompare(b.label)
49
+ );
50
+ }
51
+ function getTopFailingNodes(nodeUsageStats) {
52
+ return [...nodeUsageStats].filter((stat) => stat.failureCount > 0).sort(
53
+ (a, b) => b.failureCount - a.failureCount || a.nodeType.localeCompare(b.nodeType)
54
+ );
55
+ }
56
+ function formatDuration(seconds) {
57
+ if (seconds === null || seconds === void 0 || !Number.isFinite(seconds)) {
58
+ return "\u2014";
59
+ }
60
+ if (seconds < 1) return `${Math.round(seconds * 1e3)}ms`;
61
+ if (seconds < 60) return `${seconds.toFixed(1)}s`;
62
+ const minutes = Math.floor(seconds / 60);
63
+ const remainingSeconds = Math.round(seconds % 60);
64
+ return `${minutes}m ${remainingSeconds}s`;
65
+ }
66
+ function formatBytes(bytes) {
67
+ if (!Number.isFinite(bytes) || bytes < 0) return "\u2014";
68
+ if (bytes < 1024) return `${bytes} B`;
69
+ const units = ["KB", "MB", "GB", "TB"];
70
+ let value = bytes / 1024;
71
+ let unit = units[0];
72
+ for (let i = 1; i < units.length && value >= 1024; i += 1) {
73
+ value /= 1024;
74
+ unit = units[i];
75
+ }
76
+ return `${value.toFixed(value >= 10 ? 0 : 1)} ${unit}`;
77
+ }
78
+ function prettyJson(value) {
79
+ try {
80
+ return JSON.stringify(value, null, 2) ?? "null";
81
+ } catch {
82
+ return String(value);
83
+ }
84
+ }
20
85
  function valueLabel(value) {
21
86
  if (value === null || value === void 0) return "\u2014";
22
87
  if (typeof value === "object") return JSON.stringify(value);
@@ -1,10 +1,10 @@
1
- import { Card, FluidGridsMark } from './chunk-NMQENSPW.js';
1
+ import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-OTOQFZFO.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Button } from './chunk-BQXVT32O.js';
4
- import { useWorkflowDefinition } from './chunk-YGOGJDN4.js';
5
- import { FluidGridsProvider } from './chunk-ZBPRNWKY.js';
4
+ import { useWorkflowDefinition } from './chunk-EIMTOK6E.js';
5
+ import { FluidGridsProvider } from './chunk-HSTP2RX3.js';
6
6
  import { cn } from './chunk-JL7CASN5.js';
7
- import { useFlowStore } from './chunk-5DVP2UYH.js';
7
+ import { useFlowStore } from './chunk-TGWDFLEX.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
9
  import { useState, useRef, useEffect, useCallback } from 'react';
10
10
  import { MarkerType, ReactFlowProvider, useReactFlow, ReactFlow, Background, Controls, MiniMap, Handle, Position } from '@xyflow/react';
@@ -12,9 +12,10 @@ import { useShallow } from 'zustand/shallow';
12
12
  import { edgeColor, nodeCategoryColor } from '@burdenoff/fe-libs/shared/utils';
13
13
  import '@xyflow/react/dist/style.css';
14
14
  import { ArrowLeft, Save, Play, Trash2 } from 'lucide-react';
15
- import { useTheme } from '@burdenoff/fe-libs/shared/hooks/shell';
15
+ import { useThemeOrNull, useTheme } from '@burdenoff/fe-libs/shared/hooks/shell';
16
16
  import { Toaster as Toaster$1 } from 'sonner';
17
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
17
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
18
+ import { ThemeProvider } from '@burdenoff/fe-libs/shared/providers/shell';
18
19
  import { useParams, Navigate } from 'react-router';
19
20
  import { Icon } from '@iconify/react';
20
21
 
@@ -37,6 +38,11 @@ var Toaster = ({ ...props }) => {
37
38
  }
38
39
  );
39
40
  };
41
+ function EnsureThemeProvider({ children }) {
42
+ const hostTheme = useThemeOrNull();
43
+ if (hostTheme) return /* @__PURE__ */ jsx(Fragment, { children });
44
+ return /* @__PURE__ */ jsx(ThemeProvider, { children });
45
+ }
40
46
  var defaultEdgeOptions = {
41
47
  type: "smoothstep",
42
48
  markerEnd: {
@@ -154,6 +160,7 @@ function FlowBuilderInner({
154
160
  }) {
155
161
  const reactFlowInstance = useReactFlow();
156
162
  const tr = useTr();
163
+ useNodeSelectedEvent();
157
164
  const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);
158
165
  const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);
159
166
  const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);
@@ -475,10 +482,10 @@ function FlowBuilderInner({
475
482
  );
476
483
  }
477
484
  function WorkflowBuilderCore(props) {
478
- return /* @__PURE__ */ jsxs(ReactFlowProvider, { children: [
485
+ return /* @__PURE__ */ jsx(EnsureThemeProvider, { children: /* @__PURE__ */ jsxs(ReactFlowProvider, { children: [
479
486
  /* @__PURE__ */ jsx(FlowBuilderInner, { ...props }),
480
487
  /* @__PURE__ */ jsx(Toaster, { richColors: true, position: "bottom-center", duration: 2e3 })
481
- ] });
488
+ ] }) });
482
489
  }
483
490
  function WorkflowBuilder({
484
491
  workflowId,
@@ -561,4 +568,4 @@ function WorkflowSearchRedirect() {
561
568
  );
562
569
  }
563
570
 
564
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };
571
+ export { EnsureThemeProvider, WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };