@burdenoff/fluidgrids-fe-sdk 2026.701.3 → 2026.701.4

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,4 +1,4 @@
1
- export { WorkflowBuilder } from './chunk-DUTYRDBF.js';
1
+ export { WorkflowBuilder } from './chunk-QBI22GDG.js';
2
2
  import './chunk-7VEOUEIN.js';
3
3
  import './chunk-BQXHJIER.js';
4
4
  import './chunk-KU64CCSV.js';
@@ -9,5 +9,5 @@ import './chunk-WWU2O2SR.js';
9
9
  import './chunk-LUGJJ7LL.js';
10
10
  import './chunk-XQP33UJR.js';
11
11
  import './chunk-Z54K22LP.js';
12
- //# sourceMappingURL=WorkflowBuilder-HOJWVGCI.js.map
13
- //# sourceMappingURL=WorkflowBuilder-HOJWVGCI.js.map
12
+ //# sourceMappingURL=WorkflowBuilder-KV6VFVII.js.map
13
+ //# sourceMappingURL=WorkflowBuilder-KV6VFVII.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-HOJWVGCI.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-KV6VFVII.js"}
@@ -836,6 +836,13 @@ var AdaptiveCardRenderer = forwardRef(function AdaptiveCardRenderer2({ cardData,
836
836
  useImperativeHandle(
837
837
  ref,
838
838
  () => ({
839
+ validateInputs() {
840
+ const adaptiveCard = adaptiveCardInstanceRef.current;
841
+ if (!adaptiveCard) return true;
842
+ const invalidInputs = adaptiveCard.getAllInputs().filter((input) => !input.validateValue());
843
+ invalidInputs[0]?.focus();
844
+ return invalidInputs.length === 0;
845
+ },
839
846
  collectValues() {
840
847
  const adaptiveCard = adaptiveCardInstanceRef.current;
841
848
  if (!adaptiveCard || !cardData) return {};
@@ -890,7 +897,11 @@ function synthesizeCardFromInputFields(inputFields) {
890
897
  const required = field.required === true;
891
898
  const multiline = name === "body" || name === "htmlBody";
892
899
  const label = humanizeFieldName(name);
893
- body.push({ type: "TextBlock", text: required ? `${label} *` : label, wrap: true });
900
+ body.push({
901
+ type: "TextBlock",
902
+ text: required ? `${label} *` : label,
903
+ wrap: true
904
+ });
894
905
  body.push({
895
906
  type: "Input.Text",
896
907
  id: `args.state.${name}`,
@@ -942,7 +953,11 @@ function validateUiSpec(raw) {
942
953
  return `ui.blocks[${index}] ("${id}") has unknown type "${String(rawBlock.type)}"`;
943
954
  }
944
955
  }
945
- return { version: 1, blocks };
956
+ return {
957
+ version: 1,
958
+ blocks,
959
+ ...typeof raw.applyLabel === "string" && raw.applyLabel.trim().length > 0 ? { applyLabel: raw.applyLabel } : {}
960
+ };
946
961
  }
947
962
  function resolveUiSpec(operation) {
948
963
  if (!operation) return null;
@@ -1045,6 +1060,9 @@ var AdaptiveCardBlock = forwardRef(function AdaptiveCardBlock2({ card, state, su
1045
1060
  useImperativeHandle(
1046
1061
  ref,
1047
1062
  () => ({
1063
+ validate() {
1064
+ return rendererRef.current?.validateInputs() ?? true;
1065
+ },
1048
1066
  collectValues() {
1049
1067
  return rendererRef.current?.collectValues() ?? {};
1050
1068
  }
@@ -1097,6 +1115,13 @@ function BlocksRenderer({
1097
1115
  };
1098
1116
  const handleApply = useCallback(() => {
1099
1117
  const merged = {};
1118
+ for (const block of spec.blocks) {
1119
+ const handle = handlesRef.current.get(block.id);
1120
+ if (!handle?.validate) continue;
1121
+ if (!handle.validate()) {
1122
+ return;
1123
+ }
1124
+ }
1100
1125
  for (const block of spec.blocks) {
1101
1126
  const handle = handlesRef.current.get(block.id);
1102
1127
  if (!handle) continue;
@@ -1162,7 +1187,7 @@ function BlocksRenderer({
1162
1187
  block.id
1163
1188
  );
1164
1189
  }),
1165
- !synthesized && /* @__PURE__ */ jsx(Button, { type: "button", onClick: handleApply, className: "self-start", children: "Apply" })
1190
+ !synthesized && /* @__PURE__ */ jsx(Button, { type: "button", onClick: handleApply, className: "self-start", children: spec.applyLabel ?? "Apply" })
1166
1191
  ] });
1167
1192
  }
1168
1193
  var PROVIDER_FIELDS = gql`
@@ -7334,11 +7359,49 @@ function NodePropertyPanel({
7334
7359
  if (nodeType === "store/bigconsole_datasink" && currentOperation?.name === "postDataToDataSink") {
7335
7360
  return {
7336
7361
  ...currentOperation,
7337
- // Force the DataSink-key card below to win even if an older registry
7338
- // manifest already has a block-based `ui` declaration. resolveUiSpec()
7339
- // prefers `ui` over `adaptive_card`, so leaving it in place would keep
7340
- // rendering the stale connection-oriented form.
7341
- ui: void 0,
7362
+ // Force the DataSink-key UI below to win even if an older registry
7363
+ // manifest already has a connection-oriented `ui` declaration.
7364
+ // Use a block UI (not legacy AdaptiveCard submit mode) so the save
7365
+ // action is rendered by the app's Button component and reliably calls
7366
+ // the panel-level onApply handler.
7367
+ ui: {
7368
+ version: 1,
7369
+ applyLabel: "Save Configuration",
7370
+ blocks: [
7371
+ {
7372
+ id: "main",
7373
+ type: "adaptive_card",
7374
+ card: {
7375
+ type: "AdaptiveCard",
7376
+ version: "1.5",
7377
+ body: [
7378
+ {
7379
+ type: "TextBlock",
7380
+ text: "Send Data to BigConsole DataSink",
7381
+ weight: "bolder",
7382
+ size: "medium"
7383
+ },
7384
+ {
7385
+ type: "TextBlock",
7386
+ text: "Choose the DataSink key. Data is taken automatically from the previous node, and the BigConsole connection is handled automatically.",
7387
+ wrap: true,
7388
+ size: "small",
7389
+ isSubtle: true
7390
+ },
7391
+ {
7392
+ type: "Input.Text",
7393
+ placeholder: "Target DataSink key (e.g., users_analytics)",
7394
+ id: "args.state.dataSinkKey",
7395
+ label: "DataSink Key",
7396
+ isRequired: true,
7397
+ value: "${dataSinkKey}"
7398
+ }
7399
+ ],
7400
+ defaultValue: { dataSinkKey: "" }
7401
+ }
7402
+ }
7403
+ ]
7404
+ },
7342
7405
  description: "Push data to a BigConsole DataSink. Data is taken from the previous node's output; choose the target DataSink key and the BigConsole connection is handled automatically.",
7343
7406
  input_fields: {
7344
7407
  ...currentOperation.input_fields,
@@ -7347,43 +7410,6 @@ function NodePropertyPanel({
7347
7410
  required: true,
7348
7411
  description: "Target DataSink key. The workflow writes directly to this DataSink and auto-links on first run."
7349
7412
  }
7350
- },
7351
- adaptive_card: {
7352
- type: "AdaptiveCard",
7353
- version: "1.5",
7354
- body: [
7355
- {
7356
- type: "TextBlock",
7357
- text: "Send Data to BigConsole DataSink",
7358
- weight: "bolder",
7359
- size: "medium"
7360
- },
7361
- {
7362
- type: "TextBlock",
7363
- text: "Choose the DataSink key. Data is taken automatically from the previous node, and the BigConsole connection is handled automatically.",
7364
- wrap: true,
7365
- size: "small",
7366
- isSubtle: true
7367
- },
7368
- {
7369
- type: "Input.Text",
7370
- placeholder: "Target DataSink key (e.g., users_analytics)",
7371
- id: "args.state.dataSinkKey",
7372
- label: "DataSink Key",
7373
- isRequired: true,
7374
- value: "${dataSinkKey}"
7375
- },
7376
- {
7377
- type: "ActionSet",
7378
- actions: [
7379
- {
7380
- type: "Action.Submit",
7381
- title: "Save Configuration"
7382
- }
7383
- ]
7384
- }
7385
- ],
7386
- defaultValue: { dataSinkKey: "" }
7387
7413
  }
7388
7414
  };
7389
7415
  }
@@ -22044,5 +22070,5 @@ function WorkflowBuilder() {
22044
22070
  }
22045
22071
 
22046
22072
  export { Card2 as Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConfigSchemaForm, ConnectionFormDialog, ConnectionSelector, FluidGridsProvider, ProviderPicker, TemplateCard, WorkflowBuilder, getProviderForm, listCustomBlocks, registerCustomBlock, resolveUiSpec, stripSubmitActions, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useFluidGridsContext, useImportWorkflowTemplate, useInitiateOAuth, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useWorkflowTemplates };
22047
- //# sourceMappingURL=chunk-DUTYRDBF.js.map
22048
- //# sourceMappingURL=chunk-DUTYRDBF.js.map
22073
+ //# sourceMappingURL=chunk-QBI22GDG.js.map
22074
+ //# sourceMappingURL=chunk-QBI22GDG.js.map