UNPKG

ng-devui

Version:

DevUI components based on Angular

1 lines 68.8 kB
{"version":3,"file":"ng-devui-modal.mjs","sources":["../../devui/modal/modal.directive.ts","../../devui/modal/movable.directive.ts","../../devui/modal/modal.component.ts","../../devui/modal/modal.component.html","../../devui/modal/modal-header.component.ts","../../devui/modal/modal-header.component.html","../../devui/modal/modal-footer.component.ts","../../devui/modal/modal-footer.component.html","../../devui/modal/modal-container.component.ts","../../devui/modal/modal-container.component.html","../../devui/modal/dialog.service.ts","../../devui/modal/modal.service.ts","../../devui/modal/modal.module.ts","../../devui/modal/ng-devui-modal.ts"],"sourcesContent":["import {\n Directive,\n ViewContainerRef\n} from '@angular/core';\n\n@Directive({\n selector: '[dModalContentHost]',\n})\nexport class ModalContentDirective {\n constructor(public viewContainerRef: ViewContainerRef) {\n }\n}\n\n@Directive({\n selector: '[dModalContainerHost]',\n})\nexport class ModalContainerDirective {\n constructor(public viewContainerRef: ViewContainerRef) {\n }\n}\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[dMovable]',\r\n})\r\nexport class MovableDirective implements OnInit, OnChanges {\r\n topStart = 0;\r\n leftStart = 0;\r\n _allowDrag = false;\r\n md: boolean;\r\n @Input() handle: HTMLElement;\r\n @Input() moveEl: HTMLElement;\r\n public element: any;\r\n\r\n constructor(public el: ElementRef) {}\r\n\r\n ngOnInit() {\r\n this.element = this.moveEl || this.el.nativeElement;\r\n // css changes\r\n if (this._allowDrag) {\r\n this.element.style.position = 'relative';\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { moveEl, handle } = changes;\r\n if (moveEl) {\r\n this.element = this.moveEl || this.el.nativeElement;\r\n }\r\n if (handle) {\r\n this.allowDrag = this._allowDrag;\r\n }\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n if (event.button === 2 || !this.checkHandleTarget(event.target, this.handle)) {\r\n return; // prevents right click drag, remove his if you don't want it\r\n }\r\n this.md = true;\r\n this.topStart = event.clientY - this.element.style.top.replace('px', '');\r\n this.leftStart = event.clientX - this.element.style.left.replace('px', '');\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseUp(event: MouseEvent) {\r\n this.md = false;\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (typeof window !== 'undefined' && this.md && this._allowDrag) {\r\n // 阻止拖动过程中文字被选中\r\n event.stopPropagation();\r\n event.preventDefault();\r\n // 判断边界条件\r\n const modalRect = this.element.getBoundingClientRect();\r\n const parentRect = this.element.parentNode.getBoundingClientRect();\r\n const [translateX, translateY] = this.element.style.transform.match(/\\d+/g)?.map((item) => Number(item)) || [0, 0];\r\n // 当前偏移量\r\n let currentTop = event.clientY - this.topStart;\r\n let currentLeft = event.clientX - this.leftStart;\r\n // 计算上下距离,按照parentNode的位置计算偏移量,后续parentNode存在偏移量,需要考虑偏移量\r\n const maxTop = window.innerHeight - parentRect.top - modalRect.height;\r\n currentTop =\r\n (parentRect.top + currentTop + translateY <= 0 && -parentRect.top - translateY) ||\r\n (maxTop - currentTop - translateY <= 0 && maxTop - translateY) ||\r\n currentTop;\r\n const halfWidth = (window.innerWidth - modalRect.width) / 2;\r\n // 计算左右距离,默认居中,后续parentNode存在偏移量,需要考虑偏移量\r\n currentLeft =\r\n (currentLeft + halfWidth + translateX <= 0 && -halfWidth - translateX) ||\r\n (halfWidth - currentLeft - translateX <= 0 && halfWidth - translateX) ||\r\n currentLeft;\r\n this.element.style.top = currentTop + 'px';\r\n this.element.style.left = currentLeft + 'px';\r\n }\r\n }\r\n\r\n @HostListener('touchstart', ['$event'])\r\n onTouchStart(event: any) {\r\n this.md = true;\r\n this.topStart = event.changedTouches[0].clientY - this.element.style.top.replace('px', '');\r\n this.leftStart = event.changedTouches[0].clientX - this.element.style.left.replace('px', '');\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('document:touchend')\r\n onTouchEnd() {\r\n this.md = false;\r\n }\r\n\r\n @HostListener('document:touchmove', ['$event'])\r\n onTouchMove(event: any) {\r\n if (this.md && this._allowDrag) {\r\n this.element.style.top = `${event.changedTouches[0].clientY - this.topStart}px`;\r\n this.element.style.left = `${event.changedTouches[0].clientX - this.leftStart}px`;\r\n }\r\n event.stopPropagation();\r\n }\r\n\r\n checkHandleTarget = function (target, element) {\r\n if (!element) {\r\n return false;\r\n }\r\n // Checks if the target is the element clicked, then checks each child element of element as well\r\n // Ignores button clicks\r\n // Ignore elements of type button\r\n if (element.tagName === 'BUTTON') {\r\n return false;\r\n }\r\n // If the target was found, return true (handle was found)\r\n if (element === target) {\r\n return true;\r\n }\r\n // Recursively iterate this elements children\r\n for (const /** @type {?} */ child in element.children) {\r\n if (Object.prototype.hasOwnProperty.call(element.children, child)) {\r\n if (this.checkHandleTarget(target, element.children[child])) {\r\n return true;\r\n }\r\n }\r\n }\r\n // Handle was not found in this lineage\r\n // Note: return false is ignore unless it is the parent element\r\n return false;\r\n };\r\n\r\n @Input('dMovable')\r\n set allowDrag(value: boolean) {\r\n this._allowDrag = value;\r\n if (this._allowDrag && this.handle) {\r\n this.handle.style.cursor = 'move';\r\n }\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Component, ElementRef, Inject, Input, OnDestroy, OnInit, Renderer2, TemplateRef, ViewChild } from '@angular/core';\r\nimport { backdropFadeInOut, wipeInOutAnimation } from 'ng-devui/utils';\r\nimport { isUndefined } from 'lodash-es';\r\nimport { Observable, Subscription, fromEvent } from 'rxjs';\r\nimport { ModalContainerDirective } from './modal.directive';\r\n\r\n@Component({\r\n selector: 'd-modal',\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.scss'],\r\n animations: [backdropFadeInOut, wipeInOutAnimation],\r\n preserveWhitespaces: false,\r\n})\r\nexport class ModalComponent implements OnInit, OnDestroy {\r\n @Input() id: string;\r\n @Input() showAnimation = true;\r\n @Input() width: string;\r\n @Input() zIndex: number;\r\n @Input() backDropZIndex: number;\r\n @Input() backdropCloseable: boolean;\r\n @Input() beforeHidden: () => boolean | Promise<boolean> | Observable<boolean>;\r\n @Input() draggable: boolean;\r\n @Input() placement: 'center' | 'top' | 'bottom' | 'unset' = 'center';\r\n @Input() offsetX: string;\r\n @Input() offsetY: string;\r\n @Input() bodyScrollable = true; // 打开弹窗body是否可滚动\r\n @Input() escapable: boolean; // 是否支持esc键关闭弹窗\r\n @Input() cssClass: string;\r\n @ViewChild(ModalContainerDirective, { static: true }) modalContainerHost: ModalContainerDirective;\r\n @ViewChild('dialog', { static: true }) dialogElement: ElementRef;\r\n animateState = '';\r\n draggableHandleEl: HTMLElement;\r\n scrollTop: number;\r\n scrollLeft: number;\r\n documentOverFlow: boolean;\r\n\r\n mouseDwonEl: ElementRef;\r\n ignoreBackDropClick = false;\r\n pressEscToClose: Subscription = new Subscription();\r\n\r\n contentTemplate: TemplateRef<any>;\r\n document: Document;\r\n\r\n maximized = false;\r\n _oldWidth: string;\r\n\r\n constructor(private elementRef: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private doc: any) {\r\n this.backdropCloseable = isUndefined(this.backdropCloseable) ? true : this.backdropCloseable;\r\n this.document = this.doc;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.escapable) {\r\n this.pressEscToClose.add(\r\n fromEvent(window, 'keydown').subscribe((event: any) => {\r\n if (event.keyCode === 27) {\r\n this.hide();\r\n }\r\n })\r\n );\r\n }\r\n\r\n const handle = this.elementRef.nativeElement.querySelector('#d-modal-header');\r\n if (handle) {\r\n this.draggableHandleEl = handle;\r\n }\r\n\r\n this._oldWidth = this.width;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.pressEscToClose) {\r\n this.pressEscToClose.unsubscribe();\r\n this.pressEscToClose = null;\r\n }\r\n }\r\n\r\n // Will overwrite this method in modal service\r\n onHidden() {}\r\n\r\n updateButtonOptions<T>(buttonOptions: Array<T>) {}\r\n\r\n canHideModel() {\r\n let hiddenResult = Promise.resolve(true);\r\n\r\n if (this.beforeHidden) {\r\n const result: any = this.beforeHidden();\r\n if (typeof result !== 'undefined') {\r\n if (result.then) {\r\n hiddenResult = result;\r\n } else if (result.subscribe) {\r\n hiddenResult = (result as Observable<boolean>).toPromise();\r\n } else {\r\n hiddenResult = Promise.resolve(result);\r\n }\r\n }\r\n }\r\n\r\n return hiddenResult;\r\n }\r\n\r\n onModalClick = ($event) => {\r\n // 一定要document.contains($event.target),因为$event.target可能已经不在document里了,这个时候就不能进hide了,使用document.body兼容IE\r\n if (\r\n this.backdropCloseable &&\r\n !this.ignoreBackDropClick &&\r\n !this.dialogElement.nativeElement.contains($event.target) &&\r\n this.document.body.contains($event.target)\r\n ) {\r\n this.hide();\r\n }\r\n this.ignoreBackDropClick = false;\r\n };\r\n\r\n modalMouseDown = ($event) => {\r\n this.mouseDwonEl = $event.target;\r\n };\r\n\r\n modalMouseUp = ($event) => {\r\n if ($event.target !== this.mouseDwonEl) {\r\n this.ignoreBackDropClick = true;\r\n }\r\n };\r\n\r\n maximize() {\r\n this.maximized = !this.maximized;\r\n if (this.maximized) {\r\n this.width = '100vw';\r\n this.renderer.setStyle(this.document.body, 'overflow', 'hidden');\r\n } else {\r\n this.width = this._oldWidth;\r\n this.renderer.setStyle(this.document.body, 'overflow', 'auto');\r\n }\r\n }\r\n\r\n onAnimationEnd($event) {\r\n if ($event.fromState !== 'void' && this.animateState === 'void') {\r\n this.onHidden();\r\n }\r\n }\r\n\r\n show() {\r\n this.documentOverFlow = this.document.documentElement.scrollHeight > this.document.documentElement.clientHeight;\r\n if (this.documentOverFlow) {\r\n this.scrollTop = this.document.documentElement.scrollTop || this.document.body.scrollTop;\r\n this.scrollLeft = this.document.documentElement.scrollLeft || this.document.body.scrollLeft;\r\n this.renderer.addClass(this.document.body, 'devui-body-scrollblock');\r\n this.renderer.setStyle(this.document.body, 'top', `-${this.scrollTop}px`);\r\n this.renderer.setStyle(this.document.body, 'left', `-${this.scrollLeft}px`);\r\n }\r\n this.bodyScrollBlock(true);\r\n this.dialogElement.nativeElement.focus();\r\n if (this.showAnimation) {\r\n this.animateState = 'in';\r\n }\r\n }\r\n\r\n hide() {\r\n this.canHideModel().then((canHide) => {\r\n if (!canHide) {\r\n return;\r\n }\r\n this.bodyScrollBlock(false);\r\n this.animateState = 'void';\r\n });\r\n }\r\n\r\n bodyScrollBlock(toggle: boolean) {\r\n if (this.bodyScrollable || !this.documentOverFlow) {\r\n return;\r\n }\r\n if (toggle) {\r\n this.renderer.addClass(this.document.documentElement, 'devui-body-scrollblock-modal');\r\n this.renderer.setStyle(this.document.documentElement, 'top', `-${this.scrollTop}px`);\r\n this.renderer.setStyle(this.document.documentElement, 'left', `-${this.scrollLeft}px`);\r\n } else {\r\n this.renderer.removeClass(this.document.documentElement, 'devui-body-scrollblock-modal');\r\n this.renderer.removeStyle(this.document.documentElement, 'top');\r\n this.renderer.removeStyle(this.document.documentElement, 'left');\r\n this.document.documentElement.scrollLeft = this.scrollLeft;\r\n this.document.documentElement.scrollTop = this.scrollTop;\r\n }\r\n }\r\n\r\n resolveTransformTranslate() {\r\n let autoOffsetYByPlacement;\r\n switch (this.placement) {\r\n case 'top':\r\n autoOffsetYByPlacement = '40px';\r\n break;\r\n case 'bottom':\r\n autoOffsetYByPlacement = '-40px';\r\n break;\r\n case 'center':\r\n default:\r\n autoOffsetYByPlacement = 0;\r\n break;\r\n }\r\n if (this.placement !== 'unset') {\r\n const offsetX = this.offsetX ? this.offsetX : '0';\r\n const offsetY = this.offsetY ? this.offsetY : autoOffsetYByPlacement;\r\n return 'translate(' + offsetX + ',' + offsetY + ')';\r\n } else {\r\n return 'unset';\r\n }\r\n }\r\n}\r\n","<div class=\"modal-backdrop\" [ngStyle]=\"{ 'z-index': backDropZIndex }\" [@backdropAnimation]=\"animateState\"></div>\n<div\n class=\"modal in\"\n [ngClass]=\"cssClass\"\n [ngStyle]=\"{ 'z-index': zIndex }\"\n [attr.id]=\"id\"\n (mousedown)=\"modalMouseDown($event)\"\n (mouseup)=\"modalMouseUp($event)\"\n (click)=\"onModalClick($event)\"\n>\n <div\n class=\"modal-dialog\"\n [ngClass]=\"{\n 'place-at-top': placement === 'top',\n 'place-at-bottom': placement === 'bottom',\n 'place-at-center': placement === 'center' || placement === 'unset'\n }\"\n [ngStyle]=\"{ width: width }\"\n [@wipeInOutAnimation]=\"animateState\"\n (@wipeInOutAnimation.done)=\"onAnimationEnd($event)\"\n [@.disabled]=\"!showAnimation\"\n tabindex=\"1\"\n #dialog\n >\n <div\n class=\"modal-content\"\n [class.maximize]=\"maximized\"\n [dMovable]=\"draggable\"\n [handle]=\"draggableHandleEl\"\n [ngStyle]=\"{ transform: resolveTransformTranslate() }\"\n >\n <ng-template dModalContainerHost></ng-template>\n <ng-container *ngIf=\"contentTemplate\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ modalInstance: this }\"></ng-template>\n </ng-container>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { I18nInterface, I18nService } from 'ng-devui/i18n';\nimport { Subscription } from 'rxjs';\n@Component({\n selector: 'd-modal-header',\n templateUrl: './modal-header.component.html',\n styleUrls: ['./modal-header.component.scss'],\n preserveWhitespaces: false,\n})\nexport class ModalHeaderComponent implements OnInit, OnDestroy {\n @Input() title: string;\n @Input() dialogtype = 'standard';\n @Input() showCloseBtn: boolean;\n @Output() closeEvent: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() showMaximizeBtn = false;\n @Output() maximizeEvent = new EventEmitter<boolean>();\n maximized = false;\n\n i18nText: I18nInterface['modal'];\n i18nSubscription: Subscription;\n\n get checkDialogType() {\n return this.dialogtype?.toLowerCase() || 'standard';\n }\n\n constructor(private ref: ChangeDetectorRef, private i18n: I18nService) {}\n\n ngOnInit() {\n this.i18nText = this.i18n.getI18nText().modal;\n this.i18nSubscription = this.i18n.langChange().subscribe((data) => {\n this.i18nText = data.modal;\n this.ref.markForCheck();\n });\n }\n\n close(event) {\n this.closeEvent.emit(event);\n }\n\n ngOnDestroy() {\n if (this.i18nSubscription) {\n this.i18nSubscription.unsubscribe();\n }\n }\n\n maximize() {\n this.maximized = !this.maximized;\n this.maximizeEvent.emit(this.maximized);\n }\n}\n","<div class=\"modal-header\" [ngClass]=\"{ 'no-title': !title && title !== '' && checkDialogType === 'standard' }\">\n <div class=\"standard-title\">\n <div *ngIf=\"checkDialogType === 'warning'\" class=\"header-alert-icon\">\n <svg\n class=\"devui-icon devui-icon-warning\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <polygon\n points=\"7.5 1.74501946 1.39184847 13.5954649 7.08947368 14.2207621 13.9973698 13.5954649 10.9383683 5.61273879 8.40084114 1.27624313\"\n ></polygon>\n <path\n d=\"M8.51325441,0.127397589 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 L15.8714442,13.4101975 C16.1549662,13.9370117 15.9538562,14.5918482 15.4222523,14.8728158 C15.2642579,14.9563203 15.0879506,15 14.9088903,15 L1.09089441,15 C0.488410063,15 0,14.5159904 0,13.9189343 C0,13.7414873 0.0440768395,13.5667684 0.128340519,13.4101975 L7.03733844,0.57254229 C7.32086049,0.0457280838 7.98165058,-0.153569987 8.51325441,0.127397589 Z M8.87894737,11.2105263 L7.08947368,11.2105263 L7.08947368,13 L8.87894737,13 L8.87894737,11.2105263 Z M8.96842105,4.5 L7,4.5 L7.08947368,9.86842105 L8.87894737,9.86842105 L8.96842105,4.5 Z\"\n ></path>\n </g>\n </svg>\n </div>\n <div *ngIf=\"checkDialogType === 'failed'\" class=\"header-alert-icon\">\n <svg\n class=\"devui-icon devui-icon-error\"\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\n <path\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,12.6 L7,12.6 L7,10.6 L9,10.6 L9,12.6 Z M9,9.1 L7,9.1 L6.9,3.1 L9.1,3.1 L9,9.1 Z\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n </div>\n <div *ngIf=\"checkDialogType === 'sucess' || checkDialogType === 'success'\" class=\"header-alert-icon\">\n <svg\n class=\"devui-icon devui-icon-success\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\n <path d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z\" fill-rule=\"nonzero\"></path>\n <polygon\n stroke-width=\"0.4\"\n fill-rule=\"nonzero\"\n points=\"8.16 10.48 7.32 11.32 6.48 10.48 6.48 10.48 3.6 7.68 4.44 6.84 7.28 9.68 11.52 5.44 12.36 6.28\"\n ></polygon>\n </g>\n </svg>\n </div>\n <div *ngIf=\"checkDialogType === 'info'\" class=\"header-alert-icon\">\n <svg\n class=\"devui-icon devui-icon-info\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\n <g stroke-width=\"1\">\n <path\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,5 L7,5 L7,3 L9,3 L9,5 Z M9,12.6 L7,12.6 L7,6.6 L9,6.6 L9,12.6 Z\"\n ></path>\n </g>\n </g>\n </svg>\n </div>\n <span *ngIf=\"title\" [title]=\"title\" class=\"title-text\">{{ title }}</span>\n <ng-container *ngIf=\"!title\">\n <span *ngIf=\"checkDialogType === 'warning'\" class=\"title-text\"> {{ i18nText?.warning }}</span>\n <span *ngIf=\"checkDialogType === 'failed'\" class=\"title-text\">{{ i18nText?.error }}</span>\n <span *ngIf=\"checkDialogType === 'sucess' || checkDialogType === 'success'\" class=\"title-text\">{{ i18nText?.success }}</span>\n <span *ngIf=\"checkDialogType === 'info'\" class=\"title-text\">{{ i18nText?.info }}</span>\n </ng-container>\n </div>\n <d-icon\n class=\"modal-header-maximized\"\n *ngIf=\"showMaximizeBtn\"\n [icon]=\"maximized ? minTemplate : maxTemplate\"\n [operable]=\"true\"\n (click)=\"maximize()\"\n ></d-icon>\n <ng-template #maxTemplate>\n <svg width=\"16px\" height=\"16px\" t=\"1624600373175\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1179\">\n <path\n d=\"M810.666667 938.666667h-128c-25.6 0-42.666667-17.066667-42.666667-42.666667s17.066667-42.666667 42.666667-42.666667h128c25.6 0 42.666667-17.066667 42.666666-42.666666v-128c0-25.6 17.066667-42.666667 42.666667-42.666667s42.666667 17.066667 42.666667 42.666667v128c0 72.533333-55.466667 128-128 128zM341.333333 938.666667H213.333333c-72.533333 0-128-55.466667-128-128v-128c0-25.6 17.066667-42.666667 42.666667-42.666667s42.666667 17.066667 42.666667 42.666667v128c0 25.6 17.066667 42.666667 42.666666 42.666666h128c25.6 0 42.666667 17.066667 42.666667 42.666667s-17.066667 42.666667-42.666667 42.666667zM896 384c-25.6 0-42.666667-17.066667-42.666667-42.666667V213.333333c0-25.6-17.066667-42.666667-42.666666-42.666666h-128c-25.6 0-42.666667-17.066667-42.666667-42.666667s17.066667-42.666667 42.666667-42.666667h128c72.533333 0 128 55.466667 128 128v128c0 25.6-17.066667 42.666667-42.666667 42.666667zM128 384c-25.6 0-42.666667-17.066667-42.666667-42.666667V213.333333c0-72.533333 55.466667-128 128-128h128c25.6 0 42.666667 17.066667 42.666667 42.666667s-17.066667 42.666667-42.666667 42.666667H213.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666v128c0 25.6-17.066667 42.666667-42.666667 42.666667z\"\n p-id=\"1180\"\n ></path>\n </svg>\n </ng-template>\n <ng-template #minTemplate>\n <svg width=\"16px\" height=\"16px\" t=\"1624607246708\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5121\">\n <path\n d=\"M682.666667 938.666667c-25.6 0-42.666667-17.066667-42.666667-42.666667v-128c0-72.533333 55.466667-128 128-128h128c25.6 0 42.666667 17.066667 42.666667 42.666667s-17.066667 42.666667-42.666667 42.666666h-128c-25.6 0-42.666667 17.066667-42.666667 42.666667v128c0 25.6-17.066667 42.666667-42.666666 42.666667z m-341.333334 0c-25.6 0-42.666667-17.066667-42.666666-42.666667v-128c0-25.6-17.066667-42.666667-42.666667-42.666667H128c-25.6 0-42.666667-17.066667-42.666667-42.666666s17.066667-42.666667 42.666667-42.666667h128c72.533333 0 128 55.466667 128 128v128c0 25.6-17.066667 42.666667-42.666667 42.666667zM896 384h-128c-72.533333 0-128-55.466667-128-128V128c0-25.6 17.066667-42.666667 42.666667-42.666667s42.666667 17.066667 42.666666 42.666667v128c0 25.6 17.066667 42.666667 42.666667 42.666667h128c25.6 0 42.666667 17.066667 42.666667 42.666666s-17.066667 42.666667-42.666667 42.666667zM256 384H128c-25.6 0-42.666667-17.066667-42.666667-42.666667s17.066667-42.666667 42.666667-42.666666h128c25.6 0 42.666667-17.066667 42.666667-42.666667V128c0-25.6 17.066667-42.666667 42.666666-42.666667s42.666667 17.066667 42.666667 42.666667v128c0 72.533333-55.466667 128-128 128z\"\n p-id=\"5122\"\n ></path>\n </svg>\n </ng-template>\n <d-icon\n class=\"modal-header-close\"\n *ngIf=\"showCloseBtn\"\n [icon]=\"closeTemplate\"\n [operable]=\"true\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"close($event)\"\n >\n </d-icon>\n <ng-template #closeTemplate>\n <svg\n width=\"18px\"\n height=\"18px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g id=\"ipd_close1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(3.000000, 3.000000)\" fill=\"#71757F\" fill-rule=\"nonzero\" id=\"路径\">\n <path\n d=\"M-0.353553391,-0.353553391 C-0.179987039,-0.527119742 0.0894373624,-0.546404893 0.284305503,-0.411408841 L0.353553391,-0.353553391 L10.3535534,9.64644661 C10.5488155,9.84170876 10.5488155,10.1582912 10.3535534,10.3535534 C10.179987,10.5271197 9.91056264,10.5464049 9.7156945,10.4114088 L9.64644661,10.3535534 L-0.353553391,0.353553391 C-0.548815536,0.158291245 -0.548815536,-0.158291245 -0.353553391,-0.353553391 Z\"\n ></path>\n <path\n d=\"M9.64644661,-0.353553391 C9.84170876,-0.548815536 10.1582912,-0.548815536 10.3535534,-0.353553391 C10.5271197,-0.179987039 10.5464049,0.0894373624 10.4114088,0.284305503 L10.3535534,0.353553391 L0.353553391,10.3535534 C0.158291245,10.5488155 -0.158291245,10.5488155 -0.353553391,10.3535534 C-0.527119742,10.179987 -0.546404893,9.91056264 -0.411408841,9.7156945 L-0.353553391,9.64644661 L9.64644661,-0.353553391 Z\"\n ></path>\n </g>\n </g>\n </svg>\n </ng-template>\n</div>\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { IButtonStyle } from 'ng-devui/button';\n\n@Component({\n selector: 'd-modal-footer',\n templateUrl: './modal-footer.component.html',\n styleUrls: ['./modal-footer.component.scss'],\n preserveWhitespaces: false,\n})\nexport class ModalFooterComponent {\n @Input() buttons: Array<{\n id?: string;\n cssClass?: IButtonStyle;\n text: string;\n handler: ($event: Event) => void;\n btnwidth?: string;\n autofocus?: boolean;\n disabled: boolean;\n }>;\n}\n","<div class=\"modal-footer\">\n <d-button\n *ngFor=\"let button of buttons\"\n [bsSize]=\"'md'\"\n [attr.id]=\"button.id\"\n (btnClick)=\"button.handler($event)\"\n [bsStyle]=\"button.cssClass\"\n circled=\"true\"\n [width]=\"button.btnwidth\"\n [autofocus]=\"button.autofocus\"\n [disabled]=\"button.disabled\"\n >{{ button.text }}\n </d-button>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IButtonStyle } from 'ng-devui/button';\nimport { ModalComponent } from './modal.component';\nimport { ModalContentDirective } from './modal.directive';\n@Component({\n selector: 'd-modal-container',\n templateUrl: './modal-container.component.html',\n styleUrls: ['./modal-container.component.scss'],\n preserveWhitespaces: false,\n})\nexport class ModalContainerComponent implements OnInit {\n @Input() maxHeight: string;\n @Input() data: any;\n @Input() title: string;\n @Input() content: string | HTMLElement;\n @Input() showMaximizeBtn: boolean;\n @Input() buttons: Array<{\n id?: string;\n cssClass?: IButtonStyle;\n text: string;\n handler: ($event: Event) => void;\n btnwidth?: string;\n autofocus?: boolean;\n disabled: boolean;\n }>;\n @Input() html: boolean;\n @Input() onClose: ($event?: Event) => void;\n @Input() onMaximize: (maximized: boolean) => void;\n @ViewChild(ModalContentDirective, { static: true }) modalContentHost: ModalContentDirective;\n @Input() dialogtype = 'standard';\n @Input() showCloseBtn: boolean;\n contentTemplate: TemplateRef<any>;\n _oldMaxHeight: string;\n\n constructor(private sanitizer: DomSanitizer, public modalInstance: ModalComponent) {}\n\n ngOnInit() {\n if (this.html) {\n this.content = <HTMLElement>this.sanitizer.bypassSecurityTrustHtml(<string>this.content);\n }\n }\n\n close(event) {\n this.onClose(event);\n }\n\n maximize(maximized: boolean) {\n if (this.onMaximize) {\n this.onMaximize(maximized);\n }\n if (maximized) {\n this._oldMaxHeight = this.maxHeight;\n this.maxHeight = '100vh';\n } else {\n this.maxHeight = this._oldMaxHeight;\n }\n }\n\n updateButtonOptions(buttonOptions = []) {\n this.buttons = this.buttons.map((button, index) => {\n return {...button, ...buttonOptions[index]};\n });\n }\n}\n","<div>\n <d-modal-header\n id=\"d-modal-header\"\n [title]=\"title\"\n (closeEvent)=\"close($event)\"\n (maximizeEvent)=\"maximize($event)\"\n [dialogtype]=\"dialogtype\"\n [showMaximizeBtn]=\"showMaximizeBtn\"\n [showCloseBtn]=\"showCloseBtn\"\n ></d-modal-header>\n <div\n class=\"modal-body devui-scrollbar\"\n [ngClass]=\"{\n 'flex-content': dialogtype === 'warning' || dialogtype === 'failed' || dialogtype === 'success' || dialogtype === 'info'\n }\"\n [ngStyle]=\"{ maxHeight: maxHeight, 'overflow-y': 'auto' }\"\n cdkScrollable\n >\n <div\n [ngClass]=\"{\n 'display-flex': dialogtype !== '' && dialogtype !== 'standard'\n }\"\n >\n <div class=\"content\" [style.max-height]=\"maxHeight\" *ngIf=\"!!content && !html\">{{ content }}</div>\n <div class=\"content\" [style.max-height]=\"maxHeight\" *ngIf=\"!!content && html\" [innerHTML]=\"content\"></div>\n <div class=\"content\" *ngIf=\"contentTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{ modalInstance: modalInstance, modalContentInstance: this }\"\n ></ng-template>\n </div>\n <ng-template dModalContentHost></ng-template>\n </div>\n </div>\n\n <d-modal-footer [buttons]=\"buttons\"></d-modal-footer>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { ComponentFactoryResolver, ComponentRef, Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { OverlayContainerRef } from 'ng-devui/overlay-container';\nimport { DevConfigService } from 'ng-devui/utils';\nimport { assign, isUndefined } from 'lodash-es';\nimport { ModalContainerComponent } from './modal-container.component';\nimport { ModalComponent } from './modal.component';\nimport { IDialogOptions } from './modal.types';\n\n@Injectable()\nexport class DialogService {\n contentRef: ComponentRef<any>;\n private renderer: Renderer2;\n document: Document;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private overlayContainerRef: OverlayContainerRef,\n private rendererFactory: RendererFactory2,\n private devConfigService: DevConfigService,\n @Inject(DOCUMENT) private doc: any\n ) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n this.document = this.doc;\n }\n\n open({\n id,\n width,\n zIndex,\n backDropZIndex,\n backdropCloseable,\n maxHeight,\n showAnimation,\n /**\n * @deprecated\n */\n showAnimate,\n title,\n content,\n html,\n data,\n buttons,\n injector,\n componentFactoryResolver,\n beforeHidden,\n onClose,\n onMaximize,\n dialogtype = 'standard',\n showCloseBtn = true,\n draggable = true,\n placement = 'center',\n offsetX,\n offsetY,\n bodyScrollable,\n contentTemplate,\n escapable = true,\n showMaximizeBtn = false,\n }: IDialogOptions) {\n const finalComponentFactoryResolver = componentFactoryResolver || this.componentFactoryResolver;\n const modalRef = this.overlayContainerRef.createComponent(\n finalComponentFactoryResolver.resolveComponentFactory(ModalComponent),\n injector\n );\n const componentConfig = this.devConfigService.getConfigForComponent('modal') || {};\n const showAnimationApiConfig = this.devConfigService.getConfigForApi('showAnimation');\n const bodyScrollableApiConfig = this.devConfigService.getConfigForApi('bodyScrollable');\n showAnimation = showAnimation ?? showAnimate ?? componentConfig.showAnimation ?? showAnimationApiConfig;\n bodyScrollable = bodyScrollable ?? componentConfig.bodyScrollable ?? bodyScrollableApiConfig ?? true;\n\n assign(modalRef.instance, {\n id,\n width,\n zIndex,\n backDropZIndex,\n showAnimation,\n beforeHidden,\n // set backdropCloseable default value \"true\" when not passing it\n backdropCloseable: isUndefined(backdropCloseable) ? true : backdropCloseable,\n draggable,\n placement,\n offsetX,\n offsetY,\n bodyScrollable,\n escapable\n });\n\n const modalContainerRef = modalRef.instance.modalContainerHost.viewContainerRef\n .createComponent(finalComponentFactoryResolver.resolveComponentFactory(ModalContainerComponent), 0, injector);\n assign(modalContainerRef.instance, { title, buttons, maxHeight, dialogtype, showCloseBtn, showMaximizeBtn });\n\n if (contentTemplate) {\n assign(modalContainerRef.instance, { contentTemplate });\n } else {\n if (typeof content === 'string') {\n assign(modalContainerRef.instance, { content, html });\n } else {\n this.contentRef = modalContainerRef.instance.modalContentHost.viewContainerRef\n .createComponent(finalComponentFactoryResolver.resolveComponentFactory(content));\n assign(this.contentRef.instance, { data, dialogtype });\n }\n }\n\n modalContainerRef.instance.onClose = () => {\n modalRef.instance.hide();\n };\n\n modalContainerRef.instance.onMaximize = () => {\n modalRef.instance.maximize();\n if (onMaximize) {\n onMaximize(modalRef.instance.maximized);\n }\n };\n\n modalRef.instance.updateButtonOptions = (buttonOptions) => modalContainerRef.instance.updateButtonOptions(buttonOptions);\n\n modalRef.instance.onHidden = () => {\n if (modalRef.instance.documentOverFlow) {\n this.renderer.removeStyle(this.document.body, 'top');\n this.renderer.removeStyle(this.document.body, 'left');\n this.renderer.removeClass(this.document.body, 'devui-body-scrollblock');\n this.renderer.removeClass(this.document.body, 'devui-body-overflow-hidden');\n this.document.documentElement.scrollTop = modalRef.instance.scrollTop;\n this.document.body.scrollTop = modalRef.instance.scrollTop;\n this.document.documentElement.scrollLeft = modalRef.instance.scrollLeft;\n this.document.body.scrollLeft = modalRef.instance.scrollLeft;\n }\n if (onClose) {\n onClose();\n }\n setTimeout(() => {\n modalRef.hostView.destroy();\n });\n };\n\n modalRef.instance.show();\n\n return {\n modalInstance: modalRef.instance,\n modalContentInstance: this.contentRef ? this.contentRef.instance : null,\n };\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ComponentFactoryResolver,\n Inject,\n Injectable,\n Renderer2, RendererFactory2\n} from '@angular/core';\nimport { OverlayContainerRef } from 'ng-devui/overlay-container';\nimport { DevConfigService } from 'ng-devui/utils';\nimport { assign, isUndefined } from 'lodash-es';\nimport { ModalComponent } from './modal.component';\nimport { IModalOptions } from './modal.types';\n\n@Injectable()\nexport class ModalService {\n private renderer: Renderer2;\n document: Document;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private overlayContainerRef: OverlayContainerRef, private rendererFactory: RendererFactory2,\n private devConfigService: DevConfigService,\n @Inject(DOCUMENT) private doc: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n this.document = this.doc;\n }\n\n open({\n id,\n component,\n injector,\n width,\n zIndex,\n backDropZIndex,\n data,\n handler,\n showAnimation,\n /**\n * @deprecated\n */\n showAnimate,\n backdropCloseable,\n componentFactoryResolver,\n onClose,\n beforeHidden,\n placement = 'center',\n offsetX,\n offsetY,\n bodyScrollable,\n contentTemplate,\n escapable = true,\n cssClass\n }: IModalOptions) {\n const finalComponentFactoryResolver = componentFactoryResolver || this.componentFactoryResolver;\n const modalRef = this.overlayContainerRef.createComponent(\n finalComponentFactoryResolver.resolveComponentFactory(ModalComponent),\n injector\n );\n const componentConfig = this.devConfigService.getConfigForComponent('modal') || {};\n const showAnimationApiConfig = this.devConfigService.getConfigForApi('showAnimation');\n const bodyScrollableApiConfig = this.devConfigService.getConfigForApi('bodyScrollable');\n showAnimation = showAnimation ?? showAnimate ?? componentConfig.showAnimation ?? showAnimationApiConfig;\n bodyScrollable = bodyScrollable ?? componentConfig.bodyScrollable ?? bodyScrollableApiConfig ?? true;\n\n assign(modalRef.instance, {\n id,\n width,\n zIndex,\n backDropZIndex,\n showAnimation,\n beforeHidden,\n backdropCloseable: isUndefined(backdropCloseable) ? true : backdropCloseable,\n placement,\n offsetX,\n offsetY,\n bodyScrollable,\n contentTemplate,\n escapable,\n cssClass\n });\n\n let modalContentInstance;\n if (component) {\n modalContentInstance = modalRef.instance.modalContainerHost.viewContainerRef\n .createComponent(finalComponentFactoryResolver.resolveComponentFactory(component), 0, injector);\n assign(modalContentInstance.instance, { data, handler });\n }\n\n modalRef.instance.onHidden = () => {\n if (modalRef.instance.documentOverFlow) {\n this.renderer.removeStyle(this.document.body, 'top');\n this.renderer.removeStyle(this.document.body, 'left');\n this.renderer.removeClass(this.document.body, 'devui-body-scrollblock');\n this.renderer.removeClass(this.document.body, 'devui-body-overflow-hidden');\n this.document.documentElement.scrollTop = modalRef.instance.scrollTop;\n this.document.body.scrollTop = modalRef.instance.scrollTop;\n this.document.documentElement.scrollLeft = modalRef.instance.scrollLeft;\n this.document.body.scrollLeft = modalRef.instance.scrollLeft;\n }\n if (onClose) {\n onClose();\n }\n setTimeout(() => {\n modalRef.hostView.destroy();\n });\n };\n\n modalRef.instance.show();\n\n return {\n modalInstance: modalRef.instance,\n modalContentInstance: modalContentInstance ? modalContentInstance.instance : null\n };\n }\n}\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ButtonModule } from 'ng-devui/button';\nimport { IconModule } from 'ng-devui/icon';\nimport { OverlayContainerModule } from 'ng-devui/overlay-container';\nimport { DocumentRef } from 'ng-devui/window-ref';\nimport { DialogService } from './dialog.service';\nimport { ModalContainerComponent } from './modal-container.component';\nimport { ModalFooterComponent } from './modal-footer.component';\nimport { ModalHeaderComponent } from './modal-header.component';\nimport { ModalComponent } from './modal.component';\nimport { ModalContainerDirective, ModalContentDirective } from './modal.directive';\nimport { ModalService } from './modal.service';\nimport { MovableDirective } from './movable.directive';\n\n@NgModule({\n imports: [CommonModule, OverlayContainerModule, ButtonModule, IconModule, ScrollingModule],\n declarations: [\n ModalComponent,\n ModalContainerComponent,\n ModalContainerDirective,\n ModalContentDirective,\n ModalHeaderComponent,\n ModalFooterComponent,\n MovableDirective,\n ],\n exports: [ModalComponent, ModalContainerComponent, ModalHeaderComponent, ModalFooterComponent, MovableDirective],\n providers: [ModalService, DialogService, DocumentRef],\n})\nexport class ModalModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i2.ModalComponent","i3","i5.ModalContentDirective","i6.ModalHeaderComponent","i7.ModalFooterComponent"],"mappings":"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