ngx-vflow 1.7.1 → 1.8.0

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,3 +1,4 @@
1
+ import { getOverlappingArea } from './get-overlapping-area';
1
2
  export function getNodesBounds(nodes) {
2
3
  if (nodes.length === 0) {
3
4
  return { x: 0, y: 0, width: 0, height: 0 };
@@ -9,6 +10,21 @@ export function getNodesBounds(nodes) {
9
10
  });
10
11
  return boxToRect(box);
11
12
  }
13
+ export function getIntesectingNodes(nodeId, nodes, options) {
14
+ const node = nodes.find((n) => n.rawNode.id === nodeId);
15
+ if (!node)
16
+ return [];
17
+ const nodeRect = nodeToRect(node);
18
+ return nodes.filter((currentNode) => {
19
+ if (currentNode.rawNode.id === nodeId)
20
+ return false;
21
+ const overlappingArea = getOverlappingArea(nodeToRect(currentNode), nodeRect);
22
+ if (options?.partially) {
23
+ return overlappingArea > 0;
24
+ }
25
+ return overlappingArea >= nodeRect.width * nodeRect.height;
26
+ });
27
+ }
12
28
  function nodeToBox(node) {
13
29
  return {
14
30
  x: node.point().x,
@@ -17,6 +33,14 @@ function nodeToBox(node) {
17
33
  y2: node.point().y + node.size().height,
18
34
  };
19
35
  }
36
+ export function nodeToRect(node) {
37
+ return {
38
+ x: node.point().x,
39
+ y: node.point().y,
40
+ width: node.width(),
41
+ height: node.height(),
42
+ };
43
+ }
20
44
  function boxToRect({ x, y, x2, y2 }) {
21
45
  return {
22
46
  x,
@@ -33,4 +57,4 @@ function getBoundsOfBoxes(box1, box2) {
33
57
  y2: Math.max(box1.y2, box2.y2),
34
58
  };
35
59
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvdXRpbHMvbm9kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFrQjtJQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNyQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFlO0lBQ2hDLE9BQU87UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakIsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO1FBQ3RDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNO0tBQ3hDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQU87SUFDdEMsT0FBTztRQUNMLENBQUM7UUFDRCxDQUFDO1FBQ0QsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ2IsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQVMsRUFBRSxJQUFTO0lBQzVDLE9BQU87UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDL0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb3ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JveCc7XG5pbXBvcnQgeyBSZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN0JztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9ub2RlLm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVzQm91bmRzKG5vZGVzOiBOb2RlTW9kZWxbXSk6IFJlY3Qge1xuICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICB9XG5cbiAgbGV0IGJveDogQm94ID0geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHksIHgyOiAtSW5maW5pdHksIHkyOiAtSW5maW5pdHkgfTtcblxuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3Qgbm9kZUJveCA9IG5vZGVUb0JveChub2RlKTtcbiAgICBib3ggPSBnZXRCb3VuZHNPZkJveGVzKGJveCwgbm9kZUJveCk7XG4gIH0pO1xuXG4gIHJldHVybiBib3hUb1JlY3QoYm94KTtcbn1cblxuZnVuY3Rpb24gbm9kZVRvQm94KG5vZGU6IE5vZGVNb2RlbCk6IEJveCB7XG4gIHJldHVybiB7XG4gICAgeDogbm9kZS5wb2ludCgpLngsXG4gICAgeTogbm9kZS5wb2ludCgpLnksXG4gICAgeDI6IG5vZGUucG9pbnQoKS54ICsgbm9kZS5zaXplKCkud2lkdGgsXG4gICAgeTI6IG5vZGUucG9pbnQoKS55ICsgbm9kZS5zaXplKCkuaGVpZ2h0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBib3hUb1JlY3QoeyB4LCB5LCB4MiwgeTIgfTogQm94KTogUmVjdCB7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiB4MiAtIHgsXG4gICAgaGVpZ2h0OiB5MiAtIHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kc09mQm94ZXMoYm94MTogQm94LCBib3gyOiBCb3gpOiBCb3gge1xuICByZXR1cm4ge1xuICAgIHg6IE1hdGgubWluKGJveDEueCwgYm94Mi54KSxcbiAgICB5OiBNYXRoLm1pbihib3gxLnksIGJveDIueSksXG4gICAgeDI6IE1hdGgubWF4KGJveDEueDIsIGJveDIueDIpLFxuICAgIHkyOiBNYXRoLm1heChib3gxLnkyLCBib3gyLnkyKSxcbiAgfTtcbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvdXRpbHMvbm9kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFrQjtJQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNyQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE1BQWMsRUFDZCxLQUFrQixFQUNsQixPQUFrQztJQUVsQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXJCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNsQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVwRCxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFOUUsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdkIsT0FBTyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLGVBQWUsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBZTtJQUNoQyxPQUFPO1FBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqQixFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztRQUN0QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTTtLQUN4QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBZTtJQUN4QyxPQUFPO1FBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFPO0lBQ3RDLE9BQU87UUFDTCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQztRQUNiLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFTLEVBQUUsSUFBUztJQUM1QyxPQUFPO1FBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0tBQy9CLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm94IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib3gnO1xuaW1wb3J0IHsgSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlcnNlY3Rpbmctbm9kZXMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVjdCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXRPdmVybGFwcGluZ0FyZWEgfSBmcm9tICcuL2dldC1vdmVybGFwcGluZy1hcmVhJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVzQm91bmRzKG5vZGVzOiBOb2RlTW9kZWxbXSk6IFJlY3Qge1xuICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICB9XG5cbiAgbGV0IGJveDogQm94ID0geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHksIHgyOiAtSW5maW5pdHksIHkyOiAtSW5maW5pdHkgfTtcblxuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3Qgbm9kZUJveCA9IG5vZGVUb0JveChub2RlKTtcbiAgICBib3ggPSBnZXRCb3VuZHNPZkJveGVzKGJveCwgbm9kZUJveCk7XG4gIH0pO1xuXG4gIHJldHVybiBib3hUb1JlY3QoYm94KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVzZWN0aW5nTm9kZXMoXG4gIG5vZGVJZDogc3RyaW5nLFxuICBub2RlczogTm9kZU1vZGVsW10sXG4gIG9wdGlvbnM/OiBJbnRlcnNlY3RpbmdOb2Rlc09wdGlvbnMsXG4pOiBOb2RlTW9kZWxbXSB7XG4gIGNvbnN0IG5vZGUgPSBub2Rlcy5maW5kKChuKSA9PiBuLnJhd05vZGUuaWQgPT09IG5vZGVJZCk7XG4gIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IG5vZGVSZWN0ID0gbm9kZVRvUmVjdChub2RlKTtcblxuICByZXR1cm4gbm9kZXMuZmlsdGVyKChjdXJyZW50Tm9kZSkgPT4ge1xuICAgIGlmIChjdXJyZW50Tm9kZS5yYXdOb2RlLmlkID09PSBub2RlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IG92ZXJsYXBwaW5nQXJlYSA9IGdldE92ZXJsYXBwaW5nQXJlYShub2RlVG9SZWN0KGN1cnJlbnROb2RlKSwgbm9kZVJlY3QpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnBhcnRpYWxseSkge1xuICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nQXJlYSA+IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nQXJlYSA+PSBub2RlUmVjdC53aWR0aCAqIG5vZGVSZWN0LmhlaWdodDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vZGVUb0JveChub2RlOiBOb2RlTW9kZWwpOiBCb3gge1xuICByZXR1cm4ge1xuICAgIHg6IG5vZGUucG9pbnQoKS54LFxuICAgIHk6IG5vZGUucG9pbnQoKS55LFxuICAgIHgyOiBub2RlLnBvaW50KCkueCArIG5vZGUuc2l6ZSgpLndpZHRoLFxuICAgIHkyOiBub2RlLnBvaW50KCkueSArIG5vZGUuc2l6ZSgpLmhlaWdodCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVUb1JlY3Qobm9kZTogTm9kZU1vZGVsKTogUmVjdCB7XG4gIHJldHVybiB7XG4gICAgeDogbm9kZS5wb2ludCgpLngsXG4gICAgeTogbm9kZS5wb2ludCgpLnksXG4gICAgd2lkdGg6IG5vZGUud2lkdGgoKSxcbiAgICBoZWlnaHQ6IG5vZGUuaGVpZ2h0KCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJveFRvUmVjdCh7IHgsIHksIHgyLCB5MiB9OiBCb3gpOiBSZWN0IHtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHgyIC0geCxcbiAgICBoZWlnaHQ6IHkyIC0geSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRzT2ZCb3hlcyhib3gxOiBCb3gsIGJveDI6IEJveCk6IEJveCB7XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5taW4oYm94MS54LCBib3gyLngpLFxuICAgIHk6IE1hdGgubWluKGJveDEueSwgYm94Mi55KSxcbiAgICB4MjogTWF0aC5tYXgoYm94MS54MiwgYm94Mi54MiksXG4gICAgeTI6IE1hdGgubWF4KGJveDEueTIsIGJveDIueTIpLFxuICB9O1xufVxuIl19
@@ -12,6 +12,7 @@ export * from './lib/vflow/interfaces/marker.interface';
12
12
  export * from './lib/vflow/interfaces/component-node-event.interface';
13
13
  export * from './lib/vflow/interfaces/fit-view-options.interface';
14
14
  export * from './lib/vflow/interfaces/optimization.interface';
15
+ export * from './lib/vflow/interfaces/intersecting-nodes-options.interface';
15
16
  // Types
16
17
  export * from './lib/vflow/types/node-change.type';
17
18
  export * from './lib/vflow/types/edge-change.type';
@@ -46,4 +47,4 @@ export * from './lib/vflow/testing-utils/directive-mocks/drag-handle-mock.direct
46
47
  export * from './lib/vflow/testing-utils/directive-mocks/selectable-mock.directive';
47
48
  export * from './lib/vflow/testing-utils/directive-mocks/template-mock.directive';
48
49
  export * from './lib/vflow/testing-utils/vflow-mocks';
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsYUFBYTtBQUNiLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywrQ0FBK0MsQ0FBQztBQUU5RCxRQUFRO0FBQ1IsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsYUFBYTtBQUNiLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsbUVBQW1FLENBQUM7QUFDbEYsY0FBYyxtRkFBbUYsQ0FBQztBQUVsRyxhQUFhO0FBQ2IsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDhDQUE4QyxDQUFDO0FBRTdELFVBQVU7QUFDVixjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyx1RUFBdUUsQ0FBQztBQUN0RixjQUFjLGdGQUFnRixDQUFDO0FBQy9GLGNBQWMsc0VBQXNFLENBQUM7QUFDckYsY0FBYyxxRUFBcUUsQ0FBQztBQUNwRixjQUFjLG1FQUFtRSxDQUFDO0FBQ2xGLGNBQWMsdUNBQXVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTdGFuZGFsb25lIFV0aWxcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3ZmbG93JztcblxuLy8gSW50ZXJmYWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvZWRnZS1sYWJlbC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9jb25uZWN0aW9uLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9tYXJrZXIuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL2NvbXBvbmVudC1ub2RlLWV2ZW50LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL2ZpdC12aWV3LW9wdGlvbnMuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvb3B0aW1pemF0aW9uLmludGVyZmFjZSc7XG5cbi8vIFR5cGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdHlwZXMvcG9zaXRpb24udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdHlwZXMvY29ubmVjdGlvbi1tb2RlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdHlwZXMva2V5Ym9hcmQtYWN0aW9uLnR5cGUnO1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9jb21wb25lbnRzL3ZmbG93L3ZmbG93LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9oYW5kbGUvaGFuZGxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS9jdXN0b20tbm9kZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvY3VzdG9tLWR5bmFtaWMtbm9kZS9jdXN0b20tZHluYW1pYy1ub2RlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL25vZGUtdG9vbGJhci9ub2RlLXRvb2xiYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS10ZW1wbGF0ZS1lZGdlL2N1c3RvbS10ZW1wbGF0ZS1lZGdlLmNvbXBvbmVudCc7XG5cbi8vIERpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvZGlyZWN0aXZlcy9zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5cbi8vIFRlc3RpbmdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvcHJvdmlkZS1jdXN0b20tbm9kZS1tb2Nrcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2NvbXBvbmVudC1tb2Nrcy92Zmxvdy1tb2NrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2NvbXBvbmVudC1tb2Nrcy9oYW5kbGUtbW9jay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9jb21wb25lbnQtbW9ja3MvcmVzaXphYmxlLW1vY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvY29tcG9uZW50LW1vY2tzL21pbmltYXAtbW9jay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9jb21wb25lbnQtbW9ja3Mvbm9kZS10b29sYmFyLW1vY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvZGlyZWN0aXZlLW1vY2tzL2Nvbm5lY3Rpb24tY29udHJvbGxlci1tb2NrLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2RpcmVjdGl2ZS1tb2Nrcy9kcmFnLWhhbmRsZS1tb2NrLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2RpcmVjdGl2ZS1tb2Nrcy9zZWxlY3RhYmxlLW1vY2suZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvZGlyZWN0aXZlLW1vY2tzL3RlbXBsYXRlLW1vY2suZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvdmZsb3ctbW9ja3MnO1xuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsYUFBYTtBQUNiLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDZEQUE2RCxDQUFDO0FBRTVFLFFBQVE7QUFDUixjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxhQUFhO0FBQ2IsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyxtRUFBbUUsQ0FBQztBQUNsRixjQUFjLG1GQUFtRixDQUFDO0FBRWxHLGFBQWE7QUFDYixjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsOENBQThDLENBQUM7QUFFN0QsVUFBVTtBQUNWLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsb0VBQW9FLENBQUM7QUFDbkYsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLHVFQUF1RSxDQUFDO0FBQ3RGLGNBQWMsZ0ZBQWdGLENBQUM7QUFDL0YsY0FBYyxzRUFBc0UsQ0FBQztBQUNyRixjQUFjLHFFQUFxRSxDQUFDO0FBQ3BGLGNBQWMsbUVBQW1FLENBQUM7QUFDbEYsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFN0YW5kYWxvbmUgVXRpbFxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdmZsb3cnO1xuXG4vLyBJbnRlcmZhY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9lZGdlLWxhYmVsLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvY29ubmVjdGlvbi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9pbnRlcmZhY2VzL21hcmtlci5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvY29tcG9uZW50LW5vZGUtZXZlbnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvZml0LXZpZXctb3B0aW9ucy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvaW50ZXJmYWNlcy9vcHRpbWl6YXRpb24uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2ludGVyZmFjZXMvaW50ZXJzZWN0aW5nLW5vZGVzLW9wdGlvbnMuaW50ZXJmYWNlJztcblxuLy8gVHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90eXBlcy9wb3NpdGlvbi50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3R5cGVzL2JhY2tncm91bmQudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90eXBlcy9jb25uZWN0aW9uLW1vZGUudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90eXBlcy9rZXlib2FyZC1hY3Rpb24udHlwZSc7XG5cbi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL2hhbmRsZS9oYW5kbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS1ub2RlL2N1c3RvbS1ub2RlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tZHluYW1pYy1ub2RlL2N1c3RvbS1keW5hbWljLW5vZGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL3Jlc2l6YWJsZS9yZXNpemFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL21pbmltYXAvbWluaW1hcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbm9kZS10b29sYmFyL25vZGUtdG9vbGJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvY3VzdG9tLXRlbXBsYXRlLWVkZ2UvY3VzdG9tLXRlbXBsYXRlLWVkZ2UuY29tcG9uZW50JztcblxuLy8gRGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy9kaXJlY3RpdmVzL3NlbGVjdGFibGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L2RpcmVjdGl2ZXMvZHJhZy1oYW5kbGUuZGlyZWN0aXZlJztcblxuLy8gVGVzdGluZ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9wcm92aWRlLWN1c3RvbS1ub2RlLW1vY2tzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvY29tcG9uZW50LW1vY2tzL3ZmbG93LW1vY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvY29tcG9uZW50LW1vY2tzL2hhbmRsZS1tb2NrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2NvbXBvbmVudC1tb2Nrcy9yZXNpemFibGUtbW9jay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9jb21wb25lbnQtbW9ja3MvbWluaW1hcC1tb2NrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92Zmxvdy90ZXN0aW5nLXV0aWxzL2NvbXBvbmVudC1tb2Nrcy9ub2RlLXRvb2xiYXItbW9jay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9kaXJlY3RpdmUtbW9ja3MvY29ubmVjdGlvbi1jb250cm9sbGVyLW1vY2suZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvZGlyZWN0aXZlLW1vY2tzL2RyYWctaGFuZGxlLW1vY2suZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZmbG93L3Rlc3RpbmctdXRpbHMvZGlyZWN0aXZlLW1vY2tzL3NlbGVjdGFibGUtbW9jay5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy9kaXJlY3RpdmUtbW9ja3MvdGVtcGxhdGUtbW9jay5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmZsb3cvdGVzdGluZy11dGlscy92Zmxvdy1tb2Nrcyc7XG4iXX0=
@@ -8,6 +8,12 @@ import { drag } from 'd3-drag';
8
8
  import { __decorate } from 'tslib';
9
9
  import { NgTemplateOutlet, NgComponentOutlet, KeyValuePipe } from '@angular/common';
10
10
 
11
+ const getOverlappingArea = (rectA, rectB) => {
12
+ const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));
13
+ const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));
14
+ return Math.ceil(xOverlap * yOverlap);
15
+ };
16
+
11
17
  function getNodesBounds(nodes) {
12
18
  if (nodes.length === 0) {
13
19
  return { x: 0, y: 0, width: 0, height: 0 };
@@ -19,6 +25,21 @@ function getNodesBounds(nodes) {
19
25
  });
20
26
  return boxToRect(box);
21
27
  }
28
+ function getIntesectingNodes(nodeId, nodes, options) {
29
+ const node = nodes.find((n) => n.rawNode.id === nodeId);
30
+ if (!node)
31
+ return [];
32
+ const nodeRect = nodeToRect(node);
33
+ return nodes.filter((currentNode) => {
34
+ if (currentNode.rawNode.id === nodeId)
35
+ return false;
36
+ const overlappingArea = getOverlappingArea(nodeToRect(currentNode), nodeRect);
37
+ if (options?.partially) {
38
+ return overlappingArea > 0;
39
+ }
40
+ return overlappingArea >= nodeRect.width * nodeRect.height;
41
+ });
42
+ }
22
43
  function nodeToBox(node) {
23
44
  return {
24
45
  x: node.point().x,
@@ -27,6 +48,14 @@ function nodeToBox(node) {
27
48
  y2: node.point().y + node.size().height,
28
49
  };
29
50
  }
51
+ function nodeToRect(node) {
52
+ return {
53
+ x: node.point().x,
54
+ y: node.point().y,
55
+ width: node.width(),
56
+ height: node.height(),
57
+ };
58
+ }
30
59
  function boxToRect({ x, y, x2, y2 }) {
31
60
  return {
32
61
  x,
@@ -1440,10 +1469,7 @@ class ReferenceIdentityChecker {
1440
1469
  const oldNodesMap = new Map();
1441
1470
  oldNodeModels.forEach((model) => oldNodesMap.set(model.rawNode, model));
1442
1471
  return newNodes.map((newNode) => {
1443
- if (oldNodesMap.has(newNode))
1444
- return oldNodesMap.get(newNode);
1445
- else
1446
- return new NodeModel(newNode);
1472
+ return oldNodesMap.get(newNode) ?? new NodeModel(newNode);
1447
1473
  });
1448
1474
  }
1449
1475
  /**
@@ -1472,10 +1498,14 @@ class NodesChangeService {
1472
1498
  switchMap((nodes) => merge(...nodes.map((node) => node.point$.pipe(
1473
1499
  // skip initial position from signal
1474
1500
  skip(1), map(() => node))))), map((changedNode) => {
1475
- return this.entitiesService
1476
- .nodes()
1477
- .filter((node) => node === changedNode || node.selected())
1478
- .map((node) => ({ type: 'position', id: node.rawNode.id, point: node.point() }));
1501
+ return [
1502
+ { type: 'position', id: changedNode.rawNode.id, point: changedNode.point() },
1503
+ // TODO: emits even if node is not change position
1504
+ ...this.entitiesService
1505
+ .nodes()
1506
+ .filter((node) => node !== changedNode && node.selected())
1507
+ .map((node) => ({ type: 'position', id: node.rawNode.id, point: node.point() })),
1508
+ ];
1479
1509
  }));
1480
1510
  this.nodeSizeChange$ = toObservable(this.entitiesService.nodes).pipe(switchMap((nodes) => merge(...nodes.map((node) => node.size$.pipe(skip(1), map(() => node))))), map((changedNode) => [{ type: 'size', id: changedNode.rawNode.id, size: changedNode.size() }]));
1481
1511
  this.nodeAddChange$ = toObservable(this.entitiesService.nodes).pipe(pairwise(), map(([oldList, newList]) => newList.filter((node) => !oldList.includes(node))), filter((nodes) => !!nodes.length), map((nodes) => nodes.map((node) => ({ type: 'add', id: node.rawNode.id }))));
@@ -1711,11 +1741,6 @@ class NodeRenderingService {
1711
1741
  });
1712
1742
  }
1713
1743
  pullNode(node) {
1714
- const isAlreadyOnTop = node.renderOrder() !== 0 && this.maxOrder() === node.renderOrder();
1715
- // TODO: does not work for group nodes
1716
- if (isAlreadyOnTop) {
1717
- return;
1718
- }
1719
1744
  // pull node
1720
1745
  node.renderOrder.set(this.maxOrder() + 1);
1721
1746
  // pull children
@@ -3182,6 +3207,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3182
3207
  args: ['contextmenu']
3183
3208
  }] } });
3184
3209
 
3210
+ /**
3211
+ * @todo handle regular nodes
3212
+ *
3213
+ * @param point global point in flow coordinates
3214
+ * @param groups sorted array of groups
3215
+ * @returns
3216
+ */
3217
+ function getSpacePoints(point, groups) {
3218
+ const result = [];
3219
+ for (const group of groups) {
3220
+ const { x, y } = group.globalPoint();
3221
+ if (point.x >= x && point.x <= x + group.width() && point.y >= y && point.y <= y + group.height()) {
3222
+ result.push({
3223
+ x: point.x - x,
3224
+ y: point.y - y,
3225
+ spaceNodeId: group.rawNode.id,
3226
+ });
3227
+ }
3228
+ }
3229
+ result.reverse();
3230
+ // TODO: spread does not work, because the point is SVGPoint
3231
+ result.push({ spaceNodeId: null, x: point.x, y: point.y });
3232
+ return result;
3233
+ }
3234
+
3185
3235
  const changesControllerHostDirective = {
3186
3236
  directive: ChangesControllerDirective,
3187
3237
  outputs: [
@@ -3366,10 +3416,12 @@ class VflowComponent {
3366
3416
  * Nodes to render
3367
3417
  */
3368
3418
  set nodes(newNodes) {
3369
- const newModels = runInInjectionContext(this.injector, () => ReferenceIdentityChecker.nodes(newNodes, this.flowEntitiesService.nodes()));
3419
+ const models = runInInjectionContext(this.injector, () => ReferenceIdentityChecker.nodes(newNodes, this.flowEntitiesService.nodes()));
3420
+ // TODO: consider calling only fo new nodes
3370
3421
  // quick and dirty binding nodes to edges
3371
- addNodesToEdges(newModels, this.flowEntitiesService.edges());
3372
- this.flowEntitiesService.nodes.set(newModels);
3422
+ addNodesToEdges(models, this.flowEntitiesService.edges());
3423
+ this.flowEntitiesService.nodes.set(models);
3424
+ models.forEach((model) => this.nodeRenderingService.pullNode(model));
3373
3425
  }
3374
3426
  /**
3375
3427
  * Edges to render
@@ -3380,9 +3432,6 @@ class VflowComponent {
3380
3432
  addNodesToEdges(this.nodeModels(), newModels);
3381
3433
  this.flowEntitiesService.edges.set(newModels);
3382
3434
  }
3383
- ngOnInit() {
3384
- this.setInitialNodesOrder();
3385
- }
3386
3435
  // #region METHODS_API
3387
3436
  /**
3388
3437
  * Change viewport to specified state
@@ -3437,11 +3486,43 @@ class VflowComponent {
3437
3486
  getDetachedEdges() {
3438
3487
  return this.flowEntitiesService.getDetachedEdges().map((e) => e.edge);
3439
3488
  }
3489
+ documentPointToFlowPoint(point, options) {
3490
+ const transformedPoint = this.spacePointContext().documentPointToFlowPoint(point);
3491
+ if (options?.spaces) {
3492
+ return getSpacePoints(transformedPoint, this.nodeRenderingService.groups());
3493
+ }
3494
+ return transformedPoint;
3495
+ }
3440
3496
  /**
3441
- * Convert point received from document to point on the flow
3497
+ * Gets nodes that intersect with the specified node
3498
+ *
3499
+ * @template T - The type of data associated with the nodes
3500
+ * @param nodeId - The ID of the node to check intersections for
3501
+ * @param options.partially - If true, returns nodes that partially intersect. If false, only returns fully intersecting nodes
3502
+ * @returns An array of nodes that intersect with the specified node
3503
+ */
3504
+ getIntesectingNodes(nodeId, options = { partially: true }) {
3505
+ return getIntesectingNodes(nodeId, this.nodeModels(), options).map((n) => n.rawNode);
3506
+ }
3507
+ /**
3508
+ * Converts a node's position to the coordinate space of another node
3509
+ *
3510
+ * @param nodeId - The ID of the node whose position should be converted
3511
+ * @param spaceNodeId - The ID of the node that defines the target coordinate space.
3512
+ * If null, returns the position in global coordinates
3513
+ * @returns {Point} The converted position. Returns {x: Infinity, y: Infinity} if either node is not found
3442
3514
  */
3443
- documentPointToFlowPoint(point) {
3444
- return this.spacePointContext().documentPointToFlowPoint(point);
3515
+ toNodeSpace(nodeId, spaceNodeId) {
3516
+ const node = this.nodeModels().find((n) => n.rawNode.id === nodeId);
3517
+ if (!node)
3518
+ return { x: Infinity, y: Infinity };
3519
+ if (spaceNodeId === null) {
3520
+ return node.globalPoint();
3521
+ }
3522
+ const coordinateSpaceNode = this.nodeModels().find((n) => n.rawNode.id === spaceNodeId);
3523
+ if (!coordinateSpaceNode)
3524
+ return { x: Infinity, y: Infinity };
3525
+ return getSpacePoints(node.globalPoint(), [coordinateSpaceNode])[0];
3445
3526
  }
3446
3527
  // #endregion
3447
3528
  trackNodes(idx, { rawNode: node }) {
@@ -3450,16 +3531,6 @@ class VflowComponent {
3450
3531
  trackEdges(idx, { edge }) {
3451
3532
  return edge;
3452
3533
  }
3453
- setInitialNodesOrder() {
3454
- this.nodeModels().forEach((model) => {
3455
- switch (model.rawNode.type) {
3456
- case 'default-group':
3457
- case 'template-group': {
3458
- this.nodeRenderingService.pullNode(model);
3459
- }
3460
- }
3461
- });
3462
- }
3463
3534
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3464
3535
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: false, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: false, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: false, isRequired: false, transformFunction: null }, optimization: { classPropertyName: "optimization", publicName: "optimization", isSignal: true, isRequired: false, transformFunction: null }, entitiesSelectable: { classPropertyName: "entitiesSelectable", publicName: "entitiesSelectable", isSignal: false, isRequired: false, transformFunction: null }, keyboardShortcuts: { classPropertyName: "keyboardShortcuts", publicName: "keyboardShortcuts", isSignal: false, isRequired: false, transformFunction: null }, connection: { classPropertyName: "connection", publicName: "connection", isSignal: false, isRequired: false, transformFunction: (settings) => new ConnectionModel(settings) }, snapGrid: { classPropertyName: "snapGrid", publicName: "snapGrid", isSignal: false, isRequired: false, transformFunction: null }, elevateNodesOnSelect: { classPropertyName: "elevateNodesOnSelect", publicName: "elevateNodesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, elevateEdgesOnSelect: { classPropertyName: "elevateEdgesOnSelect", publicName: "elevateEdgesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: false, isRequired: true, transformFunction: null }, edges: { classPropertyName: "edges", publicName: "edges", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
3465
3536
  DraggableService,
@@ -4049,9 +4120,26 @@ class VflowMockComponent {
4049
4120
  }
4050
4121
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4051
4122
  fitView(options) { }
4052
- documentPointToFlowPoint(point) {
4123
+ documentPointToFlowPoint(point, options) {
4124
+ if (options?.spaces) {
4125
+ return [
4126
+ {
4127
+ nodeId: null,
4128
+ x: point.x,
4129
+ y: point.y,
4130
+ },
4131
+ ];
4132
+ }
4053
4133
  return point;
4054
4134
  }
4135
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4136
+ getIntesectingNodes(nodeId, options) {
4137
+ return [];
4138
+ }
4139
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4140
+ toNodeSpace(nodeId, spaceNodeId) {
4141
+ return { x: 0, y: 0 };
4142
+ }
4055
4143
  getNode(id) {
4056
4144
  return this.nodes.find((node) => node.id === id);
4057
4145
  }