UNPKG

@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
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=