@burdenoff/fluidgrids-fe-sdk 2026.1110.7 → 2026.1110.8

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.
@@ -1,7 +1,7 @@
1
- export { WorkflowBuilder } from './chunk-VVJRZM6D.js';
1
+ export { WorkflowBuilder } from './chunk-KQ43EVRO.js';
2
2
  import './chunk-NRI7AUBH.js';
3
3
  import './chunk-PIKYQE7P.js';
4
- import './chunk-IK7BHEVM.js';
4
+ import './chunk-TNFMGVWW.js';
5
5
  import './chunk-JNSHR2J2.js';
6
6
  import './chunk-GEMNVFPK.js';
7
7
  import './chunk-B6CCE2RW.js';
@@ -9,8 +9,8 @@ import './chunk-IEVSFCFS.js';
9
9
  import './chunk-YXMFRQYV.js';
10
10
  import './chunk-TFCIZFDM.js';
11
11
  import './chunk-QUYK5PAZ.js';
12
- import './chunk-MWZFI4ZK.js';
13
- import './chunk-CVTQYGJD.js';
12
+ import './chunk-4FDWZFBP.js';
13
+ import './chunk-CRLEVO22.js';
14
14
  import './chunk-LSRF7JLO.js';
15
15
  import './chunk-KZCNJAMK.js';
16
16
  import './chunk-NK7IQUZF.js';
@@ -1,4 +1,4 @@
1
- import { TabButton, ReadOnlyFieldset, NodeSettingsPanel, NodeParamsForm, SchedulePanel, SCHEDULE_NODE_TYPE } from './chunk-CVTQYGJD.js';
1
+ import { TabButton, ReadOnlyFieldset, NodeSettingsPanel, NodeParamsForm, SchedulePanel, SCHEDULE_NODE_TYPE } from './chunk-CRLEVO22.js';
2
2
  import { nodeTitle, FieldTree } from './chunk-LSRF7JLO.js';
3
3
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-ERT444RG.js';
4
4
  import { usePhaseCFlags } from './chunk-X7LWPPVE.js';
@@ -748,8 +748,8 @@ function useWebhookTestListener(target, onReceived) {
748
748
  var SECTION_LABEL2 = "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground";
749
749
  function isSafeHttpUrl(value) {
750
750
  try {
751
- const parsed = new URL(value);
752
- return parsed.protocol === "https:" || parsed.protocol === "http:";
751
+ const parsed2 = new URL(value);
752
+ return parsed2.protocol === "https:" || parsed2.protocol === "http:";
753
753
  } catch {
754
754
  return false;
755
755
  }
@@ -2263,8 +2263,8 @@ function toNumber(value) {
2263
2263
  if (typeof value === "string") {
2264
2264
  const trimmed = value.trim();
2265
2265
  if (trimmed === "") return void 0;
2266
- const parsed = Number(trimmed);
2267
- return Number.isFinite(parsed) ? parsed : void 0;
2266
+ const parsed2 = Number(trimmed);
2267
+ return Number.isFinite(parsed2) ? parsed2 : void 0;
2268
2268
  }
2269
2269
  return void 0;
2270
2270
  }
@@ -2983,12 +2983,12 @@ function AssertRulesEditor({
2983
2983
  useEffect(() => {
2984
2984
  if (value === written.current) return;
2985
2985
  written.current = value;
2986
- const parsed = readAssertRulesSetting(value);
2986
+ const parsed2 = readAssertRulesSetting(value);
2987
2987
  setJsonText(textOf(value));
2988
- if (parsed === null) {
2988
+ if (parsed2 === null) {
2989
2989
  setJsonView(true);
2990
2990
  } else {
2991
- setRows(rowsFromRules(parsed));
2991
+ setRows(rowsFromRules(parsed2));
2992
2992
  }
2993
2993
  }, [value]);
2994
2994
  const write = (next) => {
@@ -3018,9 +3018,9 @@ function AssertRulesEditor({
3018
3018
  } : "problem" in check ? describeAssertRuleProblem(check.problem) : null;
3019
3019
  const toggleView = () => {
3020
3020
  if (jsonView) {
3021
- const parsed = readAssertRulesSetting(jsonText);
3022
- if (parsed === null) return;
3023
- setRows(rowsFromRules(parsed));
3021
+ const parsed2 = readAssertRulesSetting(jsonText);
3022
+ if (parsed2 === null) return;
3023
+ setRows(rowsFromRules(parsed2));
3024
3024
  setJsonView(false);
3025
3025
  } else {
3026
3026
  setJsonText(textOf(serialiseRows(rows, value)));
@@ -3235,6 +3235,250 @@ function AssertRulesEditor({
3235
3235
  }
3236
3236
  );
3237
3237
  }
3238
+
3239
+ // src/builder/lib/tool-approval-rules.ts
3240
+ var TOOL_APPROVAL_RULES = [
3241
+ "always",
3242
+ "ask",
3243
+ "never"
3244
+ ];
3245
+ function isRule(value) {
3246
+ return typeof value === "string" && TOOL_APPROVAL_RULES.includes(value);
3247
+ }
3248
+ function isRecord2(value) {
3249
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3250
+ }
3251
+ function parsed(value) {
3252
+ if (typeof value !== "string") return value;
3253
+ try {
3254
+ return JSON.parse(value);
3255
+ } catch {
3256
+ return void 0;
3257
+ }
3258
+ }
3259
+ function readToolApprovalRows(value) {
3260
+ const raw = parsed(value);
3261
+ if (Array.isArray(raw)) {
3262
+ return raw.filter(isRecord2).map((row) => ({
3263
+ toolName: typeof row.toolName === "string" ? row.toolName : "",
3264
+ rule: isRule(row.rule) ? row.rule : "ask"
3265
+ }));
3266
+ }
3267
+ if (isRecord2(raw)) {
3268
+ return Object.entries(raw).map(([toolName, rule]) => ({
3269
+ toolName,
3270
+ rule: isRule(rule) ? rule : "ask"
3271
+ }));
3272
+ }
3273
+ return [];
3274
+ }
3275
+ function connectedToolNames(agentId, nodes, edges) {
3276
+ const byId = new Map(nodes.map((node) => [node.id, node]));
3277
+ const names = /* @__PURE__ */ new Set();
3278
+ for (const edge of edges) {
3279
+ if (edge.source !== agentId || edge.sourceHandle !== "Tool") continue;
3280
+ const node = edge.target ? byId.get(edge.target) : void 0;
3281
+ const args = isRecord2(node?.data) ? node.data.args : void 0;
3282
+ const state = isRecord2(args) ? args.state : void 0;
3283
+ const name = isRecord2(state) ? state.toolName : void 0;
3284
+ if (typeof name === "string" && name.trim()) names.add(name.trim());
3285
+ }
3286
+ return [...names];
3287
+ }
3288
+ function duplicateToolNames(rows) {
3289
+ const seen = /* @__PURE__ */ new Set();
3290
+ const duplicated = /* @__PURE__ */ new Set();
3291
+ for (const row of rows) {
3292
+ const name = row.toolName.trim();
3293
+ if (!name) continue;
3294
+ if (seen.has(name)) duplicated.add(name);
3295
+ seen.add(name);
3296
+ }
3297
+ return [...duplicated];
3298
+ }
3299
+ function withKeys(list, counter) {
3300
+ return list.map((row) => ({ ...row, key: counter.current++ }));
3301
+ }
3302
+ var rowInput3 = "rounded-md border border-input bg-background px-2 py-1 text-xs text-foreground outline-none focus:border-primary";
3303
+ function ToolApprovalRulesEditor({
3304
+ value,
3305
+ onChange,
3306
+ toolNames,
3307
+ testIdPrefix = "ndv"
3308
+ }) {
3309
+ const tr = useTr();
3310
+ const listId = useId();
3311
+ const nextKey = useRef(0);
3312
+ const [rows, setRows] = useState(
3313
+ () => withKeys(readToolApprovalRows(value), nextKey)
3314
+ );
3315
+ const written = useRef(value);
3316
+ useEffect(() => {
3317
+ if (value === written.current) return;
3318
+ written.current = value;
3319
+ setRows(withKeys(readToolApprovalRows(value), nextKey));
3320
+ }, [value]);
3321
+ const write = (next) => {
3322
+ setRows(next);
3323
+ const stored = next.map(({ toolName, rule }) => ({ toolName, rule }));
3324
+ written.current = stored;
3325
+ onChange(stored);
3326
+ };
3327
+ const ruleLabel = (rule) => {
3328
+ switch (rule) {
3329
+ case "always":
3330
+ return tr(
3331
+ "fluidgrids.builder.toolApproval.ruleAlways",
3332
+ "Run without asking"
3333
+ );
3334
+ case "ask":
3335
+ return tr(
3336
+ "fluidgrids.builder.toolApproval.ruleAsk",
3337
+ "Ask for approval"
3338
+ );
3339
+ case "never":
3340
+ return tr("fluidgrids.builder.toolApproval.ruleNever", "Never run");
3341
+ }
3342
+ };
3343
+ const named = new Set(rows.map((row) => row.toolName.trim()));
3344
+ const unlisted = toolNames.filter((name) => !named.has(name));
3345
+ const duplicates = duplicateToolNames(rows);
3346
+ return /* @__PURE__ */ jsxs(
3347
+ "div",
3348
+ {
3349
+ className: "flex flex-col gap-2",
3350
+ "data-testid": `${testIdPrefix}-tool-approval-rules`,
3351
+ children: [
3352
+ rows.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: tr(
3353
+ "fluidgrids.builder.toolApproval.empty",
3354
+ "No rules yet: every tool follows the rule for other tools."
3355
+ ) }),
3356
+ duplicates.length > 0 && /* @__PURE__ */ jsx(
3357
+ "p",
3358
+ {
3359
+ role: "status",
3360
+ className: "text-xs text-status-warning-text",
3361
+ "data-testid": `${testIdPrefix}-tool-approval-duplicates`,
3362
+ children: tr(
3363
+ "fluidgrids.builder.toolApproval.duplicates",
3364
+ "Listed more than once: {{names}}. The strictest of their rules applies (never, then ask, then always).",
3365
+ { names: duplicates.join(", ") }
3366
+ )
3367
+ }
3368
+ ),
3369
+ /* @__PURE__ */ jsx("datalist", { id: listId, children: toolNames.map((name) => /* @__PURE__ */ jsx("option", { value: name }, name)) }),
3370
+ rows.map((row, index) => /* @__PURE__ */ jsxs(
3371
+ "div",
3372
+ {
3373
+ className: "flex items-center gap-1.5",
3374
+ "data-testid": `${testIdPrefix}-tool-approval-rule-${index}`,
3375
+ children: [
3376
+ /* @__PURE__ */ jsx(
3377
+ "input",
3378
+ {
3379
+ type: "text",
3380
+ value: row.toolName,
3381
+ list: listId,
3382
+ placeholder: tr(
3383
+ "fluidgrids.builder.toolApproval.toolPlaceholder",
3384
+ "Tool name"
3385
+ ),
3386
+ "aria-label": tr(
3387
+ "fluidgrids.builder.toolApproval.toolLabel",
3388
+ "Tool {{number}}",
3389
+ { number: index + 1 }
3390
+ ),
3391
+ onChange: (event) => write(
3392
+ rows.map(
3393
+ (r, i) => i === index ? { ...r, toolName: event.target.value } : r
3394
+ )
3395
+ ),
3396
+ className: cn$1(rowInput3, "min-w-0 flex-1 font-mono")
3397
+ }
3398
+ ),
3399
+ /* @__PURE__ */ jsx(
3400
+ "select",
3401
+ {
3402
+ value: row.rule,
3403
+ "aria-label": tr(
3404
+ "fluidgrids.builder.toolApproval.ruleLabel",
3405
+ "Rule for tool {{number}}",
3406
+ { number: index + 1 }
3407
+ ),
3408
+ onChange: (event) => {
3409
+ const rule = TOOL_APPROVAL_RULES.find(
3410
+ (candidate) => candidate === event.target.value
3411
+ );
3412
+ if (!rule) return;
3413
+ write(rows.map((r, i) => i === index ? { ...r, rule } : r));
3414
+ },
3415
+ className: rowInput3,
3416
+ children: TOOL_APPROVAL_RULES.map((rule) => /* @__PURE__ */ jsx("option", { value: rule, children: ruleLabel(rule) }, rule))
3417
+ }
3418
+ ),
3419
+ /* @__PURE__ */ jsx(
3420
+ "button",
3421
+ {
3422
+ type: "button",
3423
+ onClick: () => write(rows.filter((_, i) => i !== index)),
3424
+ "aria-label": tr(
3425
+ "fluidgrids.builder.toolApproval.remove",
3426
+ "Remove the rule for tool {{number}}",
3427
+ { number: index + 1 }
3428
+ ),
3429
+ className: "rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground",
3430
+ children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
3431
+ }
3432
+ )
3433
+ ]
3434
+ },
3435
+ row.key
3436
+ )),
3437
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-1.5", children: /* @__PURE__ */ jsxs(
3438
+ "button",
3439
+ {
3440
+ type: "button",
3441
+ onClick: () => write([
3442
+ ...rows,
3443
+ ...withKeys(
3444
+ [{ toolName: unlisted[0] ?? "", rule: "ask" }],
3445
+ nextKey
3446
+ )
3447
+ ]),
3448
+ className: "inline-flex items-center gap-1 text-xs text-primary hover:underline",
3449
+ "data-testid": `${testIdPrefix}-tool-approval-add`,
3450
+ children: [
3451
+ /* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": "true" }),
3452
+ tr("fluidgrids.builder.toolApproval.add", "Add a tool")
3453
+ ]
3454
+ }
3455
+ ) })
3456
+ ]
3457
+ }
3458
+ );
3459
+ }
3460
+ function AgentToolApprovalRules({
3461
+ agentId,
3462
+ value,
3463
+ onChange,
3464
+ testIdPrefix
3465
+ }) {
3466
+ const nodes = useFlowStore((state) => state.workflow.nodes);
3467
+ const edges = useFlowStore((state) => state.workflow.edges);
3468
+ const toolNames = useMemo(
3469
+ () => agentId ? connectedToolNames(agentId, nodes, edges) : [],
3470
+ [agentId, nodes, edges]
3471
+ );
3472
+ return /* @__PURE__ */ jsx(
3473
+ ToolApprovalRulesEditor,
3474
+ {
3475
+ value,
3476
+ onChange,
3477
+ toolNames,
3478
+ testIdPrefix
3479
+ }
3480
+ );
3481
+ }
3238
3482
  function formatRunInZone(date, timezone) {
3239
3483
  try {
3240
3484
  return new Intl.DateTimeFormat(void 0, {
@@ -3629,17 +3873,17 @@ var PLATFORM_EVENT_SOURCES_QUERY = gql`
3629
3873
  `;
3630
3874
  var CACHE_TTL_MS2 = 3 * 60 * 1e3;
3631
3875
  var caches = /* @__PURE__ */ new WeakMap();
3632
- function isRecord2(value) {
3876
+ function isRecord3(value) {
3633
3877
  return typeof value === "object" && value !== null && !Array.isArray(value);
3634
3878
  }
3635
3879
  function readPlatformEventSources(data) {
3636
- const list = isRecord2(data) ? data.platformEventSources : void 0;
3880
+ const list = isRecord3(data) ? data.platformEventSources : void 0;
3637
3881
  if (!Array.isArray(list)) return [];
3638
3882
  const sources = [];
3639
3883
  for (const item of list) {
3640
- if (!isRecord2(item) || typeof item.module !== "string") continue;
3884
+ if (!isRecord3(item) || typeof item.module !== "string") continue;
3641
3885
  const recordTypes = Array.isArray(item.recordTypes) ? item.recordTypes.flatMap(
3642
- (type) => isRecord2(type) && typeof type.name === "string" ? [
3886
+ (type) => isRecord3(type) && typeof type.name === "string" ? [
3643
3887
  {
3644
3888
  name: type.name,
3645
3889
  actions: Array.isArray(type.actions) ? type.actions.filter(
@@ -3924,15 +4168,15 @@ var MY_TIME_TRIGGERS_QUERY = gql`
3924
4168
  `;
3925
4169
  var CACHE_TTL_MS3 = 30 * 1e3;
3926
4170
  var caches2 = /* @__PURE__ */ new WeakMap();
3927
- function isRecord3(value) {
4171
+ function isRecord4(value) {
3928
4172
  return typeof value === "object" && value !== null && !Array.isArray(value);
3929
4173
  }
3930
4174
  function readTimeTriggers(data) {
3931
- const list = isRecord3(data) ? data.timeCampusMyTimeTriggers : void 0;
4175
+ const list = isRecord4(data) ? data.timeCampusMyTimeTriggers : void 0;
3932
4176
  if (!Array.isArray(list)) return [];
3933
4177
  const triggers = [];
3934
4178
  for (const item of list) {
3935
- if (!isRecord3(item) || typeof item.id !== "string" || !item.id) continue;
4179
+ if (!isRecord4(item) || typeof item.id !== "string" || !item.id) continue;
3936
4180
  triggers.push({
3937
4181
  id: item.id,
3938
4182
  name: typeof item.name === "string" && item.name.trim() ? item.name.trim() : item.id,
@@ -5276,6 +5520,24 @@ function NodeParamsForm({
5276
5520
  )
5277
5521
  ] }, p.name);
5278
5522
  }
5523
+ if (nodeType === "store/ai-agent" && p.name === "toolApprovalRules") {
5524
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
5525
+ /* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-foreground", children: tr(
5526
+ "fluidgrids.builder.toolApproval.label",
5527
+ "Tool approval rules"
5528
+ ) }),
5529
+ /* @__PURE__ */ jsx(
5530
+ AgentToolApprovalRules,
5531
+ {
5532
+ agentId: config.node?.id,
5533
+ value: argsState[p.name],
5534
+ onChange: (next) => writeFixed(p.name, next),
5535
+ testIdPrefix
5536
+ }
5537
+ ),
5538
+ p.description && /* @__PURE__ */ jsx("span", { className: "text-[11px] leading-snug text-muted-foreground", children: p.description })
5539
+ ] }, p.name);
5540
+ }
5279
5541
  if (p.type === "workflow" || nodeType === "internal:subworkflow" && p.name === "workflowKey") {
5280
5542
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
5281
5543
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
@@ -1,6 +1,6 @@
1
1
  import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, decideMissingWorkflow } from './chunk-NRI7AUBH.js';
2
2
  import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
3
- import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-IK7BHEVM.js';
3
+ import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-TNFMGVWW.js';
4
4
  import { paramsFromOperation } from './chunk-LSRF7JLO.js';
5
5
  import { CreateWorkflowRefusalDialog } from './chunk-NK7IQUZF.js';
6
6
  import { canvasFromDefinition } from './chunk-CKF2FBUP.js';
@@ -1,4 +1,4 @@
1
- import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-IK7BHEVM.js';
1
+ import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-TNFMGVWW.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { useWorkflowDefinition } from './chunk-PHJBQCQS.js';
4
4
  import { Button } from './chunk-QJAZXCFQ.js';
@@ -5,8 +5,8 @@ import { Input } from './chunk-IEVSFCFS.js';
5
5
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter as DialogFooter$1 } from './chunk-YXMFRQYV.js';
6
6
  import { Badge as Badge$1 } from './chunk-TFCIZFDM.js';
7
7
  import { LogsPanel } from './chunk-QUYK5PAZ.js';
8
- import { useNodeEditorTab, NodeEditorTabs, NodeInputFields, NodeEditorTabBody } from './chunk-MWZFI4ZK.js';
9
- import { useGlobalStoreClient, NodeExecutionActions } from './chunk-CVTQYGJD.js';
8
+ import { useNodeEditorTab, NodeEditorTabs, NodeInputFields, NodeEditorTabBody } from './chunk-4FDWZFBP.js';
9
+ import { useGlobalStoreClient, NodeExecutionActions } from './chunk-CRLEVO22.js';
10
10
  import { useNodeConfig, nodeSubtitle, nodeTitle } from './chunk-LSRF7JLO.js';
11
11
  import { CreateWorkflowRefusalDialog, WorkflowShareDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-NK7IQUZF.js';
12
12
  import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-POCNK7FY.js';
@@ -20497,12 +20497,12 @@ function EditLeaseBanner() {
20497
20497
  );
20498
20498
  }
20499
20499
  var LazyNodeDetailView = lazy(
20500
- () => import('./node-detail-view-3M2UBEWP.js').then((m) => ({
20500
+ () => import('./node-detail-view-VF6UTUBV.js').then((m) => ({
20501
20501
  default: m.NodeDetailView
20502
20502
  }))
20503
20503
  );
20504
20504
  var LazyQuickConfigPanel = lazy(
20505
- () => import('./quick-config-panel-MKCY2UG3.js').then((m) => ({
20505
+ () => import('./quick-config-panel-YX7UGEBR.js').then((m) => ({
20506
20506
  default: m.QuickConfigPanel
20507
20507
  }))
20508
20508
  );
@@ -1,4 +1,4 @@
1
- import { TEMPLATE_STORE_CATEGORIES, useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-IK7BHEVM.js';
1
+ import { TEMPLATE_STORE_CATEGORIES, useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-TNFMGVWW.js';
2
2
  import { QuotaExhaustedDialog } from './chunk-NK7IQUZF.js';
3
3
  import { templatesControls } from './chunk-FNZZ5JJL.js';
4
4
  import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-PHJBQCQS.js';
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Label } from './chunk-VTQVPNUQ.js';
2
- import { EnsureThemeProvider } from './chunk-GC73RBYI.js';
3
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-GC73RBYI.js';
4
- export { GuidedTourStarter, START_FIELD_PREFIX, START_NAME_PARAM, START_NODE_PARAM, START_OPERATION_PARAM, WorkflowBuilder as WorkflowBuilderPage, readStartNodeRequest, startNodeLink } from './chunk-VVJRZM6D.js';
2
+ import { EnsureThemeProvider } from './chunk-TIUSQ6MW.js';
3
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-TIUSQ6MW.js';
4
+ export { GuidedTourStarter, START_FIELD_PREFIX, START_NAME_PARAM, START_NODE_PARAM, START_OPERATION_PARAM, WorkflowBuilder as WorkflowBuilderPage, readStartNodeRequest, startNodeLink } from './chunk-KQ43EVRO.js';
5
5
  export { FirstWorkflowChecklist, FirstWorkflowChecklistView, WorkflowsList, useCreateWorkflowFirst } from './chunk-TOCD4SVA.js';
6
6
  export { GUIDED_FIRST_WORKFLOW_NAV, GUIDED_FIRST_WORKFLOW_STATE, GUIDED_TOUR_STATE, firstWorkflowProgress, isGuidedTourIntent, pickGuidedTour } from './chunk-NRI7AUBH.js';
7
7
  import './chunk-PIKYQE7P.js';
@@ -21,10 +21,10 @@ export { ManagedAiPolicyAuthorityProvider, SettingsPage } from './chunk-XM3IMHA7
21
21
  export { checkCodecServerUrl, decodePayloads, isEncodedPayload } from './chunk-5NZANNKX.js';
22
22
  export { useDataSinkData, useDataSinks, useInsightsData, useLogStreamDestinationActions, useLogStreamDestinations, useRunReplayActions } from './chunk-JGHDGMYV.js';
23
23
  import './chunk-5ERAJC2I.js';
24
- import { ThemeProvider, extractTemplateGraph } from './chunk-HONN7S5R.js';
25
- export { TemplatePreview, TemplatesPage } from './chunk-HONN7S5R.js';
26
- import { useAiWorkflowTemplates, AI_DRAFT_MAX_PROMPT_LENGTH, FlowBuilderPage, FluidGridsMark, draftToCanvas, enrichDraftNodes } from './chunk-IK7BHEVM.js';
27
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, RunsUsageMeter, RunsUsageMeterView, readRunsQuota, runsQuotaLevel, summarizeRunsQuota, useRunsQuota } from './chunk-IK7BHEVM.js';
24
+ import { ThemeProvider, extractTemplateGraph } from './chunk-YGWPVIGB.js';
25
+ export { TemplatePreview, TemplatesPage } from './chunk-YGWPVIGB.js';
26
+ import { useAiWorkflowTemplates, AI_DRAFT_MAX_PROMPT_LENGTH, FlowBuilderPage, FluidGridsMark, draftToCanvas, enrichDraftNodes } from './chunk-TNFMGVWW.js';
27
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, RunsUsageMeter, RunsUsageMeterView, readRunsQuota, runsQuotaLevel, summarizeRunsQuota, useRunsQuota } from './chunk-TNFMGVWW.js';
28
28
  import './chunk-JNSHR2J2.js';
29
29
  import './chunk-GEMNVFPK.js';
30
30
  import './chunk-B6CCE2RW.js';
@@ -32,9 +32,9 @@ export { Input } from './chunk-IEVSFCFS.js';
32
32
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-YXMFRQYV.js';
33
33
  export { Badge, badgeVariants } from './chunk-TFCIZFDM.js';
34
34
  import './chunk-QUYK5PAZ.js';
35
- import './chunk-MWZFI4ZK.js';
36
- import { useRunners, useRunnerActions, RunnerStatusPill, runnerInstallCommand } from './chunk-CVTQYGJD.js';
37
- export { Popover, PopoverContent, PopoverTrigger, RUNNER_INSTALL_SCRIPT_URL, RunOnSection, RunnerStatusPill, runnerInstallCommand, useRunnerActions, useRunners } from './chunk-CVTQYGJD.js';
35
+ import './chunk-4FDWZFBP.js';
36
+ import { useRunners, useRunnerActions, RunnerStatusPill, runnerInstallCommand } from './chunk-CRLEVO22.js';
37
+ export { Popover, PopoverContent, PopoverTrigger, RUNNER_INSTALL_SCRIPT_URL, RunOnSection, RunnerStatusPill, runnerInstallCommand, useRunnerActions, useRunners } from './chunk-CRLEVO22.js';
38
38
  export { resolveUiSpec, stripSubmitActions } from './chunk-LSRF7JLO.js';
39
39
  import './chunk-KZCNJAMK.js';
40
40
  import { CreateWorkflowRefusalDialog } from './chunk-NK7IQUZF.js';
@@ -110,7 +110,7 @@ var WorkflowsList2 = lazy(
110
110
  () => import('./WorkflowsList-CBMAAP2H.js').then((m) => ({ default: m.WorkflowsList }))
111
111
  );
112
112
  var WorkflowBuilder3 = lazy(
113
- () => import('./WorkflowBuilder-AOWQJ6OS.js').then((m) => ({
113
+ () => import('./WorkflowBuilder-XF6VBYZB.js').then((m) => ({
114
114
  default: m.WorkflowBuilder
115
115
  }))
116
116
  );
@@ -1,7 +1,7 @@
1
1
  import { useRunHistory, RunHistoryView, SignalRunDialog } from './chunk-W5ZTQQUI.js';
2
2
  import { agentTracePath } from './chunk-NZAYYUQ4.js';
3
3
  import { TableView, JsonView } from './chunk-QUYK5PAZ.js';
4
- import { SCHEDULE_NODE_TYPE, NDV_Z_INDEX, NodeExecutionActions, TabButton, SchedulePanel, ReadOnlyFieldset, NodeParamsForm, NodeSettingsPanel } from './chunk-CVTQYGJD.js';
4
+ import { SCHEDULE_NODE_TYPE, NDV_Z_INDEX, NodeExecutionActions, TabButton, SchedulePanel, ReadOnlyFieldset, NodeParamsForm, NodeSettingsPanel } from './chunk-CRLEVO22.js';
5
5
  import { useNodeConfig, latestNodeLog, nodeTitle, nodeSubtitle, FieldTree } from './chunk-LSRF7JLO.js';
6
6
  import { CodeEditorField } from './chunk-KZCNJAMK.js';
7
7
  import './chunk-JDLQ6QIB.js';
@@ -1,5 +1,5 @@
1
- import { useNodeEditorTab, NodeInputFields, NodeEditorTabs, NodeEditorTabBody } from './chunk-MWZFI4ZK.js';
2
- import { NodeExecutionActions } from './chunk-CVTQYGJD.js';
1
+ import { useNodeEditorTab, NodeInputFields, NodeEditorTabs, NodeEditorTabBody } from './chunk-4FDWZFBP.js';
2
+ import { NodeExecutionActions } from './chunk-CRLEVO22.js';
3
3
  import { useNodeConfig, nodeSubtitle, nodeTitle } from './chunk-LSRF7JLO.js';
4
4
  import './chunk-KZCNJAMK.js';
5
5
  import './chunk-JDLQ6QIB.js';
package/dist/templates.js CHANGED
@@ -1,5 +1,5 @@
1
- export { TemplatePreview, TemplatesPage } from './chunk-HONN7S5R.js';
2
- import './chunk-IK7BHEVM.js';
1
+ export { TemplatePreview, TemplatesPage } from './chunk-YGWPVIGB.js';
2
+ import './chunk-TNFMGVWW.js';
3
3
  import './chunk-JNSHR2J2.js';
4
4
  import './chunk-GEMNVFPK.js';
5
5
  import './chunk-B6CCE2RW.js';
@@ -7,8 +7,8 @@ import './chunk-IEVSFCFS.js';
7
7
  import './chunk-YXMFRQYV.js';
8
8
  import './chunk-TFCIZFDM.js';
9
9
  import './chunk-QUYK5PAZ.js';
10
- import './chunk-MWZFI4ZK.js';
11
- import './chunk-CVTQYGJD.js';
10
+ import './chunk-4FDWZFBP.js';
11
+ import './chunk-CRLEVO22.js';
12
12
  import './chunk-LSRF7JLO.js';
13
13
  import './chunk-KZCNJAMK.js';
14
14
  import './chunk-NK7IQUZF.js';
@@ -1,8 +1,8 @@
1
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-GC73RBYI.js';
2
- export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-VVJRZM6D.js';
1
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-TIUSQ6MW.js';
2
+ export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-KQ43EVRO.js';
3
3
  import './chunk-NRI7AUBH.js';
4
4
  import './chunk-PIKYQE7P.js';
5
- import './chunk-IK7BHEVM.js';
5
+ import './chunk-TNFMGVWW.js';
6
6
  import './chunk-JNSHR2J2.js';
7
7
  import './chunk-GEMNVFPK.js';
8
8
  import './chunk-B6CCE2RW.js';
@@ -10,8 +10,8 @@ import './chunk-IEVSFCFS.js';
10
10
  import './chunk-YXMFRQYV.js';
11
11
  import './chunk-TFCIZFDM.js';
12
12
  import './chunk-QUYK5PAZ.js';
13
- import './chunk-MWZFI4ZK.js';
14
- import './chunk-CVTQYGJD.js';
13
+ import './chunk-4FDWZFBP.js';
14
+ import './chunk-CRLEVO22.js';
15
15
  import './chunk-LSRF7JLO.js';
16
16
  import './chunk-KZCNJAMK.js';
17
17
  import './chunk-NK7IQUZF.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fluidgrids-fe-sdk",
3
- "version": "2026.1110.7",
3
+ "version": "2026.1110.8",
4
4
  "description": "FluidGrids Workflow Builder SDK - Embeddable visual workflow automation",
5
5
  "type": "module",
6
6
  "imports": {