@statelyai/layout 0.4.1 → 0.4.3

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/README.md CHANGED
@@ -276,6 +276,14 @@ and Box SIMPLE geometry, including provider bounds and whether edge sections
276
276
  are routed or left authored. Rectangle Packing has an exact default baseline;
277
277
  its full Java packing strategy remains in progress.
278
278
 
279
+ <!-- size snapping from src/elkjs/index.ts snapSizes -->
280
+
281
+ Node, port and label sizes are snapped to the browser's 1/64px layout unit
282
+ before layout, and the result reports the snapped sizes. Measured sizes carry
283
+ float noise, such as a rect divided by a zoom factor, and exact ties in layered
284
+ layout would otherwise let that noise move nodes. Sizes already on that grid,
285
+ including all integer sizes, are unchanged.
286
+
279
287
  The compatibility entry's named graph, edge, option, and result types are
280
288
  mutually assignable with the declarations shipped by `elkjs@0.11.1`. Its
281
289
  default class also accepts the library's broader internal graph inputs.
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, '__esModule', { value: true });
2
- require('../layered-5RxQhryb.cjs');
3
- const require_elkjs = require('../elkjs-DNfXDPup.cjs');
2
+ require('../layered-BJu8A21s.cjs');
3
+ const require_elkjs = require('../elkjs-Cj-lWiK1.cjs');
4
4
 
5
5
  exports.compileStatechartLayout = require_elkjs.compileStatechartLayout;
6
6
  exports.default = require_elkjs.ELK;
@@ -1,4 +1,4 @@
1
- import "../layered-DSesbctm.mjs";
2
- import { a as scoreStatechartLayout, i as layoutStatechart, n as getElkRoutes, r as compileStatechartLayout, t as ELK } from "../elkjs-BBfKN4Dw.mjs";
1
+ import "../layered-BsAdm_u8.mjs";
2
+ import { a as scoreStatechartLayout, i as layoutStatechart, n as getElkRoutes, r as compileStatechartLayout, t as ELK } from "../elkjs-B5kN_zS6.mjs";
3
3
 
4
4
  export { compileStatechartLayout, ELK as default, getElkRoutes, layoutStatechart, scoreStatechartLayout };
@@ -1,4 +1,4 @@
1
- require('../layered-5RxQhryb.cjs');
1
+ require('../layered-BJu8A21s.cjs');
2
2
  const require_elkjs_worker = require('./worker.cjs');
3
3
  const require_worker_client = require('../worker-client-D4oEvhAl.cjs');
4
4
 
@@ -1,4 +1,4 @@
1
- import "../layered-DSesbctm.mjs";
1
+ import "../layered-BsAdm_u8.mjs";
2
2
  import { Worker } from "./worker.mjs";
3
3
  import { t as WorkerELK } from "../worker-client-BNjwT1AJ.mjs";
4
4
 
@@ -1,5 +1,5 @@
1
- require('../layered-5RxQhryb.cjs');
2
- const require_elkjs = require('../elkjs-DNfXDPup.cjs');
1
+ require('../layered-BJu8A21s.cjs');
2
+ const require_elkjs = require('../elkjs-Cj-lWiK1.cjs');
3
3
 
4
4
  //#region src/elkjs/worker.ts
5
5
  /*******************************************************************************
@@ -1,5 +1,5 @@
1
- import "../layered-DSesbctm.mjs";
2
- import { t as ELK } from "../elkjs-BBfKN4Dw.mjs";
1
+ import "../layered-BsAdm_u8.mjs";
2
+ import { t as ELK } from "../elkjs-B5kN_zS6.mjs";
3
3
 
4
4
  //#region src/elkjs/worker.ts
5
5
  /*******************************************************************************
@@ -1,6 +1,6 @@
1
1
  import { T as pathFromPoints, g as pathFromSplinePoints, j as freeze } from "./routing-CR8flv8b.mjs";
2
- import { $ as attachExternalPortDummy, R as createLayerSweepSession, S as CROSSING_MODEL, Z as minimizeHierarchyCrossings, b as elkjs0111ResultPolicy, c as elkLayeredOptionDefinitions, et as createExternalPortDummy, h as separateOpposingTracks, nt as createOrthogonalHypersegments, t as createLayeredScopePipeline, tt as externalPortDummyOf, v as isPerpendicularPortRestored, y as hierarchicalPortSides } from "./layered-DSesbctm.mjs";
3
- import { n as executeElkjs0111Layout } from "./layout-engine-GpBIX6ng.mjs";
2
+ import { $ as attachExternalPortDummy, R as createLayerSweepSession, S as CROSSING_MODEL, Z as minimizeHierarchyCrossings, b as elkjs0111ResultPolicy, c as elkLayeredOptionDefinitions, et as createExternalPortDummy, h as separateOpposingTracks, nt as createOrthogonalHypersegments, t as createLayeredScopePipeline, tt as externalPortDummyOf, v as isPerpendicularPortRestored, y as hierarchicalPortSides } from "./layered-BsAdm_u8.mjs";
3
+ import { n as executeElkjs0111Layout } from "./layout-engine-DnlmGxHL.mjs";
4
4
  import { createGraph } from "@statelyai/graph";
5
5
 
6
6
  //#region src/layered/hierarchy-sweepiness.ts
@@ -1049,6 +1049,27 @@ function isLayoutEdgeLabel(label) {
1049
1049
  }
1050
1050
  /** The crossing-model setting a layout passes to crossing minimization. */
1051
1051
  const crossingModel = Symbol("crossingModel");
1052
+ const LAYOUT_UNITS_PER_PX = 64;
1053
+ /**
1054
+ * Measured sizes carry float noise (a browser rect divided by zoom), and a
1055
+ * layered layout is full of exact ties that noise decides. Snap sizes to the
1056
+ * browser's 1/64px layout unit so the same graph always lays out the same way;
1057
+ * sizes already on that grid are unchanged.
1058
+ */
1059
+ function snapSizes(node) {
1060
+ const snap = (shape) => {
1061
+ if (typeof shape.width === "number") shape.width = Math.round(shape.width * LAYOUT_UNITS_PER_PX) / LAYOUT_UNITS_PER_PX;
1062
+ if (typeof shape.height === "number") shape.height = Math.round(shape.height * LAYOUT_UNITS_PER_PX) / LAYOUT_UNITS_PER_PX;
1063
+ };
1064
+ snap(node);
1065
+ for (const label of node.labels ?? []) snap(label);
1066
+ for (const port of node.ports ?? []) {
1067
+ snap(port);
1068
+ for (const label of port.labels ?? []) snap(label);
1069
+ }
1070
+ for (const edge of node.edges ?? []) for (const label of edge.labels ?? []) snap(label);
1071
+ for (const child of node.children ?? []) snapSizes(child);
1072
+ }
1052
1073
  var ELK = class {
1053
1074
  #options;
1054
1075
  #algorithmIds;
@@ -1119,6 +1140,7 @@ var ELK = class {
1119
1140
  }
1120
1141
  terminateWorker() {}
1121
1142
  async layout(graph, arguments_ = {}) {
1143
+ snapSizes(graph);
1122
1144
  const options = {
1123
1145
  ...this.#options.defaultLayoutOptions,
1124
1146
  ...arguments_.layoutOptions
@@ -1805,6 +1827,13 @@ var ELK = class {
1805
1827
  return (sourceConstraint === "FIRST" || sourceConstraint === "FIRST_SEPARATE") && (targetConstraint === "FIRST" || targetConstraint === "FIRST_SEPARATE");
1806
1828
  })) throw new Error("org.eclipse.elk.core.UnsupportedConfigurationException: Layer constraints conflict");
1807
1829
  const padding = parsePadding(getOption(layoutOptions, "padding"), algorithm === "layered" ? 12 : 0);
1830
+ const parsedSettings = /* @__PURE__ */ new WeakMap();
1831
+ const elementSettings = (elementOptions) => {
1832
+ const key = elementOptions ?? noElementOptions;
1833
+ let settings = parsedSettings.get(key);
1834
+ if (!settings) parsedSettings.set(key, settings = getElementLayeredSettings(key));
1835
+ return settings;
1836
+ };
1808
1837
  const options = {
1809
1838
  direction: getDirection(layoutOptions),
1810
1839
  spacing: {
@@ -1821,13 +1850,13 @@ var ELK = class {
1821
1850
  },
1822
1851
  nodeSettings: (node) => {
1823
1852
  const child = findById(graph.children, node.id)?.item;
1824
- return getElementLayeredSettings(child?.layoutOptions ?? {});
1853
+ return elementSettings(child?.layoutOptions);
1825
1854
  },
1826
1855
  edgeSettings: (edge) => {
1827
1856
  const elkEdge = findById(graph.edges, edge.id)?.item;
1828
1857
  return {
1829
- ...getElementLayeredSettings(elkEdge?.layoutOptions ?? {}),
1830
- ...getElementLayeredSettings(elkEdge?.labels?.[0]?.layoutOptions ?? {}),
1858
+ ...elementSettings(elkEdge?.layoutOptions),
1859
+ ...elementSettings(elkEdge?.labels?.[0]?.layoutOptions),
1831
1860
  "edge.hierarchyRank": elkEdge && hierarchySegmentRank.get(elkEdge)
1832
1861
  };
1833
1862
  },
@@ -1836,7 +1865,7 @@ var ELK = class {
1836
1865
  const found = findById(child?.ports, port.name);
1837
1866
  const elkPort = found?.item;
1838
1867
  return {
1839
- ...getElementLayeredSettings(elkPort?.layoutOptions ?? {}),
1868
+ ...elementSettings(elkPort?.layoutOptions),
1840
1869
  "port.authoredIndex": found?.position,
1841
1870
  "port.labelWidth": Math.max(0, ...(elkPort?.labels ?? []).map((label) => label.width ?? 0)),
1842
1871
  "port.labelHeight": Math.max(0, ...(elkPort?.labels ?? []).map((label) => label.height ?? 0))
@@ -2302,12 +2331,14 @@ function applyNodeMicroLayout(graph, globalOptions) {
2302
2331
  node.height = height;
2303
2332
  }
2304
2333
  }
2334
+ const exactKeysBySuffix = /* @__PURE__ */ new Map();
2305
2335
  function getOption(options, suffix) {
2306
- const exactKeys = [
2336
+ let exactKeys = exactKeysBySuffix.get(suffix);
2337
+ if (!exactKeys) exactKeysBySuffix.set(suffix, exactKeys = [
2307
2338
  suffix,
2308
2339
  `elk.${suffix}`,
2309
2340
  `org.eclipse.elk.${suffix}`
2310
- ];
2341
+ ]);
2311
2342
  for (const key of exactKeys) if (options[key] !== void 0) return options[key];
2312
2343
  }
2313
2344
  const ergonomicallyMappedLayeredSettings = new Set([
@@ -2386,6 +2417,7 @@ function findById(items, id) {
2386
2417
  position
2387
2418
  };
2388
2419
  }
2420
+ const noElementOptions = {};
2389
2421
  function getElementLayeredSettings(options) {
2390
2422
  const settings = {};
2391
2423
  const chosen = /* @__PURE__ */ new Map();
@@ -1,6 +1,6 @@
1
1
  const require_routing = require('./routing-QIdGGFBe.cjs');
2
- const require_layered = require('./layered-5RxQhryb.cjs');
3
- const require_layout_engine = require('./layout-engine-CLFySz3R.cjs');
2
+ const require_layered = require('./layered-BJu8A21s.cjs');
3
+ const require_layout_engine = require('./layout-engine-BFP1TZbF.cjs');
4
4
  let _statelyai_graph = require("@statelyai/graph");
5
5
 
6
6
  //#region src/layered/hierarchy-sweepiness.ts
@@ -1049,6 +1049,27 @@ function isLayoutEdgeLabel(label) {
1049
1049
  }
1050
1050
  /** The crossing-model setting a layout passes to crossing minimization. */
1051
1051
  const crossingModel = Symbol("crossingModel");
1052
+ const LAYOUT_UNITS_PER_PX = 64;
1053
+ /**
1054
+ * Measured sizes carry float noise (a browser rect divided by zoom), and a
1055
+ * layered layout is full of exact ties that noise decides. Snap sizes to the
1056
+ * browser's 1/64px layout unit so the same graph always lays out the same way;
1057
+ * sizes already on that grid are unchanged.
1058
+ */
1059
+ function snapSizes(node) {
1060
+ const snap = (shape) => {
1061
+ if (typeof shape.width === "number") shape.width = Math.round(shape.width * LAYOUT_UNITS_PER_PX) / LAYOUT_UNITS_PER_PX;
1062
+ if (typeof shape.height === "number") shape.height = Math.round(shape.height * LAYOUT_UNITS_PER_PX) / LAYOUT_UNITS_PER_PX;
1063
+ };
1064
+ snap(node);
1065
+ for (const label of node.labels ?? []) snap(label);
1066
+ for (const port of node.ports ?? []) {
1067
+ snap(port);
1068
+ for (const label of port.labels ?? []) snap(label);
1069
+ }
1070
+ for (const edge of node.edges ?? []) for (const label of edge.labels ?? []) snap(label);
1071
+ for (const child of node.children ?? []) snapSizes(child);
1072
+ }
1052
1073
  var ELK = class {
1053
1074
  #options;
1054
1075
  #algorithmIds;
@@ -1119,6 +1140,7 @@ var ELK = class {
1119
1140
  }
1120
1141
  terminateWorker() {}
1121
1142
  async layout(graph, arguments_ = {}) {
1143
+ snapSizes(graph);
1122
1144
  const options = {
1123
1145
  ...this.#options.defaultLayoutOptions,
1124
1146
  ...arguments_.layoutOptions
@@ -1805,6 +1827,13 @@ var ELK = class {
1805
1827
  return (sourceConstraint === "FIRST" || sourceConstraint === "FIRST_SEPARATE") && (targetConstraint === "FIRST" || targetConstraint === "FIRST_SEPARATE");
1806
1828
  })) throw new Error("org.eclipse.elk.core.UnsupportedConfigurationException: Layer constraints conflict");
1807
1829
  const padding = parsePadding(getOption(layoutOptions, "padding"), algorithm === "layered" ? 12 : 0);
1830
+ const parsedSettings = /* @__PURE__ */ new WeakMap();
1831
+ const elementSettings = (elementOptions) => {
1832
+ const key = elementOptions ?? noElementOptions;
1833
+ let settings = parsedSettings.get(key);
1834
+ if (!settings) parsedSettings.set(key, settings = getElementLayeredSettings(key));
1835
+ return settings;
1836
+ };
1808
1837
  const options = {
1809
1838
  direction: getDirection(layoutOptions),
1810
1839
  spacing: {
@@ -1821,13 +1850,13 @@ var ELK = class {
1821
1850
  },
1822
1851
  nodeSettings: (node) => {
1823
1852
  const child = findById(graph.children, node.id)?.item;
1824
- return getElementLayeredSettings(child?.layoutOptions ?? {});
1853
+ return elementSettings(child?.layoutOptions);
1825
1854
  },
1826
1855
  edgeSettings: (edge) => {
1827
1856
  const elkEdge = findById(graph.edges, edge.id)?.item;
1828
1857
  return {
1829
- ...getElementLayeredSettings(elkEdge?.layoutOptions ?? {}),
1830
- ...getElementLayeredSettings(elkEdge?.labels?.[0]?.layoutOptions ?? {}),
1858
+ ...elementSettings(elkEdge?.layoutOptions),
1859
+ ...elementSettings(elkEdge?.labels?.[0]?.layoutOptions),
1831
1860
  "edge.hierarchyRank": elkEdge && hierarchySegmentRank.get(elkEdge)
1832
1861
  };
1833
1862
  },
@@ -1836,7 +1865,7 @@ var ELK = class {
1836
1865
  const found = findById(child?.ports, port.name);
1837
1866
  const elkPort = found?.item;
1838
1867
  return {
1839
- ...getElementLayeredSettings(elkPort?.layoutOptions ?? {}),
1868
+ ...elementSettings(elkPort?.layoutOptions),
1840
1869
  "port.authoredIndex": found?.position,
1841
1870
  "port.labelWidth": Math.max(0, ...(elkPort?.labels ?? []).map((label) => label.width ?? 0)),
1842
1871
  "port.labelHeight": Math.max(0, ...(elkPort?.labels ?? []).map((label) => label.height ?? 0))
@@ -2302,12 +2331,14 @@ function applyNodeMicroLayout(graph, globalOptions) {
2302
2331
  node.height = height;
2303
2332
  }
2304
2333
  }
2334
+ const exactKeysBySuffix = /* @__PURE__ */ new Map();
2305
2335
  function getOption(options, suffix) {
2306
- const exactKeys = [
2336
+ let exactKeys = exactKeysBySuffix.get(suffix);
2337
+ if (!exactKeys) exactKeysBySuffix.set(suffix, exactKeys = [
2307
2338
  suffix,
2308
2339
  `elk.${suffix}`,
2309
2340
  `org.eclipse.elk.${suffix}`
2310
- ];
2341
+ ]);
2311
2342
  for (const key of exactKeys) if (options[key] !== void 0) return options[key];
2312
2343
  }
2313
2344
  const ergonomicallyMappedLayeredSettings = new Set([
@@ -2386,6 +2417,7 @@ function findById(items, id) {
2386
2417
  position
2387
2418
  };
2388
2419
  }
2420
+ const noElementOptions = {};
2389
2421
  function getElementLayeredSettings(options) {
2390
2422
  const settings = {};
2391
2423
  const chosen = /* @__PURE__ */ new Map();
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  const require_routing = require('./routing-QIdGGFBe.cjs');
2
- const require_layered = require('./layered-5RxQhryb.cjs');
3
- const require_layout_engine = require('./layout-engine-CLFySz3R.cjs');
2
+ const require_layered = require('./layered-BJu8A21s.cjs');
3
+ const require_layout_engine = require('./layout-engine-BFP1TZbF.cjs');
4
4
  let _statelyai_graph = require("@statelyai/graph");
5
5
 
6
6
  //#region src/layout.ts
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { C as getPointAtLength, D as toSvgPath, E as roundCorners, F as LayoutError, I as UnsupportedLayoutError, S as getPathLength, T as pathFromPoints, _ as routeToGraphPatch, a as fanRouting, b as flattenPath, c as orthogonalRouting, d as routingStrategies, f as selfLoopRouting, g as pathFromSplinePoints, h as getLayoutRoutes, i as curvedRouting, l as parallelRouting, m as applyRoutePatches, n as bundleRouting, o as octilinearRouting, p as straightRouting, r as busRouting, s as organicRouting, t as bezierRouting, u as polylineRouting, v as routeToPoints, w as getTangentAtLength, x as getPathBounds, y as routeToPolylines } from "./routing-CR8flv8b.mjs";
2
- import { A as breakCyclesByStronglyConnectedConnectivity, B as minimizeCrossingsInteractively, C as assignLayersByBreadthFirstModelOrder, D as assignLayersInteractively, E as assignLayersByLongestPathToSink, F as breakCyclesWithDepthFirstSearch, G as placeNodesInteractively, H as minimizeCrossingsWithMedian, I as breakCyclesWithModelOrderBreadthFirstSearch, J as routeEdgesWithPolylines, L as breakCyclesWithModelOrderDepthFirstSearch, M as breakCyclesGreedily, N as breakCyclesGreedilyByModelOrder, O as assignLayersWithCoffmanGraham, P as breakCyclesInteractively, Q as assignLayersWithNetworkSimplex, T as assignLayersByLongestPath, U as minimizeCrossingsWithModelOrder, V as minimizeCrossingsWithBarycenter, W as placeNodesInLayers, Y as routeEdgesWithSplines, _ as statechartHints, a as fromElkLayeredOptionId, c as elkLayeredOptionDefinitions, f as assignLayersWithStretchWidth, g as hint, i as layeredAlgorithm, j as breakCyclesByStronglyConnectedNodeType, k as breakCyclesByModelOrder, m as c, o as toElkLayeredOptions, p as assignLayersWithMinWidth, q as routeEdgesOrthogonally, r as getLayeredLayout, s as elkLayeredEnumValues, w as assignLayersByDepthFirstModelOrder } from "./layered-DSesbctm.mjs";
3
- import { a as getSporeCompactionLayout, c as sporeOverlapRemovalAlgorithm, d as getRectanglePackingLayout, f as rectanglePackingAlgorithm, g as getFixedLayout, h as fixedAlgorithm, i as getBuiltInLayoutAlgorithm, l as getRandomLayout, m as getBoxLayout, o as getSporeOverlapRemovalLayout, p as boxAlgorithm, r as executeLayoutAlgorithm, s as sporeCompactionAlgorithm, t as builtInLayoutAlgorithms, u as randomAlgorithm } from "./layout-engine-GpBIX6ng.mjs";
2
+ import { A as breakCyclesByStronglyConnectedConnectivity, B as minimizeCrossingsInteractively, C as assignLayersByBreadthFirstModelOrder, D as assignLayersInteractively, E as assignLayersByLongestPathToSink, F as breakCyclesWithDepthFirstSearch, G as placeNodesInteractively, H as minimizeCrossingsWithMedian, I as breakCyclesWithModelOrderBreadthFirstSearch, J as routeEdgesWithPolylines, L as breakCyclesWithModelOrderDepthFirstSearch, M as breakCyclesGreedily, N as breakCyclesGreedilyByModelOrder, O as assignLayersWithCoffmanGraham, P as breakCyclesInteractively, Q as assignLayersWithNetworkSimplex, T as assignLayersByLongestPath, U as minimizeCrossingsWithModelOrder, V as minimizeCrossingsWithBarycenter, W as placeNodesInLayers, Y as routeEdgesWithSplines, _ as statechartHints, a as fromElkLayeredOptionId, c as elkLayeredOptionDefinitions, f as assignLayersWithStretchWidth, g as hint, i as layeredAlgorithm, j as breakCyclesByStronglyConnectedNodeType, k as breakCyclesByModelOrder, m as c, o as toElkLayeredOptions, p as assignLayersWithMinWidth, q as routeEdgesOrthogonally, r as getLayeredLayout, s as elkLayeredEnumValues, w as assignLayersByDepthFirstModelOrder } from "./layered-BsAdm_u8.mjs";
3
+ import { a as getSporeCompactionLayout, c as sporeOverlapRemovalAlgorithm, d as getRectanglePackingLayout, f as rectanglePackingAlgorithm, g as getFixedLayout, h as fixedAlgorithm, i as getBuiltInLayoutAlgorithm, l as getRandomLayout, m as getBoxLayout, o as getSporeOverlapRemovalLayout, p as boxAlgorithm, r as executeLayoutAlgorithm, s as sporeCompactionAlgorithm, t as builtInLayoutAlgorithms, u as randomAlgorithm } from "./layout-engine-DnlmGxHL.mjs";
4
4
  import { getGraphIssues } from "@statelyai/graph";
5
5
 
6
6
  //#region src/layout.ts
@@ -1,4 +1,4 @@
1
- const require_layered = require('../layered-5RxQhryb.cjs');
1
+ const require_layered = require('../layered-BJu8A21s.cjs');
2
2
 
3
3
  exports.assignLayersByBreadthFirstModelOrder = require_layered.assignLayersByBreadthFirstModelOrder;
4
4
  exports.assignLayersByDepthFirstModelOrder = require_layered.assignLayersByDepthFirstModelOrder;
@@ -1,3 +1,3 @@
1
- import { A as breakCyclesByStronglyConnectedConnectivity, B as minimizeCrossingsInteractively, C as assignLayersByBreadthFirstModelOrder, D as assignLayersInteractively, E as assignLayersByLongestPathToSink, F as breakCyclesWithDepthFirstSearch, G as placeNodesInteractively, H as minimizeCrossingsWithMedian, I as breakCyclesWithModelOrderBreadthFirstSearch, J as routeEdgesWithPolylines, L as breakCyclesWithModelOrderDepthFirstSearch, M as breakCyclesGreedily, N as breakCyclesGreedilyByModelOrder, O as assignLayersWithCoffmanGraham, P as breakCyclesInteractively, Q as assignLayersWithNetworkSimplex, T as assignLayersByLongestPath, U as minimizeCrossingsWithModelOrder, V as minimizeCrossingsWithBarycenter, W as placeNodesInLayers, Y as routeEdgesWithSplines, a as fromElkLayeredOptionId, c as elkLayeredOptionDefinitions, d as placeNodesWithBrandesKoepf, f as assignLayersWithStretchWidth, i as layeredAlgorithm, j as breakCyclesByStronglyConnectedNodeType, k as breakCyclesByModelOrder, l as placeNodesWithNetworkSimplex, n as elkjs0111LayeredAlgorithm, o as toElkLayeredOptions, p as assignLayersWithMinWidth, q as routeEdgesOrthogonally, r as getLayeredLayout, s as elkLayeredEnumValues, t as createLayeredScopePipeline, u as placeNodesWithLinearSegments, w as assignLayersByDepthFirstModelOrder } from "../layered-DSesbctm.mjs";
1
+ import { A as breakCyclesByStronglyConnectedConnectivity, B as minimizeCrossingsInteractively, C as assignLayersByBreadthFirstModelOrder, D as assignLayersInteractively, E as assignLayersByLongestPathToSink, F as breakCyclesWithDepthFirstSearch, G as placeNodesInteractively, H as minimizeCrossingsWithMedian, I as breakCyclesWithModelOrderBreadthFirstSearch, J as routeEdgesWithPolylines, L as breakCyclesWithModelOrderDepthFirstSearch, M as breakCyclesGreedily, N as breakCyclesGreedilyByModelOrder, O as assignLayersWithCoffmanGraham, P as breakCyclesInteractively, Q as assignLayersWithNetworkSimplex, T as assignLayersByLongestPath, U as minimizeCrossingsWithModelOrder, V as minimizeCrossingsWithBarycenter, W as placeNodesInLayers, Y as routeEdgesWithSplines, a as fromElkLayeredOptionId, c as elkLayeredOptionDefinitions, d as placeNodesWithBrandesKoepf, f as assignLayersWithStretchWidth, i as layeredAlgorithm, j as breakCyclesByStronglyConnectedNodeType, k as breakCyclesByModelOrder, l as placeNodesWithNetworkSimplex, n as elkjs0111LayeredAlgorithm, o as toElkLayeredOptions, p as assignLayersWithMinWidth, q as routeEdgesOrthogonally, r as getLayeredLayout, s as elkLayeredEnumValues, t as createLayeredScopePipeline, u as placeNodesWithLinearSegments, w as assignLayersByDepthFirstModelOrder } from "../layered-BsAdm_u8.mjs";
2
2
 
3
3
  export { assignLayersByBreadthFirstModelOrder, assignLayersByDepthFirstModelOrder, assignLayersByLongestPath, assignLayersByLongestPathToSink, assignLayersInteractively, assignLayersWithCoffmanGraham, assignLayersWithMinWidth, assignLayersWithNetworkSimplex, assignLayersWithStretchWidth, breakCyclesByModelOrder, breakCyclesByStronglyConnectedConnectivity, breakCyclesByStronglyConnectedNodeType, breakCyclesGreedily, breakCyclesGreedilyByModelOrder, breakCyclesInteractively, breakCyclesWithDepthFirstSearch, breakCyclesWithModelOrderBreadthFirstSearch, breakCyclesWithModelOrderDepthFirstSearch, createLayeredScopePipeline, elkLayeredEnumValues, elkLayeredOptionDefinitions, elkjs0111LayeredAlgorithm, fromElkLayeredOptionId, getLayeredLayout, layeredAlgorithm, minimizeCrossingsInteractively, minimizeCrossingsWithBarycenter, minimizeCrossingsWithMedian, minimizeCrossingsWithModelOrder, placeNodesInLayers, placeNodesInteractively, placeNodesWithBrandesKoepf, placeNodesWithLinearSegments, placeNodesWithNetworkSimplex, routeEdgesOrthogonally, routeEdgesWithPolylines, routeEdgesWithSplines, toElkLayeredOptions };