@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
43 lines • 6.28 kB
JavaScript
import { FComponentsStore } from '../../f-storage';
export class PointBoundsLimiter {
_onPointerDown;
_limit;
_fComponentsStore;
_vCellSize;
_hCellSize;
constructor(_injector, _onPointerDown, _limit) {
this._onPointerDown = _onPointerDown;
this._limit = _limit;
this._fComponentsStore = _injector.get(FComponentsStore);
this._vCellSize = this._fComponentsStore.fDraggable.vCellSize;
this._hCellSize = this._fComponentsStore.fDraggable.hCellSize;
}
limit(difference, adjustCellSize) {
const { min, max } = this._limit;
const { x, y } = this._cellSizeStrategies[+adjustCellSize](difference);
return {
x: this._clamp(x, min.x, max.x),
y: this._clamp(y, min.y, max.y),
};
}
_cellSizeStrategies = {
0: this._skipCellSize.bind(this),
1: this._applyCellSize.bind(this)
};
_applyCellSize(difference) {
return {
x: this._snapToGrid(this._onPointerDown.x + difference.x, this._hCellSize) - this._onPointerDown.x,
y: this._snapToGrid(this._onPointerDown.y + difference.y, this._vCellSize) - this._onPointerDown.y
};
}
_skipCellSize(difference) {
return difference;
}
_clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
_snapToGrid(value, cellSize) {
return Math.round(value / cellSize) * cellSize;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQtYm91bmRzLWxpbWl0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZHJhZ2dhYmxlL2Ytbm9kZS1tb3ZlL3BvaW50LWJvdW5kcy1saW1pdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR25ELE1BQU0sT0FBTyxrQkFBa0I7SUFTbkI7SUFDUztJQVJGLGlCQUFpQixDQUFtQjtJQUVwQyxVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBRXBDLFlBQ0UsU0FBbUIsRUFDWCxjQUFzQixFQUNiLE1BQW9CO1FBRDdCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUVyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVcsQ0FBQyxTQUFTLENBQUM7UUFDL0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQWtCLEVBQUUsY0FBdUI7UUFDdEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWpDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFFLENBQUMsY0FBYyxDQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFekUsT0FBTztZQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQixHQUFtRDtRQUM1RSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDbEMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFrQjtRQUN2QyxPQUFPO1lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNuRyxDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxVQUFrQjtRQUN0QyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUNwRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDakQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU1pbk1heFBvaW50LCBJUG9pbnQgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IEZDb21wb25lbnRzU3RvcmUgfSBmcm9tICcuLi8uLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIFBvaW50Qm91bmRzTGltaXRlciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZkNvbXBvbmVudHNTdG9yZTogRkNvbXBvbmVudHNTdG9yZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92Q2VsbFNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaENlbGxTaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIF9vblBvaW50ZXJEb3duOiBJUG9pbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbGltaXQ6IElNaW5NYXhQb2ludFxuICApIHtcbiAgICB0aGlzLl9mQ29tcG9uZW50c1N0b3JlID0gX2luamVjdG9yLmdldChGQ29tcG9uZW50c1N0b3JlKTtcbiAgICB0aGlzLl92Q2VsbFNpemUgPSB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZEcmFnZ2FibGUhLnZDZWxsU2l6ZTtcbiAgICB0aGlzLl9oQ2VsbFNpemUgPSB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZEcmFnZ2FibGUhLmhDZWxsU2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBsaW1pdChkaWZmZXJlbmNlOiBJUG9pbnQsIGFkanVzdENlbGxTaXplOiBib29sZWFuKTogSVBvaW50IHtcbiAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzLl9saW1pdDtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fY2VsbFNpemVTdHJhdGVnaWVzWyArYWRqdXN0Q2VsbFNpemUgXShkaWZmZXJlbmNlKTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLl9jbGFtcCh4LCBtaW4ueCwgbWF4LngpLFxuICAgICAgeTogdGhpcy5fY2xhbXAoeSwgbWluLnksIG1heC55KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfY2VsbFNpemVTdHJhdGVnaWVzOiBSZWNvcmQ8bnVtYmVyLCAoZGlmZmVyZW5jZTogSVBvaW50KSA9PiBJUG9pbnQ+ID0ge1xuICAgIDA6IHRoaXMuX3NraXBDZWxsU2l6ZS5iaW5kKHRoaXMpLFxuICAgIDE6IHRoaXMuX2FwcGx5Q2VsbFNpemUuYmluZCh0aGlzKVxuICB9O1xuXG4gIHByaXZhdGUgX2FwcGx5Q2VsbFNpemUoZGlmZmVyZW5jZTogSVBvaW50KTogSVBvaW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogdGhpcy5fc25hcFRvR3JpZCh0aGlzLl9vblBvaW50ZXJEb3duLnggKyBkaWZmZXJlbmNlLngsIHRoaXMuX2hDZWxsU2l6ZSkgLSB0aGlzLl9vblBvaW50ZXJEb3duLngsXG4gICAgICB5OiB0aGlzLl9zbmFwVG9HcmlkKHRoaXMuX29uUG9pbnRlckRvd24ueSArIGRpZmZlcmVuY2UueSwgdGhpcy5fdkNlbGxTaXplKSAtIHRoaXMuX29uUG9pbnRlckRvd24ueVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9za2lwQ2VsbFNpemUoZGlmZmVyZW5jZTogSVBvaW50KTogSVBvaW50IHtcbiAgICByZXR1cm4gZGlmZmVyZW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc25hcFRvR3JpZCh2YWx1ZTogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAvIGNlbGxTaXplKSAqIGNlbGxTaXplO1xuICB9XG59XG4iXX0=