@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.
56 lines • 8.17 kB
JavaScript
import { InjectionToken } from '@angular/core';
import { PointExtensions } from '@foblex/2d';
import { mixinChangeSelection } from '../mixins';
import { FChannel } from '../reactivity';
export const F_NODE = new InjectionToken('F_NODE');
const MIXIN_BASE = mixinChangeSelection(class {
hostElement;
constructor(hostElement) {
this.hostElement = hostElement;
}
});
export class FNodeBase extends MIXIN_BASE {
stateChanges = new FChannel();
_position = PointExtensions.initialize();
_rotate = 0;
_size;
fCanBeResizedByChild = true;
connectors = [];
isContains(element) {
return this.hostElement.contains(element);
}
redraw() {
if (this.size) {
this.setStyle('width', '' + this.size.width + 'px');
this.setStyle('height', '' + this.size.height + 'px');
}
this.setStyle('transform', `translate(${this.position.x}px,${this.position.y}px) rotate(${this.rotate}deg)`);
}
updatePosition(position) {
this._position = position;
}
updateRotate(rotate) {
this._rotate = rotate;
}
updateSize(value) {
this._size = value;
}
setClass(className) {
this.hostElement.classList.add(className);
}
removeClass(className) {
this.hostElement.classList.remove(className);
}
addConnector(connector) {
this.connectors.push(connector);
this.refresh();
}
removeConnector(connector) {
const index = this.connectors.indexOf(connector);
if (index !== -1) {
this.connectors.splice(index, 1);
}
this.refresh();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2Ytbm9kZS9mLW5vZGUtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXdCLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUtuRSxPQUFPLEVBQWUsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVksUUFBUSxDQUFDLENBQUM7QUFFOUQsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQ3JDO0lBRVc7SUFEVCxZQUNTLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBRWpDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFTCxNQUFNLE9BQWdCLFNBQVUsU0FBUSxVQUFVO0lBTWhDLFlBQVksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBT3BDLFNBQVMsR0FBVyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7SUFPakQsT0FBTyxHQUFXLENBQUMsQ0FBQztJQU9wQixLQUFLLENBQW9CO0lBWTVCLG9CQUFvQixHQUFZLElBQUksQ0FBQztJQU1yQyxVQUFVLEdBQXFCLEVBQUUsQ0FBQztJQUlsQyxVQUFVLENBQUMsT0FBaUM7UUFDakQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsYUFBYyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUUsTUFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUUsY0FBZSxJQUFJLENBQUMsTUFBTyxNQUFNLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFFTSxZQUFZLENBQUMsTUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVk7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxTQUFpQjtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUFpQjtRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUF5QjtRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxTQUF5QjtRQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQb2ludCwgSVJlY3QsIElTaXplLCBQb2ludEV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7XG4gIEZDb25uZWN0b3JCYXNlXG59IGZyb20gJy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBJSGFzSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9pLWhhcy1ob3N0LWVsZW1lbnQnO1xuaW1wb3J0IHsgSVNlbGVjdGFibGUsIG1peGluQ2hhbmdlU2VsZWN0aW9uIH0gZnJvbSAnLi4vbWl4aW5zJztcbmltcG9ydCB7IEZDaGFubmVsIH0gZnJvbSAnLi4vcmVhY3Rpdml0eSc7XG5cbmV4cG9ydCBjb25zdCBGX05PREUgPSBuZXcgSW5qZWN0aW9uVG9rZW48Rk5vZGVCYXNlPignRl9OT0RFJyk7XG5cbmNvbnN0IE1JWElOX0JBU0UgPSBtaXhpbkNoYW5nZVNlbGVjdGlvbihcbiAgY2xhc3Mge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudFxuICAgICkge1xuICAgIH1cbiAgfSk7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGTm9kZUJhc2UgZXh0ZW5kcyBNSVhJTl9CQVNFIGltcGxlbWVudHMgSVNlbGVjdGFibGUsIElIYXNIb3N0RWxlbWVudCB7XG5cbiAgcHVibGljIGFic3RyYWN0IG92ZXJyaWRlIGZJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBmUGFyZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBGQ2hhbm5lbCgpO1xuXG5cbiAgcHVibGljIGFic3RyYWN0IHBvc2l0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVBvaW50PjtcblxuICBwdWJsaWMgYWJzdHJhY3QgcG9zaXRpb246IElQb2ludDtcblxuICBwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBJUG9pbnQgPSBQb2ludEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSgpO1xuXG5cbiAgcHVibGljIGFic3RyYWN0IHJvdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj47XG5cbiAgcHVibGljIGFic3RyYWN0IHJvdGF0ZTogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBfcm90YXRlOiBudW1iZXIgPSAwO1xuXG5cbiAgcHVibGljIGFic3RyYWN0IHNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUmVjdD47XG5cbiAgcHVibGljIGFic3RyYWN0IHNpemU6IElTaXplO1xuXG4gIHByb3RlY3RlZCBfc2l6ZTogSVNpemUgfCB1bmRlZmluZWQ7XG5cblxuICBwdWJsaWMgYWJzdHJhY3QgZk1pbmltYXBDbGFzczogc3RyaW5nW10gfCBzdHJpbmc7XG5cblxuICBwdWJsaWMgYWJzdHJhY3QgZkRyYWdnaW5nRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIGFic3RyYWN0IG92ZXJyaWRlIGZTZWxlY3Rpb25EaXNhYmxlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgYWJzdHJhY3QgZkNvbm5lY3RPbk5vZGU6IGJvb2xlYW47XG5cbiAgcHVibGljIGZDYW5CZVJlc2l6ZWRCeUNoaWxkOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgYWJzdHJhY3QgZkluY2x1ZGVQYWRkaW5nOiBib29sZWFuO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWZyZXNoKCk6IHZvaWQ7XG5cbiAgcHVibGljIGNvbm5lY3RvcnM6IEZDb25uZWN0b3JCYXNlW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0U3R5bGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICBwdWJsaWMgaXNDb250YWlucyhlbGVtZW50OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0RWxlbWVudC5jb250YWlucyhlbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyByZWRyYXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgdGhpcy5zZXRTdHlsZSgnd2lkdGgnLCAnJyArIHRoaXMuc2l6ZS53aWR0aCArICdweCcpO1xuICAgICAgdGhpcy5zZXRTdHlsZSgnaGVpZ2h0JywgJycgKyB0aGlzLnNpemUuaGVpZ2h0ICsgJ3B4Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdHlsZSgndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgkeyB0aGlzLnBvc2l0aW9uLnggfXB4LCR7IHRoaXMucG9zaXRpb24ueSB9cHgpIHJvdGF0ZSgkeyB0aGlzLnJvdGF0ZSB9ZGVnKWApO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uOiBJUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJvdGF0ZShyb3RhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdGF0ZSA9IHJvdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTaXplKHZhbHVlOiBJU2l6ZSk6IHZvaWQge1xuICAgIHRoaXMuX3NpemUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29ubmVjdG9yKGNvbm5lY3RvcjogRkNvbm5lY3RvckJhc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3RvcnMucHVzaChjb25uZWN0b3IpO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbm5lY3Rvcihjb25uZWN0b3I6IEZDb25uZWN0b3JCYXNlKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbm5lY3RvcnMuaW5kZXhPZihjb25uZWN0b3IpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29ubmVjdG9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxufVxuIl19