@ng-nest/ui 21.0.12 → 22.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-nest-ui-affix.mjs +12 -12
- package/fesm2022/ng-nest-ui-affix.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-alert.mjs +46 -34
- package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-anchor.mjs +43 -31
- package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-api.mjs +7 -7
- package/fesm2022/ng-nest-ui-attachments.mjs +74 -48
- package/fesm2022/ng-nest-ui-attachments.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-auto-complete.mjs +114 -70
- package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-avatar.mjs +47 -32
- package/fesm2022/ng-nest-ui-avatar.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-back-top.mjs +23 -18
- package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-badge.mjs +30 -23
- package/fesm2022/ng-nest-ui-badge.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-base-form.mjs +75 -44
- package/fesm2022/ng-nest-ui-base-form.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-bubble.mjs +76 -48
- package/fesm2022/ng-nest-ui-bubble.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-button.mjs +53 -42
- package/fesm2022/ng-nest-ui-button.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-calendar.mjs +30 -20
- package/fesm2022/ng-nest-ui-calendar.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-card.mjs +21 -16
- package/fesm2022/ng-nest-ui-card.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-carousel.mjs +68 -46
- package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-cascade.mjs +121 -73
- package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-checkbox.mjs +54 -38
- package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-collapse.mjs +38 -30
- package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-color-picker.mjs +119 -72
- package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-color.mjs +22 -16
- package/fesm2022/ng-nest-ui-color.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-comment.mjs +23 -21
- package/fesm2022/ng-nest-ui-comment.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-container.mjs +40 -37
- package/fesm2022/ng-nest-ui-container.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-contextmenu.mjs +71 -45
- package/fesm2022/ng-nest-ui-contextmenu.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-core.mjs +24 -21
- package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-coversations.mjs +25 -18
- package/fesm2022/ng-nest-ui-coversations.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-crumb.mjs +15 -13
- package/fesm2022/ng-nest-ui-crumb.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-date-picker.mjs +425 -256
- package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-description.mjs +42 -31
- package/fesm2022/ng-nest-ui-description.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-dialog.mjs +106 -82
- package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-divider.mjs +24 -17
- package/fesm2022/ng-nest-ui-divider.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-doc.mjs +7 -7
- package/fesm2022/ng-nest-ui-drag.mjs +10 -10
- package/fesm2022/ng-nest-ui-drawer.mjs +52 -43
- package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-dropdown.mjs +94 -58
- package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-empty.mjs +14 -12
- package/fesm2022/ng-nest-ui-empty.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-examples.mjs +7 -7
- package/fesm2022/ng-nest-ui-find.mjs +111 -71
- package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-form.mjs +45 -33
- package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-highlight.mjs +26 -20
- package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-i18n.mjs +16 -15
- package/fesm2022/ng-nest-ui-i18n.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-icon.mjs +28 -21
- package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-image.mjs +57 -51
- package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-inner.mjs +11 -11
- package/fesm2022/ng-nest-ui-inner.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-input-number.mjs +63 -42
- package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-input.mjs +130 -85
- package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-keyword.mjs +19 -15
- package/fesm2022/ng-nest-ui-keyword.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-layout.mjs +37 -31
- package/fesm2022/ng-nest-ui-layout.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-link.mjs +23 -18
- package/fesm2022/ng-nest-ui-link.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-list.mjs +137 -89
- package/fesm2022/ng-nest-ui-list.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-loading.mjs +36 -25
- package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-menu.mjs +68 -45
- package/fesm2022/ng-nest-ui-menu.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-message-box.mjs +10 -10
- package/fesm2022/ng-nest-ui-message.mjs +10 -10
- package/fesm2022/ng-nest-ui-notification.mjs +10 -10
- package/fesm2022/ng-nest-ui-outlet.mjs +11 -9
- package/fesm2022/ng-nest-ui-outlet.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-page-header.mjs +20 -15
- package/fesm2022/ng-nest-ui-page-header.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-pagination.mjs +69 -48
- package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-pattern.mjs +7 -7
- package/fesm2022/ng-nest-ui-popconfirm.mjs +40 -27
- package/fesm2022/ng-nest-ui-popconfirm.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-popover.mjs +57 -38
- package/fesm2022/ng-nest-ui-popover.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-portal.mjs +7 -7
- package/fesm2022/ng-nest-ui-progress.mjs +60 -41
- package/fesm2022/ng-nest-ui-progress.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-prompts.mjs +18 -15
- package/fesm2022/ng-nest-ui-prompts.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-radio.mjs +50 -35
- package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-rate.mjs +43 -29
- package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-resizable.mjs +18 -16
- package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-result.mjs +22 -16
- package/fesm2022/ng-nest-ui-result.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-ripple.mjs +14 -13
- package/fesm2022/ng-nest-ui-ripple.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-scrollable.mjs +41 -24
- package/fesm2022/ng-nest-ui-scrollable.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-select.mjs +196 -117
- package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-sender.mjs +43 -31
- package/fesm2022/ng-nest-ui-sender.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-skeleton.mjs +17 -15
- package/fesm2022/ng-nest-ui-skeleton.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-slider-select.mjs +85 -53
- package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-slider.mjs +58 -37
- package/fesm2022/ng-nest-ui-slider.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-splitter.mjs +32 -24
- package/fesm2022/ng-nest-ui-splitter.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-statistic.mjs +44 -30
- package/fesm2022/ng-nest-ui-statistic.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-steps.mjs +30 -22
- package/fesm2022/ng-nest-ui-steps.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-suggestion.mjs +23 -20
- package/fesm2022/ng-nest-ui-suggestion.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-switch.mjs +35 -25
- package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-table-view.mjs +78 -69
- package/fesm2022/ng-nest-ui-table-view.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-table.mjs +320 -205
- package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tabs.mjs +74 -56
- package/fesm2022/ng-nest-ui-tabs.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tag.mjs +30 -23
- package/fesm2022/ng-nest-ui-tag.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-text-retract.mjs +19 -15
- package/fesm2022/ng-nest-ui-text-retract.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-textarea.mjs +69 -44
- package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-theme.mjs +34 -23
- package/fesm2022/ng-nest-ui-theme.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-thought-chain.mjs +26 -19
- package/fesm2022/ng-nest-ui-thought-chain.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-time-ago.mjs +7 -7
- package/fesm2022/ng-nest-ui-time-picker.mjs +164 -96
- package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-time-range.mjs +7 -7
- package/fesm2022/ng-nest-ui-timeline.mjs +26 -19
- package/fesm2022/ng-nest-ui-timeline.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tooltip.mjs +53 -35
- package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-transfer.mjs +66 -40
- package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tree-file.mjs +39 -28
- package/fesm2022/ng-nest-ui-tree-file.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tree-select.mjs +186 -111
- package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tree.mjs +166 -105
- package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-typography.mjs +16 -13
- package/fesm2022/ng-nest-ui-typography.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-upload.mjs +81 -53
- package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-watermark.mjs +44 -34
- package/fesm2022/ng-nest-ui-watermark.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-welcome.mjs +22 -16
- package/fesm2022/ng-nest-ui-welcome.mjs.map +1 -1
- package/package.json +3 -2
- package/types/ng-nest-ui-base-form.d.ts +3 -3
- package/types/ng-nest-ui-carousel.d.ts +1 -1
- package/types/ng-nest-ui-container.d.ts +1 -1
- package/types/ng-nest-ui-core.d.ts +1 -1
- package/types/ng-nest-ui-dialog.d.ts +1 -1
- package/types/ng-nest-ui-drawer.d.ts +1 -1
- package/types/ng-nest-ui-form.d.ts +12 -12
- package/types/ng-nest-ui-layout.d.ts +1 -1
- package/types/ng-nest-ui-list.d.ts +1 -1
- package/types/ng-nest-ui-portal.d.ts +3 -3
- package/types/ng-nest-ui-table-view.d.ts +1 -1
- package/types/ng-nest-ui-table.d.ts +1 -1
- package/types/ng-nest-ui-tabs.d.ts +1 -1
- package/types/ng-nest-ui-tree.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-nest-ui-upload.mjs","sources":["../../../../lib/ng-nest/ui/upload/upload.property.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.html","../../../../lib/ng-nest/ui/upload/drag-overlay.component.ts","../../../../lib/ng-nest/ui/upload/drag-overlay.component.html","../../../../lib/ng-nest/ui/upload/drag-overlay.service.ts","../../../../lib/ng-nest/ui/upload/upload.component.ts","../../../../lib/ng-nest/ui/upload/upload.component.html","../../../../lib/ng-nest/ui/upload/upload.module.ts","../../../../lib/ng-nest/ui/upload/ng-nest-ui-upload.ts"],"sourcesContent":["import { XBoolean, XTemplate, XPosition, XCorner, XNumber, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { Component, ElementRef, input, output } from '@angular/core';\r\nimport { XFormControlFunction } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * Upload\r\n * @selector x-upload\r\n * @decorator component\r\n */\r\nexport const XUploadPrefix = 'x-upload';\r\nconst X_UPLOAD_CONFIG_NAME = 'upload';\r\n\r\n/**\r\n * Upload Property\r\n */\r\n@Component({ selector: `${XUploadPrefix}-property`, template: '' })\r\nexport class XUploadProperty extends XFormControlFunction(X_UPLOAD_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n readonly text = input<XTemplate>();\r\n /**\r\n * @zh_CN 请求地址\r\n * @en_US Request address\r\n */\r\n readonly action = input<string>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域\r\n * @en_US Drag and drop upload area\r\n */\r\n readonly dropContainer = input<ElementRef | HTMLElement>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的图标\r\n * @en_US Drag and drop upload area icon\r\n */\r\n readonly dropIcon = input<XTemplate>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的标题\r\n * @en_US Drag and drop upload area title\r\n */\r\n readonly dropTitle = input<XTemplate>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的描述\r\n * @en_US Drag and drop upload area description\r\n */\r\n readonly dropDescription = input<XTemplate>();\r\n /**\r\n * @zh_CN 直接显示可拖拽上传的区域\r\n * @en_US Show the drag and drop upload area directly\r\n */\r\n readonly showDrop = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 上传文件类型,与原生的 input file 组件一致\r\n * @en_US Upload file type, consistent with native input file component\r\n */\r\n readonly accept = input<string>();\r\n /**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\n readonly type = input<XUploadType>('list');\r\n /**\r\n * @zh_CN 图片类型下面加载失败显示\r\n * @en_US Photo type below loading failed display\r\n */\r\n readonly imgFallback = input<string>();\r\n /**\r\n * @zh_CN 图片剪裁\r\n * @en_US Picture cropping\r\n */\r\n readonly imgCut = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 多文件上传\r\n * @en_US Multiple file upload\r\n */\r\n readonly multiple = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 点击下载\r\n * @en_US click download\r\n */\r\n readonly download = input<boolean, XBoolean>(this.config?.download ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 多次上传的模式,cover 覆盖现有, add 继续添加\r\n * @en_US For many upload mode, 'cover' covers the existing, 'add' continue to add\r\n */\r\n readonly multipleModel = input<XUploadMultipleModel>(this.config?.multipleModel ?? 'cover');\r\n /**\r\n * @zh_CN 文件列表自定义显示模板\r\n * @en_US File list custom display template\r\n */\r\n readonly filesTpl = input<XTemplate>();\r\n /**\r\n * @zh_CN 限制单次上传文件个数,只有开启多文件上传 multiple 时生效,默认不做限制\r\n * @en_US Limit the number of files uploaded files. Do not restrict the default\r\n */\r\n readonly maxLimit = input<number, XNumber>(-1, { transform: XToNumber });\r\n /**\r\n * @zh_CN 设置上传的请求头部\r\n * @en_US Set the upload request header\r\n */\r\n readonly headers = input<{ [key: string]: any }>();\r\n /**\r\n * @zh_CN 删除按钮的事件\r\n * @en_US Delete button event\r\n */\r\n readonly removeClick = output<{ file: XUploadNode; index: number }>();\r\n /**\r\n * @zh_CN 开始上传事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadReady = output<XUploadNode>();\r\n /**\r\n * @zh_CN 正在上传事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploading = output<XUploadNode>();\r\n /**\r\n * @zh_CN 上传成功事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadSuccess = output<XUploadNode>();\r\n /**\r\n * @zh_CN 上传失败事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadError = output<XUploadNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Upload 数据对象\r\n * @en_US Upload data object\r\n */\r\nexport interface XUploadNode extends File {\r\n /**\r\n * @zh_CN 地址\r\n * @en_US address\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 状态\r\n * @en_US status\r\n */\r\n state?: XStateType;\r\n /**\r\n * @zh_CN 上传进度\r\n * @en_US Upload progress\r\n */\r\n percent?: XNumber;\r\n /**\r\n * @zh_CN 上传返回数据\r\n * @en_US Upload body\r\n */\r\n body?: any;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件状态\r\n * @en_US File status\r\n */\r\nexport type XStateType = 'ready' | 'uploading' | 'success' | 'error';\r\n\r\n/**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\nexport type XUploadType = 'list' | 'img';\r\n\r\n/**\r\n * @zh_CN 多次上传的模式,cover 覆盖现有 add 继续添加\r\n * @en_US For many upload mode, 'cover' covers the existing, 'add' continue to add\r\n */\r\nexport type XUploadMultipleModel = 'cover' | 'add';\r\n\r\n/**\r\n * @zh_CN 剪裁的方位\r\n * @en_US Tailored orientation\r\n */\r\nexport type XUploadCutType = XPosition | XCorner | '';\r\n\r\n/**\r\n * @zh_CN 上传显示窗口\r\n * @en_US Upload portal\r\n * @selector x-upload-portal\r\n * @decorator component\r\n */\r\nexport const XUploadPortalPrefix = 'x-upload-portal';\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n Renderer2,\r\n inject,\r\n AfterViewInit,\r\n OnDestroy,\r\n input,\r\n computed,\r\n viewChild,\r\n signal,\r\n output\r\n} from '@angular/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XClamp } from '@ng-nest/ui/core';\r\nimport { XUploadCutType, XUploadNode, XUploadPortalPrefix } from './upload.property';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: `${XUploadPortalPrefix}`,\r\n imports: [XIconComponent],\r\n templateUrl: './upload-portal.component.html',\r\n styleUrls: ['./upload-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XUploadPortalComponent implements AfterViewInit, OnDestroy {\r\n file = input<XUploadNode>();\r\n name = computed(() => {\r\n return this.file()?.name;\r\n });\r\n url = computed(() => {\r\n return this.file()?.url;\r\n });\r\n imgRef = viewChild.required<ElementRef<HTMLElement>>('imgRef');\r\n imgClipRef = viewChild.required<ElementRef<HTMLElement>>('imgClipRef');\r\n boundaryRef = viewChild.required<ElementRef<HTMLElement>>('boundaryRef');\r\n cutRef = viewChild.required<ElementRef<HTMLElement>>('cutRef');\r\n ready = signal(false);\r\n cutType = signal<XUploadCutType>('');\r\n proportion = signal(1);\r\n originalSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n boundaryBox = {\r\n width: 0,\r\n height: 0\r\n };\r\n cutBox = {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0\r\n };\r\n clipRect!: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n\r\n doc = inject(DOCUMENT);\r\n\r\n closePortal = output<void>();\r\n surePortal = output<Blob>();\r\n private unSubject = new Subject<void>();\r\n private renderer = inject(Renderer2);\r\n\r\n ngAfterViewInit() {\r\n this.setCut();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n setCut() {\r\n let width = this.imgRef().nativeElement.clientWidth;\r\n let height = this.imgRef().nativeElement.clientHeight;\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.boundaryRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.boundaryRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgClipRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgClipRef().nativeElement, 'height', `${height}px`);\r\n this.cutBox.width = width;\r\n this.cutBox.height = height;\r\n this.boundaryBox = { width, height };\r\n this.clipRect = {\r\n top: 0,\r\n right: width,\r\n bottom: height,\r\n left: 0\r\n };\r\n this.setOriginalSize();\r\n this.ready.set(true);\r\n\r\n const mouseDown = fromEvent<MouseEvent>(this.cutRef().nativeElement, 'mousedown').pipe(takeUntil(this.unSubject));\r\n\r\n mouseDown.subscribe((downMe: MouseEvent) => {\r\n let x = downMe.pageX;\r\n let y = downMe.pageY;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n const _unSub = new Subject<void>();\r\n let className = (downMe.target as HTMLDivElement).className;\r\n const spt = `${XUploadPortalPrefix}-cut-`;\r\n if (className.includes(spt)) {\r\n this.cutType.set(className.replace(spt, '') as XUploadCutType);\r\n }\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mousemove')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((moveMe: MouseEvent) => {\r\n offsetX = moveMe.pageX - x;\r\n offsetY = moveMe.pageY - y;\r\n x = moveMe.pageX;\r\n y = moveMe.pageY;\r\n this.setCutEle(this.cutType(), offsetX, offsetY);\r\n });\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mouseup')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe(() => {\r\n this.cutType.set('');\r\n _unSub.next();\r\n _unSub.complete();\r\n });\r\n });\r\n }\r\n\r\n setOriginalSize() {\r\n const img = new Image();\r\n img.src = this.url()!;\r\n img.onload = () => {\r\n this.originalSize = { width: img.width, height: img.height };\r\n this.proportion.set(this.boundaryBox.width / this.originalSize.width);\r\n };\r\n }\r\n\r\n setCutEle(position: XUploadCutType, x: number, y: number) {\r\n switch (position) {\r\n case 'top-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height -= y;\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top':\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'right':\r\n this.cutBox.width += x;\r\n break;\r\n case 'bottom-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom':\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height += y;\r\n this.cutBox.x += x;\r\n break;\r\n case 'left':\r\n this.cutBox.width -= x;\r\n this.cutBox.x += x;\r\n break;\r\n case '':\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n }\r\n const boundaryRect = this.boundaryRef().nativeElement.getBoundingClientRect();\r\n\r\n const maxY = boundaryRect.height - this.cutBox.height;\r\n const maxX = boundaryRect.width - this.cutBox.width;\r\n\r\n this.cutBox.x = XClamp(this.cutBox.x, 0, maxX);\r\n this.cutBox.y = XClamp(this.cutBox.y, 0, maxY);\r\n\r\n // const maxWidth = boundaryRect.height - this.cutBox.y;\r\n // const maxHeight = boundaryRect.width - this.cutBox.x;\r\n\r\n // this.cutBox.width = XClamp(this.cutBox.width, 0, maxWidth);\r\n // this.cutBox.height = XClamp(this.cutBox.width, 0, maxHeight);\r\n\r\n this.clipRect = {\r\n top: this.cutBox.y,\r\n right: this.cutBox.width + this.cutBox.x,\r\n bottom: this.cutBox.height + this.cutBox.y,\r\n left: this.cutBox.x\r\n };\r\n this.renderer.setStyle(\r\n this.imgClipRef().nativeElement,\r\n 'clip',\r\n `rect(${this.clipRect.top}px,${this.clipRect.right}px,${this.clipRect.bottom}px,${this.clipRect.left}px)`\r\n );\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'width', `${this.cutBox.width}px`);\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'height', `${this.cutBox.height}px`);\r\n this.renderer.setStyle(\r\n this.cutRef().nativeElement,\r\n 'transform',\r\n `translate3d(${this.cutBox.x}px, ${this.cutBox.y}px, 0)`\r\n );\r\n }\r\n\r\n sure() {\r\n const canvas = this.doc.createElement('canvas');\r\n canvas.width = this.cutBox.width / this.proportion();\r\n canvas.height = this.cutBox.height / this.proportion();\r\n const context = canvas.getContext('2d')!;\r\n const img = new Image();\r\n img.src = this.url()!;\r\n img.crossOrigin = 'anonymous';\r\n img.onload = () => {\r\n context.drawImage(img, -this.cutBox.x / this.proportion(), -this.cutBox.y / this.proportion());\r\n canvas.toBlob((blob) => {\r\n this.surePortal.emit(blob as Blob);\r\n this.closePortal.emit();\r\n });\r\n };\r\n }\r\n}\r\n","<div class=\"x-upload-portal {{ cutType() }}\" [class.x-upload-portal-ready]=\"ready()\">\r\n <div class=\"x-upload-portal-tools\">\r\n <div class=\"x-upload-portal-title\">\r\n <x-icon type=\"fto-image\"></x-icon>\r\n <span>{{ name() }}</span>\r\n </div>\r\n <x-icon class=\"x-upload-portal-close\" type=\"fto-x\" (click)=\"closePortal.emit()\"></x-icon>\r\n </div>\r\n <div class=\"x-upload-portal-img\">\r\n <img #imgRef class=\"x-upload-portal-full-img\" [src]=\"url()\" />\r\n <div #boundaryRef class=\"x-upload-portal-boundary\">\r\n <img #imgClipRef class=\"x-upload-portal-clip-img\" [src]=\"url()\" />\r\n <div #cutRef class=\"x-upload-portal-cut\">\r\n <div class=\"x-upload-portal-cut-top-start\"></div>\r\n <div class=\"x-upload-portal-cut-top\"></div>\r\n <div class=\"x-upload-portal-cut-top-end\"></div>\r\n <div class=\"x-upload-portal-cut-left\"></div>\r\n <div class=\"x-upload-portal-cut-right\"></div>\r\n <div class=\"x-upload-portal-cut-bottom-start\"></div>\r\n <div class=\"x-upload-portal-cut-bottom\"></div>\r\n <div class=\"x-upload-portal-cut-bottom-end\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"x-upload-portal-bottom-tools\">\r\n <x-icon class=\"x-upload-portal-close\" type=\"fto-check\" (click)=\"sure()\"></x-icon>\r\n </div>\r\n</div>\r\n","import { input, ChangeDetectionStrategy, Component, ViewEncapsulation, computed } from '@angular/core';\r\nimport { XTemplate } from '@ng-nest/ui/core';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: 'x-drag-overlay',\r\n templateUrl: './drag-overlay.component.html',\r\n styleUrl: './drag-overlay.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [XOutletDirective, XIconComponent]\r\n})\r\nexport class XDragOverlayComponent {\r\n icon = input<XTemplate>();\r\n title = input<XTemplate>();\r\n description = input<XTemplate>();\r\n\r\n iconString = computed(() => this.icon() as string);\r\n}\r\n","<div class=\"x-drag-overlay\">\r\n @if (icon()) {\r\n <div class=\"x-drag-overlay-icon\">\r\n <ng-container *xOutlet=\"icon()\">\r\n <x-icon [type]=\"iconString()\"></x-icon>\r\n </ng-container>\r\n </div>\r\n }\r\n @if (title()) {\r\n <div class=\"x-drag-overlay-title\">\r\n <ng-container *xOutlet=\"title()\">\r\n {{ title() }}\r\n </ng-container>\r\n </div>\r\n }\r\n @if (description()) {\r\n <div class=\"x-drag-overlay-description\">\r\n <ng-container *xOutlet=\"description()\">\r\n {{ description() }}\r\n </ng-container>\r\n </div>\r\n }\r\n</div>\r\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentRef, DOCUMENT, inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { XDragOverlayComponent } from './drag-overlay.component';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { XComputedStyle, XTemplate } from '@ng-nest/ui/core';\r\nimport { ViewContainerRef } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class XDragOverlayService {\r\n overlay = inject(Overlay);\r\n document = inject(DOCUMENT);\r\n overlayRef: OverlayRef | null = null;\r\n componentRef: ComponentRef<XDragOverlayComponent> | null = null;\r\n containerPosition: string = '';\r\n private renderer!: Renderer2;\r\n private factory = inject(RendererFactory2);\r\n\r\n constructor() {\r\n this.renderer = this.factory.createRenderer(null, null);\r\n }\r\n\r\n createOverlay(\r\n container: HTMLElement,\r\n viewContainerRef: ViewContainerRef,\r\n params: { icon: XTemplate; title: XTemplate; description: XTemplate }\r\n ): void {\r\n this.removeOverlay(container);\r\n\r\n const isBodyOrWindow = container === this.document.body || container === this.document.documentElement;\r\n\r\n this.containerPosition = container.style.position;\r\n this.renderer.setStyle(container, 'position', 'relative');\r\n\r\n const overlayConfig = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n hasBackdrop: false,\r\n scrollStrategy: this.overlay.scrollStrategies.block()\r\n });\r\n\r\n this.overlayRef = this.overlay.create(overlayConfig);\r\n\r\n if (this.overlayRef && this.overlayRef.overlayElement) {\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'width', container.offsetWidth + 'px');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'height', container.offsetHeight + 'px');\r\n this.renderer.setStyle(\r\n this.overlayRef.overlayElement,\r\n 'border-radius',\r\n XComputedStyle(container, 'border-radius')\r\n );\r\n\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'position', 'absolute');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'pointer-events', 'none');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'z-index', 'none');\r\n }\r\n\r\n const portal = new ComponentPortal(XDragOverlayComponent, viewContainerRef);\r\n this.componentRef = this.overlayRef.attach(portal);\r\n this.componentRef.setInput('icon', params.icon);\r\n this.componentRef.setInput('title', params.title);\r\n this.componentRef.setInput('description', params.description);\r\n\r\n if (this.overlayRef && this.overlayRef.overlayElement) {\r\n if (!isBodyOrWindow) {\r\n container.appendChild(this.overlayRef.overlayElement);\r\n }\r\n }\r\n }\r\n\r\n removeOverlay(container: HTMLElement): void {\r\n if (this.overlayRef) {\r\n const resizeObserver = (this.overlayRef as any).resizeObserver;\r\n if (resizeObserver) {\r\n resizeObserver.disconnect();\r\n }\r\n if (this.overlayRef.overlayElement && this.overlayRef.overlayElement.parentNode) {\r\n this.overlayRef.overlayElement.parentNode.removeChild(this.overlayRef.overlayElement);\r\n }\r\n this.renderer.setStyle(container, 'position', this.containerPosition);\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.componentRef = null;\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpEventType, HttpRequest, HttpEvent, HttpHeaders } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n signal,\r\n computed,\r\n effect,\r\n untracked,\r\n HostBinding,\r\n Renderer2\r\n} from '@angular/core';\r\nimport { XUploadPrefix, XUploadNode, XUploadProperty, XUploadPortalPrefix } from './upload.property';\r\nimport { XIsArray, XIsEmpty, XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { XI18nService, XI18nUpload, zh_CN } from '@ng-nest/ui/i18n';\r\nimport { XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { XImageComponent, XImageGroupComponent } from '@ng-nest/ui/image';\r\nimport { XProgressComponent } from '@ng-nest/ui/progress';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, Subscription } from 'rxjs';\r\nimport { XDragOverlayService } from './drag-overlay.service';\r\nimport { XDragOverlayComponent } from './drag-overlay.component';\r\n\r\n@Component({\r\n selector: `${XUploadPrefix}`,\r\n imports: [\r\n NgTemplateOutlet,\r\n XIconComponent,\r\n XOutletDirective,\r\n XButtonComponent,\r\n XImageGroupComponent,\r\n XImageComponent,\r\n XProgressComponent,\r\n XDragOverlayComponent\r\n ],\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XUploadComponent), XDragOverlayService]\r\n})\r\nexport class XUploadComponent extends XUploadProperty {\r\n private http = inject(HttpClient, { optional: true });\r\n private portalService = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private i18n = inject(XI18nService);\r\n private renderer = inject(Renderer2);\r\n private dragOverlayService = inject(XDragOverlayService);\r\n private dropSubscription?: Subscription;\r\n private dragCounter = 0;\r\n elementRef = inject(ElementRef);\r\n\r\n @HostBinding('class.x-upload-show-drop') get getShowDrop() {\r\n return this.showDrop();\r\n }\r\n\r\n file = viewChild.required<ElementRef<HTMLInputElement>>('file');\r\n files = signal<XUploadNode[]>([]);\r\n showUpload = signal(false);\r\n uploadNodes = signal<XUploadNode[]>([]);\r\n locale = toSignal(this.i18n.localeChange.pipe(map((x) => x.upload as XI18nUpload)), { initialValue: zh_CN.upload });\r\n portal!: XPortalOverlayRef<XUploadPortalComponent>;\r\n\r\n getText = computed(() => this.text() || this.locale().uploadText);\r\n isTemplateText = computed(() => XIsTemplateRef(this.getText()));\r\n\r\n override writeValue(value: XUploadNode[]) {\r\n this.value.set(value);\r\n this.setFiles();\r\n }\r\n\r\n acceptSignal = computed(() => {\r\n if (this.type() === 'img' && XIsEmpty(this.accept())) return 'image/*';\r\n return this.accept();\r\n });\r\n\r\n constructor() {\r\n super();\r\n if (!this.http) {\r\n throw new Error(\r\n `${XUploadPrefix}: Not found 'HttpClient', You can import 'HttpClientModule' in your root module.`\r\n );\r\n }\r\n\r\n effect(() => {\r\n const container = this.dropContainer();\r\n untracked(() => {\r\n this.setupDropContainer(container);\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showDrop() && this.dropContainer()) {\r\n this.setupDropContainer(this.dropContainer());\r\n }\r\n }\r\n\r\n ngOnDestory() {\r\n if (this.dropSubscription) {\r\n this.dropSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n private setupDropContainer(container: ElementRef | HTMLElement | undefined) {\r\n if (this.dropSubscription) {\r\n this.dropSubscription.unsubscribe();\r\n }\r\n\r\n if (!container) return;\r\n\r\n const element = container instanceof ElementRef ? container.nativeElement : container;\r\n\r\n const dragEnter$ = fromEvent<DragEvent>(element, 'dragenter');\r\n const dragOver$ = fromEvent<DragEvent>(element, 'dragover');\r\n const dragLeave$ = fromEvent<DragEvent>(element, 'dragleave');\r\n const drop$ = fromEvent<DragEvent>(element, 'drop');\r\n\r\n this.dropSubscription = new Subscription();\r\n\r\n this.dropSubscription.add(\r\n dragEnter$.subscribe((event) => {\r\n event.preventDefault();\r\n this.dragCounter++;\r\n if (this.dragCounter === 1) {\r\n this.addDragOverStyle(element);\r\n }\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n dragOver$.subscribe((event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n dragLeave$.subscribe((event) => {\r\n event.preventDefault();\r\n this.dragCounter--;\r\n if (this.dragCounter === 0) {\r\n this.removeDragOverStyle(element);\r\n }\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n drop$.subscribe((event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.dragCounter = 0;\r\n this.removeDragOverStyle(element);\r\n\r\n const files = event.dataTransfer?.files;\r\n if (files && files.length > 0) {\r\n this.handleFiles(files);\r\n }\r\n })\r\n );\r\n }\r\n\r\n private addDragOverStyle(element: HTMLElement) {\r\n if (this.showDrop()) {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'x-upload-drag-over');\r\n } else {\r\n const icon = this.dropIcon()!;\r\n const title = this.dropTitle()!;\r\n const description = this.dropDescription()!;\r\n this.dragOverlayService.createOverlay(element, this.viewContainerRef, { icon, title, description });\r\n }\r\n }\r\n\r\n private removeDragOverStyle(element: HTMLElement) {\r\n if (this.showDrop()) {\r\n this.renderer.removeClass(this.elementRef.nativeElement, 'x-upload-drag-over');\r\n } else {\r\n this.dragOverlayService.removeOverlay(element);\r\n }\r\n }\r\n\r\n setFiles() {\r\n if (!Array.isArray(this.value())) return;\r\n this.files.set(\r\n this.value().map((x: XUploadNode) => {\r\n if (!x.state) x.state = 'success';\r\n return x;\r\n })\r\n );\r\n }\r\n\r\n change(event: Event) {\r\n let input = event.target as HTMLInputElement;\r\n if (typeof input === 'undefined' || input.files?.length === 0) return;\r\n this.handleFiles(input.files!);\r\n input.value = '';\r\n }\r\n\r\n handleFiles(fileList: FileList) {\r\n let files: XUploadNode[] = [];\r\n let max = this.maxLimit() > -1 ? this.maxLimit() : fileList.length;\r\n for (let i = 0; i < max; i++) {\r\n let file: XUploadNode = fileList.item(i) as XUploadNode;\r\n file.state = 'ready';\r\n files = [...files, file];\r\n }\r\n if (files.length > 0) this.showUpload.set(true);\r\n if (this.multipleModel() === 'cover') {\r\n this.files.set(files);\r\n } else if (this.multipleModel() === 'add') {\r\n this.files.update((x) => [...x, ...files]);\r\n }\r\n this.value.set(this.files());\r\n this.onChange && this.onChange(this.value());\r\n this.onUploading();\r\n }\r\n\r\n remove(file: XUploadNode, index: number) {\r\n this.files.update((x) => {\r\n x.splice(index, 1);\r\n return [...x];\r\n });\r\n if (this.files().length === 0) this.file().nativeElement.value = '';\r\n this.showUpload.set(this.files().find((x) => x.state === 'ready') != null);\r\n const vindex = this.value().indexOf(file);\r\n if (vindex > -1) {\r\n this.value.update((x) => {\r\n x.splice(vindex, 1);\r\n return [...x];\r\n });\r\n this.onChange && this.onChange(this.value());\r\n }\r\n this.removeClick.emit({ file: file, index: index });\r\n }\r\n\r\n uploadClick() {\r\n if (this.disabledComputed()) return;\r\n this.file().nativeElement.click();\r\n }\r\n\r\n onUploading() {\r\n if (!this.action()) return;\r\n let readyFiles = this.files().filter((x) => x.state === 'ready');\r\n readyFiles.forEach((x) => {\r\n this.uploadFile(x);\r\n });\r\n }\r\n\r\n uploadFile(file: XUploadNode, index = -1) {\r\n let formData = new FormData();\r\n formData.append('file', file);\r\n const req = new HttpRequest('POST', this.action()!, formData, {\r\n reportProgress: true,\r\n responseType: 'arraybuffer',\r\n withCredentials: false,\r\n headers: new HttpHeaders(this.headers())\r\n });\r\n this.http\r\n ?.request(req)\r\n .pipe(\r\n map((event) =>\r\n this.getEventMessage(event, file, (body: BlobPart) => {\r\n let blob = new Blob([body]);\r\n let reader = new FileReader();\r\n reader.readAsText(blob, 'utf-8');\r\n reader.onload = () => {\r\n let body = [];\r\n try {\r\n body = JSON.parse(reader.result as string);\r\n if (XIsArray(body) && body.length > 0) {\r\n file.url = body[0] as string;\r\n }\r\n file.body = body;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n if (index !== -1) {\r\n this.files.update((x) => {\r\n x[index] = file;\r\n return [...x];\r\n });\r\n }\r\n this.uploadSuccess.emit(file);\r\n };\r\n })\r\n )\r\n )\r\n .subscribe({\r\n complete: () => {\r\n this.showUpload.set(this.files().find((y) => y.state === 'ready') != null);\r\n },\r\n error: () => {\r\n file.state = 'error';\r\n this.uploadError.emit(file);\r\n }\r\n });\r\n }\r\n\r\n getEventMessage(event: HttpEvent<any>, file: XUploadNode, successFunc: Function) {\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n file.state = 'ready';\r\n this.uploadReady.emit(file);\r\n return this.locale().beginUploadText;\r\n case HttpEventType.UploadProgress:\r\n file.state = 'uploading';\r\n if (event.total) file.percent = Math.round((100 * event.loaded) / event.total);\r\n this.uploading.emit(file);\r\n return this.locale().uploadingText;\r\n case HttpEventType.Response:\r\n file.state = 'success';\r\n successFunc(event.body);\r\n return this.locale().uploadCompleted;\r\n }\r\n return;\r\n }\r\n\r\n onImgCut(file: XUploadNode, index: number) {\r\n this.portal = this.portalService.attach({\r\n content: XUploadPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n panelClass: [XUploadPortalPrefix],\r\n hasBackdrop: true,\r\n positionStrategy: this.portalService.setPlace('center')\r\n }\r\n });\r\n this.setInstance(file, index);\r\n }\r\n\r\n setInstance(file: XUploadNode, index: number) {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n componentRef.setInput('file', file);\r\n const { closePortal, surePortal } = componentRef.instance;\r\n closePortal.subscribe(() => this.closePortal());\r\n surePortal.subscribe((blob) => {\r\n const fl = new File([blob], file.name, { type: blob.type }) as XUploadNode;\r\n fl.state = 'ready';\r\n this.uploadFile(fl, index);\r\n });\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n imgError(_event: ErrorEvent, file: XUploadNode) {\r\n file.state = 'error';\r\n }\r\n imgLoad(file: XUploadNode) {\r\n file.state = 'success';\r\n }\r\n}\r\n","<div #upload class=\"x-upload x-upload-{{ type() }}\" [class.x-disabled]=\"disabledComputed()\">\r\n <input\r\n class=\"x-upload-input\"\r\n type=\"file\"\r\n #file\r\n (change)=\"change($event)\"\r\n [attr.accept]=\"acceptSignal()\"\r\n [multiple]=\"multiple()\"\r\n style=\"display: none\"\r\n />\r\n\r\n @switch (type()) {\r\n @case ('list') {\r\n <ng-container *ngTemplateOutlet=\"uploadBtnTpl\"></ng-container>\r\n <ng-container *xOutlet=\"filesTpl(); context: { $files: files() }\">\r\n @if (files() && files().length > 0) {\r\n <ul class=\"x-upload-files\">\r\n @for (file of files(); track file; let i = $index) {\r\n <li [class.x-upload-disabled]=\"!download()\">\r\n @if (download()) {\r\n <a [href]=\"file.url\" target=\"_blank\" [title]=\"file.name\">\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n } @else {\r\n <a>\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n }\r\n\r\n @switch (file.state) {\r\n @case ('ready') {\r\n <x-icon class=\"x-upload-state\" type=\"fto-clock\"></x-icon>\r\n }\r\n @case ('uploading') {\r\n <span class=\"x-upload-percent\">{{ file.percent }}%</span>\r\n }\r\n @case ('success') {\r\n <x-icon class=\"x-upload-state success\" type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon class=\"x-upload-state error\" type=\"fto-info\"></x-icon>\r\n }\r\n }\r\n @if (file.state !== 'uploading') {\r\n <x-button icon=\"fto-x\" (click)=\"remove(file, i)\" closable onlyIcon flat size=\"mini\"></x-button>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </ng-container>\r\n }\r\n @case ('img') {\r\n <x-image-group>\r\n @for (file of files(); track file; let i = $index) {\r\n <x-image\r\n [src]=\"file.url\"\r\n (load)=\"imgLoad(file)\"\r\n (error)=\"imgError($event, file)\"\r\n class=\"{{ file.state }}\"\r\n [previewTpl]=\"previewTpl\"\r\n [fallback]=\"imgFallback()\"\r\n >\r\n </x-image>\r\n <ng-template #previewTpl let-image=\"$image\">\r\n @if (file.state == 'uploading') {\r\n <div class=\"x-upload-uploading\">\r\n <x-progress [percent]=\"file.percent!\" info=\"false\"></x-progress>\r\n </div>\r\n }\r\n <div class=\"x-image-overlay\">\r\n @switch (file.state) {\r\n @case ('ready') {\r\n <x-icon class=\"x-upload-state\" type=\"fto-clock\"></x-icon>\r\n }\r\n @case ('success') {\r\n <x-icon type=\"fto-eye\" (click)=\"image.onPreview()\"></x-icon>\r\n }\r\n }\r\n @if (imgCut() && file.state === 'success') {\r\n <x-icon type=\"fto-crop\" (click)=\"onImgCut(file, i)\"></x-icon>\r\n }\r\n @if (file.state !== 'uploading') {\r\n <x-icon type=\"fto-trash-2\" (click)=\"remove(file, i)\"></x-icon>\r\n }\r\n </div>\r\n </ng-template>\r\n }\r\n <ng-container *ngTemplateOutlet=\"uploadBtnTpl\"></ng-container>\r\n </x-image-group>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #uploadBtnTpl>\r\n @if (showDrop()) {\r\n <x-drag-overlay\r\n class=\"x-upload-drag-overlay\"\r\n (click)=\"uploadClick()\"\r\n [icon]=\"dropIcon()\"\r\n [title]=\"dropTitle()\"\r\n [description]=\"dropDescription()\"\r\n ></x-drag-overlay>\r\n } @else {\r\n <div class=\"x-upload-buttons\" [class.x-upload-buttons-template]=\"isTemplateText()\" (click)=\"uploadClick()\">\r\n <ng-container *xOutlet=\"getText()\">\r\n <x-button icon=\"fto-upload\" class=\"x-upload-text\" [disabled]=\"disabledComputed()\" type=\"primary\">{{\r\n getText()\r\n }}</x-button>\r\n </ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XUploadComponent } from './upload.component';\r\n\r\n@NgModule({\r\n exports: [XUploadComponent],\r\n imports: [XUploadComponent]\r\n})\r\nexport class XUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-nest-ui-upload.mjs","sources":["../../../../lib/ng-nest/ui/upload/upload.property.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.html","../../../../lib/ng-nest/ui/upload/drag-overlay.component.ts","../../../../lib/ng-nest/ui/upload/drag-overlay.component.html","../../../../lib/ng-nest/ui/upload/drag-overlay.service.ts","../../../../lib/ng-nest/ui/upload/upload.component.ts","../../../../lib/ng-nest/ui/upload/upload.component.html","../../../../lib/ng-nest/ui/upload/upload.module.ts","../../../../lib/ng-nest/ui/upload/ng-nest-ui-upload.ts"],"sourcesContent":["import { XBoolean, XTemplate, XPosition, XCorner, XNumber, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { Component, ElementRef, input, output } from '@angular/core';\r\nimport { XFormControlFunction } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * Upload\r\n * @selector x-upload\r\n * @decorator component\r\n */\r\nexport const XUploadPrefix = 'x-upload';\r\nconst X_UPLOAD_CONFIG_NAME = 'upload';\r\n\r\n/**\r\n * Upload Property\r\n */\r\n@Component({ selector: `${XUploadPrefix}-property`, template: '' })\r\nexport class XUploadProperty extends XFormControlFunction(X_UPLOAD_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n readonly text = input<XTemplate>();\r\n /**\r\n * @zh_CN 请求地址\r\n * @en_US Request address\r\n */\r\n readonly action = input<string>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域\r\n * @en_US Drag and drop upload area\r\n */\r\n readonly dropContainer = input<ElementRef | HTMLElement>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的图标\r\n * @en_US Drag and drop upload area icon\r\n */\r\n readonly dropIcon = input<XTemplate>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的标题\r\n * @en_US Drag and drop upload area title\r\n */\r\n readonly dropTitle = input<XTemplate>();\r\n /**\r\n * @zh_CN 可拖拽上传的区域的描述\r\n * @en_US Drag and drop upload area description\r\n */\r\n readonly dropDescription = input<XTemplate>();\r\n /**\r\n * @zh_CN 直接显示可拖拽上传的区域\r\n * @en_US Show the drag and drop upload area directly\r\n */\r\n readonly showDrop = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 上传文件类型,与原生的 input file 组件一致\r\n * @en_US Upload file type, consistent with native input file component\r\n */\r\n readonly accept = input<string>();\r\n /**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\n readonly type = input<XUploadType>('list');\r\n /**\r\n * @zh_CN 图片类型下面加载失败显示\r\n * @en_US Photo type below loading failed display\r\n */\r\n readonly imgFallback = input<string>();\r\n /**\r\n * @zh_CN 图片剪裁\r\n * @en_US Picture cropping\r\n */\r\n readonly imgCut = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 多文件上传\r\n * @en_US Multiple file upload\r\n */\r\n readonly multiple = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 点击下载\r\n * @en_US click download\r\n */\r\n readonly download = input<boolean, XBoolean>(this.config?.download ?? true, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 多次上传的模式,cover 覆盖现有, add 继续添加\r\n * @en_US For many upload mode, 'cover' covers the existing, 'add' continue to add\r\n */\r\n readonly multipleModel = input<XUploadMultipleModel>(this.config?.multipleModel ?? 'cover');\r\n /**\r\n * @zh_CN 文件列表自定义显示模板\r\n * @en_US File list custom display template\r\n */\r\n readonly filesTpl = input<XTemplate>();\r\n /**\r\n * @zh_CN 限制单次上传文件个数,只有开启多文件上传 multiple 时生效,默认不做限制\r\n * @en_US Limit the number of files uploaded files. Do not restrict the default\r\n */\r\n readonly maxLimit = input<number, XNumber>(-1, { transform: XToNumber });\r\n /**\r\n * @zh_CN 设置上传的请求头部\r\n * @en_US Set the upload request header\r\n */\r\n readonly headers = input<{ [key: string]: any }>();\r\n /**\r\n * @zh_CN 删除按钮的事件\r\n * @en_US Delete button event\r\n */\r\n readonly removeClick = output<{ file: XUploadNode; index: number }>();\r\n /**\r\n * @zh_CN 开始上传事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadReady = output<XUploadNode>();\r\n /**\r\n * @zh_CN 正在上传事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploading = output<XUploadNode>();\r\n /**\r\n * @zh_CN 上传成功事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadSuccess = output<XUploadNode>();\r\n /**\r\n * @zh_CN 上传失败事件\r\n * @en_US Start upload event\r\n */\r\n readonly uploadError = output<XUploadNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Upload 数据对象\r\n * @en_US Upload data object\r\n */\r\nexport interface XUploadNode extends File {\r\n /**\r\n * @zh_CN 地址\r\n * @en_US address\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 状态\r\n * @en_US status\r\n */\r\n state?: XStateType;\r\n /**\r\n * @zh_CN 上传进度\r\n * @en_US Upload progress\r\n */\r\n percent?: XNumber;\r\n /**\r\n * @zh_CN 上传返回数据\r\n * @en_US Upload body\r\n */\r\n body?: any;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件状态\r\n * @en_US File status\r\n */\r\nexport type XStateType = 'ready' | 'uploading' | 'success' | 'error';\r\n\r\n/**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\nexport type XUploadType = 'list' | 'img';\r\n\r\n/**\r\n * @zh_CN 多次上传的模式,cover 覆盖现有 add 继续添加\r\n * @en_US For many upload mode, 'cover' covers the existing, 'add' continue to add\r\n */\r\nexport type XUploadMultipleModel = 'cover' | 'add';\r\n\r\n/**\r\n * @zh_CN 剪裁的方位\r\n * @en_US Tailored orientation\r\n */\r\nexport type XUploadCutType = XPosition | XCorner | '';\r\n\r\n/**\r\n * @zh_CN 上传显示窗口\r\n * @en_US Upload portal\r\n * @selector x-upload-portal\r\n * @decorator component\r\n */\r\nexport const XUploadPortalPrefix = 'x-upload-portal';\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n Renderer2,\r\n inject,\r\n AfterViewInit,\r\n OnDestroy,\r\n input,\r\n computed,\r\n viewChild,\r\n signal,\r\n output\r\n} from '@angular/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XClamp } from '@ng-nest/ui/core';\r\nimport { XUploadCutType, XUploadNode, XUploadPortalPrefix } from './upload.property';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: `${XUploadPortalPrefix}`,\r\n imports: [XIconComponent],\r\n templateUrl: './upload-portal.component.html',\r\n styleUrls: ['./upload-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XUploadPortalComponent implements AfterViewInit, OnDestroy {\r\n file = input<XUploadNode>();\r\n name = computed(() => {\r\n return this.file()?.name;\r\n });\r\n url = computed(() => {\r\n return this.file()?.url;\r\n });\r\n imgRef = viewChild.required<ElementRef<HTMLElement>>('imgRef');\r\n imgClipRef = viewChild.required<ElementRef<HTMLElement>>('imgClipRef');\r\n boundaryRef = viewChild.required<ElementRef<HTMLElement>>('boundaryRef');\r\n cutRef = viewChild.required<ElementRef<HTMLElement>>('cutRef');\r\n ready = signal(false);\r\n cutType = signal<XUploadCutType>('');\r\n proportion = signal(1);\r\n originalSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n boundaryBox = {\r\n width: 0,\r\n height: 0\r\n };\r\n cutBox = {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0\r\n };\r\n clipRect!: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n\r\n doc = inject(DOCUMENT);\r\n\r\n closePortal = output<void>();\r\n surePortal = output<Blob>();\r\n private unSubject = new Subject<void>();\r\n private renderer = inject(Renderer2);\r\n\r\n ngAfterViewInit() {\r\n this.setCut();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n setCut() {\r\n let width = this.imgRef().nativeElement.clientWidth;\r\n let height = this.imgRef().nativeElement.clientHeight;\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.boundaryRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.boundaryRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgRef().nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgClipRef().nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgClipRef().nativeElement, 'height', `${height}px`);\r\n this.cutBox.width = width;\r\n this.cutBox.height = height;\r\n this.boundaryBox = { width, height };\r\n this.clipRect = {\r\n top: 0,\r\n right: width,\r\n bottom: height,\r\n left: 0\r\n };\r\n this.setOriginalSize();\r\n this.ready.set(true);\r\n\r\n const mouseDown = fromEvent<MouseEvent>(this.cutRef().nativeElement, 'mousedown').pipe(takeUntil(this.unSubject));\r\n\r\n mouseDown.subscribe((downMe: MouseEvent) => {\r\n let x = downMe.pageX;\r\n let y = downMe.pageY;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n const _unSub = new Subject<void>();\r\n let className = (downMe.target as HTMLDivElement).className;\r\n const spt = `${XUploadPortalPrefix}-cut-`;\r\n if (className.includes(spt)) {\r\n this.cutType.set(className.replace(spt, '') as XUploadCutType);\r\n }\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mousemove')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((moveMe: MouseEvent) => {\r\n offsetX = moveMe.pageX - x;\r\n offsetY = moveMe.pageY - y;\r\n x = moveMe.pageX;\r\n y = moveMe.pageY;\r\n this.setCutEle(this.cutType(), offsetX, offsetY);\r\n });\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mouseup')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe(() => {\r\n this.cutType.set('');\r\n _unSub.next();\r\n _unSub.complete();\r\n });\r\n });\r\n }\r\n\r\n setOriginalSize() {\r\n const img = new Image();\r\n img.src = this.url()!;\r\n img.onload = () => {\r\n this.originalSize = { width: img.width, height: img.height };\r\n this.proportion.set(this.boundaryBox.width / this.originalSize.width);\r\n };\r\n }\r\n\r\n setCutEle(position: XUploadCutType, x: number, y: number) {\r\n switch (position) {\r\n case 'top-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height -= y;\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top':\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'right':\r\n this.cutBox.width += x;\r\n break;\r\n case 'bottom-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom':\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height += y;\r\n this.cutBox.x += x;\r\n break;\r\n case 'left':\r\n this.cutBox.width -= x;\r\n this.cutBox.x += x;\r\n break;\r\n case '':\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n }\r\n const boundaryRect = this.boundaryRef().nativeElement.getBoundingClientRect();\r\n\r\n const maxY = boundaryRect.height - this.cutBox.height;\r\n const maxX = boundaryRect.width - this.cutBox.width;\r\n\r\n this.cutBox.x = XClamp(this.cutBox.x, 0, maxX);\r\n this.cutBox.y = XClamp(this.cutBox.y, 0, maxY);\r\n\r\n // const maxWidth = boundaryRect.height - this.cutBox.y;\r\n // const maxHeight = boundaryRect.width - this.cutBox.x;\r\n\r\n // this.cutBox.width = XClamp(this.cutBox.width, 0, maxWidth);\r\n // this.cutBox.height = XClamp(this.cutBox.width, 0, maxHeight);\r\n\r\n this.clipRect = {\r\n top: this.cutBox.y,\r\n right: this.cutBox.width + this.cutBox.x,\r\n bottom: this.cutBox.height + this.cutBox.y,\r\n left: this.cutBox.x\r\n };\r\n this.renderer.setStyle(\r\n this.imgClipRef().nativeElement,\r\n 'clip',\r\n `rect(${this.clipRect.top}px,${this.clipRect.right}px,${this.clipRect.bottom}px,${this.clipRect.left}px)`\r\n );\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'width', `${this.cutBox.width}px`);\r\n this.renderer.setStyle(this.cutRef().nativeElement, 'height', `${this.cutBox.height}px`);\r\n this.renderer.setStyle(\r\n this.cutRef().nativeElement,\r\n 'transform',\r\n `translate3d(${this.cutBox.x}px, ${this.cutBox.y}px, 0)`\r\n );\r\n }\r\n\r\n sure() {\r\n const canvas = this.doc.createElement('canvas');\r\n canvas.width = this.cutBox.width / this.proportion();\r\n canvas.height = this.cutBox.height / this.proportion();\r\n const context = canvas.getContext('2d')!;\r\n const img = new Image();\r\n img.src = this.url()!;\r\n img.crossOrigin = 'anonymous';\r\n img.onload = () => {\r\n context.drawImage(img, -this.cutBox.x / this.proportion(), -this.cutBox.y / this.proportion());\r\n canvas.toBlob((blob) => {\r\n this.surePortal.emit(blob as Blob);\r\n this.closePortal.emit();\r\n });\r\n };\r\n }\r\n}\r\n","<div class=\"x-upload-portal {{ cutType() }}\" [class.x-upload-portal-ready]=\"ready()\">\r\n <div class=\"x-upload-portal-tools\">\r\n <div class=\"x-upload-portal-title\">\r\n <x-icon type=\"fto-image\"></x-icon>\r\n <span>{{ name() }}</span>\r\n </div>\r\n <x-icon class=\"x-upload-portal-close\" type=\"fto-x\" (click)=\"closePortal.emit()\"></x-icon>\r\n </div>\r\n <div class=\"x-upload-portal-img\">\r\n <img #imgRef class=\"x-upload-portal-full-img\" [src]=\"url()\" />\r\n <div #boundaryRef class=\"x-upload-portal-boundary\">\r\n <img #imgClipRef class=\"x-upload-portal-clip-img\" [src]=\"url()\" />\r\n <div #cutRef class=\"x-upload-portal-cut\">\r\n <div class=\"x-upload-portal-cut-top-start\"></div>\r\n <div class=\"x-upload-portal-cut-top\"></div>\r\n <div class=\"x-upload-portal-cut-top-end\"></div>\r\n <div class=\"x-upload-portal-cut-left\"></div>\r\n <div class=\"x-upload-portal-cut-right\"></div>\r\n <div class=\"x-upload-portal-cut-bottom-start\"></div>\r\n <div class=\"x-upload-portal-cut-bottom\"></div>\r\n <div class=\"x-upload-portal-cut-bottom-end\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"x-upload-portal-bottom-tools\">\r\n <x-icon class=\"x-upload-portal-close\" type=\"fto-check\" (click)=\"sure()\"></x-icon>\r\n </div>\r\n</div>\r\n","import { input, ChangeDetectionStrategy, Component, ViewEncapsulation, computed } from '@angular/core';\r\nimport { XTemplate } from '@ng-nest/ui/core';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\n\r\n@Component({\r\n selector: 'x-drag-overlay',\r\n templateUrl: './drag-overlay.component.html',\r\n styleUrl: './drag-overlay.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [XOutletDirective, XIconComponent]\r\n})\r\nexport class XDragOverlayComponent {\r\n icon = input<XTemplate>();\r\n title = input<XTemplate>();\r\n description = input<XTemplate>();\r\n\r\n iconString = computed(() => this.icon() as string);\r\n}\r\n","<div class=\"x-drag-overlay\">\r\n @if (icon()) {\r\n <div class=\"x-drag-overlay-icon\">\r\n <ng-container *xOutlet=\"icon()\">\r\n <x-icon [type]=\"iconString()\"></x-icon>\r\n </ng-container>\r\n </div>\r\n }\r\n @if (title()) {\r\n <div class=\"x-drag-overlay-title\">\r\n <ng-container *xOutlet=\"title()\">\r\n {{ title() }}\r\n </ng-container>\r\n </div>\r\n }\r\n @if (description()) {\r\n <div class=\"x-drag-overlay-description\">\r\n <ng-container *xOutlet=\"description()\">\r\n {{ description() }}\r\n </ng-container>\r\n </div>\r\n }\r\n</div>\r\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentRef, DOCUMENT, inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { XDragOverlayComponent } from './drag-overlay.component';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { XComputedStyle, XTemplate } from '@ng-nest/ui/core';\r\nimport { ViewContainerRef } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class XDragOverlayService {\r\n overlay = inject(Overlay);\r\n document = inject(DOCUMENT);\r\n overlayRef: OverlayRef | null = null;\r\n componentRef: ComponentRef<XDragOverlayComponent> | null = null;\r\n containerPosition: string = '';\r\n private renderer!: Renderer2;\r\n private factory = inject(RendererFactory2);\r\n\r\n constructor() {\r\n this.renderer = this.factory.createRenderer(null, null);\r\n }\r\n\r\n createOverlay(\r\n container: HTMLElement,\r\n viewContainerRef: ViewContainerRef,\r\n params: { icon: XTemplate; title: XTemplate; description: XTemplate }\r\n ): void {\r\n this.removeOverlay(container);\r\n\r\n const isBodyOrWindow = container === this.document.body || container === this.document.documentElement;\r\n\r\n this.containerPosition = container.style.position;\r\n this.renderer.setStyle(container, 'position', 'relative');\r\n\r\n const overlayConfig = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n hasBackdrop: false,\r\n scrollStrategy: this.overlay.scrollStrategies.block()\r\n });\r\n\r\n this.overlayRef = this.overlay.create(overlayConfig);\r\n\r\n if (this.overlayRef && this.overlayRef.overlayElement) {\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'width', container.offsetWidth + 'px');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'height', container.offsetHeight + 'px');\r\n this.renderer.setStyle(\r\n this.overlayRef.overlayElement,\r\n 'border-radius',\r\n XComputedStyle(container, 'border-radius')\r\n );\r\n\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'position', 'absolute');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'pointer-events', 'none');\r\n this.renderer.setStyle(this.overlayRef.overlayElement, 'z-index', 'none');\r\n }\r\n\r\n const portal = new ComponentPortal(XDragOverlayComponent, viewContainerRef);\r\n this.componentRef = this.overlayRef.attach(portal);\r\n this.componentRef.setInput('icon', params.icon);\r\n this.componentRef.setInput('title', params.title);\r\n this.componentRef.setInput('description', params.description);\r\n\r\n if (this.overlayRef && this.overlayRef.overlayElement) {\r\n if (!isBodyOrWindow) {\r\n container.appendChild(this.overlayRef.overlayElement);\r\n }\r\n }\r\n }\r\n\r\n removeOverlay(container: HTMLElement): void {\r\n if (this.overlayRef) {\r\n const resizeObserver = (this.overlayRef as any).resizeObserver;\r\n if (resizeObserver) {\r\n resizeObserver.disconnect();\r\n }\r\n if (this.overlayRef.overlayElement && this.overlayRef.overlayElement.parentNode) {\r\n this.overlayRef.overlayElement.parentNode.removeChild(this.overlayRef.overlayElement);\r\n }\r\n this.renderer.setStyle(container, 'position', this.containerPosition);\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.componentRef = null;\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpEventType, HttpRequest, HttpEvent, HttpHeaders } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n signal,\r\n computed,\r\n effect,\r\n untracked,\r\n HostBinding,\r\n Renderer2\r\n} from '@angular/core';\r\nimport { XUploadPrefix, XUploadNode, XUploadProperty, XUploadPortalPrefix } from './upload.property';\r\nimport { XIsArray, XIsEmpty, XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { XI18nService, XI18nUpload, zh_CN } from '@ng-nest/ui/i18n';\r\nimport { XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { XImageComponent, XImageGroupComponent } from '@ng-nest/ui/image';\r\nimport { XProgressComponent } from '@ng-nest/ui/progress';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, Subscription } from 'rxjs';\r\nimport { XDragOverlayService } from './drag-overlay.service';\r\nimport { XDragOverlayComponent } from './drag-overlay.component';\r\n\r\n@Component({\r\n selector: `${XUploadPrefix}`,\r\n imports: [\r\n NgTemplateOutlet,\r\n XIconComponent,\r\n XOutletDirective,\r\n XButtonComponent,\r\n XImageGroupComponent,\r\n XImageComponent,\r\n XProgressComponent,\r\n XDragOverlayComponent\r\n ],\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XUploadComponent), XDragOverlayService]\r\n})\r\nexport class XUploadComponent extends XUploadProperty {\r\n private http = inject(HttpClient, { optional: true });\r\n private portalService = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private i18n = inject(XI18nService);\r\n private renderer = inject(Renderer2);\r\n private dragOverlayService = inject(XDragOverlayService);\r\n private dropSubscription?: Subscription;\r\n private dragCounter = 0;\r\n elementRef = inject(ElementRef);\r\n\r\n @HostBinding('class.x-upload-show-drop') get getShowDrop() {\r\n return this.showDrop();\r\n }\r\n\r\n file = viewChild.required<ElementRef<HTMLInputElement>>('file');\r\n files = signal<XUploadNode[]>([]);\r\n showUpload = signal(false);\r\n uploadNodes = signal<XUploadNode[]>([]);\r\n locale = toSignal(this.i18n.localeChange.pipe(map((x) => x.upload as XI18nUpload)), { initialValue: zh_CN.upload });\r\n portal!: XPortalOverlayRef<XUploadPortalComponent>;\r\n\r\n getText = computed(() => this.text() || this.locale().uploadText);\r\n isTemplateText = computed(() => XIsTemplateRef(this.getText()));\r\n\r\n override writeValue(value: XUploadNode[]) {\r\n this.value.set(value);\r\n this.setFiles();\r\n }\r\n\r\n acceptSignal = computed(() => {\r\n if (this.type() === 'img' && XIsEmpty(this.accept())) return 'image/*';\r\n return this.accept();\r\n });\r\n\r\n constructor() {\r\n super();\r\n if (!this.http) {\r\n throw new Error(\r\n `${XUploadPrefix}: Not found 'HttpClient', You can import 'HttpClientModule' in your root module.`\r\n );\r\n }\r\n\r\n effect(() => {\r\n const container = this.dropContainer();\r\n untracked(() => {\r\n this.setupDropContainer(container);\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showDrop() && this.dropContainer()) {\r\n this.setupDropContainer(this.dropContainer());\r\n }\r\n }\r\n\r\n ngOnDestory() {\r\n if (this.dropSubscription) {\r\n this.dropSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n private setupDropContainer(container: ElementRef | HTMLElement | undefined) {\r\n if (this.dropSubscription) {\r\n this.dropSubscription.unsubscribe();\r\n }\r\n\r\n if (!container) return;\r\n\r\n const element = container instanceof ElementRef ? container.nativeElement : container;\r\n\r\n const dragEnter$ = fromEvent<DragEvent>(element, 'dragenter');\r\n const dragOver$ = fromEvent<DragEvent>(element, 'dragover');\r\n const dragLeave$ = fromEvent<DragEvent>(element, 'dragleave');\r\n const drop$ = fromEvent<DragEvent>(element, 'drop');\r\n\r\n this.dropSubscription = new Subscription();\r\n\r\n this.dropSubscription.add(\r\n dragEnter$.subscribe((event) => {\r\n event.preventDefault();\r\n this.dragCounter++;\r\n if (this.dragCounter === 1) {\r\n this.addDragOverStyle(element);\r\n }\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n dragOver$.subscribe((event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n dragLeave$.subscribe((event) => {\r\n event.preventDefault();\r\n this.dragCounter--;\r\n if (this.dragCounter === 0) {\r\n this.removeDragOverStyle(element);\r\n }\r\n })\r\n );\r\n\r\n this.dropSubscription.add(\r\n drop$.subscribe((event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.dragCounter = 0;\r\n this.removeDragOverStyle(element);\r\n\r\n const files = event.dataTransfer?.files;\r\n if (files && files.length > 0) {\r\n this.handleFiles(files);\r\n }\r\n })\r\n );\r\n }\r\n\r\n private addDragOverStyle(element: HTMLElement) {\r\n if (this.showDrop()) {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'x-upload-drag-over');\r\n } else {\r\n const icon = this.dropIcon()!;\r\n const title = this.dropTitle()!;\r\n const description = this.dropDescription()!;\r\n this.dragOverlayService.createOverlay(element, this.viewContainerRef, { icon, title, description });\r\n }\r\n }\r\n\r\n private removeDragOverStyle(element: HTMLElement) {\r\n if (this.showDrop()) {\r\n this.renderer.removeClass(this.elementRef.nativeElement, 'x-upload-drag-over');\r\n } else {\r\n this.dragOverlayService.removeOverlay(element);\r\n }\r\n }\r\n\r\n setFiles() {\r\n if (!Array.isArray(this.value())) return;\r\n this.files.set(\r\n this.value().map((x: XUploadNode) => {\r\n if (!x.state) x.state = 'success';\r\n return x;\r\n })\r\n );\r\n }\r\n\r\n change(event: Event) {\r\n let input = event.target as HTMLInputElement;\r\n if (typeof input === 'undefined' || input.files?.length === 0) return;\r\n this.handleFiles(input.files!);\r\n input.value = '';\r\n }\r\n\r\n handleFiles(fileList: FileList) {\r\n let files: XUploadNode[] = [];\r\n let max = this.maxLimit() > -1 ? this.maxLimit() : fileList.length;\r\n for (let i = 0; i < max; i++) {\r\n let file: XUploadNode = fileList.item(i) as XUploadNode;\r\n file.state = 'ready';\r\n files = [...files, file];\r\n }\r\n if (files.length > 0) this.showUpload.set(true);\r\n if (this.multipleModel() === 'cover') {\r\n this.files.set(files);\r\n } else if (this.multipleModel() === 'add') {\r\n this.files.update((x) => [...x, ...files]);\r\n }\r\n this.value.set(this.files());\r\n this.onChange && this.onChange(this.value());\r\n this.onUploading();\r\n }\r\n\r\n remove(file: XUploadNode, index: number) {\r\n this.files.update((x) => {\r\n x.splice(index, 1);\r\n return [...x];\r\n });\r\n if (this.files().length === 0) this.file().nativeElement.value = '';\r\n this.showUpload.set(this.files().find((x) => x.state === 'ready') != null);\r\n const vindex = this.value().indexOf(file);\r\n if (vindex > -1) {\r\n this.value.update((x) => {\r\n x.splice(vindex, 1);\r\n return [...x];\r\n });\r\n this.onChange && this.onChange(this.value());\r\n }\r\n this.removeClick.emit({ file: file, index: index });\r\n }\r\n\r\n uploadClick() {\r\n if (this.disabledComputed()) return;\r\n this.file().nativeElement.click();\r\n }\r\n\r\n onUploading() {\r\n if (!this.action()) return;\r\n let readyFiles = this.files().filter((x) => x.state === 'ready');\r\n readyFiles.forEach((x) => {\r\n this.uploadFile(x);\r\n });\r\n }\r\n\r\n uploadFile(file: XUploadNode, index = -1) {\r\n let formData = new FormData();\r\n formData.append('file', file);\r\n const req = new HttpRequest('POST', this.action()!, formData, {\r\n reportProgress: true,\r\n responseType: 'arraybuffer',\r\n withCredentials: false,\r\n headers: new HttpHeaders(this.headers())\r\n });\r\n this.http\r\n ?.request(req)\r\n .pipe(\r\n map((event) =>\r\n this.getEventMessage(event, file, (body: BlobPart) => {\r\n let blob = new Blob([body]);\r\n let reader = new FileReader();\r\n reader.readAsText(blob, 'utf-8');\r\n reader.onload = () => {\r\n let body = [];\r\n try {\r\n body = JSON.parse(reader.result as string);\r\n if (XIsArray(body) && body.length > 0) {\r\n file.url = body[0] as string;\r\n }\r\n file.body = body;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n if (index !== -1) {\r\n this.files.update((x) => {\r\n x[index] = file;\r\n return [...x];\r\n });\r\n }\r\n this.uploadSuccess.emit(file);\r\n };\r\n })\r\n )\r\n )\r\n .subscribe({\r\n complete: () => {\r\n this.showUpload.set(this.files().find((y) => y.state === 'ready') != null);\r\n },\r\n error: () => {\r\n file.state = 'error';\r\n this.uploadError.emit(file);\r\n }\r\n });\r\n }\r\n\r\n getEventMessage(event: HttpEvent<any>, file: XUploadNode, successFunc: Function) {\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n file.state = 'ready';\r\n this.uploadReady.emit(file);\r\n return this.locale().beginUploadText;\r\n case HttpEventType.UploadProgress:\r\n file.state = 'uploading';\r\n if (event.total) file.percent = Math.round((100 * event.loaded) / event.total);\r\n this.uploading.emit(file);\r\n return this.locale().uploadingText;\r\n case HttpEventType.Response:\r\n file.state = 'success';\r\n successFunc(event.body);\r\n return this.locale().uploadCompleted;\r\n }\r\n return;\r\n }\r\n\r\n onImgCut(file: XUploadNode, index: number) {\r\n this.portal = this.portalService.attach({\r\n content: XUploadPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n panelClass: [XUploadPortalPrefix],\r\n hasBackdrop: true,\r\n positionStrategy: this.portalService.setPlace('center')\r\n }\r\n });\r\n this.setInstance(file, index);\r\n }\r\n\r\n setInstance(file: XUploadNode, index: number) {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n componentRef.setInput('file', file);\r\n const { closePortal, surePortal } = componentRef.instance;\r\n closePortal.subscribe(() => this.closePortal());\r\n surePortal.subscribe((blob) => {\r\n const fl = new File([blob], file.name, { type: blob.type }) as XUploadNode;\r\n fl.state = 'ready';\r\n this.uploadFile(fl, index);\r\n });\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n imgError(_event: ErrorEvent, file: XUploadNode) {\r\n file.state = 'error';\r\n }\r\n imgLoad(file: XUploadNode) {\r\n file.state = 'success';\r\n }\r\n}\r\n","<div #upload class=\"x-upload x-upload-{{ type() }}\" [class.x-disabled]=\"disabledComputed()\">\r\n <input\r\n class=\"x-upload-input\"\r\n type=\"file\"\r\n #file\r\n (change)=\"change($event)\"\r\n [attr.accept]=\"acceptSignal()\"\r\n [multiple]=\"multiple()\"\r\n style=\"display: none\"\r\n />\r\n\r\n @switch (type()) {\r\n @case ('list') {\r\n <ng-container *ngTemplateOutlet=\"uploadBtnTpl\"></ng-container>\r\n <ng-container *xOutlet=\"filesTpl(); context: { $files: files() }\">\r\n @if (files() && files().length > 0) {\r\n <ul class=\"x-upload-files\">\r\n @for (file of files(); track file; let i = $index) {\r\n <li [class.x-upload-disabled]=\"!download()\">\r\n @if (download()) {\r\n <a [href]=\"file.url\" target=\"_blank\" [title]=\"file.name\">\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n } @else {\r\n <a>\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n }\r\n\r\n @switch (file.state) {\r\n @case ('ready') {\r\n <x-icon class=\"x-upload-state\" type=\"fto-clock\"></x-icon>\r\n }\r\n @case ('uploading') {\r\n <span class=\"x-upload-percent\">{{ file.percent }}%</span>\r\n }\r\n @case ('success') {\r\n <x-icon class=\"x-upload-state success\" type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon class=\"x-upload-state error\" type=\"fto-info\"></x-icon>\r\n }\r\n }\r\n @if (file.state !== 'uploading') {\r\n <x-button icon=\"fto-x\" (click)=\"remove(file, i)\" closable onlyIcon flat size=\"mini\"></x-button>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </ng-container>\r\n }\r\n @case ('img') {\r\n <x-image-group>\r\n @for (file of files(); track file; let i = $index) {\r\n <x-image\r\n [src]=\"file.url\"\r\n (load)=\"imgLoad(file)\"\r\n (error)=\"imgError($event, file)\"\r\n class=\"{{ file.state }}\"\r\n [previewTpl]=\"previewTpl\"\r\n [fallback]=\"imgFallback()\"\r\n >\r\n </x-image>\r\n <ng-template #previewTpl let-image=\"$image\">\r\n @if (file.state == 'uploading') {\r\n <div class=\"x-upload-uploading\">\r\n <x-progress [percent]=\"file.percent!\" info=\"false\"></x-progress>\r\n </div>\r\n }\r\n <div class=\"x-image-overlay\">\r\n @switch (file.state) {\r\n @case ('ready') {\r\n <x-icon class=\"x-upload-state\" type=\"fto-clock\"></x-icon>\r\n }\r\n @case ('success') {\r\n <x-icon type=\"fto-eye\" (click)=\"image.onPreview()\"></x-icon>\r\n }\r\n }\r\n @if (imgCut() && file.state === 'success') {\r\n <x-icon type=\"fto-crop\" (click)=\"onImgCut(file, i)\"></x-icon>\r\n }\r\n @if (file.state !== 'uploading') {\r\n <x-icon type=\"fto-trash-2\" (click)=\"remove(file, i)\"></x-icon>\r\n }\r\n </div>\r\n </ng-template>\r\n }\r\n <ng-container *ngTemplateOutlet=\"uploadBtnTpl\"></ng-container>\r\n </x-image-group>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #uploadBtnTpl>\r\n @if (showDrop()) {\r\n <x-drag-overlay\r\n class=\"x-upload-drag-overlay\"\r\n (click)=\"uploadClick()\"\r\n [icon]=\"dropIcon()\"\r\n [title]=\"dropTitle()\"\r\n [description]=\"dropDescription()\"\r\n ></x-drag-overlay>\r\n } @else {\r\n <div class=\"x-upload-buttons\" [class.x-upload-buttons-template]=\"isTemplateText()\" (click)=\"uploadClick()\">\r\n <ng-container *xOutlet=\"getText()\">\r\n <x-button icon=\"fto-upload\" class=\"x-upload-text\" [disabled]=\"disabledComputed()\" type=\"primary\">{{\r\n getText()\r\n }}</x-button>\r\n </ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XUploadComponent } from './upload.component';\r\n\r\n@NgModule({\r\n exports: [XUploadComponent],\r\n imports: [XUploadComponent]\r\n})\r\nexport class XUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT"],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
25
25
|
* ```
|
|
26
26
|
*
|
|
27
27
|
*/
|
|
28
|
-
this.content = input('',
|
|
28
|
+
this.content = input('', /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
29
30
|
/**
|
|
30
31
|
* @zh_CN 水印宽度
|
|
31
32
|
* @en_US Watermark width
|
|
@@ -36,7 +37,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
36
37
|
* ```
|
|
37
38
|
*
|
|
38
39
|
*/
|
|
39
|
-
this.width = input(this.config?.width ?? 120, { ...(ngDevMode ? { debugName: "width" } : {}), transform: XToNumber });
|
|
40
|
+
this.width = input(this.config?.width ?? 120, { ...(ngDevMode ? { debugName: "width" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
40
41
|
/**
|
|
41
42
|
* @zh_CN 水印高度
|
|
42
43
|
* @en_US Watermark height
|
|
@@ -47,7 +48,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
47
48
|
* ```
|
|
48
49
|
*
|
|
49
50
|
*/
|
|
50
|
-
this.height = input(this.config?.height ?? 60, { ...(ngDevMode ? { debugName: "height" } : {}), transform: XToNumber });
|
|
51
|
+
this.height = input(this.config?.height ?? 60, { ...(ngDevMode ? { debugName: "height" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
51
52
|
/**
|
|
52
53
|
* @zh_CN 旋转角度
|
|
53
54
|
* @en_US Rotation angle
|
|
@@ -59,7 +60,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
59
60
|
* ```
|
|
60
61
|
*
|
|
61
62
|
*/
|
|
62
|
-
this.rotate = input(this.config?.rotate ?? -22, { ...(ngDevMode ? { debugName: "rotate" } : {}), transform: XToNumber });
|
|
63
|
+
this.rotate = input(this.config?.rotate ?? -22, { ...(ngDevMode ? { debugName: "rotate" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
63
64
|
/**
|
|
64
65
|
* @zh_CN 字体大小
|
|
65
66
|
* @en_US Font size
|
|
@@ -70,7 +71,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
70
71
|
* ```
|
|
71
72
|
*
|
|
72
73
|
*/
|
|
73
|
-
this.fontSize = input(this.config?.fontSize ?? 14, { ...(ngDevMode ? { debugName: "fontSize" } : {}), transform: XToNumber });
|
|
74
|
+
this.fontSize = input(this.config?.fontSize ?? 14, { ...(ngDevMode ? { debugName: "fontSize" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
74
75
|
/**
|
|
75
76
|
* @zh_CN 字体
|
|
76
77
|
* @en_US Font family
|
|
@@ -81,7 +82,8 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
81
82
|
* ```
|
|
82
83
|
*
|
|
83
84
|
*/
|
|
84
|
-
this.fontFamily = input(this.config?.fontFamily ?? 'Varela Round',
|
|
85
|
+
this.fontFamily = input(this.config?.fontFamily ?? 'Varela Round', /* @ts-ignore */
|
|
86
|
+
...(ngDevMode ? [{ debugName: "fontFamily" }] : /* istanbul ignore next */ []));
|
|
85
87
|
/**
|
|
86
88
|
* @zh_CN 字体颜色
|
|
87
89
|
* @en_US Font color
|
|
@@ -92,7 +94,8 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
92
94
|
* ```
|
|
93
95
|
*
|
|
94
96
|
*/
|
|
95
|
-
this.color = input(this.config?.color ?? 'rgba(0, 0, 0, 0.12)',
|
|
97
|
+
this.color = input(this.config?.color ?? 'rgba(0, 0, 0, 0.12)', /* @ts-ignore */
|
|
98
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
96
99
|
/**
|
|
97
100
|
* @zh_CN 层级
|
|
98
101
|
* @en_US Z-index
|
|
@@ -103,7 +106,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
103
106
|
* ```
|
|
104
107
|
*
|
|
105
108
|
*/
|
|
106
|
-
this.zIndex = input(this.config?.zIndex ?? 9999, { ...(ngDevMode ? { debugName: "zIndex" } : {}), transform: XToNumber });
|
|
109
|
+
this.zIndex = input(this.config?.zIndex ?? 9999, { ...(ngDevMode ? { debugName: "zIndex" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
107
110
|
/**
|
|
108
111
|
* @zh_CN 透明度
|
|
109
112
|
* @en_US Opacity
|
|
@@ -115,7 +118,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
115
118
|
* ```
|
|
116
119
|
*
|
|
117
120
|
*/
|
|
118
|
-
this.alpha = input(this.config?.alpha ?? 1, { ...(ngDevMode ? { debugName: "alpha" } : {}), transform: XToNumber });
|
|
121
|
+
this.alpha = input(this.config?.alpha ?? 1, { ...(ngDevMode ? { debugName: "alpha" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
119
122
|
/**
|
|
120
123
|
* @zh_CN 水平间距
|
|
121
124
|
* @en_US Horizontal gap
|
|
@@ -126,7 +129,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
126
129
|
* ```
|
|
127
130
|
*
|
|
128
131
|
*/
|
|
129
|
-
this.gapX = input(this.config?.gapX ?? 100, { ...(ngDevMode ? { debugName: "gapX" } : {}), transform: XToNumber });
|
|
132
|
+
this.gapX = input(this.config?.gapX ?? 100, { ...(ngDevMode ? { debugName: "gapX" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
130
133
|
/**
|
|
131
134
|
* @zh_CN 垂直间距
|
|
132
135
|
* @en_US Vertical gap
|
|
@@ -137,7 +140,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
137
140
|
* ```
|
|
138
141
|
*
|
|
139
142
|
*/
|
|
140
|
-
this.gapY = input(this.config?.gapY ?? 100, { ...(ngDevMode ? { debugName: "gapY" } : {}), transform: XToNumber });
|
|
143
|
+
this.gapY = input(this.config?.gapY ?? 100, { ...(ngDevMode ? { debugName: "gapY" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
141
144
|
/**
|
|
142
145
|
* @zh_CN 水平偏移
|
|
143
146
|
* @en_US Horizontal offset
|
|
@@ -148,7 +151,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
148
151
|
* ```
|
|
149
152
|
*
|
|
150
153
|
*/
|
|
151
|
-
this.offsetLeft = input(this.config?.offsetLeft ?? 0, { ...(ngDevMode ? { debugName: "offsetLeft" } : {}), transform: XToNumber });
|
|
154
|
+
this.offsetLeft = input(this.config?.offsetLeft ?? 0, { ...(ngDevMode ? { debugName: "offsetLeft" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
152
155
|
/**
|
|
153
156
|
* @zh_CN 垂直偏移
|
|
154
157
|
* @en_US Vertical offset
|
|
@@ -159,7 +162,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
159
162
|
* ```
|
|
160
163
|
*
|
|
161
164
|
*/
|
|
162
|
-
this.offsetTop = input(this.config?.offsetTop ?? 0, { ...(ngDevMode ? { debugName: "offsetTop" } : {}), transform: XToNumber });
|
|
165
|
+
this.offsetTop = input(this.config?.offsetTop ?? 0, { ...(ngDevMode ? { debugName: "offsetTop" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
163
166
|
/**
|
|
164
167
|
* @zh_CN 是否交错显示
|
|
165
168
|
* @en_US Whether to stagger display
|
|
@@ -171,7 +174,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
171
174
|
* ```
|
|
172
175
|
*
|
|
173
176
|
*/
|
|
174
|
-
this.striped = input(this.config?.striped ?? false, { ...(ngDevMode ? { debugName: "striped" } : {}), transform: XToBoolean });
|
|
177
|
+
this.striped = input(this.config?.striped ?? false, { ...(ngDevMode ? { debugName: "striped" } : /* istanbul ignore next */ {}), transform: XToBoolean });
|
|
175
178
|
/**
|
|
176
179
|
* @zh_CN 是否禁用
|
|
177
180
|
* @en_US Whether to disable
|
|
@@ -183,7 +186,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
183
186
|
* ```
|
|
184
187
|
*
|
|
185
188
|
*/
|
|
186
|
-
this.disabled = input(this.config?.disabled ?? false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: XToBoolean });
|
|
189
|
+
this.disabled = input(this.config?.disabled ?? false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: XToBoolean });
|
|
187
190
|
/**
|
|
188
191
|
* @zh_CN 图片/图标 URL
|
|
189
192
|
* @en_US Image/icon URL
|
|
@@ -194,7 +197,8 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
194
197
|
* ```
|
|
195
198
|
*
|
|
196
199
|
*/
|
|
197
|
-
this.imageSrc = input('',
|
|
200
|
+
this.imageSrc = input('', /* @ts-ignore */
|
|
201
|
+
...(ngDevMode ? [{ debugName: "imageSrc" }] : /* istanbul ignore next */ []));
|
|
198
202
|
/**
|
|
199
203
|
* @zh_CN 图片宽度
|
|
200
204
|
* @en_US Image width
|
|
@@ -205,7 +209,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
205
209
|
* ```
|
|
206
210
|
*
|
|
207
211
|
*/
|
|
208
|
-
this.imageWidth = input(0, { ...(ngDevMode ? { debugName: "imageWidth" } : {}), transform: XToNumber });
|
|
212
|
+
this.imageWidth = input(0, { ...(ngDevMode ? { debugName: "imageWidth" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
209
213
|
/**
|
|
210
214
|
* @zh_CN 图片高度
|
|
211
215
|
* @en_US Image height
|
|
@@ -216,7 +220,7 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
216
220
|
* ```
|
|
217
221
|
*
|
|
218
222
|
*/
|
|
219
|
-
this.imageHeight = input(0, { ...(ngDevMode ? { debugName: "imageHeight" } : {}), transform: XToNumber });
|
|
223
|
+
this.imageHeight = input(0, { ...(ngDevMode ? { debugName: "imageHeight" } : /* istanbul ignore next */ {}), transform: XToNumber });
|
|
220
224
|
/**
|
|
221
225
|
* @zh_CN 图片相对文本的位置
|
|
222
226
|
* @en_US Image position relative to text
|
|
@@ -229,12 +233,13 @@ class XWatermarkProperty extends XPropertyFunction(X_WATERMARK_CONFIG_NAME) {
|
|
|
229
233
|
* ```
|
|
230
234
|
*
|
|
231
235
|
*/
|
|
232
|
-
this.imagePosition = input('center',
|
|
236
|
+
this.imagePosition = input('center', /* @ts-ignore */
|
|
237
|
+
...(ngDevMode ? [{ debugName: "imagePosition" }] : /* istanbul ignore next */ []));
|
|
233
238
|
}
|
|
234
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
235
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
239
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
240
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: XWatermarkProperty, isStandalone: true, selector: "x-watermark-property", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, rotate: { classPropertyName: "rotate", publicName: "rotate", isSignal: true, isRequired: false, transformFunction: null }, fontSize: { classPropertyName: "fontSize", publicName: "fontSize", isSignal: true, isRequired: false, transformFunction: null }, fontFamily: { classPropertyName: "fontFamily", publicName: "fontFamily", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, alpha: { classPropertyName: "alpha", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null }, gapX: { classPropertyName: "gapX", publicName: "gapX", isSignal: true, isRequired: false, transformFunction: null }, gapY: { classPropertyName: "gapY", publicName: "gapY", isSignal: true, isRequired: false, transformFunction: null }, offsetLeft: { classPropertyName: "offsetLeft", publicName: "offsetLeft", isSignal: true, isRequired: false, transformFunction: null }, offsetTop: { classPropertyName: "offsetTop", publicName: "offsetTop", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, imageSrc: { classPropertyName: "imageSrc", publicName: "imageSrc", isSignal: true, isRequired: false, transformFunction: null }, imageWidth: { classPropertyName: "imageWidth", publicName: "imageWidth", isSignal: true, isRequired: false, transformFunction: null }, imageHeight: { classPropertyName: "imageHeight", publicName: "imageHeight", isSignal: true, isRequired: false, transformFunction: null }, imagePosition: { classPropertyName: "imagePosition", publicName: "imagePosition", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
|
236
241
|
}
|
|
237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkProperty, decorators: [{
|
|
238
243
|
type: Component,
|
|
239
244
|
args: [{ selector: `${XWatermarkPrefix}-property`, template: '' }]
|
|
240
245
|
}], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], rotate: [{ type: i0.Input, args: [{ isSignal: true, alias: "rotate", required: false }] }], fontSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "fontSize", required: false }] }], fontFamily: [{ type: i0.Input, args: [{ isSignal: true, alias: "fontFamily", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], alpha: [{ type: i0.Input, args: [{ isSignal: true, alias: "alpha", required: false }] }], gapX: [{ type: i0.Input, args: [{ isSignal: true, alias: "gapX", required: false }] }], gapY: [{ type: i0.Input, args: [{ isSignal: true, alias: "gapY", required: false }] }], offsetLeft: [{ type: i0.Input, args: [{ isSignal: true, alias: "offsetLeft", required: false }] }], offsetTop: [{ type: i0.Input, args: [{ isSignal: true, alias: "offsetTop", required: false }] }], striped: [{ type: i0.Input, args: [{ isSignal: true, alias: "striped", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], imageSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageSrc", required: false }] }], imageWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageWidth", required: false }] }], imageHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageHeight", required: false }] }], imagePosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "imagePosition", required: false }] }] } });
|
|
@@ -242,10 +247,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
242
247
|
class XWatermarkComponent extends XWatermarkProperty {
|
|
243
248
|
constructor() {
|
|
244
249
|
super();
|
|
245
|
-
this.backgroundImage = signal('',
|
|
250
|
+
this.backgroundImage = signal('', /* @ts-ignore */
|
|
251
|
+
...(ngDevMode ? [{ debugName: "backgroundImage" }] : /* istanbul ignore next */ []));
|
|
246
252
|
this.font = computed(() => {
|
|
247
253
|
return `${this.fontSize()}px ${this.fontFamily()}`;
|
|
248
|
-
},
|
|
254
|
+
}, /* @ts-ignore */
|
|
255
|
+
...(ngDevMode ? [{ debugName: "font" }] : /* istanbul ignore next */ []));
|
|
249
256
|
this.textWidth = computed(() => {
|
|
250
257
|
const canvas = document.createElement('canvas');
|
|
251
258
|
const ctx = canvas.getContext('2d');
|
|
@@ -254,15 +261,18 @@ class XWatermarkComponent extends XWatermarkProperty {
|
|
|
254
261
|
return ctx.measureText(this.content()).width;
|
|
255
262
|
}
|
|
256
263
|
return this.width();
|
|
257
|
-
},
|
|
264
|
+
}, /* @ts-ignore */
|
|
265
|
+
...(ngDevMode ? [{ debugName: "textWidth" }] : /* istanbul ignore next */ []));
|
|
258
266
|
this.watermarkWidth = computed(() => {
|
|
259
267
|
const imgW = this.imageSrc() && this.imageWidth() ? this.imageWidth() : this.textWidth();
|
|
260
268
|
return Math.max(imgW, this.textWidth()) + this.gapX();
|
|
261
|
-
},
|
|
269
|
+
}, /* @ts-ignore */
|
|
270
|
+
...(ngDevMode ? [{ debugName: "watermarkWidth" }] : /* istanbul ignore next */ []));
|
|
262
271
|
this.watermarkHeight = computed(() => {
|
|
263
272
|
const imgH = this.imageSrc() && this.imageHeight() ? this.imageHeight() : this.height();
|
|
264
273
|
return Math.max(imgH, this.height()) + this.gapY();
|
|
265
|
-
},
|
|
274
|
+
}, /* @ts-ignore */
|
|
275
|
+
...(ngDevMode ? [{ debugName: "watermarkHeight" }] : /* istanbul ignore next */ []));
|
|
266
276
|
}
|
|
267
277
|
ngAfterViewInit() {
|
|
268
278
|
this.createWatermark();
|
|
@@ -349,20 +359,20 @@ class XWatermarkComponent extends XWatermarkProperty {
|
|
|
349
359
|
const dataUrl = canvas.toDataURL();
|
|
350
360
|
this.backgroundImage.set(dataUrl);
|
|
351
361
|
}
|
|
352
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
353
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
362
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
363
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: XWatermarkComponent, isStandalone: true, selector: "x-watermark", usesInheritance: true, ngImport: i0, template: "<div\n class=\"x-watermark\"\n [class.x-watermark-disabled]=\"disabled()\"\n [style.z-index]=\"zIndex()\"\n [style.background-image]=\"backgroundImage() ? 'url(' + backgroundImage() + ')' : 'none'\"\n [style.background-repeat]=\"'repeat'\"\n [style.background-size]=\"watermarkWidth() + 'px ' + watermarkHeight() + 'px'\"\n [style.background-position]=\"offsetLeft() + 'px ' + offsetTop() + 'px'\"\n>\n <ng-content></ng-content>\n</div>", styles: [".x-watermark{margin:0;padding:0}.x-watermark{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;position:relative}.x-watermark-disabled{pointer-events:none;-webkit-user-select:none;user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
354
364
|
}
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkComponent, decorators: [{
|
|
356
366
|
type: Component,
|
|
357
367
|
args: [{ selector: XWatermarkPrefix, imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"x-watermark\"\n [class.x-watermark-disabled]=\"disabled()\"\n [style.z-index]=\"zIndex()\"\n [style.background-image]=\"backgroundImage() ? 'url(' + backgroundImage() + ')' : 'none'\"\n [style.background-repeat]=\"'repeat'\"\n [style.background-size]=\"watermarkWidth() + 'px ' + watermarkHeight() + 'px'\"\n [style.background-position]=\"offsetLeft() + 'px ' + offsetTop() + 'px'\"\n>\n <ng-content></ng-content>\n</div>", styles: [".x-watermark{margin:0;padding:0}.x-watermark{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;position:relative}.x-watermark-disabled{pointer-events:none;-webkit-user-select:none;user-select:none}\n"] }]
|
|
358
368
|
}], ctorParameters: () => [] });
|
|
359
369
|
|
|
360
370
|
class XWatermarkModule {
|
|
361
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
362
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
363
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
371
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
372
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkModule, imports: [XWatermarkComponent], exports: [XWatermarkComponent] }); }
|
|
373
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkModule }); }
|
|
364
374
|
}
|
|
365
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
375
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: XWatermarkModule, decorators: [{
|
|
366
376
|
type: NgModule,
|
|
367
377
|
args: [{
|
|
368
378
|
exports: [XWatermarkComponent],
|