@bixi/label
Version:
208 lines • 17.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __read, __spread } from "tslib";
import { CdkConnectedOverlay } from '@angular/cdk/overlay';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
import { DEFAULT_TOOLTIP_POSITIONS, POSITION_MAP } from 'ng-zorro-antd/core/overlay';
/** @type {?} */
var OVERLAY_WIDTH = 468;
/** @type {?} */
var OVERLAY_HEIGHT = 288;
var BixiLabelModalComponent = /** @class */ (function () {
function BixiLabelModalComponent(cdr) {
var _this = this;
this.cdr = cdr;
this.overlayWidth = OVERLAY_WIDTH;
this.overlayHeight = OVERLAY_HEIGHT;
this.placement = 'right';
this.isOpen = false;
this._labeling = null;
// tslint:disable-next-line: no-output-native
this.close = new EventEmitter();
this.onClose = (/**
* @return {?}
*/
function () {
_this.onHide();
_this.close.emit();
});
}
Object.defineProperty(BixiLabelModalComponent.prototype, "labeling", {
get: /**
* @return {?}
*/
function () {
return this._labeling;
},
set: /**
* @param {?} val
* @return {?}
*/
function (val) {
this._labeling = val;
if (val) {
this.onShow();
}
else {
this.onHide();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(BixiLabelModalComponent.prototype, "labels", {
get: /**
* @return {?}
*/
function () {
return this.labeling ? (this.labeling.data) || [] : [];
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
BixiLabelModalComponent.prototype.onShow = /**
* @return {?}
*/
function () {
var _this = this;
if (this.isOpen && this.overlay) {
// 如果是二次标注的话,只需要调整位置就可以了
Promise.resolve().then((/**
* @return {?}
*/
function () {
_this.cdr.detectChanges();
_this.overlay.overlayRef.updatePosition();
}));
return;
}
this.isOpen = true;
this.cdr.detectChanges();
};
/**
* @return {?}
*/
BixiLabelModalComponent.prototype.onHide = /**
* @return {?}
*/
function () {
this.isOpen = false;
this.cdr.detectChanges();
};
/**
* @return {?}
*/
BixiLabelModalComponent.prototype.onDetach = /**
* @return {?}
*/
function () {
// 其它方式关闭的话,也触发一次 cancel
if (this.isOpen) {
this.onClose();
}
};
Object.defineProperty(BixiLabelModalComponent.prototype, "overlayStyle", {
get: /**
* @return {?}
*/
function () {
return {
width: (this.overlayWidth || 0) + "px",
height: (this.overlayHeight || 0) + "px"
};
},
enumerable: true,
configurable: true
});
Object.defineProperty(BixiLabelModalComponent.prototype, "positions", {
get: /**
* @return {?}
*/
function () {
return __spread([POSITION_MAP[this.placement]], DEFAULT_TOOLTIP_POSITIONS);
},
enumerable: true,
configurable: true
});
Object.defineProperty(BixiLabelModalComponent.prototype, "originStyle", {
get: /**
* @return {?}
*/
function () {
if (!this.labeling) {
return {
'width': '0px',
'height': '0px'
};
}
return {
position: 'absolute',
width: '20px',
height: '20px',
top: (this.labeling.position.top || 0) + "px",
left: (this.labeling.position.left || 0) + "px"
};
},
enumerable: true,
configurable: true
});
BixiLabelModalComponent.decorators = [
{ type: Component, args: [{
selector: 'bixi-label-modal',
template: "\n <div [ngStyle]=\"originStyle\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n </div>\n <ng-template\n #overlay=\"cdkConnectedOverlay\"\n cdkConnectedOverlayBackdropClass=\"bixi-label-modal-backdrop\"\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayMinHeight]=\"overlayHeight\"\n [cdkConnectedOverlayMinWidth]=\"overlayWidth\"\n [cdkConnectedOverlayOffsetX]=\"0\"\n [cdkConnectedOverlayOffsetY]=\"-10\"\n (backdropClick)=\"onClose()\"\n (detach)=\"onDetach()\"\n >\n <div class=\"bixi-label-modal\" [ngStyle]=\"overlayStyle\" cdkDrag [cdkDragBoundary]=\"dragBoundary || 'body'\">\n <div class=\"bixi-label-modal-header\" cdkDragHandle>\n <div class='bixi-label-modal-header-inner'>\n <div class=\"bixi-label-modal-title\">{{title}}</div>\n <div class=\"bixi-label-modal-close-icon\" (click)=\"onClose()\">\n <i nz-icon nzType=\"close\" nzTheme=\"outline\"></i>\n </div>\n </div>\n </div>\n <div class=\"bixi-label-modal-content\">\n <ng-template\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{$implicit: labeling, labeling: labeling, labels: labels, close: onClose }\">\n </ng-template>\n </div>\n </div>\n </ng-template>\n ",
exportAs: 'bixiLabelModal',
encapsulation: ViewEncapsulation.None,
preserveWhitespaces: true,
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
BixiLabelModalComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
BixiLabelModalComponent.propDecorators = {
overlay: [{ type: ViewChild, args: ['overlay', { static: false },] }],
content: [{ type: Input }],
title: [{ type: Input }],
dragBoundary: [{ type: Input }],
labeling: [{ type: Input }],
close: [{ type: Output }]
};
return BixiLabelModalComponent;
}());
export { BixiLabelModalComponent };
if (false) {
/** @type {?} */
BixiLabelModalComponent.prototype.overlayWidth;
/** @type {?} */
BixiLabelModalComponent.prototype.overlayHeight;
/** @type {?} */
BixiLabelModalComponent.prototype.placement;
/** @type {?} */
BixiLabelModalComponent.prototype.isOpen;
/** @type {?} */
BixiLabelModalComponent.prototype._labeling;
/** @type {?} */
BixiLabelModalComponent.prototype.overlay;
/** @type {?} */
BixiLabelModalComponent.prototype.content;
/** @type {?} */
BixiLabelModalComponent.prototype.title;
/** @type {?} */
BixiLabelModalComponent.prototype.dragBoundary;
/** @type {?} */
BixiLabelModalComponent.prototype.close;
/** @type {?} */
BixiLabelModalComponent.prototype.onClose;
/**
* @type {?}
* @private
*/
BixiLabelModalComponent.prototype.cdr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGJpeGkvbGFiZWwvIiwic291cmNlcyI6WyJzcmMvbGFiZWwtbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDOztJQUcvRSxhQUFhLEdBQUcsR0FBRzs7SUFDbkIsY0FBYyxHQUFHLEdBQUc7QUFFMUI7SUFzRUUsaUNBQ1UsR0FBc0I7UUFEaEMsaUJBRUs7UUFESyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTFCaEMsaUJBQVksR0FBRyxhQUFhLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxjQUFjLENBQUM7UUFDL0IsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsY0FBUyxHQUEwQixJQUFJLENBQUM7O1FBbUI5QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTZCckMsWUFBTzs7O1FBQUc7WUFDUixLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLENBQUMsRUFBQTtJQTVCRyxDQUFDO0lBbEJMLHNCQUNJLDZDQUFROzs7O1FBUVo7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQzs7Ozs7UUFYRCxVQUNhLEdBQTBCO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLElBQUksR0FB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O0NBQUEsQUF2SUQsSUF1SUM7U0EzRlksdUJBQXVCOzs7SUFDbEMsK0NBQTZCOztJQUM3QixnREFBK0I7O0lBQy9CLDRDQUFvQjs7SUFDcEIseUNBQWU7O0lBQ2YsNENBQXdDOztJQUN4QywwQ0FBdUU7O0lBQ3ZFLDBDQUFvRDs7SUFDcEQsd0NBQXVCOztJQUN2QiwrQ0FBOEI7O0lBZTlCLHdDQUFxQzs7SUE2QnJDLDBDQUdDOzs7OztJQTdCQyxzQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX1RPT0xUSVBfUE9TSVRJT05TLCBQT1NJVElPTl9NQVAgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvb3ZlcmxheSc7XG5pbXBvcnQgeyBJTGFiZWxpbmdFdmVudCwgSVNhZmVBbnkgfSBmcm9tICcuL2xhYmVsLnR5cGUnO1xuXG5jb25zdCBPVkVSTEFZX1dJRFRIID0gNDY4O1xuY29uc3QgT1ZFUkxBWV9IRUlHSFQgPSAyODg7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JpeGktbGFiZWwtbW9kYWwnLFxuICB0ZW1wbGF0ZTogYFxuICA8ZGl2IFtuZ1N0eWxlXT1cIm9yaWdpblN0eWxlXCIgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZVxuICAgICNvdmVybGF5PVwiY2RrQ29ubmVjdGVkT3ZlcmxheVwiXG4gICAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJiaXhpLWxhYmVsLW1vZGFsLWJhY2tkcm9wXCJcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0cnVlXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJwb3NpdGlvbnNcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJpc09wZW5cIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UHVzaF09XCJ0cnVlXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodF09XCJvdmVybGF5SGVpZ2h0XCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT1cIm92ZXJsYXlXaWR0aFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYXT1cIjBcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09XCItMTBcIlxuICAgIChiYWNrZHJvcENsaWNrKT1cIm9uQ2xvc2UoKVwiXG4gICAgKGRldGFjaCk9XCJvbkRldGFjaCgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJiaXhpLWxhYmVsLW1vZGFsXCIgW25nU3R5bGVdPVwib3ZlcmxheVN0eWxlXCIgIGNka0RyYWcgW2Nka0RyYWdCb3VuZGFyeV09XCJkcmFnQm91bmRhcnkgfHwgJ2JvZHknXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYml4aS1sYWJlbC1tb2RhbC1oZWFkZXJcIiBjZGtEcmFnSGFuZGxlPlxuICAgICAgICA8ZGl2IGNsYXNzPSdiaXhpLWxhYmVsLW1vZGFsLWhlYWRlci1pbm5lcic+XG4gICAgICAgICAgPGRpdiAgY2xhc3M9XCJiaXhpLWxhYmVsLW1vZGFsLXRpdGxlXCI+e3t0aXRsZX19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJpeGktbGFiZWwtbW9kYWwtY2xvc2UtaWNvblwiIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiY2xvc2VcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJiaXhpLWxhYmVsLW1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGxhYmVsaW5nLCBsYWJlbGluZzogbGFiZWxpbmcsIGxhYmVsczogbGFiZWxzLCBjbG9zZTogb25DbG9zZSB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgZXhwb3J0QXM6ICdiaXhpTGFiZWxNb2RhbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJpeGlMYWJlbE1vZGFsQ29tcG9uZW50IHtcbiAgb3ZlcmxheVdpZHRoID0gT1ZFUkxBWV9XSURUSDtcbiAgb3ZlcmxheUhlaWdodCA9IE9WRVJMQVlfSEVJR0hUO1xuICBwbGFjZW1lbnQgPSAncmlnaHQnO1xuICBpc09wZW4gPSBmYWxzZTtcbiAgX2xhYmVsaW5nOiBJTGFiZWxpbmdFdmVudCB8IG51bGwgPSBudWxsO1xuICBAVmlld0NoaWxkKCdvdmVybGF5JywgeyBzdGF0aWM6IGZhbHNlIH0pIG92ZXJsYXkhOiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuICBASW5wdXQoKSBjb250ZW50OiBUZW1wbGF0ZVJlZjxJU2FmZUFueT4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRyYWdCb3VuZGFyeTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBzZXQgbGFiZWxpbmcodmFsOiBJTGFiZWxpbmdFdmVudCB8IG51bGwpIHtcbiAgICB0aGlzLl9sYWJlbGluZyA9IHZhbDtcbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLm9uU2hvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uSGlkZSgpO1xuICAgIH1cbiAgfVxuICBnZXQgbGFiZWxpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsaW5nO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7IH1cblxuICBnZXQgbGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVsaW5nID8gKHRoaXMubGFiZWxpbmcuZGF0YSkgfHwgW10gOiBbXTtcbiAgfVxuXG5cbiAgb25TaG93KCkge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLm92ZXJsYXkpIHtcbiAgICAgIC8vIOWmguaenOaYr+S6jOasoeagh+azqOeahOivne+8jOWPqumcgOimgeiwg+aVtOS9jee9ruWwseWPr+S7peS6hlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25IaWRlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25DbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLm9uSGlkZSgpO1xuICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgb25EZXRhY2goKSB7XG4gICAgLy8g5YW25a6D5pa55byP5YWz6Zet55qE6K+d77yM5Lmf6Kem5Y+R5LiA5qyhIGNhbmNlbFxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG92ZXJsYXlTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IGAke3RoaXMub3ZlcmxheVdpZHRoIHx8IDB9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHt0aGlzLm92ZXJsYXlIZWlnaHQgfHwgMH1weGBcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gW1BPU0lUSU9OX01BUFt0aGlzLnBsYWNlbWVudF0sIC4uLkRFRkFVTFRfVE9PTFRJUF9QT1NJVElPTlNdO1xuICB9XG5cbiAgZ2V0IG9yaWdpblN0eWxlKCkge1xuICAgIGlmICghdGhpcy5sYWJlbGluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3dpZHRoJzogJzBweCcsXG4gICAgICAgICdoZWlnaHQnOiAnMHB4J1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgd2lkdGg6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJzIwcHgnLFxuICAgICAgdG9wOiBgJHt0aGlzLmxhYmVsaW5nLnBvc2l0aW9uLnRvcCB8fCAwfXB4YCxcbiAgICAgIGxlZnQ6IGAke3RoaXMubGFiZWxpbmcucG9zaXRpb24ubGVmdCB8fCAwfXB4YFxuICAgIH07XG4gIH1cbn1cbiJdfQ==