@01.software/sdk 0.4.3-dev.1774339118317 → 0.4.3-dev.1774342104625

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.
package/dist/ui/flow.cjs CHANGED
@@ -82,8 +82,6 @@ __export(Flow_exports, {
82
82
  useFlowData: () => useFlowData
83
83
  });
84
84
  module.exports = __toCommonJS(Flow_exports);
85
- var import_react4 = __toESM(require("react"), 1);
86
- var import_react5 = require("@xyflow/react");
87
85
 
88
86
  // src/ui/Flow/types.ts
89
87
  function isDynamicNode(node) {
@@ -477,7 +475,15 @@ function clearTemplateCache() {
477
475
  componentCache.clear();
478
476
  }
479
477
 
480
- // src/ui/Flow/index.tsx
478
+ // src/ui/Flow/FlowRenderer.tsx
479
+ var import_react9 = __toESM(require("react"), 1);
480
+ var import_react10 = require("@xyflow/react");
481
+
482
+ // src/ui/Flow/node-types-factory.tsx
483
+ var import_react5 = __toESM(require("react"), 1);
484
+
485
+ // src/ui/Flow/node-renderers.tsx
486
+ var import_react4 = __toESM(require("react"), 1);
481
487
  function sanitizeUrl(url) {
482
488
  if (!url) return url;
483
489
  try {
@@ -488,11 +494,6 @@ function sanitizeUrl(url) {
488
494
  return void 0;
489
495
  }
490
496
  }
491
- function toMarkerType(value) {
492
- if (value === "arrow") return import_react5.MarkerType.Arrow;
493
- if (value === "arrowclosed") return import_react5.MarkerType.ArrowClosed;
494
- return void 0;
495
- }
496
497
  function renderFieldValue(key, val, fieldDef) {
497
498
  if (val == null || val === "") return null;
498
499
  const fieldType = fieldDef == null ? void 0 : fieldDef.fieldType;
@@ -644,13 +645,15 @@ function DefaultFrameNode({ data }) {
644
645
  )
645
646
  );
646
647
  }
648
+
649
+ // src/ui/Flow/node-types-factory.tsx
647
650
  function createNodeTypes(nodeRenderers, nodeTypeDefsMap, frameRenderer, nodeWrapper, renderNode) {
648
651
  const types = {};
649
652
  types.dynamic = ((props) => {
650
653
  const d = props.data;
651
654
  const typeDef = nodeTypeDefsMap == null ? void 0 : nodeTypeDefsMap.get(d.nodeTypeSlug);
652
655
  const CustomRenderer = nodeRenderers == null ? void 0 : nodeRenderers[d.nodeTypeSlug];
653
- const defaultRender = typeDef ? /* @__PURE__ */ import_react4.default.createElement(
656
+ const defaultRender = typeDef ? /* @__PURE__ */ import_react5.default.createElement(
654
657
  EnhancedDynamicNode,
655
658
  {
656
659
  data: d,
@@ -658,7 +661,7 @@ function createNodeTypes(nodeRenderers, nodeTypeDefsMap, frameRenderer, nodeWrap
658
661
  width: props.width,
659
662
  height: props.height
660
663
  }
661
- ) : /* @__PURE__ */ import_react4.default.createElement(DefaultDynamicNode, __spreadValues({}, props));
664
+ ) : /* @__PURE__ */ import_react5.default.createElement(DefaultDynamicNode, __spreadValues({}, props));
662
665
  const slotProps = {
663
666
  id: props.id,
664
667
  nodeTypeSlug: d.nodeTypeSlug,
@@ -670,14 +673,14 @@ function createNodeTypes(nodeRenderers, nodeTypeDefsMap, frameRenderer, nodeWrap
670
673
  height: props.height,
671
674
  defaultRender
672
675
  };
673
- let content = CustomRenderer ? /* @__PURE__ */ import_react4.default.createElement(CustomRenderer, __spreadValues({}, slotProps)) : defaultRender;
676
+ let content = CustomRenderer ? /* @__PURE__ */ import_react5.default.createElement(CustomRenderer, __spreadValues({}, slotProps)) : defaultRender;
674
677
  if (renderNode) {
675
678
  const result = renderNode(slotProps, content);
676
679
  if (result !== null) content = result;
677
680
  }
678
681
  if (nodeWrapper) {
679
682
  const Wrapper = nodeWrapper;
680
- content = /* @__PURE__ */ import_react4.default.createElement(
683
+ content = /* @__PURE__ */ import_react5.default.createElement(
681
684
  Wrapper,
682
685
  {
683
686
  id: props.id,
@@ -694,7 +697,7 @@ function createNodeTypes(nodeRenderers, nodeTypeDefsMap, frameRenderer, nodeWrap
694
697
  types.frame = frameRenderer ? ((props) => {
695
698
  const d = props.data;
696
699
  const Renderer = frameRenderer;
697
- return /* @__PURE__ */ import_react4.default.createElement(
700
+ return /* @__PURE__ */ import_react5.default.createElement(
698
701
  Renderer,
699
702
  {
700
703
  id: props.id,
@@ -718,7 +721,7 @@ function createEdgeTypes(edgeRenderers, edgeTypeDefsMap) {
718
721
  types[slug] = ((props) => {
719
722
  var _a;
720
723
  const def = edgeTypeDefsMap == null ? void 0 : edgeTypeDefsMap.get(slug);
721
- return /* @__PURE__ */ import_react4.default.createElement(
724
+ return /* @__PURE__ */ import_react5.default.createElement(
722
725
  Renderer,
723
726
  {
724
727
  id: props.id,
@@ -735,6 +738,57 @@ function createEdgeTypes(edgeRenderers, edgeTypeDefsMap) {
735
738
  }
736
739
  return types;
737
740
  }
741
+
742
+ // src/ui/Flow/edge-styles.ts
743
+ var import_react6 = require("@xyflow/react");
744
+ function toMarkerType(value) {
745
+ if (value === "arrow") return import_react6.MarkerType.Arrow;
746
+ if (value === "arrowclosed") return import_react6.MarkerType.ArrowClosed;
747
+ return void 0;
748
+ }
749
+ var EDGE_TYPE_MAP = {
750
+ step: "step",
751
+ smoothstep: "smoothstep",
752
+ bezier: "default",
753
+ default: "default"
754
+ };
755
+ function applyEdgeStyles(edges, edgeTypeDefsMap) {
756
+ if (!(edgeTypeDefsMap == null ? void 0 : edgeTypeDefsMap.size)) return edges;
757
+ return edges.map((edge) => {
758
+ var _a;
759
+ const slug = edge.edgeTypeSlug;
760
+ if (!slug) return edge;
761
+ const def = edgeTypeDefsMap.get(slug);
762
+ if (!def) return edge;
763
+ const styled = __spreadValues({}, edge);
764
+ if (!styled.type && def.lineStyle) {
765
+ styled.type = (_a = EDGE_TYPE_MAP[def.lineStyle]) != null ? _a : "default";
766
+ }
767
+ styled.style = __spreadValues(__spreadValues(__spreadValues({}, def.color ? { stroke: def.color } : void 0), def.strokeWidth ? { strokeWidth: def.strokeWidth } : void 0), edge.style);
768
+ if (styled.animated == null && def.animated) styled.animated = true;
769
+ if (!styled.markerStart) {
770
+ const startType = toMarkerType(def.markerStart);
771
+ if (startType) {
772
+ styled.markerStart = __spreadValues({
773
+ type: startType
774
+ }, def.color ? { color: def.color } : void 0);
775
+ }
776
+ }
777
+ if (!styled.markerEnd) {
778
+ const endType = toMarkerType(def.markerEnd);
779
+ if (endType) {
780
+ styled.markerEnd = __spreadValues({
781
+ type: endType
782
+ }, def.color ? { color: def.color } : void 0);
783
+ }
784
+ }
785
+ return styled;
786
+ });
787
+ }
788
+
789
+ // src/ui/Flow/focus-handler.tsx
790
+ var import_react7 = __toESM(require("react"), 1);
791
+ var import_react8 = require("@xyflow/react");
738
792
  function clampViewport(vp, cw, ch, extent) {
739
793
  const left = -vp.x / vp.zoom;
740
794
  const right = (cw - vp.x) / vp.zoom;
@@ -757,18 +811,19 @@ function FocusHandler({
757
811
  responsive,
758
812
  extent,
759
813
  clampBounds,
760
- minZoomProp
814
+ minZoomProp,
815
+ onInitialFit
761
816
  }) {
762
- const { setViewport } = (0, import_react5.useReactFlow)();
763
- const store = (0, import_react5.useStoreApi)();
764
- const containerRef = import_react4.default.useRef(null);
817
+ const { setViewport } = (0, import_react8.useReactFlow)();
818
+ const store = (0, import_react8.useStoreApi)();
819
+ const containerRef = import_react7.default.useRef(null);
765
820
  const boundsKey = `${bounds.x},${bounds.y},${bounds.width},${bounds.height}`;
766
- const boundsRef = import_react4.default.useRef(bounds);
821
+ const boundsRef = import_react7.default.useRef(bounds);
767
822
  boundsRef.current = bounds;
768
- const [containerSize, setContainerSize] = import_react4.default.useState({ w: 0, h: 0 });
769
- const prevBoundsKeyRef = import_react4.default.useRef(null);
770
- const prevSizeRef = import_react4.default.useRef({ w: 0, h: 0 });
771
- import_react4.default.useEffect(() => {
823
+ const [containerSize, setContainerSize] = import_react7.default.useState({ w: 0, h: 0 });
824
+ const prevBoundsKeyRef = import_react7.default.useRef(null);
825
+ const prevSizeRef = import_react7.default.useRef({ w: 0, h: 0 });
826
+ import_react7.default.useEffect(() => {
772
827
  const el = containerRef.current;
773
828
  if (!el) return;
774
829
  const observer = new ResizeObserver((entries) => {
@@ -780,7 +835,7 @@ function FocusHandler({
780
835
  observer.observe(el);
781
836
  return () => observer.disconnect();
782
837
  }, []);
783
- import_react4.default.useEffect(() => {
838
+ import_react7.default.useEffect(() => {
784
839
  if (containerSize.w === 0 || containerSize.h === 0) return;
785
840
  const prevKey = prevBoundsKeyRef.current;
786
841
  const prevSize = prevSizeRef.current;
@@ -813,10 +868,24 @@ function FocusHandler({
813
868
  store.getState().setMinZoom(minZoomProp != null ? minZoomProp : 0.5);
814
869
  }
815
870
  let vp = { x, y, zoom };
816
- if (extent && !isInitial) {
817
- vp = clampViewport(vp, containerSize.w, containerSize.h, extent);
871
+ if (isInitial || isBoundsChange) {
872
+ setViewport(vp, { duration: isInitial ? 0 : duration });
873
+ if (extent) {
874
+ const visW = containerSize.w / zoom;
875
+ const visH = containerSize.h / zoom;
876
+ onInitialFit == null ? void 0 : onInitialFit([
877
+ [Math.min(extent[0][0], cx - visW / 2), Math.min(extent[0][1], cy - visH / 2)],
878
+ [Math.max(extent[1][0], cx + visW / 2), Math.max(extent[1][1], cy + visH / 2)]
879
+ ]);
880
+ } else {
881
+ onInitialFit == null ? void 0 : onInitialFit();
882
+ }
883
+ } else {
884
+ if (extent) {
885
+ vp = clampViewport(vp, containerSize.w, containerSize.h, extent);
886
+ }
887
+ setViewport(vp, { duration });
818
888
  }
819
- setViewport(vp, { duration });
820
889
  }, [
821
890
  boundsKey,
822
891
  padding,
@@ -829,9 +898,10 @@ function FocusHandler({
829
898
  setViewport,
830
899
  clampBounds,
831
900
  minZoomProp,
832
- store
901
+ store,
902
+ onInitialFit
833
903
  ]);
834
- return /* @__PURE__ */ import_react4.default.createElement(
904
+ return /* @__PURE__ */ import_react7.default.createElement(
835
905
  "div",
836
906
  {
837
907
  ref: containerRef,
@@ -844,45 +914,8 @@ function FocusHandler({
844
914
  }
845
915
  );
846
916
  }
847
- var EDGE_TYPE_MAP = {
848
- step: "step",
849
- smoothstep: "smoothstep",
850
- bezier: "default",
851
- default: "default"
852
- };
853
- function applyEdgeStyles(edges, edgeTypeDefsMap) {
854
- if (!(edgeTypeDefsMap == null ? void 0 : edgeTypeDefsMap.size)) return edges;
855
- return edges.map((edge) => {
856
- var _a;
857
- const slug = edge.edgeTypeSlug;
858
- if (!slug) return edge;
859
- const def = edgeTypeDefsMap.get(slug);
860
- if (!def) return edge;
861
- const styled = __spreadValues({}, edge);
862
- if (!styled.type && def.lineStyle) {
863
- styled.type = (_a = EDGE_TYPE_MAP[def.lineStyle]) != null ? _a : "default";
864
- }
865
- styled.style = __spreadValues(__spreadValues(__spreadValues({}, def.color ? { stroke: def.color } : void 0), def.strokeWidth ? { strokeWidth: def.strokeWidth } : void 0), edge.style);
866
- if (styled.animated == null && def.animated) styled.animated = true;
867
- if (!styled.markerStart) {
868
- const startType = toMarkerType(def.markerStart);
869
- if (startType) {
870
- styled.markerStart = __spreadValues({
871
- type: startType
872
- }, def.color ? { color: def.color } : void 0);
873
- }
874
- }
875
- if (!styled.markerEnd) {
876
- const endType = toMarkerType(def.markerEnd);
877
- if (endType) {
878
- styled.markerEnd = __spreadValues({
879
- type: endType
880
- }, def.color ? { color: def.color } : void 0);
881
- }
882
- }
883
- return styled;
884
- });
885
- }
917
+
918
+ // src/ui/Flow/FlowRenderer.tsx
886
919
  function FlowRenderer({
887
920
  data,
888
921
  className,
@@ -919,16 +952,16 @@ function FlowRenderer({
919
952
  minZoom: minZoomProp,
920
953
  maxZoom: maxZoomProp
921
954
  }) {
922
- var _a;
923
- const nodeTypeDefsMap = import_react4.default.useMemo(() => {
955
+ var _a, _b;
956
+ const nodeTypeDefsMap = import_react9.default.useMemo(() => {
924
957
  if (!(nodeTypeDefs == null ? void 0 : nodeTypeDefs.length)) return void 0;
925
958
  return new Map(nodeTypeDefs.map((d) => [d.slug, d]));
926
959
  }, [nodeTypeDefs]);
927
- const edgeTypeDefsMap = import_react4.default.useMemo(() => {
960
+ const edgeTypeDefsMap = import_react9.default.useMemo(() => {
928
961
  if (!(edgeTypeDefs == null ? void 0 : edgeTypeDefs.length)) return void 0;
929
962
  return new Map(edgeTypeDefs.map((d) => [d.slug, d]));
930
963
  }, [edgeTypeDefs]);
931
- const nodeTypes = import_react4.default.useMemo(
964
+ const nodeTypes = import_react9.default.useMemo(
932
965
  () => createNodeTypes(
933
966
  nodeRenderers,
934
967
  nodeTypeDefsMap,
@@ -938,15 +971,15 @@ function FlowRenderer({
938
971
  ),
939
972
  [nodeRenderers, nodeTypeDefsMap, frameRenderer, nodeWrapper, renderNode]
940
973
  );
941
- const customEdgeTypes = import_react4.default.useMemo(
974
+ const customEdgeTypes = import_react9.default.useMemo(
942
975
  () => createEdgeTypes(edgeRenderers, edgeTypeDefsMap),
943
976
  [edgeRenderers, edgeTypeDefsMap]
944
977
  );
945
- const mergedCSS = import_react4.default.useMemo(() => {
978
+ const mergedCSS = import_react9.default.useMemo(() => {
946
979
  if (!(nodeTypeDefs == null ? void 0 : nodeTypeDefs.length)) return "";
947
980
  return nodeTypeDefs.filter((d) => d.customCSS).map((d) => d.customCSS).join("\n");
948
981
  }, [nodeTypeDefs]);
949
- const styledEdges = import_react4.default.useMemo(() => {
982
+ const styledEdges = import_react9.default.useMemo(() => {
950
983
  var _a2;
951
984
  let edges = applyEdgeStyles((_a2 = data == null ? void 0 : data.edges) != null ? _a2 : [], edgeTypeDefsMap);
952
985
  if (edgeRenderers) {
@@ -960,7 +993,7 @@ function FlowRenderer({
960
993
  }
961
994
  return edges;
962
995
  }, [data == null ? void 0 : data.edges, edgeTypeDefsMap, edgeRenderers]);
963
- const translateExtent = import_react4.default.useMemo(() => {
996
+ const translateExtent = import_react9.default.useMemo(() => {
964
997
  if (translateExtentProp) return translateExtentProp;
965
998
  const es = clampBounds != null ? clampBounds : bounds;
966
999
  if (!es) return void 0;
@@ -970,9 +1003,28 @@ function FlowRenderer({
970
1003
  [es.x + es.width * (1 + ep), es.y + es.height * (1 + ep)]
971
1004
  ];
972
1005
  }, [translateExtentProp, clampBounds, bounds, focusPadding]);
1006
+ const boundsKey = bounds ? `${bounds.x},${bounds.y},${bounds.width},${bounds.height}` : "";
1007
+ const extentReadyRef = import_react9.default.useRef(false);
1008
+ const expandedExtentRef = import_react9.default.useRef(void 0);
1009
+ const prevBoundsKeyRef = import_react9.default.useRef(boundsKey);
1010
+ if (prevBoundsKeyRef.current !== boundsKey) {
1011
+ prevBoundsKeyRef.current = boundsKey;
1012
+ extentReadyRef.current = false;
1013
+ expandedExtentRef.current = void 0;
1014
+ }
1015
+ const [, rerender] = import_react9.default.useReducer((x) => x + 1, 0);
1016
+ const handleInitialFit = import_react9.default.useCallback(
1017
+ (expandedExtent) => {
1018
+ extentReadyRef.current = true;
1019
+ expandedExtentRef.current = expandedExtent;
1020
+ rerender();
1021
+ },
1022
+ []
1023
+ );
1024
+ const activeExtent = !bounds || extentReadyRef.current ? (_a = expandedExtentRef.current) != null ? _a : translateExtent : void 0;
973
1025
  if (!data) return null;
974
1026
  const resolvedDefaultViewport = defaultViewportProp != null ? defaultViewportProp : !fitView && data.viewport ? data.viewport : void 0;
975
- return /* @__PURE__ */ import_react4.default.createElement(import_react5.ReactFlowProvider, null, /* @__PURE__ */ import_react4.default.createElement(
1027
+ return /* @__PURE__ */ import_react9.default.createElement(import_react10.ReactFlowProvider, null, /* @__PURE__ */ import_react9.default.createElement(
976
1028
  "div",
977
1029
  {
978
1030
  className,
@@ -982,16 +1034,16 @@ function FlowRenderer({
982
1034
  background: "transparent"
983
1035
  }, style)
984
1036
  },
985
- /* @__PURE__ */ import_react4.default.createElement(
986
- import_react5.ReactFlow,
1037
+ /* @__PURE__ */ import_react9.default.createElement(
1038
+ import_react10.ReactFlow,
987
1039
  {
988
- nodes: (_a = data.nodes) != null ? _a : [],
1040
+ nodes: (_b = data.nodes) != null ? _b : [],
989
1041
  edges: styledEdges,
990
1042
  nodeTypes,
991
1043
  edgeTypes: customEdgeTypes,
992
1044
  defaultViewport: resolvedDefaultViewport,
993
1045
  fitView: bounds ? false : fitView,
994
- translateExtent,
1046
+ translateExtent: activeExtent,
995
1047
  onNodeClick,
996
1048
  onNodeDoubleClick,
997
1049
  onNodeContextMenu,
@@ -1012,16 +1064,16 @@ function FlowRenderer({
1012
1064
  maxZoom: maxZoomProp,
1013
1065
  proOptions: { hideAttribution: true }
1014
1066
  },
1015
- mergedCSS && /* @__PURE__ */ import_react4.default.createElement("style", { dangerouslySetInnerHTML: { __html: mergedCSS } }),
1016
- background && /* @__PURE__ */ import_react4.default.createElement(import_react5.Background, null),
1017
- controls && /* @__PURE__ */ import_react4.default.createElement(import_react5.Controls, null),
1018
- minimap && /* @__PURE__ */ import_react4.default.createElement(
1019
- import_react5.MiniMap,
1067
+ mergedCSS && /* @__PURE__ */ import_react9.default.createElement("style", { dangerouslySetInnerHTML: { __html: mergedCSS } }),
1068
+ background && /* @__PURE__ */ import_react9.default.createElement(import_react10.Background, null),
1069
+ controls && /* @__PURE__ */ import_react9.default.createElement(import_react10.Controls, null),
1070
+ minimap && /* @__PURE__ */ import_react9.default.createElement(
1071
+ import_react10.MiniMap,
1020
1072
  {
1021
1073
  nodeColor: minimapNodeColor
1022
1074
  }
1023
1075
  ),
1024
- bounds && /* @__PURE__ */ import_react4.default.createElement(
1076
+ bounds && /* @__PURE__ */ import_react9.default.createElement(
1025
1077
  FocusHandler,
1026
1078
  {
1027
1079
  bounds,
@@ -1031,7 +1083,8 @@ function FlowRenderer({
1031
1083
  responsive: responsiveFit != null ? responsiveFit : true,
1032
1084
  extent: translateExtent,
1033
1085
  clampBounds,
1034
- minZoomProp
1086
+ minZoomProp,
1087
+ onInitialFit: handleInitialFit
1035
1088
  }
1036
1089
  ),
1037
1090
  children