UNPKG

@bixi/label

Version:
208 lines 17.4 kB
/** * @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==