@burdenoff/fluidgrids-fe-sdk 2026.1010.2 → 2026.1013.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.
Files changed (124) hide show
  1. package/README.md +37 -0
  2. package/dist/ExecutionDetailPage-3XZJRSMI.js +12 -0
  3. package/dist/ExecutionsListPage-WWVTV3NI.js +11 -0
  4. package/dist/{MissingNodesInstallModal-QAXLWW35.js → MissingNodesInstallModal-ODVBW4X4.js} +4 -6
  5. package/dist/{TemplateConfigurationModal-YO4S7Y2S.js → TemplateConfigurationModal-HUHXIL3K.js} +6 -8
  6. package/dist/{TemplateDetailPanel-KS3LQIBD.js → TemplateDetailPanel-RZDJEXGG.js} +3 -5
  7. package/dist/WorkflowBuilder-IMX3F4ZL.js +19 -0
  8. package/dist/WorkflowsList-V2ZYXPUA.js +14 -0
  9. package/dist/assistant.d.ts +87 -0
  10. package/dist/assistant.js +1 -0
  11. package/dist/{chunk-47RAP7HT.js → chunk-3FYOSTEG.js} +0 -2
  12. package/dist/{chunk-WNFZXH3Z.js → chunk-5WSBID2F.js} +4 -6
  13. package/dist/{chunk-KGD6CRSA.js → chunk-6N27YGMB.js} +0 -2
  14. package/dist/{chunk-NH5YCY37.js → chunk-7LSGGJ7D.js} +2 -4
  15. package/dist/chunk-AD3BXTJS.js +1 -0
  16. package/dist/{chunk-HFCQC4QQ.js → chunk-CADRCSD5.js} +9 -11
  17. package/dist/{chunk-LMO5ASOE.js → chunk-CFCUM4CN.js} +0 -2
  18. package/dist/chunk-D3UWK7GY.js +112 -0
  19. package/dist/{chunk-M2YFTRLL.js → chunk-DFITJZLD.js} +46 -13
  20. package/dist/{chunk-3P4YQ7DO.js → chunk-F2OUXT3V.js} +0 -2
  21. package/dist/{chunk-6LXMUIR3.js → chunk-FZBGMZRM.js} +0 -2
  22. package/dist/{chunk-DBOMRIP5.js → chunk-GDAFKRQO.js} +1 -3
  23. package/dist/{chunk-XQP33UJR.js → chunk-GEMNVFPK.js} +0 -2
  24. package/dist/{chunk-34KDHOQY.js → chunk-HPNEBTZB.js} +34 -6
  25. package/dist/{chunk-HK7IRZLW.js → chunk-HPUNEDCO.js} +40 -8
  26. package/dist/{chunk-P5PKRQAO.js → chunk-IEVSFCFS.js} +1 -3
  27. package/dist/{chunk-Z5HU6MUG.js → chunk-IPNGNROQ.js} +7 -9
  28. package/dist/{chunk-XBIHI224.js → chunk-IYTHK7B5.js} +4 -6
  29. package/dist/{chunk-3ZYUGTIT.js → chunk-JL7CASN5.js} +0 -2
  30. package/dist/{chunk-FAPYERDO.js → chunk-KZYQPCMK.js} +2 -4
  31. package/dist/{chunk-FA7S7YMY.js → chunk-NM5TH27W.js} +193 -107
  32. package/dist/{chunk-ZBMMEE5U.js → chunk-NTWG3CJX.js} +0 -2
  33. package/dist/chunk-PJAWNFJV.js +18 -0
  34. package/dist/{chunk-BQXHJIER.js → chunk-PXIFUMLA.js} +0 -2
  35. package/dist/{chunk-NK32XOQN.js → chunk-QBFAJNUC.js} +0 -2
  36. package/dist/{chunk-AANIWER2.js → chunk-SQFFJUAT.js} +1 -3
  37. package/dist/{chunk-W23ZXNKU.js → chunk-SYU74PMY.js} +1 -3
  38. package/dist/{chunk-UH3L52RJ.js → chunk-UHY5KIEA.js} +7 -9
  39. package/dist/{chunk-7YWBH2A5.js → chunk-UULVIT25.js} +0 -2
  40. package/dist/{chunk-DFGJKGWH.js → chunk-UZG3ZIQM.js} +0 -2
  41. package/dist/{chunk-6QCBKN3P.js → chunk-VTQVPNUQ.js} +1 -3
  42. package/dist/{chunk-T3ZCEAHR.js → chunk-WAHCVNA6.js} +4 -6
  43. package/dist/{chunk-DBGJT2D5.js → chunk-YPZJS5HJ.js} +27 -29
  44. package/dist/{chunk-2ORIFA6I.js → chunk-Z2KX5KUL.js} +3 -5
  45. package/dist/{chunk-CZ7APZ5B.js → chunk-ZB45VAXM.js} +4 -6
  46. package/dist/client-EYQDMR4O.js +1 -0
  47. package/dist/config-AOSNG5I7.js +1 -0
  48. package/dist/executions.js +15 -15
  49. package/dist/global-client-O2HCG5CJ.js +1 -0
  50. package/dist/{global-operations-IMNN4YME.js → global-operations-QNXHEKTE.js} +1 -3
  51. package/dist/history.js +9 -9
  52. package/dist/index.d.ts +4 -3
  53. package/dist/index.js +46 -46
  54. package/dist/nodes.js +4 -6
  55. package/dist/observability.js +6 -8
  56. package/dist/settings.js +8 -10
  57. package/dist/template-input-applicator-OBQUTYDA.js +1 -0
  58. package/dist/templates.js +20 -20
  59. package/dist/workflow-builder.js +20 -22
  60. package/dist/workflows-list.js +14 -14
  61. package/package.json +7 -2
  62. package/dist/ExecutionDetailPage-JB5UYJMF.js +0 -12
  63. package/dist/ExecutionDetailPage-JB5UYJMF.js.map +0 -1
  64. package/dist/ExecutionsListPage-RDGTW6UF.js +0 -11
  65. package/dist/ExecutionsListPage-RDGTW6UF.js.map +0 -1
  66. package/dist/MissingNodesInstallModal-QAXLWW35.js.map +0 -1
  67. package/dist/TemplateConfigurationModal-YO4S7Y2S.js.map +0 -1
  68. package/dist/TemplateDetailPanel-KS3LQIBD.js.map +0 -1
  69. package/dist/WorkflowBuilder-YF73DZWP.js +0 -21
  70. package/dist/WorkflowBuilder-YF73DZWP.js.map +0 -1
  71. package/dist/WorkflowsList-CE2CRD7W.js +0 -14
  72. package/dist/WorkflowsList-CE2CRD7W.js.map +0 -1
  73. package/dist/chunk-2ORIFA6I.js.map +0 -1
  74. package/dist/chunk-34KDHOQY.js.map +0 -1
  75. package/dist/chunk-3P4YQ7DO.js.map +0 -1
  76. package/dist/chunk-3ZYUGTIT.js.map +0 -1
  77. package/dist/chunk-47RAP7HT.js.map +0 -1
  78. package/dist/chunk-6LXMUIR3.js.map +0 -1
  79. package/dist/chunk-6QCBKN3P.js.map +0 -1
  80. package/dist/chunk-7YWBH2A5.js.map +0 -1
  81. package/dist/chunk-AANIWER2.js.map +0 -1
  82. package/dist/chunk-BQXHJIER.js.map +0 -1
  83. package/dist/chunk-CZ7APZ5B.js.map +0 -1
  84. package/dist/chunk-DBGJT2D5.js.map +0 -1
  85. package/dist/chunk-DBOMRIP5.js.map +0 -1
  86. package/dist/chunk-DFGJKGWH.js.map +0 -1
  87. package/dist/chunk-FA7S7YMY.js.map +0 -1
  88. package/dist/chunk-FAPYERDO.js.map +0 -1
  89. package/dist/chunk-HFCQC4QQ.js.map +0 -1
  90. package/dist/chunk-HK7IRZLW.js.map +0 -1
  91. package/dist/chunk-KGD6CRSA.js.map +0 -1
  92. package/dist/chunk-LMO5ASOE.js.map +0 -1
  93. package/dist/chunk-M2YFTRLL.js.map +0 -1
  94. package/dist/chunk-NH5YCY37.js.map +0 -1
  95. package/dist/chunk-NK32XOQN.js.map +0 -1
  96. package/dist/chunk-P5PKRQAO.js.map +0 -1
  97. package/dist/chunk-RXMBIJ5Z.js +0 -3
  98. package/dist/chunk-RXMBIJ5Z.js.map +0 -1
  99. package/dist/chunk-T3ZCEAHR.js.map +0 -1
  100. package/dist/chunk-UH3L52RJ.js.map +0 -1
  101. package/dist/chunk-W23ZXNKU.js.map +0 -1
  102. package/dist/chunk-WNFZXH3Z.js.map +0 -1
  103. package/dist/chunk-XBIHI224.js.map +0 -1
  104. package/dist/chunk-XQP33UJR.js.map +0 -1
  105. package/dist/chunk-Z5HU6MUG.js.map +0 -1
  106. package/dist/chunk-ZBMMEE5U.js.map +0 -1
  107. package/dist/client-YFAZ23OL.js +0 -3
  108. package/dist/client-YFAZ23OL.js.map +0 -1
  109. package/dist/config-SCVEDF5V.js +0 -3
  110. package/dist/config-SCVEDF5V.js.map +0 -1
  111. package/dist/executions.js.map +0 -1
  112. package/dist/global-client-OW43ZRDR.js +0 -3
  113. package/dist/global-client-OW43ZRDR.js.map +0 -1
  114. package/dist/global-operations-IMNN4YME.js.map +0 -1
  115. package/dist/history.js.map +0 -1
  116. package/dist/index.js.map +0 -1
  117. package/dist/nodes.js.map +0 -1
  118. package/dist/observability.js.map +0 -1
  119. package/dist/settings.js.map +0 -1
  120. package/dist/template-input-applicator-657KE4DM.js +0 -3
  121. package/dist/template-input-applicator-657KE4DM.js.map +0 -1
  122. package/dist/templates.js.map +0 -1
  123. package/dist/workflow-builder.js.map +0 -1
  124. package/dist/workflows-list.js.map +0 -1
package/README.md CHANGED
@@ -130,6 +130,43 @@ function App() {
130
130
  | `onWorkflowExecute` | `(runId, workflowId) => void` | No | Execute callback |
131
131
  | `className` | `string` | No | Custom CSS class |
132
132
 
133
+ ## Assistant page controls (optional)
134
+
135
+ Hosts that run an AI assistant can let people say "show failed runs" or "search
136
+ workflows for invoices" and have the page do exactly what a click on its own
137
+ control does. The SDK does **not** import any fe-libs assistant code (no new
138
+ fe-libs version floor): the host mounts a small bridge and maps the page's
139
+ description onto its own assistant.
140
+
141
+ ```tsx
142
+ import { FluidGridsAssistantBridge, type FgPageControlsSpec } from "@burdenoff/fluidgrids-fe-sdk/assistant";
143
+
144
+ // Stable identity (module constant or useCallback). Map the spec onto your
145
+ // assistant; return the function that removes exactly this registration.
146
+ const register = (spec: FgPageControlsSpec) => registerWithMyAssistant(spec);
147
+
148
+ <FluidGridsAssistantBridge register={register}>
149
+ <FluidGridsRoot ... />
150
+ </FluidGridsAssistantBridge>
151
+ ```
152
+
153
+ - Import from the `/assistant` subpath: it is a tiny entry, so a host's main
154
+ bundle does not pull the whole SDK in for a context provider. The pages share
155
+ its chunk (one bridge per app).
156
+ - With no `FluidGridsAssistantBridge` above, nothing happens and the pages work
157
+ as before.
158
+ - Pages that describe their controls: Workflows list (search, Status when more
159
+ than one status exists, Tag), Executions (search, Status, Workflow),
160
+ Templates (From Store / My Templates tabs, search, Category on My Templates),
161
+ History (search, Workflow). A page registers only what it shows right now and
162
+ unregisters when it unmounts.
163
+ - A spec only holds tabs, single-choice filters and a search setter, and each
164
+ setter is the page's own state setter. There is no create, save, delete, run,
165
+ retry, duplicate or approve in a spec.
166
+ - `FgEnumFilterSpec` / `FgTabsSpec` are structurally the fe-libs `EnumFilterSpec`
167
+ / `TabsSpec` (fe-libs >= 2026.1004.6 `appControls`), so a host can pass them
168
+ straight to `enumFilter` / `tabsOf`.
169
+
133
170
  ## Styling
134
171
 
135
172
  The SDK uses Tailwind CSS for styling. Make sure you have Tailwind configured in your project, or import the pre-built styles:
@@ -0,0 +1,12 @@
1
+ export { ExecutionDetailPage } from './chunk-IPNGNROQ.js';
2
+ import './chunk-NM5TH27W.js';
3
+ import './chunk-QBFAJNUC.js';
4
+ import './chunk-SYU74PMY.js';
5
+ import './chunk-JL7CASN5.js';
6
+ import './chunk-D3UWK7GY.js';
7
+ import './chunk-UZG3ZIQM.js';
8
+ import './chunk-PJAWNFJV.js';
9
+ import './chunk-F2OUXT3V.js';
10
+ import './chunk-CFCUM4CN.js';
11
+ import './chunk-UULVIT25.js';
12
+ import './chunk-NTWG3CJX.js';
@@ -0,0 +1,11 @@
1
+ export { ExecutionsListPage } from './chunk-ZB45VAXM.js';
2
+ import './chunk-NM5TH27W.js';
3
+ import './chunk-QBFAJNUC.js';
4
+ import './chunk-IYTHK7B5.js';
5
+ import './chunk-D3UWK7GY.js';
6
+ import './chunk-UZG3ZIQM.js';
7
+ import './chunk-PJAWNFJV.js';
8
+ import './chunk-F2OUXT3V.js';
9
+ import './chunk-CFCUM4CN.js';
10
+ import './chunk-UULVIT25.js';
11
+ import './chunk-NTWG3CJX.js';
@@ -1,7 +1,7 @@
1
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-NH5YCY37.js';
2
- import { Badge, Button } from './chunk-DBOMRIP5.js';
3
- import './chunk-3ZYUGTIT.js';
4
- import './chunk-7YWBH2A5.js';
1
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-7LSGGJ7D.js';
2
+ import { Badge, Button } from './chunk-GDAFKRQO.js';
3
+ import './chunk-JL7CASN5.js';
4
+ import './chunk-UULVIT25.js';
5
5
  import { Puzzle, Download, CheckCircle2, AlertTriangle, ShoppingCart, ExternalLink, Loader2 } from 'lucide-react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
 
@@ -217,5 +217,3 @@ function MissingNodesInstallModal({
217
217
  }
218
218
 
219
219
  export { MissingNodesInstallModal };
220
- //# sourceMappingURL=MissingNodesInstallModal-QAXLWW35.js.map
221
- //# sourceMappingURL=MissingNodesInstallModal-QAXLWW35.js.map
@@ -1,9 +1,9 @@
1
- import { Label } from './chunk-6QCBKN3P.js';
2
- import { Input } from './chunk-P5PKRQAO.js';
3
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-NH5YCY37.js';
4
- import { Badge, Button } from './chunk-DBOMRIP5.js';
5
- import './chunk-3ZYUGTIT.js';
6
- import { useTr } from './chunk-7YWBH2A5.js';
1
+ import { Label } from './chunk-VTQVPNUQ.js';
2
+ import { Input } from './chunk-IEVSFCFS.js';
3
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-7LSGGJ7D.js';
4
+ import { Badge, Button } from './chunk-GDAFKRQO.js';
5
+ import './chunk-JL7CASN5.js';
6
+ import { useTr } from './chunk-UULVIT25.js';
7
7
  import { useState, useEffect, useMemo } from 'react';
8
8
  import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
9
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -377,5 +377,3 @@ function TemplateInputField({
377
377
  }
378
378
 
379
379
  export { TemplateConfigurationModal };
380
- //# sourceMappingURL=TemplateConfigurationModal-YO4S7Y2S.js.map
381
- //# sourceMappingURL=TemplateConfigurationModal-YO4S7Y2S.js.map
@@ -1,6 +1,6 @@
1
- import { Button, Badge } from './chunk-DBOMRIP5.js';
2
- import './chunk-3ZYUGTIT.js';
3
- import { useTr } from './chunk-7YWBH2A5.js';
1
+ import { Button, Badge } from './chunk-GDAFKRQO.js';
2
+ import './chunk-JL7CASN5.js';
3
+ import { useTr } from './chunk-UULVIT25.js';
4
4
  import { X, Sparkles, Star, Download, Eye, User, Calendar, Tag, ExternalLink } from 'lucide-react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -204,5 +204,3 @@ function TemplateDetailPanel({
204
204
  }
205
205
 
206
206
  export { TemplateDetailPanel };
207
- //# sourceMappingURL=TemplateDetailPanel-KS3LQIBD.js.map
208
- //# sourceMappingURL=TemplateDetailPanel-KS3LQIBD.js.map
@@ -0,0 +1,19 @@
1
+ export { WorkflowBuilder } from './chunk-CADRCSD5.js';
2
+ import './chunk-6N27YGMB.js';
3
+ import './chunk-YPZJS5HJ.js';
4
+ import './chunk-GEMNVFPK.js';
5
+ import './chunk-IEVSFCFS.js';
6
+ import './chunk-7LSGGJ7D.js';
7
+ import './chunk-GDAFKRQO.js';
8
+ import './chunk-SQFFJUAT.js';
9
+ import './chunk-PXIFUMLA.js';
10
+ import './chunk-FZBGMZRM.js';
11
+ import './chunk-SYU74PMY.js';
12
+ import './chunk-JL7CASN5.js';
13
+ import './chunk-IYTHK7B5.js';
14
+ import './chunk-UZG3ZIQM.js';
15
+ import './chunk-3FYOSTEG.js';
16
+ import './chunk-F2OUXT3V.js';
17
+ import './chunk-CFCUM4CN.js';
18
+ import './chunk-UULVIT25.js';
19
+ import './chunk-NTWG3CJX.js';
@@ -0,0 +1,14 @@
1
+ export { WorkflowsList } from './chunk-HPUNEDCO.js';
2
+ import './chunk-6N27YGMB.js';
3
+ import './chunk-SQFFJUAT.js';
4
+ import './chunk-SYU74PMY.js';
5
+ import './chunk-JL7CASN5.js';
6
+ import './chunk-IYTHK7B5.js';
7
+ import './chunk-D3UWK7GY.js';
8
+ import './chunk-UZG3ZIQM.js';
9
+ import './chunk-PJAWNFJV.js';
10
+ import './chunk-3FYOSTEG.js';
11
+ import './chunk-F2OUXT3V.js';
12
+ import './chunk-CFCUM4CN.js';
13
+ import './chunk-UULVIT25.js';
14
+ import './chunk-NTWG3CJX.js';
@@ -0,0 +1,87 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ /**
4
+ * Assistant page-controls bridge (BOFF-8679 / BOFF-8988, P3).
5
+ *
6
+ * The pages in this SDK can tell a host's assistant which controls they show
7
+ * right now (tabs, filters, search), so a typed or spoken "show failed runs"
8
+ * does exactly what a click on the page's own Status dropdown does.
9
+ *
10
+ * The SDK deliberately does NOT import `@burdenoff/fe-libs/shared/assistant/*`:
11
+ * many consumers pin an older fe-libs, and a runtime import would raise their
12
+ * floor. Instead the host mounts {@link FluidGridsAssistantBridge} with a
13
+ * `register` function (the host maps a spec onto its own assistant), and the
14
+ * pages call {@link useFluidGridsPageControls}. The types below are structural
15
+ * mirrors of the fe-libs `TabsSpec` / `EnumFilterSpec`, so a host can pass a
16
+ * spec straight into `tabsOf` / `enumFilter` with no conversion.
17
+ *
18
+ * Contract:
19
+ * - No provider mounted: every hook call is a no-op (the SDK works unchanged).
20
+ * - A spec describes ONLY what the page shows on screen at this moment; a page
21
+ * passes `null` while it shows no toolbar.
22
+ * - Every `set` is the page's own state setter (the one its dropdown calls).
23
+ * There is no submit, save, create, delete, run or retry in a spec.
24
+ * - Pass a memoised spec; a new object every render re-registers every render.
25
+ */
26
+
27
+ /** One option of an enum filter, in the page's own words. */
28
+ interface FgFilterOption {
29
+ value: string;
30
+ label: string;
31
+ }
32
+ /** A single-choice filter (a dropdown or a chip group). */
33
+ interface FgEnumFilterSpec {
34
+ id: string;
35
+ /** The filter's own name on the page ("Status"). */
36
+ label: string;
37
+ /**
38
+ * The options the page offers. The NEUTRAL one ("All") must be included so
39
+ * the host can clear the filter; the host does not list it as a choice.
40
+ */
41
+ options: readonly FgFilterOption[];
42
+ /** The value that means "no filter". */
43
+ neutral: string;
44
+ /** The value applied now. */
45
+ value: string;
46
+ /** The page's own setter. */
47
+ set(value: string): void;
48
+ }
49
+ interface FgTabsSpec {
50
+ items: readonly {
51
+ id: string;
52
+ label: string;
53
+ }[];
54
+ /** The tab shown now. */
55
+ value: string;
56
+ /** The page's own setter. */
57
+ set(id: string): void;
58
+ }
59
+ interface FgPageControlsSpec {
60
+ /** The page's title in the product's words ("Workflows"). */
61
+ page: string;
62
+ tabs?: FgTabsSpec;
63
+ filters?: readonly FgEnumFilterSpec[];
64
+ /** The page's own search setter; `""` clears the search. */
65
+ search?(query: string): void;
66
+ }
67
+ /** Registers a page's controls; the returned function removes exactly that registration. */
68
+ type FgRegisterPageControls = (spec: FgPageControlsSpec) => () => void;
69
+ interface FluidGridsAssistantBridgeProps {
70
+ /**
71
+ * The host's registration function. Give it a STABLE identity (a module
72
+ * constant or `useCallback`): a new function every render re-registers the
73
+ * mounted page every render.
74
+ */
75
+ register: FgRegisterPageControls;
76
+ children: ReactNode;
77
+ }
78
+ /** Context provider a host mounts around the FluidGrids routes. */
79
+ declare const FluidGridsAssistantBridge: FC<FluidGridsAssistantBridgeProps>;
80
+ /**
81
+ * Register a page's controls for as long as the calling component is mounted
82
+ * (and `spec` is non-null). With no {@link FluidGridsAssistantBridge} above,
83
+ * this does nothing.
84
+ */
85
+ declare function useFluidGridsPageControls(spec: FgPageControlsSpec | null): void;
86
+
87
+ export { type FgEnumFilterSpec, type FgFilterOption, type FgPageControlsSpec, type FgRegisterPageControls, type FgTabsSpec, FluidGridsAssistantBridge, type FluidGridsAssistantBridgeProps, useFluidGridsPageControls };
@@ -0,0 +1 @@
1
+ export { FluidGridsAssistantBridge, useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
@@ -686,5 +686,3 @@ if (typeof window !== "undefined" && import.meta.env?.DEV) {
686
686
  }
687
687
 
688
688
  export { useFlowStore };
689
- //# sourceMappingURL=chunk-47RAP7HT.js.map
690
- //# sourceMappingURL=chunk-47RAP7HT.js.map
@@ -1,7 +1,7 @@
1
- import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-NK32XOQN.js';
2
- import { throwIfResultError, describeOperationError } from './chunk-LMO5ASOE.js';
3
- import { useTr } from './chunk-7YWBH2A5.js';
4
- import { getFluidGridsClient } from './chunk-ZBMMEE5U.js';
1
+ import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-QBFAJNUC.js';
2
+ import { throwIfResultError, describeOperationError } from './chunk-CFCUM4CN.js';
3
+ import { useTr } from './chunk-UULVIT25.js';
4
+ import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useCallback, useState, useMemo, useEffect } from 'react';
6
6
  import { Icon } from '@iconify/react';
7
7
  import { toast } from 'sonner';
@@ -725,5 +725,3 @@ function LogStreamingTab() {
725
725
  }
726
726
 
727
727
  export { LogStreamingTab, useDataSinkData, useDataSinks, useInsightsData, useLogStreamDestinationActions, useLogStreamDestinations, useRunReplayActions };
728
- //# sourceMappingURL=chunk-WNFZXH3Z.js.map
729
- //# sourceMappingURL=chunk-WNFZXH3Z.js.map
@@ -10,5 +10,3 @@ function decideMissingWorkflow(input) {
10
10
  }
11
11
 
12
12
  export { NEW_WORKFLOW_NAV, decideMissingWorkflow, isCreateIntent };
13
- //# sourceMappingURL=chunk-KGD6CRSA.js.map
14
- //# sourceMappingURL=chunk-KGD6CRSA.js.map
@@ -1,5 +1,5 @@
1
- import { cn } from './chunk-3ZYUGTIT.js';
2
- import { useTr } from './chunk-7YWBH2A5.js';
1
+ import { cn } from './chunk-JL7CASN5.js';
2
+ import { useTr } from './chunk-UULVIT25.js';
3
3
  import * as DialogPrimitive from '@radix-ui/react-dialog';
4
4
  import { XIcon } from 'lucide-react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -135,5 +135,3 @@ function DialogDescription({
135
135
  }
136
136
 
137
137
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
138
- //# sourceMappingURL=chunk-NH5YCY37.js.map
139
- //# sourceMappingURL=chunk-NH5YCY37.js.map
@@ -0,0 +1 @@
1
+
@@ -1,8 +1,8 @@
1
- import { isCreateIntent, decideMissingWorkflow } from './chunk-KGD6CRSA.js';
2
- import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-DBGJT2D5.js';
3
- import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-XBIHI224.js';
4
- import { useFlowStore } from './chunk-47RAP7HT.js';
5
- import { useTr } from './chunk-7YWBH2A5.js';
1
+ import { isCreateIntent, decideMissingWorkflow } from './chunk-6N27YGMB.js';
2
+ import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-YPZJS5HJ.js';
3
+ import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-IYTHK7B5.js';
4
+ import { useFlowStore } from './chunk-3FYOSTEG.js';
5
+ import { useTr } from './chunk-UULVIT25.js';
6
6
  import { useNavigate, useParams, useLocation } from 'react-router';
7
7
  import { toast } from 'sonner';
8
8
  import { Icon } from '@iconify/react';
@@ -12,7 +12,7 @@ import { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';
12
12
  import '@xyflow/react/dist/style.css';
13
13
 
14
14
  var LazyMissingNodesInstallModal = lazy(
15
- () => import('./MissingNodesInstallModal-QAXLWW35.js').then(
15
+ () => import('./MissingNodesInstallModal-ODVBW4X4.js').then(
16
16
  (m) => ({ default: m.MissingNodesInstallModal })
17
17
  )
18
18
  );
@@ -72,9 +72,9 @@ function WorkflowItem({
72
72
  setInstalling(true);
73
73
  setInstallErrors([]);
74
74
  try {
75
- const { getGlobalStoreClient } = await import('./global-client-OW43ZRDR.js');
76
- const { InstallWorkflowNodeDocument } = await import('./global-operations-IMNN4YME.js');
77
- const { getFluidGridsConfig } = await import('./config-SCVEDF5V.js');
75
+ const { getGlobalStoreClient } = await import('./global-client-O2HCG5CJ.js');
76
+ const { InstallWorkflowNodeDocument } = await import('./global-operations-QNXHEKTE.js');
77
+ const { getFluidGridsConfig } = await import('./config-AOSNG5I7.js');
78
78
  const storeClient = getGlobalStoreClient();
79
79
  const cfg = getFluidGridsConfig();
80
80
  for (let i = 0; i < nodesToInstall.length; i++) {
@@ -499,5 +499,3 @@ function WorkflowBuilder() {
499
499
  }
500
500
 
501
501
  export { WorkflowBuilder };
502
- //# sourceMappingURL=chunk-HFCQC4QQ.js.map
503
- //# sourceMappingURL=chunk-HFCQC4QQ.js.map
@@ -39,5 +39,3 @@ function throwIfResultError(result) {
39
39
  }
40
40
 
41
41
  export { describeOperationError, throwIfResultError };
42
- //# sourceMappingURL=chunk-LMO5ASOE.js.map
43
- //# sourceMappingURL=chunk-LMO5ASOE.js.map
@@ -0,0 +1,112 @@
1
+ // src/assistant/pageControlSpecs.ts
2
+ var FILTER_ALL = "__all__";
3
+ function nullableFilter(input) {
4
+ return {
5
+ id: input.id,
6
+ label: input.label,
7
+ neutral: FILTER_ALL,
8
+ value: input.value ?? FILTER_ALL,
9
+ options: [{ value: FILTER_ALL, label: input.allLabel }, ...input.options],
10
+ set: (value) => input.set(value === FILTER_ALL ? null : value)
11
+ };
12
+ }
13
+ function withFilters(filters) {
14
+ return filters.length > 0 ? { filters } : {};
15
+ }
16
+ function workflowsListControls(input) {
17
+ if (!input.toolbarShown) return null;
18
+ const filters = [];
19
+ if (input.status.options.length > 1) {
20
+ filters.push(nullableFilter({ id: "status", ...input.status }));
21
+ }
22
+ if (input.tag.options.length > 0) {
23
+ filters.push(nullableFilter({ id: "tag", ...input.tag }));
24
+ }
25
+ return {
26
+ page: input.page,
27
+ ...withFilters(filters),
28
+ search: input.search
29
+ };
30
+ }
31
+ function executionsControls(input) {
32
+ const { status, workflow } = input;
33
+ const filters = [
34
+ {
35
+ id: "status",
36
+ label: status.label,
37
+ neutral: status.neutral,
38
+ value: status.value,
39
+ options: status.options,
40
+ set: (value) => {
41
+ const next = status.options.find((option) => option.value === value);
42
+ if (next) status.set(next.value);
43
+ }
44
+ }
45
+ ];
46
+ if (workflow.options.length > 0) {
47
+ filters.push({
48
+ id: "workflow",
49
+ label: workflow.label,
50
+ neutral: "",
51
+ value: workflow.value,
52
+ options: [{ value: "", label: workflow.allLabel }, ...workflow.options],
53
+ set: workflow.set
54
+ });
55
+ }
56
+ return { page: input.page, filters, search: input.search };
57
+ }
58
+ function templatesControls(input) {
59
+ const { source, category } = input;
60
+ return {
61
+ page: input.page,
62
+ tabs: {
63
+ items: [
64
+ { id: "store", label: source.storeLabel },
65
+ { id: "workspace", label: source.workspaceLabel }
66
+ ],
67
+ value: source.value,
68
+ set: (id) => {
69
+ if (id === "store" || id === "workspace") source.set(id);
70
+ }
71
+ },
72
+ // The Category chips are rendered on My Templates only.
73
+ ...source.value === "workspace" ? {
74
+ filters: [
75
+ {
76
+ id: "category",
77
+ label: category.label,
78
+ neutral: category.neutral,
79
+ value: category.value,
80
+ options: category.options,
81
+ set: category.set
82
+ }
83
+ ]
84
+ } : {},
85
+ search: input.search
86
+ };
87
+ }
88
+ function historyControls(input) {
89
+ const { workflow } = input;
90
+ return {
91
+ page: input.page,
92
+ // A select holding only "All Workflows" has nothing to choose.
93
+ ...withFilters(
94
+ workflow.options.length > 0 ? [
95
+ {
96
+ id: "workflow",
97
+ label: workflow.label,
98
+ neutral: workflow.neutral,
99
+ value: workflow.value,
100
+ options: [
101
+ { value: workflow.neutral, label: workflow.allLabel },
102
+ ...workflow.options
103
+ ],
104
+ set: workflow.set
105
+ }
106
+ ] : []
107
+ ),
108
+ search: input.search
109
+ };
110
+ }
111
+
112
+ export { executionsControls, historyControls, templatesControls, workflowsListControls };
@@ -1,6 +1,8 @@
1
- import { useWorkflowDefinitions } from './chunk-XBIHI224.js';
2
- import { getFluidGridsConfig } from './chunk-DFGJKGWH.js';
3
- import { useTr } from './chunk-7YWBH2A5.js';
1
+ import { useWorkflowDefinitions } from './chunk-IYTHK7B5.js';
2
+ import { historyControls } from './chunk-D3UWK7GY.js';
3
+ import { getFluidGridsConfig } from './chunk-UZG3ZIQM.js';
4
+ import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
5
+ import { useTr } from './chunk-UULVIT25.js';
4
6
  import { useState, useMemo, useCallback } from 'react';
5
7
  import { useNavigate } from 'react-router';
6
8
  import { Icon } from '@iconify/react';
@@ -153,6 +155,45 @@ function HistoryPage() {
153
155
  },
154
156
  [actorProfiles]
155
157
  );
158
+ const handleSearchChange = useCallback((value) => {
159
+ setSearch(value);
160
+ setPage(0);
161
+ }, []);
162
+ const handleWorkflowFilterChange = useCallback((value) => {
163
+ setWorkflowFilter(value);
164
+ setPage(0);
165
+ }, []);
166
+ const assistantControls = useMemo(
167
+ () => historyControls({
168
+ page: tr("fluidgrids.history.historyPage.title", "Version History"),
169
+ search: handleSearchChange,
170
+ workflow: {
171
+ label: tr(
172
+ "fluidgrids.executions.executionTable.colWorkflow",
173
+ "Workflow"
174
+ ),
175
+ allLabel: tr(
176
+ "fluidgrids.history.historyPage.workflowFilterAllOption",
177
+ "All Workflows"
178
+ ),
179
+ neutral: "all",
180
+ options: distinctWorkflows.map((w) => ({
181
+ value: w.workflowKey,
182
+ label: w.name
183
+ })),
184
+ value: workflowFilter,
185
+ set: handleWorkflowFilterChange
186
+ }
187
+ }),
188
+ [
189
+ tr,
190
+ distinctWorkflows,
191
+ workflowFilter,
192
+ handleSearchChange,
193
+ handleWorkflowFilterChange
194
+ ]
195
+ );
196
+ useFluidGridsPageControls(assistantControls);
156
197
  const filteredRows = useMemo(() => {
157
198
  let rows = allRows;
158
199
  if (workflowFilter !== "all") {
@@ -241,10 +282,7 @@ function HistoryPage() {
241
282
  "Search by name, version, key, or author..."
242
283
  ),
243
284
  value: search,
244
- onChange: (e) => {
245
- setSearch(e.target.value);
246
- setPage(0);
247
- },
285
+ onChange: (e) => handleSearchChange(e.target.value),
248
286
  className: "pl-10 bg-background-secondary border-border-secondary"
249
287
  }
250
288
  )
@@ -255,10 +293,7 @@ function HistoryPage() {
255
293
  Select,
256
294
  {
257
295
  value: workflowFilter,
258
- onValueChange: (val) => {
259
- setWorkflowFilter(val);
260
- setPage(0);
261
- },
296
+ onValueChange: handleWorkflowFilterChange,
262
297
  children: [
263
298
  /* @__PURE__ */ jsx(
264
299
  SelectTrigger,
@@ -470,5 +505,3 @@ function HistoryPage() {
470
505
  }
471
506
 
472
507
  export { HistoryPage };
473
- //# sourceMappingURL=chunk-M2YFTRLL.js.map
474
- //# sourceMappingURL=chunk-M2YFTRLL.js.map
@@ -1387,5 +1387,3 @@ function useWorkflowDefinitionsTagsSuspenseQuery(baseOptions) {
1387
1387
  }
1388
1388
 
1389
1389
  export { ActivateWorkflowDefinitionDocument, ActiveExecutionsDocument, AvailableFluidgridsTagsDocument, CancelExecutionDocument, CreateFluidgridsTagDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DashboardSummaryDocument, DeactivateWorkflowDefinitionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, EventRegistrationsDocument, ExecuteStepDocument, ExecutionDetailDocument, ExecutionLogsDocument, ExecutionStatsDocument, ExecutionsListDocument, FluidgridsAvailableTagFieldsFragmentDoc, FluidgridsEntityTagsDocument, FluidgridsTagAssignmentFieldsFragmentDoc, ImportWorkflowDocument, ImportWorkflowTemplateDocument, NodeEndpointConfigDocument, NodeEndpointConfigsDocument, NodeManifestDocument, NodeSchemaIntrospectionDocument, NodeStatesDocument, NodeUsageStatusDocument, PauseExecutionDocument, PinNodeDataDocument, RegisterNodeDocument, RemoveNodeFromWorkflowsDocument, ReplaceFluidgridsEntityTagsDocument, RestoreWorkflowVersionDocument, ResumeExecutionDocument, RetryNodeDocument, RunFromNodeDocument, RunFromNodeEligibilityDocument, RunLogAppendedDocument, RunLogLineFieldsFragmentDoc, RunLogsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, TerminateExecutionDocument, TriggerWorkflowDocument, UnpinNodeDataDocument, UntagFluidgridsEntityDocument, UpdateWorkflowDefinitionDocument, UsageTimeSeriesDocument, WorkflowDefinitionDocument, WorkflowDefinitionsDocument, WorkflowDefinitionsTagsDocument, WorkflowPinnedDataDocument, WorkflowRunDocument, WorkflowRunsDocument, WorkflowVersionsDocument, useActivateWorkflowDefinitionMutation, useActiveExecutionsLazyQuery, useActiveExecutionsQuery, useActiveExecutionsSuspenseQuery, useAvailableFluidgridsTagsLazyQuery, useAvailableFluidgridsTagsQuery, useAvailableFluidgridsTagsSuspenseQuery, useCancelExecutionMutation, useCreateFluidgridsTagMutation, useCreateWorkflowDefinitionMutation, useCreateWorkflowVersionMutation, useDashboardSummaryLazyQuery, useDashboardSummaryQuery, useDashboardSummarySuspenseQuery, useDeactivateWorkflowDefinitionMutation, useDeleteWorkflowDefinitionMutation, useDuplicateWorkflowMutation, useEventRegistrationsLazyQuery, useEventRegistrationsQuery, useEventRegistrationsSuspenseQuery, useExecuteStepMutation, useExecutionDetailLazyQuery, useExecutionDetailQuery, useExecutionDetailSuspenseQuery, useExecutionLogsLazyQuery, useExecutionLogsQuery, useExecutionLogsSuspenseQuery, useExecutionStatsLazyQuery, useExecutionStatsQuery, useExecutionStatsSuspenseQuery, useExecutionsListLazyQuery, useExecutionsListQuery, useExecutionsListSuspenseQuery, useFluidgridsEntityTagsLazyQuery, useFluidgridsEntityTagsQuery, useFluidgridsEntityTagsSuspenseQuery, useImportWorkflowMutation, useImportWorkflowTemplateMutation, useNodeEndpointConfigLazyQuery, useNodeEndpointConfigQuery, useNodeEndpointConfigSuspenseQuery, useNodeEndpointConfigsLazyQuery, useNodeEndpointConfigsQuery, useNodeEndpointConfigsSuspenseQuery, useNodeManifestLazyQuery, useNodeManifestQuery, useNodeManifestSuspenseQuery, useNodeSchemaIntrospectionLazyQuery, useNodeSchemaIntrospectionQuery, useNodeSchemaIntrospectionSuspenseQuery, useNodeStatesLazyQuery, useNodeStatesQuery, useNodeStatesSuspenseQuery, useNodeUsageStatusLazyQuery, useNodeUsageStatusQuery, useNodeUsageStatusSuspenseQuery, usePauseExecutionMutation, usePinNodeDataMutation, useRegisterNodeMutation, useRemoveNodeFromWorkflowsMutation, useReplaceFluidgridsEntityTagsMutation, useRestoreWorkflowVersionMutation, useResumeExecutionMutation, useRetryNodeMutation, useRunFromNodeEligibilityLazyQuery, useRunFromNodeEligibilityQuery, useRunFromNodeEligibilitySuspenseQuery, useRunFromNodeMutation, useRunLogAppendedSubscription, useRunLogsLazyQuery, useRunLogsQuery, useRunLogsSuspenseQuery, useSearchFluidgridsTagsLazyQuery, useSearchFluidgridsTagsQuery, useSearchFluidgridsTagsSuspenseQuery, useTagFluidgridsEntityMutation, useTerminateExecutionMutation, useTriggerWorkflowMutation, useUnpinNodeDataMutation, useUntagFluidgridsEntityMutation, useUpdateWorkflowDefinitionMutation, useUsageTimeSeriesLazyQuery, useUsageTimeSeriesQuery, useUsageTimeSeriesSuspenseQuery, useWorkflowDefinitionLazyQuery, useWorkflowDefinitionQuery, useWorkflowDefinitionSuspenseQuery, useWorkflowDefinitionsLazyQuery, useWorkflowDefinitionsQuery, useWorkflowDefinitionsSuspenseQuery, useWorkflowDefinitionsTagsLazyQuery, useWorkflowDefinitionsTagsQuery, useWorkflowDefinitionsTagsSuspenseQuery, useWorkflowPinnedDataLazyQuery, useWorkflowPinnedDataQuery, useWorkflowPinnedDataSuspenseQuery, useWorkflowRunLazyQuery, useWorkflowRunQuery, useWorkflowRunSuspenseQuery, useWorkflowRunsLazyQuery, useWorkflowRunsQuery, useWorkflowRunsSuspenseQuery, useWorkflowVersionsLazyQuery, useWorkflowVersionsQuery, useWorkflowVersionsSuspenseQuery };
1390
- //# sourceMappingURL=chunk-3P4YQ7DO.js.map
1391
- //# sourceMappingURL=chunk-3P4YQ7DO.js.map
@@ -321,5 +321,3 @@ function useGetWorkflowTemplateDetailSuspenseQuery(baseOptions) {
321
321
  }
322
322
 
323
323
  export { BrowseWorkflowNodesDocument, BrowseWorkflowTemplatesDocument, CreateStoreOrderDocument, GetMyNodeInstallationsDocument, GetNodeInstallableVersionsDocument, GetWorkflowTemplateDetailDocument, InstallPurchasedNodeDocument, InstallWorkflowNodeDocument, RecordDownloadDocument, UninstallWorkflowNodeDocument, useBrowseWorkflowNodesLazyQuery, useBrowseWorkflowNodesQuery, useBrowseWorkflowNodesSuspenseQuery, useBrowseWorkflowTemplatesLazyQuery, useBrowseWorkflowTemplatesQuery, useBrowseWorkflowTemplatesSuspenseQuery, useCreateStoreOrderMutation, useGetMyNodeInstallationsLazyQuery, useGetMyNodeInstallationsQuery, useGetMyNodeInstallationsSuspenseQuery, useGetNodeInstallableVersionsLazyQuery, useGetNodeInstallableVersionsQuery, useGetNodeInstallableVersionsSuspenseQuery, useGetWorkflowTemplateDetailLazyQuery, useGetWorkflowTemplateDetailQuery, useGetWorkflowTemplateDetailSuspenseQuery, useInstallPurchasedNodeMutation, useInstallWorkflowNodeMutation, useRecordDownloadMutation, useUninstallWorkflowNodeMutation };
324
- //# sourceMappingURL=chunk-6LXMUIR3.js.map
325
- //# sourceMappingURL=chunk-6LXMUIR3.js.map
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-3ZYUGTIT.js';
1
+ import { cn } from './chunk-JL7CASN5.js';
2
2
  import { Slot } from '@radix-ui/react-slot';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -74,5 +74,3 @@ function Badge({ className, variant, ...props }) {
74
74
  }
75
75
 
76
76
  export { Badge, Button, badgeVariants, buttonVariants };
77
- //# sourceMappingURL=chunk-DBOMRIP5.js.map
78
- //# sourceMappingURL=chunk-DBOMRIP5.js.map
@@ -53,5 +53,3 @@ function generateWorkflowKey(name) {
53
53
  }
54
54
 
55
55
  export { applyTemplateInputs, deepClone, generateWorkflowKey };
56
- //# sourceMappingURL=chunk-XQP33UJR.js.map
57
- //# sourceMappingURL=chunk-XQP33UJR.js.map