@burdenoff/fluidgrids-fe-sdk 2026.801.6 → 2026.801.7

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-DEPCFHNN.js';
1
+ export { WorkflowBuilder } from './chunk-SGSRBNQJ.js';
2
2
  import './chunk-MRVS73S2.js';
3
3
  import './chunk-DBOMRIP5.js';
4
4
  import './chunk-EPBEVBMQ.js';
@@ -12,5 +12,5 @@ import './chunk-XEYNX7YJ.js';
12
12
  import './chunk-5BDQNSP3.js';
13
13
  import './chunk-WWU2O2SR.js';
14
14
  import './chunk-XQP33UJR.js';
15
- //# sourceMappingURL=WorkflowBuilder-FBHT6KMG.js.map
16
- //# sourceMappingURL=WorkflowBuilder-FBHT6KMG.js.map
15
+ //# sourceMappingURL=WorkflowBuilder-IKVMPN7Q.js.map
16
+ //# sourceMappingURL=WorkflowBuilder-IKVMPN7Q.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-FBHT6KMG.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-IKVMPN7Q.js"}
@@ -13589,6 +13589,7 @@ var PANEL_EST_HEIGHT = 480;
13589
13589
  var MAPPER_WIDTH = 260;
13590
13590
  var VIEWPORT_MARGIN = 12;
13591
13591
  var NODE_GAP = 14;
13592
+ var MAPPER_GAP = 10;
13592
13593
  function useNodeScreenRect(nodeId) {
13593
13594
  const { flowToScreenPosition } = useReactFlow();
13594
13595
  const raw = useStore((s) => {
@@ -13662,15 +13663,31 @@ function QuickConfigPanelInner({
13662
13663
  return () => ro.disconnect();
13663
13664
  }, []);
13664
13665
  const placement = useMemo(() => {
13666
+ const mapperCoords = (panelLeft, panelTop) => {
13667
+ const leftPlacement = panelLeft - MAPPER_GAP - MAPPER_WIDTH;
13668
+ const rightPlacement = panelLeft + PANEL_WIDTH + MAPPER_GAP;
13669
+ const rawLeft2 = leftPlacement >= VIEWPORT_MARGIN ? leftPlacement : rightPlacement;
13670
+ return {
13671
+ mapperLeft: clamp(
13672
+ rawLeft2,
13673
+ VIEWPORT_MARGIN,
13674
+ window.innerWidth - MAPPER_WIDTH - VIEWPORT_MARGIN
13675
+ ),
13676
+ mapperTop: panelTop
13677
+ };
13678
+ };
13665
13679
  if (!nodeRect) {
13680
+ const left2 = window.innerWidth / 2 - PANEL_WIDTH / 2;
13681
+ const top2 = window.innerHeight / 4;
13666
13682
  return {
13667
13683
  side: "right",
13668
- left: window.innerWidth / 2 - PANEL_WIDTH / 2,
13669
- top: window.innerHeight / 4,
13684
+ left: left2,
13685
+ top: top2,
13670
13686
  connectorLeft: 0,
13671
13687
  connectorWidth: 0,
13672
13688
  connectorTop: 0,
13673
- hasConnector: false
13689
+ hasConnector: false,
13690
+ ...mapperCoords(left2, top2)
13674
13691
  };
13675
13692
  }
13676
13693
  const need = PANEL_WIDTH + NODE_GAP + VIEWPORT_MARGIN;
@@ -13701,7 +13718,8 @@ function QuickConfigPanelInner({
13701
13718
  connectorLeft,
13702
13719
  connectorWidth,
13703
13720
  connectorTop,
13704
- hasConnector: connectorWidth > 1
13721
+ hasConnector: connectorWidth > 1,
13722
+ ...mapperCoords(left, top)
13705
13723
  };
13706
13724
  }, [nodeRect, panelH]);
13707
13725
  useEffect(() => {
@@ -13721,7 +13739,6 @@ function QuickConfigPanelInner({
13721
13739
  const expandToNdv = () => {
13722
13740
  openNdv({ nodeId, type });
13723
13741
  };
13724
- const mapperStyle = placement.side === "right" ? { left: "100%", marginLeft: 10, top: 0 } : { right: "100%", marginRight: 10, top: 0 };
13725
13742
  return /* @__PURE__ */ jsxs(Fragment, { children: [
13726
13743
  placement.hasConnector && /* @__PURE__ */ jsx(
13727
13744
  "div",
@@ -13739,7 +13756,50 @@ function QuickConfigPanelInner({
13739
13756
  }
13740
13757
  }
13741
13758
  ),
13742
- /* @__PURE__ */ jsxs(
13759
+ showMapper && /* @__PURE__ */ jsxs(
13760
+ "div",
13761
+ {
13762
+ className: "fixed overflow-hidden rounded-xl border border-border bg-card shadow-xl",
13763
+ style: {
13764
+ left: placement.mapperLeft,
13765
+ top: placement.mapperTop,
13766
+ width: MAPPER_WIDTH,
13767
+ maxHeight: "min(60vh, 480px)",
13768
+ zIndex: 301,
13769
+ display: "flex",
13770
+ flexDirection: "column"
13771
+ },
13772
+ "data-testid": "quick-config-mapper",
13773
+ children: [
13774
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2", children: [
13775
+ /* @__PURE__ */ jsx(
13776
+ Icon,
13777
+ {
13778
+ icon: "mdi:tray-arrow-down",
13779
+ className: "size-3.5 text-muted-foreground"
13780
+ }
13781
+ ),
13782
+ /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: "Input" }),
13783
+ sourceIds.length > 0 && /* @__PURE__ */ jsx(
13784
+ "select",
13785
+ {
13786
+ className: "ml-auto max-w-[55%] truncate rounded-md border border-input bg-background px-1.5 py-0.5 text-[11px] text-foreground outline-none focus:border-primary",
13787
+ value: selectedSource ?? "",
13788
+ onChange: (e) => setSelectedSource(e.target.value),
13789
+ "data-testid": "qc-source-selector",
13790
+ children: sourceIds.map((sid) => {
13791
+ const sn = nodes.find((n) => n.id === sid);
13792
+ return /* @__PURE__ */ jsx("option", { value: sid, children: nodeTitle(sn) }, sid);
13793
+ })
13794
+ }
13795
+ )
13796
+ ] }),
13797
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto px-2 py-2", children: inputFields.length > 0 ? /* @__PURE__ */ jsx(FieldTree, { fields: inputFields, draggable: true }) : /* @__PURE__ */ jsx("p", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: sourceIds.length === 0 ? "Connect an upstream node to map its fields." : "The selected source has no declared output fields." }) }),
13798
+ /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: "Drag a field onto a parameter to map it." })
13799
+ ]
13800
+ }
13801
+ ),
13802
+ /* @__PURE__ */ jsx(
13743
13803
  "div",
13744
13804
  {
13745
13805
  className: "fixed",
@@ -13750,138 +13810,95 @@ function QuickConfigPanelInner({
13750
13810
  width: PANEL_WIDTH
13751
13811
  },
13752
13812
  "data-testid": "quick-config-panel",
13753
- children: [
13754
- showMapper && /* @__PURE__ */ jsxs(
13755
- "div",
13756
- {
13757
- className: "absolute overflow-hidden rounded-xl border border-border bg-card shadow-xl",
13758
- style: {
13759
- ...mapperStyle,
13760
- width: MAPPER_WIDTH,
13761
- maxHeight: "min(60vh, 480px)",
13762
- display: "flex",
13763
- flexDirection: "column"
13764
- },
13765
- "data-testid": "quick-config-mapper",
13766
- children: [
13767
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2", children: [
13768
- /* @__PURE__ */ jsx(
13769
- Icon,
13770
- {
13771
- icon: "mdi:tray-arrow-down",
13772
- className: "size-3.5 text-muted-foreground"
13773
- }
13774
- ),
13775
- /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: "Input" }),
13776
- sourceIds.length > 0 && /* @__PURE__ */ jsx(
13777
- "select",
13778
- {
13779
- className: "ml-auto max-w-[55%] truncate rounded-md border border-input bg-background px-1.5 py-0.5 text-[11px] text-foreground outline-none focus:border-primary",
13780
- value: selectedSource ?? "",
13781
- onChange: (e) => setSelectedSource(e.target.value),
13782
- "data-testid": "qc-source-selector",
13783
- children: sourceIds.map((sid) => {
13784
- const sn = nodes.find((n) => n.id === sid);
13785
- return /* @__PURE__ */ jsx("option", { value: sid, children: nodeTitle(sn) }, sid);
13786
- })
13787
- }
13788
- )
13789
- ] }),
13790
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto px-2 py-2", children: inputFields.length > 0 ? /* @__PURE__ */ jsx(FieldTree, { fields: inputFields, draggable: true }) : /* @__PURE__ */ jsx("p", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: sourceIds.length === 0 ? "Connect an upstream node to map its fields." : "The selected source has no declared output fields." }) }),
13791
- /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: "Drag a field onto a parameter to map it." })
13792
- ]
13793
- }
13794
- ),
13795
- /* @__PURE__ */ jsxs(
13796
- "div",
13797
- {
13798
- ref: cardRef,
13799
- className: "flex flex-col overflow-hidden rounded-xl border border-border bg-card shadow-2xl animate-in fade-in zoom-in-95 duration-150",
13800
- style: {
13801
- maxHeight: "min(70vh, 560px)",
13802
- borderTop: `3px solid ${accent}`
13803
- },
13804
- children: [
13805
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2.5 border-b border-border px-3 py-2.5 select-none", children: [
13806
- /* @__PURE__ */ jsx(
13807
- "div",
13808
- {
13809
- className: "flex size-7 shrink-0 items-center justify-center rounded-lg",
13810
- style: {
13811
- backgroundColor: `color-mix(in srgb, ${accent} 13%, transparent)`,
13812
- color: accent,
13813
- border: `1px solid color-mix(in srgb, ${accent} 26%, transparent)`
13814
- },
13815
- children: /* @__PURE__ */ jsx(NodeTypeIcon, { icon: meta.icon, className: "size-4" })
13816
- }
13817
- ),
13818
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
13819
- /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold leading-tight text-foreground", children: nodeTitle(node) }),
13820
- subtitle && /* @__PURE__ */ jsx("p", { className: "truncate font-mono text-[11px] leading-tight text-muted-foreground", children: subtitle })
13821
- ] }),
13822
- /* @__PURE__ */ jsx(
13823
- "button",
13824
- {
13825
- type: "button",
13826
- title: showMapper ? "Hide input data" : "Map data from input",
13827
- "aria-label": "Toggle input mapper",
13828
- onClick: () => setShowMapper((v) => !v),
13829
- className: `rounded-md p-1.5 transition-colors hover:bg-muted ${showMapper ? "text-primary" : "text-muted-foreground"} hover:text-foreground`,
13830
- "data-testid": "qc-toggle-mapper",
13831
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:tray-arrow-down", className: "size-4" })
13832
- }
13833
- ),
13834
- /* @__PURE__ */ jsx(
13835
- "button",
13836
- {
13837
- type: "button",
13838
- title: "Open full editor",
13839
- "aria-label": "Open full editor",
13840
- onClick: expandToNdv,
13841
- className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
13842
- "data-testid": "qc-expand",
13843
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-expand", className: "size-4" })
13844
- }
13845
- ),
13846
- /* @__PURE__ */ jsx(
13847
- "button",
13848
- {
13849
- type: "button",
13850
- title: "Close",
13851
- "aria-label": "Close",
13852
- onClick: close,
13853
- className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
13854
- "data-testid": "qc-close",
13855
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:close", className: "size-4" })
13856
- }
13857
- )
13858
- ] }),
13813
+ children: /* @__PURE__ */ jsxs(
13814
+ "div",
13815
+ {
13816
+ ref: cardRef,
13817
+ className: "flex flex-col overflow-hidden rounded-xl border border-border bg-card shadow-2xl animate-in fade-in zoom-in-95 duration-150",
13818
+ style: {
13819
+ maxHeight: "min(70vh, 560px)",
13820
+ borderTop: `3px solid ${accent}`
13821
+ },
13822
+ children: [
13823
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2.5 border-b border-border px-3 py-2.5 select-none", children: [
13859
13824
  /* @__PURE__ */ jsx(
13860
13825
  "div",
13861
13826
  {
13862
- className: "min-h-0 flex-1 space-y-4 overflow-auto p-3",
13863
- "data-testid": "qc-params",
13864
- onFocusCapture: (e) => {
13865
- const tag = e.target.tagName;
13866
- if (sourceIds.length > 0 && (tag === "INPUT" || tag === "SELECT" || tag === "TEXTAREA")) {
13867
- setShowMapper(true);
13868
- }
13827
+ className: "flex size-7 shrink-0 items-center justify-center rounded-lg",
13828
+ style: {
13829
+ backgroundColor: `color-mix(in srgb, ${accent} 13%, transparent)`,
13830
+ color: accent,
13831
+ border: `1px solid color-mix(in srgb, ${accent} 26%, transparent)`
13869
13832
  },
13870
- children: /* @__PURE__ */ jsx(
13871
- NodeParamsForm,
13872
- {
13873
- config,
13874
- nodeType: node.type,
13875
- testIdPrefix: "qc"
13876
- }
13877
- )
13833
+ children: /* @__PURE__ */ jsx(NodeTypeIcon, { icon: meta.icon, className: "size-4" })
13878
13834
  }
13879
13835
  ),
13880
- /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: "Changes apply instantly \xB7 double-click the node for the full editor" })
13881
- ]
13882
- }
13883
- )
13884
- ]
13836
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
13837
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold leading-tight text-foreground", children: nodeTitle(node) }),
13838
+ subtitle && /* @__PURE__ */ jsx("p", { className: "truncate font-mono text-[11px] leading-tight text-muted-foreground", children: subtitle })
13839
+ ] }),
13840
+ /* @__PURE__ */ jsx(
13841
+ "button",
13842
+ {
13843
+ type: "button",
13844
+ title: showMapper ? "Hide input data" : "Map data from input",
13845
+ "aria-label": "Toggle input mapper",
13846
+ onClick: () => setShowMapper((v) => !v),
13847
+ className: `rounded-md p-1.5 transition-colors hover:bg-muted ${showMapper ? "text-primary" : "text-muted-foreground"} hover:text-foreground`,
13848
+ "data-testid": "qc-toggle-mapper",
13849
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:tray-arrow-down", className: "size-4" })
13850
+ }
13851
+ ),
13852
+ /* @__PURE__ */ jsx(
13853
+ "button",
13854
+ {
13855
+ type: "button",
13856
+ title: "Open full editor",
13857
+ "aria-label": "Open full editor",
13858
+ onClick: expandToNdv,
13859
+ className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
13860
+ "data-testid": "qc-expand",
13861
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-expand", className: "size-4" })
13862
+ }
13863
+ ),
13864
+ /* @__PURE__ */ jsx(
13865
+ "button",
13866
+ {
13867
+ type: "button",
13868
+ title: "Close",
13869
+ "aria-label": "Close",
13870
+ onClick: close,
13871
+ className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
13872
+ "data-testid": "qc-close",
13873
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:close", className: "size-4" })
13874
+ }
13875
+ )
13876
+ ] }),
13877
+ /* @__PURE__ */ jsx(
13878
+ "div",
13879
+ {
13880
+ className: "min-h-0 flex-1 space-y-4 overflow-auto p-3",
13881
+ "data-testid": "qc-params",
13882
+ onFocusCapture: (e) => {
13883
+ const tag = e.target.tagName;
13884
+ if (sourceIds.length > 0 && (tag === "INPUT" || tag === "SELECT" || tag === "TEXTAREA")) {
13885
+ setShowMapper(true);
13886
+ }
13887
+ },
13888
+ children: /* @__PURE__ */ jsx(
13889
+ NodeParamsForm,
13890
+ {
13891
+ config,
13892
+ nodeType: node.type,
13893
+ testIdPrefix: "qc"
13894
+ }
13895
+ )
13896
+ }
13897
+ ),
13898
+ /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: "Changes apply instantly \xB7 double-click the node for the full editor" })
13899
+ ]
13900
+ }
13901
+ )
13885
13902
  }
13886
13903
  )
13887
13904
  ] });
@@ -15205,5 +15222,5 @@ function WorkflowBuilder() {
15205
15222
  }
15206
15223
 
15207
15224
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsProvider, TemplateCard, WorkflowBuilder, useFluidGridsContext, useImportWorkflowTemplate, useWorkflowTemplates };
15208
- //# sourceMappingURL=chunk-DEPCFHNN.js.map
15209
- //# sourceMappingURL=chunk-DEPCFHNN.js.map
15225
+ //# sourceMappingURL=chunk-SGSRBNQJ.js.map
15226
+ //# sourceMappingURL=chunk-SGSRBNQJ.js.map