ngx-tethys 13.1.8 → 13.1.9
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/CHANGELOG.md +9 -0
- package/esm2020/image/image.service.mjs +4 -3
- package/esm2020/version.mjs +2 -2
- package/fesm2015/ngx-tethys-image.mjs +3 -2
- package/fesm2015/ngx-tethys-image.mjs.map +1 -1
- package/fesm2015/ngx-tethys.mjs +1 -1
- package/fesm2015/ngx-tethys.mjs.map +1 -1
- package/fesm2020/ngx-tethys-image.mjs +3 -2
- package/fesm2020/ngx-tethys-image.mjs.map +1 -1
- package/fesm2020/ngx-tethys.mjs +1 -1
- package/fesm2020/ngx-tethys.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [13.1.9](https://github.com/atinc/ngx-tethys/compare/13.1.8...13.1.9) (2022-07-26)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **image:** use merge config when open dialog #WIK-7850 ([#2025](https://github.com/atinc/ngx-tethys/issues/2025)) ([fd4e0b3](https://github.com/atinc/ngx-tethys/commit/fd4e0b346e23d38832fdd3eb80b25a508776c67a)), closes [#WIK-7850](https://github.com/atinc/ngx-tethys/issues/WIK-7850)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## [13.1.8](https://github.com/atinc/ngx-tethys/compare/13.1.7...13.1.8) (2022-07-25)
|
|
6
15
|
|
|
7
16
|
|
|
@@ -18,16 +18,17 @@ export class ThyImageService {
|
|
|
18
18
|
* 图片预览方法
|
|
19
19
|
*/
|
|
20
20
|
preview(images, options) {
|
|
21
|
+
const config = { ...this.defaultConfig, ...options };
|
|
21
22
|
const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {
|
|
22
23
|
initialState: {
|
|
23
24
|
images,
|
|
24
25
|
previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,
|
|
25
|
-
previewConfig:
|
|
26
|
+
previewConfig: config
|
|
26
27
|
},
|
|
27
28
|
backdropClass: 'thy-image-preview-backdrop',
|
|
28
29
|
panelClass: 'thy-image-preview-container',
|
|
29
30
|
size: ThyDialogSizes.full,
|
|
30
|
-
...
|
|
31
|
+
...config
|
|
31
32
|
});
|
|
32
33
|
const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);
|
|
33
34
|
return imagePreviewRef;
|
|
@@ -43,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
43
44
|
type: Inject,
|
|
44
45
|
args: [THY_IMAGE_DEFAULT_PREVIEW_OPTIONS]
|
|
45
46
|
}] }]; } });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbWFnZS9pbWFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBRWpFOztHQUVHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUFLeEIsWUFDVyxTQUFvQixFQUczQixhQUFvQztRQUg3QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBSzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxNQUFzQixFQUFFLE9BQTBEO1FBQ3RGLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDNUQsWUFBWSxFQUFFO2dCQUNWLE1BQU07Z0JBQ04sWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEcsYUFBYSxFQUFFLE1BQU07YUFDeEI7WUFDRCxhQUFhLEVBQUUsNEJBQTRCO1lBQzNDLFVBQVUsRUFBRSw2QkFBNkI7WUFDekMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1lBQ3pCLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILE1BQU0sZUFBZSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUgsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQzs7NEdBaENRLGVBQWUsMkNBUVosaUNBQWlDO2dIQVJwQyxlQUFlOzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQVFGLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5SW1hZ2VQcmV2aWV3Q29uZmlnLCBUSFlfSU1BR0VfREVGQVVMVF9QUkVWSUVXX09QVElPTlMgfSBmcm9tICcuL2ltYWdlLmNvbmZpZyc7XG5pbXBvcnQgeyBUaHlJbWFnZUluZm8sIFRoeUltYWdlUHJldmlld09wdGlvbnMgfSBmcm9tICcuL2ltYWdlLmNsYXNzJztcbmltcG9ydCB7IFRoeUltYWdlUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlEaWFsb2csIFRoeURpYWxvZ1NpemVzIH0gZnJvbSAnbmd4LXRldGh5cy9kaWFsb2cnO1xuaW1wb3J0IHsgVGh5SW1hZ2VQcmV2aWV3UmVmIH0gZnJvbSAnLi9wcmV2aWV3L2ltYWdlLXByZXZpZXctcmVmJztcblxuLyoqXG4gKiDlm77niYfpooTop4jmnI3liqFcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRoeUltYWdlU2VydmljZSB7XG4gICAgLyoqXG4gICAgICog5Zu+54mH6aKE6KeI6buY6K6k6YWN572u77yM5aSW6YOo5Y+v6YCa6L+H5rOo5YWlIFRIWV9JTUFHRV9ERUZBVUxUX1BSRVZJRVdfT1BUSU9OUyDov5vooYzphY3nva5cbiAgICAgKi9cbiAgICBkZWZhdWx0Q29uZmlnOiBUaHlJbWFnZVByZXZpZXdDb25maWc7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0aHlEaWFsb2c6IFRoeURpYWxvZyxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChUSFlfSU1BR0VfREVGQVVMVF9QUkVWSUVXX09QVElPTlMpXG4gICAgICAgIGRlZmF1bHRDb25maWc6IFRoeUltYWdlUHJldmlld0NvbmZpZ1xuICAgICkge1xuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0Q29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWbvueJh+mihOiniOaWueazlVxuICAgICAqL1xuICAgIHByZXZpZXcoaW1hZ2VzOiBUaHlJbWFnZUluZm9bXSwgb3B0aW9ucz86IFRoeUltYWdlUHJldmlld09wdGlvbnMgJiB7IHN0YXJ0SW5kZXg/OiBudW1iZXIgfSk6IFRoeUltYWdlUHJldmlld1JlZiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMudGh5RGlhbG9nLm9wZW4oVGh5SW1hZ2VQcmV2aWV3Q29tcG9uZW50LCB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBpbWFnZXMsXG4gICAgICAgICAgICAgICAgcHJldmlld0luZGV4OiBvcHRpb25zPy5zdGFydEluZGV4ID49IDAgJiYgb3B0aW9ucz8uc3RhcnRJbmRleCA8IGltYWdlcy5sZW5ndGggPyBvcHRpb25zLnN0YXJ0SW5kZXggOiAwLFxuICAgICAgICAgICAgICAgIHByZXZpZXdDb25maWc6IGNvbmZpZ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICd0aHktaW1hZ2UtcHJldmlldy1iYWNrZHJvcCcsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndGh5LWltYWdlLXByZXZpZXctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHNpemU6IFRoeURpYWxvZ1NpemVzLmZ1bGwsXG4gICAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGltYWdlUHJldmlld1JlZiA9IG5ldyBUaHlJbWFnZVByZXZpZXdSZWYoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLCB7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4ub3B0aW9ucyB9LCBkaWFsb2dSZWYpO1xuICAgICAgICByZXR1cm4gaW1hZ2VQcmV2aWV3UmVmO1xuICAgIH1cbn1cbiJdfQ==
|
package/esm2020/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('13.1.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('13.1.9');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxMy4xLjknKTtcbiJdfQ==
|
|
@@ -530,11 +530,12 @@ class ThyImageService {
|
|
|
530
530
|
* 图片预览方法
|
|
531
531
|
*/
|
|
532
532
|
preview(images, options) {
|
|
533
|
+
const config = Object.assign(Object.assign({}, this.defaultConfig), options);
|
|
533
534
|
const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, Object.assign({ initialState: {
|
|
534
535
|
images,
|
|
535
536
|
previewIndex: (options === null || options === void 0 ? void 0 : options.startIndex) >= 0 && (options === null || options === void 0 ? void 0 : options.startIndex) < images.length ? options.startIndex : 0,
|
|
536
|
-
previewConfig:
|
|
537
|
-
}, backdropClass: 'thy-image-preview-backdrop', panelClass: 'thy-image-preview-container', size: ThyDialogSizes.full },
|
|
537
|
+
previewConfig: config
|
|
538
|
+
}, backdropClass: 'thy-image-preview-backdrop', panelClass: 'thy-image-preview-container', size: ThyDialogSizes.full }, config));
|
|
538
539
|
const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, Object.assign(Object.assign({}, this.defaultConfig), options), dialogRef);
|
|
539
540
|
return imagePreviewRef;
|
|
540
541
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-image.mjs","sources":["../../../src/image/image-group.component.ts","../../../src/image/image.config.ts","../../../src/image/utils.ts","../../../src/image/preview/image-preview.component.ts","../../../src/image/preview/image-preview.component.html","../../../src/image/preview/image-preview-ref.ts","../../../src/image/image.service.ts","../../../src/image/image.directive.ts","../../../src/image/module.ts","../../../src/image/ngx-tethys-image.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation, Injector, ElementRef } from '@angular/core';\nimport { ThyImageDirective } from './image.directive';\n\n/**\n * 图片分组,提供 thyImageGroup 指令和 thy-image-group 标签两种使用方式\n *\n */\n@Component({\n selector: 'thy-image-group, [thyImageGroup]',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyImageGroupComponent {\n constructor(public injector: Injector, public element: ElementRef) {}\n\n images: ThyImageDirective[] = [];\n\n addImage(image: ThyImageDirective, index: number): void {\n this.images.splice(index, 0, image);\n }\n\n removeImage(index: number) {\n this.images.splice(index, 1);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyAbstractOverlayConfig, ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport class ThyImagePreviewConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n closeOnNavigation?: boolean;\n disableClose?: boolean;\n disableKeyboardSelectable?: boolean;\n zoom?: number;\n rotate?: number;\n}\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS = new InjectionToken<ThyImagePreviewConfig>('thy-image-default-options');\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER = {\n provide: THY_IMAGE_DEFAULT_PREVIEW_OPTIONS,\n useValue: {\n hasBackdrop: true,\n closeOnNavigation: true,\n disableClose: false,\n disableKeyboardSelectable: false,\n restoreFocus: false\n }\n};\n\nexport const imageAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'image',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nexport const fetchImageBlob = (url: string) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n const loadedXhr$ = fromEvent(xhr, 'load').pipe(\n take(1),\n map(data => {\n return xhr.response;\n })\n );\n xhr.send();\n return loadedXhr$;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n ElementRef,\n ViewChild,\n NgZone,\n OnDestroy\n} from '@angular/core';\nimport { InternalImageInfo, ThyImageInfo, ThyImagePreviewMode, ThyImagePreviewOperation, ThyImagePreviewOptions } from '../image.class';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { fromEvent, Observable, of } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ThyDialog } from 'ngx-tethys/dialog';\nimport { getClientSize, getFitContentPosition, getOffset, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { ThyFullscreen } from 'ngx-tethys/fullscreen';\nimport { ThyCopyEvent } from 'ngx-tethys/copy';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { fetchImageBlob } from '../utils';\n\nconst initialPosition = {\n x: 0,\n y: 0\n};\nconst IMAGE_MAX_ZOOM = 3;\nconst IMAGE_MIN_ZOOM = 0.1;\nconst HORIZONTAL_SPACE = 100 * 2; // left: 100px; right: 100px\nconst VERTICAL_SPACE = 96 + 106; // top: 96px; bottom: 106px\n\n/**\n * 图片预览组件\n */\n@Component({\n selector: 'thy-image-preview',\n exportAs: 'thyImagePreview',\n templateUrl: './image-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-image-preview-wrap',\n '[class.thy-image-preview-moving]': 'isDragging'\n }\n})\nexport class ThyImagePreviewComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n images: InternalImageInfo[] = [];\n previewIndex: number = 0;\n previewConfig: ThyImagePreviewOptions;\n previewImageTransform = '';\n previewImageWrapperTransform = '';\n zoomDisabled = false;\n zoom: number = 1;\n position = { ...initialPosition };\n isDragging = false;\n isLoadingDone = false;\n isFullScreen = false;\n isInsideScreen = true;\n currentImageMode: ThyImagePreviewMode = 'original-scale';\n previewOperations: ThyImagePreviewOperation[];\n defaultPreviewOperations: ThyImagePreviewOperation[] = [\n {\n icon: 'zoom-out',\n name: '缩小',\n action: (image: ThyImageInfo) => {\n this.zoomOut();\n },\n type: 'zoom-out'\n },\n {\n icon: 'zoom-in',\n name: '放大',\n action: (image: ThyImageInfo) => {\n this.zoomIn();\n },\n type: 'zoom-in'\n },\n {\n icon: 'one-to-one',\n name: '原始比例',\n action: (image: ThyImageInfo) => {\n this.setOriginalSize();\n },\n type: 'original-scale'\n },\n {\n icon: 'max-view',\n name: '适应屏幕',\n action: () => {\n this.setFitScreen();\n },\n type: 'fit-screen'\n },\n {\n icon: 'expand-arrows',\n name: '全屏显示',\n action: () => {\n this.fullScreen();\n },\n type: 'full-screen'\n },\n {\n icon: 'rotate-right',\n name: '旋转',\n action: (image: ThyImageInfo) => {\n this.rotateRight();\n },\n type: 'rotate-right'\n },\n {\n icon: 'download',\n name: '下载',\n action: (image: ThyImageInfo) => {\n this.download(image);\n },\n type: 'download'\n },\n {\n icon: 'preview',\n name: '查看原图',\n action: () => {\n this.viewOriginal();\n },\n type: 'view-original'\n },\n {\n icon: 'link-insert',\n name: '复制链接',\n type: 'copyLink'\n }\n ];\n private rotate: number;\n\n get previewImage(): InternalImageInfo {\n return this.images[this.previewIndex];\n }\n\n get previewImageOriginSrc() {\n let imageSrc = this.previewImage.origin?.src || this.previewImage.src;\n if (imageSrc.startsWith('./')) {\n return window.location.host + '/' + imageSrc.split('./')[1];\n }\n return imageSrc;\n }\n\n get defaultZoom(): number {\n if (this.previewConfig?.zoom && this.previewConfig?.zoom > 0) {\n return this.previewConfig.zoom >= IMAGE_MAX_ZOOM\n ? IMAGE_MAX_ZOOM\n : this.previewConfig.zoom <= IMAGE_MIN_ZOOM\n ? IMAGE_MIN_ZOOM\n : this.previewConfig.zoom;\n }\n }\n\n @ViewChild('imgRef', { static: false }) imageRef!: ElementRef<HTMLImageElement>;\n @ViewChild('imagePreviewWrapper', { static: true }) imagePreviewWrapper!: ElementRef<HTMLElement>;\n\n constructor(\n public thyDialog: ThyDialog,\n public thyFullscreen: ThyFullscreen,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private notifyService: ThyNotifyService,\n private host: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.initPreview();\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.host.nativeElement, 'click')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(event => {\n if (\n (event.target === event.currentTarget ||\n (this.isInsideScreen && this.imagePreviewWrapper.nativeElement.contains(event.target as HTMLElement))) &&\n !this.previewConfig?.disableClose\n ) {\n this.ngZone.run(() => !this.isFullScreen && this.thyDialog.close());\n }\n });\n\n fromEvent(this.imagePreviewWrapper.nativeElement, 'mousedown')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this.isDragging = !this.isInsideScreen && true;\n });\n });\n }\n\n setOriginalSize() {\n this.reset();\n this.currentImageMode = 'fit-screen';\n this.zoom = 1;\n this.updatePreviewImageTransform();\n this.calculateInsideScreen();\n this.isLoadingDone = true;\n this.cdr.detectChanges();\n }\n\n setFitScreen() {\n this.reset();\n this.isInsideScreen = true;\n this.updatePreviewImage();\n }\n\n useDefaultZoomUpdate(isUpdateImageWrapper: boolean) {\n this.zoom = this.defaultZoom;\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n }\n\n useCalculateZoomUpdate(isUpdateImageWrapper?: boolean) {\n let img = new Image();\n img.src = this.previewImage.src;\n img.onload = () => {\n const { width: offsetWidth, height: offsetHeight } = getClientSize();\n const innerWidth = offsetWidth - HORIZONTAL_SPACE;\n const innerHeight = offsetHeight - VERTICAL_SPACE;\n const { naturalWidth, naturalHeight } = img;\n const xRatio = innerWidth / naturalWidth;\n const yRatio = innerHeight / naturalHeight;\n const zoom = Math.min(xRatio, yRatio);\n if (zoom > 1) {\n this.zoom = 1;\n } else {\n this.zoom = zoom;\n }\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n };\n }\n\n updatePreviewImage() {\n this.resolvePreviewImage().subscribe(result => {\n if (!result) {\n // error\n this.isLoadingDone = true;\n return;\n }\n // image size\n if (!this.previewImage.size && this.previewImage.blob) {\n this.previewImage.size = Math.floor((this.previewImage.blob.size / 1024) * 100) / 100 + ' KB';\n }\n if (this.defaultZoom) {\n this.useDefaultZoomUpdate(true);\n } else {\n this.useCalculateZoomUpdate();\n }\n });\n }\n\n resolvePreviewImage() {\n return new Observable<Boolean>(subscriber => {\n if (this.previewImage.src.startsWith('blob:')) {\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(this.previewImage.src);\n subscriber.next(true);\n subscriber.complete();\n return;\n }\n if (this.previewImage.objectURL || !this.previewConfig.resolveSize) {\n subscriber.next(true);\n subscriber.complete();\n } else {\n fetchImageBlob(this.previewImage.src).subscribe(\n blob => {\n const urlCreator = window.URL || window.webkitURL;\n const objectURL = urlCreator.createObjectURL(blob);\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(objectURL);\n this.previewImage.blob = blob;\n subscriber.next(true);\n subscriber.complete();\n },\n error => {\n subscriber.next(false);\n subscriber.complete();\n }\n );\n }\n });\n }\n\n initPreview() {\n if (Array.isArray(this.previewConfig?.operations) && this.previewConfig?.operations.length) {\n this.previewOperations = this.defaultPreviewOperations.filter(item => this.previewConfig.operations.includes(item.type));\n } else {\n this.previewOperations = this.defaultPreviewOperations;\n }\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.updatePreviewImage();\n }\n\n download(image: ThyImageInfo) {\n let img = new Image();\n img.setAttribute('crossOrigin', 'Anonymous');\n img.onload = () => {\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n let url = canvas.toDataURL('images/png');\n let a = document.createElement('a');\n let event = new MouseEvent('click');\n a.download = image.name || 'default.png';\n a.href = url;\n a.dispatchEvent(event);\n };\n img.onerror = () => {\n let a = document.createElement('a');\n a.download = image.name || 'default.png';\n a.target = '_blank';\n a.href = image.origin?.src || image.src;\n let event = new MouseEvent('click');\n a.dispatchEvent(event);\n };\n img.src = image.origin?.src || image.src;\n }\n\n zoomIn(): void {\n if (this.zoom < IMAGE_MAX_ZOOM) {\n this.zoom = Math.min(this.zoom + 0.1, IMAGE_MAX_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n zoomOut(): void {\n if (this.zoom > IMAGE_MIN_ZOOM) {\n this.zoom = Math.max(this.zoom - 0.1, IMAGE_MIN_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n calculateInsideScreen() {\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { width: clientWidth, height: clientHeight } = getClientSize();\n if (width >= clientWidth || height >= clientHeight) {\n this.isInsideScreen = false;\n } else {\n this.isInsideScreen = true;\n }\n }\n\n viewOriginal() {\n window.open(this.previewImage?.origin?.src || this.previewImage.src, '_blank');\n }\n\n rotateRight(): void {\n this.rotate += 90;\n this.updatePreviewImageTransform();\n }\n\n fullScreen(): void {\n const targetElement = this.host.nativeElement.querySelector('.thy-image-preview');\n this.isFullScreen = true;\n const fullscreenRef = this.thyFullscreen.launch({\n target: targetElement\n });\n fullscreenRef.afterExited().subscribe(() => {\n this.isFullScreen = false;\n this.cdr.markForCheck();\n });\n }\n\n copyLink(event: ThyCopyEvent) {\n if (event.isSuccess) {\n this.notifyService.success('复制图片地址成功');\n } else {\n this.notifyService.error('复制图片地址失败');\n }\n }\n\n prev() {\n if (this.previewIndex > 0) {\n this.previewIndex--;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n next() {\n if (this.previewIndex < this.images.length - 1) {\n this.previewIndex++;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n dragReleased() {\n this.isDragging = false;\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { left, top } = getOffset(this.imageRef.nativeElement, window);\n const { width: clientWidth, height: clientHeight } = getClientSize();\n const isRotate = this.rotate % 180 !== 0;\n const fitContentParams = {\n width: isRotate ? height : width,\n height: isRotate ? width : height,\n left,\n top,\n clientWidth,\n clientHeight\n };\n const fitContentPos = getFitContentPosition(fitContentParams);\n if (!isUndefinedOrNull(fitContentPos.x) || !isUndefinedOrNull(fitContentPos.y)) {\n this.position = { ...this.position, ...fitContentPos };\n }\n }\n\n private reset(): void {\n this.currentImageMode = 'original-scale';\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.position = { ...initialPosition };\n this.cdr.detectChanges();\n }\n\n private updatePreviewImageTransform(): void {\n this.previewImageTransform = `scale3d(${this.zoom}, ${this.zoom}, 1) rotate(${this.rotate}deg)`;\n }\n\n private updatePreviewImageWrapperTransform(): void {\n this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"退出预览\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"退出预览\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"退出全屏\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"上一张\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"下一张\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n","import { ThyImagePreviewComponent } from './image-preview.component';\nimport { ThyDialogRef } from 'ngx-tethys/dialog';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { ThyImagePreviewOptions } from '../image.class';\n\nexport class ThyImagePreviewRef {\n get componentInstance() {\n return this.dialogRef.componentInstance;\n }\n\n constructor(\n public previewInstance: ThyImagePreviewComponent,\n private config: ThyImagePreviewOptions,\n private dialogRef: ThyDialogRef<ThyImagePreviewComponent>\n ) {\n dialogRef\n .keydownEvents()\n .pipe()\n .subscribe(event => {\n if (!config.disableKeyboardSelectable && event.keyCode === LEFT_ARROW) {\n this.prev();\n }\n if (!config.disableKeyboardSelectable && event.keyCode === RIGHT_ARROW) {\n this.next();\n }\n });\n }\n\n next(): void {\n this.previewInstance.next();\n }\n\n prev(): void {\n this.previewInstance.prev();\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ThyImagePreviewConfig, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS } from './image.config';\nimport { ThyImageInfo, ThyImagePreviewOptions } from './image.class';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyDialog, ThyDialogSizes } from 'ngx-tethys/dialog';\nimport { ThyImagePreviewRef } from './preview/image-preview-ref';\n\n/**\n * 图片预览服务\n */\n@Injectable()\nexport class ThyImageService {\n /**\n * 图片预览默认配置,外部可通过注入 THY_IMAGE_DEFAULT_PREVIEW_OPTIONS 进行配置\n */\n defaultConfig: ThyImagePreviewConfig;\n constructor(\n public thyDialog: ThyDialog,\n @Optional()\n @Inject(THY_IMAGE_DEFAULT_PREVIEW_OPTIONS)\n defaultConfig: ThyImagePreviewConfig\n ) {\n this.defaultConfig = defaultConfig;\n }\n\n /**\n * 图片预览方法\n */\n preview(images: ThyImageInfo[], options?: ThyImagePreviewOptions & { startIndex?: number }): ThyImagePreviewRef {\n const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {\n initialState: {\n images,\n previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,\n previewConfig: { ...this.defaultConfig, ...options }\n },\n backdropClass: 'thy-image-preview-backdrop',\n panelClass: 'thy-image-preview-container',\n size: ThyDialogSizes.full,\n ...options\n });\n const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);\n return imagePreviewRef;\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectFlags,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n Injector,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImageMeta } from './image.class';\nimport { ThyImageService } from './image.service';\n\n/**\n * thyImage: 预览图片指令,只可绑定到 img 标签上\n */\n@Directive({\n selector: 'img[thyImage]',\n exportAs: 'thyImage',\n host: {\n '(click)': 'onPreview($event)',\n class: 'thy-image'\n }\n})\nexport class ThyImageDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * 图片地址\n */\n @Input() thySrc: string;\n /**\n * 预览图片地址\n */\n @Input() thyPreviewSrc: string;\n /**\n * 图片原图地址\n */\n @Input() thyOriginSrc: string;\n /**\n * 图片附加信息,包含 { name: string, size?: string | number; }\n */\n @Input() thyImageMeta: ThyImageMeta;\n /**\n * 是否禁止预览\n * @default false\n */\n @Input() @InputBoolean() thyDisablePreview: boolean;\n\n /**\n * 是否自动计算图片资源大小\n * @default false\n */\n @Input() @InputBoolean() thyResolveSize = false;\n\n get previewable(): boolean {\n return !this.thyDisablePreview;\n }\n\n private parentGroup: ThyImageGroupComponent;\n\n constructor(private thyImageService: ThyImageService, private injector: Injector, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n this.getParentGroup();\n }\n\n ngAfterViewInit(): void {\n if (this.parentGroup) {\n this.addParentImage();\n }\n }\n\n getParentGroup() {\n while (true) {\n // 多层 thy-image-group 嵌套时,获取最外层 thy-image-group 下的所有图片\n const injector = this.parentGroup?.injector || this.injector;\n const parentGroup = injector.get(ThyImageGroupComponent, null, InjectFlags.SkipSelf);\n if (!parentGroup) {\n break;\n }\n this.parentGroup = parentGroup;\n }\n }\n\n addParentImage() {\n setTimeout(() => {\n const parentElement: HTMLElement = this.parentGroup.element.nativeElement;\n const images = parentElement.querySelectorAll('img[thyImage]');\n const index = Array.prototype.indexOf.call(images, this.elementRef.nativeElement);\n if (index >= 0) {\n this.parentGroup.addImage(this, index);\n } else {\n this.parentGroup.addImage(this, this.parentGroup.images.length);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thySrc } = changes;\n if (thySrc) {\n this.elementRef.nativeElement.src = thySrc.currentValue;\n }\n }\n\n onPreview(event: MouseEvent) {\n if (!this.previewable || event.button !== 0) {\n return;\n }\n if (this.parentGroup) {\n const previewAbleImages = this.parentGroup.images.filter(e => e.previewable);\n const previewImages = previewAbleImages.map(e => ({\n src: e.thyPreviewSrc || e.thySrc,\n ...e.thyImageMeta,\n origin: {\n src: e.thyOriginSrc\n }\n }));\n const startIndex = previewAbleImages.findIndex(el => this === el);\n this.thyImageService.preview(previewImages, {\n startIndex,\n resolveSize: this.thyResolveSize\n });\n } else {\n const previewImages = [\n {\n src: this.thyPreviewSrc || this.thySrc,\n ...this.thyImageMeta,\n origin: {\n src: this.thyOriginSrc\n }\n }\n ];\n this.thyImageService.preview(previewImages, { resolveSize: this.thyResolveSize });\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentGroup) {\n const index = this.parentGroup.images.findIndex(item => item === this);\n this.parentGroup.removeImage(index);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyImageDirective } from './image.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyImageService } from './image.service';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER } from './image.config';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyCopyModule } from 'ngx-tethys/copy';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyActionModule } from 'ngx-tethys/action';\n\n@NgModule({\n declarations: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n exports: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n imports: [\n CommonModule,\n PortalModule,\n DragDropModule,\n ThyIconModule,\n ThyDialogModule,\n ThyDividerModule,\n ThyTooltipModule,\n ThyCopyModule,\n ThyLoadingModule,\n ThyActionModule\n ],\n providers: [ThyImageService, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER]\n})\nexport class ThyImageModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyImageService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-image.mjs","sources":["../../../src/image/image-group.component.ts","../../../src/image/image.config.ts","../../../src/image/utils.ts","../../../src/image/preview/image-preview.component.ts","../../../src/image/preview/image-preview.component.html","../../../src/image/preview/image-preview-ref.ts","../../../src/image/image.service.ts","../../../src/image/image.directive.ts","../../../src/image/module.ts","../../../src/image/ngx-tethys-image.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation, Injector, ElementRef } from '@angular/core';\nimport { ThyImageDirective } from './image.directive';\n\n/**\n * 图片分组,提供 thyImageGroup 指令和 thy-image-group 标签两种使用方式\n *\n */\n@Component({\n selector: 'thy-image-group, [thyImageGroup]',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyImageGroupComponent {\n constructor(public injector: Injector, public element: ElementRef) {}\n\n images: ThyImageDirective[] = [];\n\n addImage(image: ThyImageDirective, index: number): void {\n this.images.splice(index, 0, image);\n }\n\n removeImage(index: number) {\n this.images.splice(index, 1);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyAbstractOverlayConfig, ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport class ThyImagePreviewConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n closeOnNavigation?: boolean;\n disableClose?: boolean;\n disableKeyboardSelectable?: boolean;\n zoom?: number;\n rotate?: number;\n}\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS = new InjectionToken<ThyImagePreviewConfig>('thy-image-default-options');\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER = {\n provide: THY_IMAGE_DEFAULT_PREVIEW_OPTIONS,\n useValue: {\n hasBackdrop: true,\n closeOnNavigation: true,\n disableClose: false,\n disableKeyboardSelectable: false,\n restoreFocus: false\n }\n};\n\nexport const imageAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'image',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nexport const fetchImageBlob = (url: string) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n const loadedXhr$ = fromEvent(xhr, 'load').pipe(\n take(1),\n map(data => {\n return xhr.response;\n })\n );\n xhr.send();\n return loadedXhr$;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n ElementRef,\n ViewChild,\n NgZone,\n OnDestroy\n} from '@angular/core';\nimport { InternalImageInfo, ThyImageInfo, ThyImagePreviewMode, ThyImagePreviewOperation, ThyImagePreviewOptions } from '../image.class';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { fromEvent, Observable, of } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ThyDialog } from 'ngx-tethys/dialog';\nimport { getClientSize, getFitContentPosition, getOffset, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { ThyFullscreen } from 'ngx-tethys/fullscreen';\nimport { ThyCopyEvent } from 'ngx-tethys/copy';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { fetchImageBlob } from '../utils';\n\nconst initialPosition = {\n x: 0,\n y: 0\n};\nconst IMAGE_MAX_ZOOM = 3;\nconst IMAGE_MIN_ZOOM = 0.1;\nconst HORIZONTAL_SPACE = 100 * 2; // left: 100px; right: 100px\nconst VERTICAL_SPACE = 96 + 106; // top: 96px; bottom: 106px\n\n/**\n * 图片预览组件\n */\n@Component({\n selector: 'thy-image-preview',\n exportAs: 'thyImagePreview',\n templateUrl: './image-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-image-preview-wrap',\n '[class.thy-image-preview-moving]': 'isDragging'\n }\n})\nexport class ThyImagePreviewComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n images: InternalImageInfo[] = [];\n previewIndex: number = 0;\n previewConfig: ThyImagePreviewOptions;\n previewImageTransform = '';\n previewImageWrapperTransform = '';\n zoomDisabled = false;\n zoom: number = 1;\n position = { ...initialPosition };\n isDragging = false;\n isLoadingDone = false;\n isFullScreen = false;\n isInsideScreen = true;\n currentImageMode: ThyImagePreviewMode = 'original-scale';\n previewOperations: ThyImagePreviewOperation[];\n defaultPreviewOperations: ThyImagePreviewOperation[] = [\n {\n icon: 'zoom-out',\n name: '缩小',\n action: (image: ThyImageInfo) => {\n this.zoomOut();\n },\n type: 'zoom-out'\n },\n {\n icon: 'zoom-in',\n name: '放大',\n action: (image: ThyImageInfo) => {\n this.zoomIn();\n },\n type: 'zoom-in'\n },\n {\n icon: 'one-to-one',\n name: '原始比例',\n action: (image: ThyImageInfo) => {\n this.setOriginalSize();\n },\n type: 'original-scale'\n },\n {\n icon: 'max-view',\n name: '适应屏幕',\n action: () => {\n this.setFitScreen();\n },\n type: 'fit-screen'\n },\n {\n icon: 'expand-arrows',\n name: '全屏显示',\n action: () => {\n this.fullScreen();\n },\n type: 'full-screen'\n },\n {\n icon: 'rotate-right',\n name: '旋转',\n action: (image: ThyImageInfo) => {\n this.rotateRight();\n },\n type: 'rotate-right'\n },\n {\n icon: 'download',\n name: '下载',\n action: (image: ThyImageInfo) => {\n this.download(image);\n },\n type: 'download'\n },\n {\n icon: 'preview',\n name: '查看原图',\n action: () => {\n this.viewOriginal();\n },\n type: 'view-original'\n },\n {\n icon: 'link-insert',\n name: '复制链接',\n type: 'copyLink'\n }\n ];\n private rotate: number;\n\n get previewImage(): InternalImageInfo {\n return this.images[this.previewIndex];\n }\n\n get previewImageOriginSrc() {\n let imageSrc = this.previewImage.origin?.src || this.previewImage.src;\n if (imageSrc.startsWith('./')) {\n return window.location.host + '/' + imageSrc.split('./')[1];\n }\n return imageSrc;\n }\n\n get defaultZoom(): number {\n if (this.previewConfig?.zoom && this.previewConfig?.zoom > 0) {\n return this.previewConfig.zoom >= IMAGE_MAX_ZOOM\n ? IMAGE_MAX_ZOOM\n : this.previewConfig.zoom <= IMAGE_MIN_ZOOM\n ? IMAGE_MIN_ZOOM\n : this.previewConfig.zoom;\n }\n }\n\n @ViewChild('imgRef', { static: false }) imageRef!: ElementRef<HTMLImageElement>;\n @ViewChild('imagePreviewWrapper', { static: true }) imagePreviewWrapper!: ElementRef<HTMLElement>;\n\n constructor(\n public thyDialog: ThyDialog,\n public thyFullscreen: ThyFullscreen,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private notifyService: ThyNotifyService,\n private host: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.initPreview();\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.host.nativeElement, 'click')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(event => {\n if (\n (event.target === event.currentTarget ||\n (this.isInsideScreen && this.imagePreviewWrapper.nativeElement.contains(event.target as HTMLElement))) &&\n !this.previewConfig?.disableClose\n ) {\n this.ngZone.run(() => !this.isFullScreen && this.thyDialog.close());\n }\n });\n\n fromEvent(this.imagePreviewWrapper.nativeElement, 'mousedown')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this.isDragging = !this.isInsideScreen && true;\n });\n });\n }\n\n setOriginalSize() {\n this.reset();\n this.currentImageMode = 'fit-screen';\n this.zoom = 1;\n this.updatePreviewImageTransform();\n this.calculateInsideScreen();\n this.isLoadingDone = true;\n this.cdr.detectChanges();\n }\n\n setFitScreen() {\n this.reset();\n this.isInsideScreen = true;\n this.updatePreviewImage();\n }\n\n useDefaultZoomUpdate(isUpdateImageWrapper: boolean) {\n this.zoom = this.defaultZoom;\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n }\n\n useCalculateZoomUpdate(isUpdateImageWrapper?: boolean) {\n let img = new Image();\n img.src = this.previewImage.src;\n img.onload = () => {\n const { width: offsetWidth, height: offsetHeight } = getClientSize();\n const innerWidth = offsetWidth - HORIZONTAL_SPACE;\n const innerHeight = offsetHeight - VERTICAL_SPACE;\n const { naturalWidth, naturalHeight } = img;\n const xRatio = innerWidth / naturalWidth;\n const yRatio = innerHeight / naturalHeight;\n const zoom = Math.min(xRatio, yRatio);\n if (zoom > 1) {\n this.zoom = 1;\n } else {\n this.zoom = zoom;\n }\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n };\n }\n\n updatePreviewImage() {\n this.resolvePreviewImage().subscribe(result => {\n if (!result) {\n // error\n this.isLoadingDone = true;\n return;\n }\n // image size\n if (!this.previewImage.size && this.previewImage.blob) {\n this.previewImage.size = Math.floor((this.previewImage.blob.size / 1024) * 100) / 100 + ' KB';\n }\n if (this.defaultZoom) {\n this.useDefaultZoomUpdate(true);\n } else {\n this.useCalculateZoomUpdate();\n }\n });\n }\n\n resolvePreviewImage() {\n return new Observable<Boolean>(subscriber => {\n if (this.previewImage.src.startsWith('blob:')) {\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(this.previewImage.src);\n subscriber.next(true);\n subscriber.complete();\n return;\n }\n if (this.previewImage.objectURL || !this.previewConfig.resolveSize) {\n subscriber.next(true);\n subscriber.complete();\n } else {\n fetchImageBlob(this.previewImage.src).subscribe(\n blob => {\n const urlCreator = window.URL || window.webkitURL;\n const objectURL = urlCreator.createObjectURL(blob);\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(objectURL);\n this.previewImage.blob = blob;\n subscriber.next(true);\n subscriber.complete();\n },\n error => {\n subscriber.next(false);\n subscriber.complete();\n }\n );\n }\n });\n }\n\n initPreview() {\n if (Array.isArray(this.previewConfig?.operations) && this.previewConfig?.operations.length) {\n this.previewOperations = this.defaultPreviewOperations.filter(item => this.previewConfig.operations.includes(item.type));\n } else {\n this.previewOperations = this.defaultPreviewOperations;\n }\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.updatePreviewImage();\n }\n\n download(image: ThyImageInfo) {\n let img = new Image();\n img.setAttribute('crossOrigin', 'Anonymous');\n img.onload = () => {\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n let url = canvas.toDataURL('images/png');\n let a = document.createElement('a');\n let event = new MouseEvent('click');\n a.download = image.name || 'default.png';\n a.href = url;\n a.dispatchEvent(event);\n };\n img.onerror = () => {\n let a = document.createElement('a');\n a.download = image.name || 'default.png';\n a.target = '_blank';\n a.href = image.origin?.src || image.src;\n let event = new MouseEvent('click');\n a.dispatchEvent(event);\n };\n img.src = image.origin?.src || image.src;\n }\n\n zoomIn(): void {\n if (this.zoom < IMAGE_MAX_ZOOM) {\n this.zoom = Math.min(this.zoom + 0.1, IMAGE_MAX_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n zoomOut(): void {\n if (this.zoom > IMAGE_MIN_ZOOM) {\n this.zoom = Math.max(this.zoom - 0.1, IMAGE_MIN_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n calculateInsideScreen() {\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { width: clientWidth, height: clientHeight } = getClientSize();\n if (width >= clientWidth || height >= clientHeight) {\n this.isInsideScreen = false;\n } else {\n this.isInsideScreen = true;\n }\n }\n\n viewOriginal() {\n window.open(this.previewImage?.origin?.src || this.previewImage.src, '_blank');\n }\n\n rotateRight(): void {\n this.rotate += 90;\n this.updatePreviewImageTransform();\n }\n\n fullScreen(): void {\n const targetElement = this.host.nativeElement.querySelector('.thy-image-preview');\n this.isFullScreen = true;\n const fullscreenRef = this.thyFullscreen.launch({\n target: targetElement\n });\n fullscreenRef.afterExited().subscribe(() => {\n this.isFullScreen = false;\n this.cdr.markForCheck();\n });\n }\n\n copyLink(event: ThyCopyEvent) {\n if (event.isSuccess) {\n this.notifyService.success('复制图片地址成功');\n } else {\n this.notifyService.error('复制图片地址失败');\n }\n }\n\n prev() {\n if (this.previewIndex > 0) {\n this.previewIndex--;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n next() {\n if (this.previewIndex < this.images.length - 1) {\n this.previewIndex++;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n dragReleased() {\n this.isDragging = false;\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { left, top } = getOffset(this.imageRef.nativeElement, window);\n const { width: clientWidth, height: clientHeight } = getClientSize();\n const isRotate = this.rotate % 180 !== 0;\n const fitContentParams = {\n width: isRotate ? height : width,\n height: isRotate ? width : height,\n left,\n top,\n clientWidth,\n clientHeight\n };\n const fitContentPos = getFitContentPosition(fitContentParams);\n if (!isUndefinedOrNull(fitContentPos.x) || !isUndefinedOrNull(fitContentPos.y)) {\n this.position = { ...this.position, ...fitContentPos };\n }\n }\n\n private reset(): void {\n this.currentImageMode = 'original-scale';\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.position = { ...initialPosition };\n this.cdr.detectChanges();\n }\n\n private updatePreviewImageTransform(): void {\n this.previewImageTransform = `scale3d(${this.zoom}, ${this.zoom}, 1) rotate(${this.rotate}deg)`;\n }\n\n private updatePreviewImageWrapperTransform(): void {\n this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"退出预览\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"退出预览\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"退出全屏\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"上一张\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"下一张\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n","import { ThyImagePreviewComponent } from './image-preview.component';\nimport { ThyDialogRef } from 'ngx-tethys/dialog';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { ThyImagePreviewOptions } from '../image.class';\n\nexport class ThyImagePreviewRef {\n get componentInstance() {\n return this.dialogRef.componentInstance;\n }\n\n constructor(\n public previewInstance: ThyImagePreviewComponent,\n private config: ThyImagePreviewOptions,\n private dialogRef: ThyDialogRef<ThyImagePreviewComponent>\n ) {\n dialogRef\n .keydownEvents()\n .pipe()\n .subscribe(event => {\n if (!config.disableKeyboardSelectable && event.keyCode === LEFT_ARROW) {\n this.prev();\n }\n if (!config.disableKeyboardSelectable && event.keyCode === RIGHT_ARROW) {\n this.next();\n }\n });\n }\n\n next(): void {\n this.previewInstance.next();\n }\n\n prev(): void {\n this.previewInstance.prev();\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ThyImagePreviewConfig, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS } from './image.config';\nimport { ThyImageInfo, ThyImagePreviewOptions } from './image.class';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyDialog, ThyDialogSizes } from 'ngx-tethys/dialog';\nimport { ThyImagePreviewRef } from './preview/image-preview-ref';\n\n/**\n * 图片预览服务\n */\n@Injectable()\nexport class ThyImageService {\n /**\n * 图片预览默认配置,外部可通过注入 THY_IMAGE_DEFAULT_PREVIEW_OPTIONS 进行配置\n */\n defaultConfig: ThyImagePreviewConfig;\n constructor(\n public thyDialog: ThyDialog,\n @Optional()\n @Inject(THY_IMAGE_DEFAULT_PREVIEW_OPTIONS)\n defaultConfig: ThyImagePreviewConfig\n ) {\n this.defaultConfig = defaultConfig;\n }\n\n /**\n * 图片预览方法\n */\n preview(images: ThyImageInfo[], options?: ThyImagePreviewOptions & { startIndex?: number }): ThyImagePreviewRef {\n const config = { ...this.defaultConfig, ...options };\n const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {\n initialState: {\n images,\n previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,\n previewConfig: config\n },\n backdropClass: 'thy-image-preview-backdrop',\n panelClass: 'thy-image-preview-container',\n size: ThyDialogSizes.full,\n ...config\n });\n const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);\n return imagePreviewRef;\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectFlags,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n Injector,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImageMeta } from './image.class';\nimport { ThyImageService } from './image.service';\n\n/**\n * thyImage: 预览图片指令,只可绑定到 img 标签上\n */\n@Directive({\n selector: 'img[thyImage]',\n exportAs: 'thyImage',\n host: {\n '(click)': 'onPreview($event)',\n class: 'thy-image'\n }\n})\nexport class ThyImageDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * 图片地址\n */\n @Input() thySrc: string;\n /**\n * 预览图片地址\n */\n @Input() thyPreviewSrc: string;\n /**\n * 图片原图地址\n */\n @Input() thyOriginSrc: string;\n /**\n * 图片附加信息,包含 { name: string, size?: string | number; }\n */\n @Input() thyImageMeta: ThyImageMeta;\n /**\n * 是否禁止预览\n * @default false\n */\n @Input() @InputBoolean() thyDisablePreview: boolean;\n\n /**\n * 是否自动计算图片资源大小\n * @default false\n */\n @Input() @InputBoolean() thyResolveSize = false;\n\n get previewable(): boolean {\n return !this.thyDisablePreview;\n }\n\n private parentGroup: ThyImageGroupComponent;\n\n constructor(private thyImageService: ThyImageService, private injector: Injector, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n this.getParentGroup();\n }\n\n ngAfterViewInit(): void {\n if (this.parentGroup) {\n this.addParentImage();\n }\n }\n\n getParentGroup() {\n while (true) {\n // 多层 thy-image-group 嵌套时,获取最外层 thy-image-group 下的所有图片\n const injector = this.parentGroup?.injector || this.injector;\n const parentGroup = injector.get(ThyImageGroupComponent, null, InjectFlags.SkipSelf);\n if (!parentGroup) {\n break;\n }\n this.parentGroup = parentGroup;\n }\n }\n\n addParentImage() {\n setTimeout(() => {\n const parentElement: HTMLElement = this.parentGroup.element.nativeElement;\n const images = parentElement.querySelectorAll('img[thyImage]');\n const index = Array.prototype.indexOf.call(images, this.elementRef.nativeElement);\n if (index >= 0) {\n this.parentGroup.addImage(this, index);\n } else {\n this.parentGroup.addImage(this, this.parentGroup.images.length);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thySrc } = changes;\n if (thySrc) {\n this.elementRef.nativeElement.src = thySrc.currentValue;\n }\n }\n\n onPreview(event: MouseEvent) {\n if (!this.previewable || event.button !== 0) {\n return;\n }\n if (this.parentGroup) {\n const previewAbleImages = this.parentGroup.images.filter(e => e.previewable);\n const previewImages = previewAbleImages.map(e => ({\n src: e.thyPreviewSrc || e.thySrc,\n ...e.thyImageMeta,\n origin: {\n src: e.thyOriginSrc\n }\n }));\n const startIndex = previewAbleImages.findIndex(el => this === el);\n this.thyImageService.preview(previewImages, {\n startIndex,\n resolveSize: this.thyResolveSize\n });\n } else {\n const previewImages = [\n {\n src: this.thyPreviewSrc || this.thySrc,\n ...this.thyImageMeta,\n origin: {\n src: this.thyOriginSrc\n }\n }\n ];\n this.thyImageService.preview(previewImages, { resolveSize: this.thyResolveSize });\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentGroup) {\n const index = this.parentGroup.images.findIndex(item => item === this);\n this.parentGroup.removeImage(index);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyImageDirective } from './image.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyImageService } from './image.service';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER } from './image.config';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyCopyModule } from 'ngx-tethys/copy';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyActionModule } from 'ngx-tethys/action';\n\n@NgModule({\n declarations: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n exports: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n imports: [\n CommonModule,\n PortalModule,\n DragDropModule,\n ThyIconModule,\n ThyDialogModule,\n ThyDividerModule,\n ThyTooltipModule,\n ThyCopyModule,\n ThyLoadingModule,\n ThyActionModule\n ],\n providers: [ThyImageService, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER]\n})\nexport class ThyImageModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyImageService"],"mappings":"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"}
|
package/fesm2015/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('13.1.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('13.1.9');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
|
|
@@ -522,16 +522,17 @@ class ThyImageService {
|
|
|
522
522
|
* 图片预览方法
|
|
523
523
|
*/
|
|
524
524
|
preview(images, options) {
|
|
525
|
+
const config = { ...this.defaultConfig, ...options };
|
|
525
526
|
const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {
|
|
526
527
|
initialState: {
|
|
527
528
|
images,
|
|
528
529
|
previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,
|
|
529
|
-
previewConfig:
|
|
530
|
+
previewConfig: config
|
|
530
531
|
},
|
|
531
532
|
backdropClass: 'thy-image-preview-backdrop',
|
|
532
533
|
panelClass: 'thy-image-preview-container',
|
|
533
534
|
size: ThyDialogSizes.full,
|
|
534
|
-
...
|
|
535
|
+
...config
|
|
535
536
|
});
|
|
536
537
|
const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);
|
|
537
538
|
return imagePreviewRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-image.mjs","sources":["../../../src/image/image-group.component.ts","../../../src/image/image.config.ts","../../../src/image/utils.ts","../../../src/image/preview/image-preview.component.ts","../../../src/image/preview/image-preview.component.html","../../../src/image/preview/image-preview-ref.ts","../../../src/image/image.service.ts","../../../src/image/image.directive.ts","../../../src/image/module.ts","../../../src/image/ngx-tethys-image.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation, Injector, ElementRef } from '@angular/core';\nimport { ThyImageDirective } from './image.directive';\n\n/**\n * 图片分组,提供 thyImageGroup 指令和 thy-image-group 标签两种使用方式\n *\n */\n@Component({\n selector: 'thy-image-group, [thyImageGroup]',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyImageGroupComponent {\n constructor(public injector: Injector, public element: ElementRef) {}\n\n images: ThyImageDirective[] = [];\n\n addImage(image: ThyImageDirective, index: number): void {\n this.images.splice(index, 0, image);\n }\n\n removeImage(index: number) {\n this.images.splice(index, 1);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyAbstractOverlayConfig, ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport class ThyImagePreviewConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n closeOnNavigation?: boolean;\n disableClose?: boolean;\n disableKeyboardSelectable?: boolean;\n zoom?: number;\n rotate?: number;\n}\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS = new InjectionToken<ThyImagePreviewConfig>('thy-image-default-options');\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER = {\n provide: THY_IMAGE_DEFAULT_PREVIEW_OPTIONS,\n useValue: {\n hasBackdrop: true,\n closeOnNavigation: true,\n disableClose: false,\n disableKeyboardSelectable: false,\n restoreFocus: false\n }\n};\n\nexport const imageAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'image',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nexport const fetchImageBlob = (url: string) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n const loadedXhr$ = fromEvent(xhr, 'load').pipe(\n take(1),\n map(data => {\n return xhr.response;\n })\n );\n xhr.send();\n return loadedXhr$;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n ElementRef,\n ViewChild,\n NgZone,\n OnDestroy\n} from '@angular/core';\nimport { InternalImageInfo, ThyImageInfo, ThyImagePreviewMode, ThyImagePreviewOperation, ThyImagePreviewOptions } from '../image.class';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { fromEvent, Observable, of } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ThyDialog } from 'ngx-tethys/dialog';\nimport { getClientSize, getFitContentPosition, getOffset, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { ThyFullscreen } from 'ngx-tethys/fullscreen';\nimport { ThyCopyEvent } from 'ngx-tethys/copy';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { fetchImageBlob } from '../utils';\n\nconst initialPosition = {\n x: 0,\n y: 0\n};\nconst IMAGE_MAX_ZOOM = 3;\nconst IMAGE_MIN_ZOOM = 0.1;\nconst HORIZONTAL_SPACE = 100 * 2; // left: 100px; right: 100px\nconst VERTICAL_SPACE = 96 + 106; // top: 96px; bottom: 106px\n\n/**\n * 图片预览组件\n */\n@Component({\n selector: 'thy-image-preview',\n exportAs: 'thyImagePreview',\n templateUrl: './image-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-image-preview-wrap',\n '[class.thy-image-preview-moving]': 'isDragging'\n }\n})\nexport class ThyImagePreviewComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n images: InternalImageInfo[] = [];\n previewIndex: number = 0;\n previewConfig: ThyImagePreviewOptions;\n previewImageTransform = '';\n previewImageWrapperTransform = '';\n zoomDisabled = false;\n zoom: number = 1;\n position = { ...initialPosition };\n isDragging = false;\n isLoadingDone = false;\n isFullScreen = false;\n isInsideScreen = true;\n currentImageMode: ThyImagePreviewMode = 'original-scale';\n previewOperations: ThyImagePreviewOperation[];\n defaultPreviewOperations: ThyImagePreviewOperation[] = [\n {\n icon: 'zoom-out',\n name: '缩小',\n action: (image: ThyImageInfo) => {\n this.zoomOut();\n },\n type: 'zoom-out'\n },\n {\n icon: 'zoom-in',\n name: '放大',\n action: (image: ThyImageInfo) => {\n this.zoomIn();\n },\n type: 'zoom-in'\n },\n {\n icon: 'one-to-one',\n name: '原始比例',\n action: (image: ThyImageInfo) => {\n this.setOriginalSize();\n },\n type: 'original-scale'\n },\n {\n icon: 'max-view',\n name: '适应屏幕',\n action: () => {\n this.setFitScreen();\n },\n type: 'fit-screen'\n },\n {\n icon: 'expand-arrows',\n name: '全屏显示',\n action: () => {\n this.fullScreen();\n },\n type: 'full-screen'\n },\n {\n icon: 'rotate-right',\n name: '旋转',\n action: (image: ThyImageInfo) => {\n this.rotateRight();\n },\n type: 'rotate-right'\n },\n {\n icon: 'download',\n name: '下载',\n action: (image: ThyImageInfo) => {\n this.download(image);\n },\n type: 'download'\n },\n {\n icon: 'preview',\n name: '查看原图',\n action: () => {\n this.viewOriginal();\n },\n type: 'view-original'\n },\n {\n icon: 'link-insert',\n name: '复制链接',\n type: 'copyLink'\n }\n ];\n private rotate: number;\n\n get previewImage(): InternalImageInfo {\n return this.images[this.previewIndex];\n }\n\n get previewImageOriginSrc() {\n let imageSrc = this.previewImage.origin?.src || this.previewImage.src;\n if (imageSrc.startsWith('./')) {\n return window.location.host + '/' + imageSrc.split('./')[1];\n }\n return imageSrc;\n }\n\n get defaultZoom(): number {\n if (this.previewConfig?.zoom && this.previewConfig?.zoom > 0) {\n return this.previewConfig.zoom >= IMAGE_MAX_ZOOM\n ? IMAGE_MAX_ZOOM\n : this.previewConfig.zoom <= IMAGE_MIN_ZOOM\n ? IMAGE_MIN_ZOOM\n : this.previewConfig.zoom;\n }\n }\n\n @ViewChild('imgRef', { static: false }) imageRef!: ElementRef<HTMLImageElement>;\n @ViewChild('imagePreviewWrapper', { static: true }) imagePreviewWrapper!: ElementRef<HTMLElement>;\n\n constructor(\n public thyDialog: ThyDialog,\n public thyFullscreen: ThyFullscreen,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private notifyService: ThyNotifyService,\n private host: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.initPreview();\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.host.nativeElement, 'click')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(event => {\n if (\n (event.target === event.currentTarget ||\n (this.isInsideScreen && this.imagePreviewWrapper.nativeElement.contains(event.target as HTMLElement))) &&\n !this.previewConfig?.disableClose\n ) {\n this.ngZone.run(() => !this.isFullScreen && this.thyDialog.close());\n }\n });\n\n fromEvent(this.imagePreviewWrapper.nativeElement, 'mousedown')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this.isDragging = !this.isInsideScreen && true;\n });\n });\n }\n\n setOriginalSize() {\n this.reset();\n this.currentImageMode = 'fit-screen';\n this.zoom = 1;\n this.updatePreviewImageTransform();\n this.calculateInsideScreen();\n this.isLoadingDone = true;\n this.cdr.detectChanges();\n }\n\n setFitScreen() {\n this.reset();\n this.isInsideScreen = true;\n this.updatePreviewImage();\n }\n\n useDefaultZoomUpdate(isUpdateImageWrapper: boolean) {\n this.zoom = this.defaultZoom;\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n }\n\n useCalculateZoomUpdate(isUpdateImageWrapper?: boolean) {\n let img = new Image();\n img.src = this.previewImage.src;\n img.onload = () => {\n const { width: offsetWidth, height: offsetHeight } = getClientSize();\n const innerWidth = offsetWidth - HORIZONTAL_SPACE;\n const innerHeight = offsetHeight - VERTICAL_SPACE;\n const { naturalWidth, naturalHeight } = img;\n const xRatio = innerWidth / naturalWidth;\n const yRatio = innerHeight / naturalHeight;\n const zoom = Math.min(xRatio, yRatio);\n if (zoom > 1) {\n this.zoom = 1;\n } else {\n this.zoom = zoom;\n }\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n };\n }\n\n updatePreviewImage() {\n this.resolvePreviewImage().subscribe(result => {\n if (!result) {\n // error\n this.isLoadingDone = true;\n return;\n }\n // image size\n if (!this.previewImage.size && this.previewImage.blob) {\n this.previewImage.size = Math.floor((this.previewImage.blob.size / 1024) * 100) / 100 + ' KB';\n }\n if (this.defaultZoom) {\n this.useDefaultZoomUpdate(true);\n } else {\n this.useCalculateZoomUpdate();\n }\n });\n }\n\n resolvePreviewImage() {\n return new Observable<Boolean>(subscriber => {\n if (this.previewImage.src.startsWith('blob:')) {\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(this.previewImage.src);\n subscriber.next(true);\n subscriber.complete();\n return;\n }\n if (this.previewImage.objectURL || !this.previewConfig.resolveSize) {\n subscriber.next(true);\n subscriber.complete();\n } else {\n fetchImageBlob(this.previewImage.src).subscribe(\n blob => {\n const urlCreator = window.URL || window.webkitURL;\n const objectURL = urlCreator.createObjectURL(blob);\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(objectURL);\n this.previewImage.blob = blob;\n subscriber.next(true);\n subscriber.complete();\n },\n error => {\n subscriber.next(false);\n subscriber.complete();\n }\n );\n }\n });\n }\n\n initPreview() {\n if (Array.isArray(this.previewConfig?.operations) && this.previewConfig?.operations.length) {\n this.previewOperations = this.defaultPreviewOperations.filter(item => this.previewConfig.operations.includes(item.type));\n } else {\n this.previewOperations = this.defaultPreviewOperations;\n }\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.updatePreviewImage();\n }\n\n download(image: ThyImageInfo) {\n let img = new Image();\n img.setAttribute('crossOrigin', 'Anonymous');\n img.onload = () => {\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n let url = canvas.toDataURL('images/png');\n let a = document.createElement('a');\n let event = new MouseEvent('click');\n a.download = image.name || 'default.png';\n a.href = url;\n a.dispatchEvent(event);\n };\n img.onerror = () => {\n let a = document.createElement('a');\n a.download = image.name || 'default.png';\n a.target = '_blank';\n a.href = image.origin?.src || image.src;\n let event = new MouseEvent('click');\n a.dispatchEvent(event);\n };\n img.src = image.origin?.src || image.src;\n }\n\n zoomIn(): void {\n if (this.zoom < IMAGE_MAX_ZOOM) {\n this.zoom = Math.min(this.zoom + 0.1, IMAGE_MAX_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n zoomOut(): void {\n if (this.zoom > IMAGE_MIN_ZOOM) {\n this.zoom = Math.max(this.zoom - 0.1, IMAGE_MIN_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n calculateInsideScreen() {\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { width: clientWidth, height: clientHeight } = getClientSize();\n if (width >= clientWidth || height >= clientHeight) {\n this.isInsideScreen = false;\n } else {\n this.isInsideScreen = true;\n }\n }\n\n viewOriginal() {\n window.open(this.previewImage?.origin?.src || this.previewImage.src, '_blank');\n }\n\n rotateRight(): void {\n this.rotate += 90;\n this.updatePreviewImageTransform();\n }\n\n fullScreen(): void {\n const targetElement = this.host.nativeElement.querySelector('.thy-image-preview');\n this.isFullScreen = true;\n const fullscreenRef = this.thyFullscreen.launch({\n target: targetElement\n });\n fullscreenRef.afterExited().subscribe(() => {\n this.isFullScreen = false;\n this.cdr.markForCheck();\n });\n }\n\n copyLink(event: ThyCopyEvent) {\n if (event.isSuccess) {\n this.notifyService.success('复制图片地址成功');\n } else {\n this.notifyService.error('复制图片地址失败');\n }\n }\n\n prev() {\n if (this.previewIndex > 0) {\n this.previewIndex--;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n next() {\n if (this.previewIndex < this.images.length - 1) {\n this.previewIndex++;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n dragReleased() {\n this.isDragging = false;\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { left, top } = getOffset(this.imageRef.nativeElement, window);\n const { width: clientWidth, height: clientHeight } = getClientSize();\n const isRotate = this.rotate % 180 !== 0;\n const fitContentParams = {\n width: isRotate ? height : width,\n height: isRotate ? width : height,\n left,\n top,\n clientWidth,\n clientHeight\n };\n const fitContentPos = getFitContentPosition(fitContentParams);\n if (!isUndefinedOrNull(fitContentPos.x) || !isUndefinedOrNull(fitContentPos.y)) {\n this.position = { ...this.position, ...fitContentPos };\n }\n }\n\n private reset(): void {\n this.currentImageMode = 'original-scale';\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.position = { ...initialPosition };\n this.cdr.detectChanges();\n }\n\n private updatePreviewImageTransform(): void {\n this.previewImageTransform = `scale3d(${this.zoom}, ${this.zoom}, 1) rotate(${this.rotate}deg)`;\n }\n\n private updatePreviewImageWrapperTransform(): void {\n this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"退出预览\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"退出预览\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"退出全屏\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"上一张\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"下一张\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n","import { ThyImagePreviewComponent } from './image-preview.component';\nimport { ThyDialogRef } from 'ngx-tethys/dialog';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { ThyImagePreviewOptions } from '../image.class';\n\nexport class ThyImagePreviewRef {\n get componentInstance() {\n return this.dialogRef.componentInstance;\n }\n\n constructor(\n public previewInstance: ThyImagePreviewComponent,\n private config: ThyImagePreviewOptions,\n private dialogRef: ThyDialogRef<ThyImagePreviewComponent>\n ) {\n dialogRef\n .keydownEvents()\n .pipe()\n .subscribe(event => {\n if (!config.disableKeyboardSelectable && event.keyCode === LEFT_ARROW) {\n this.prev();\n }\n if (!config.disableKeyboardSelectable && event.keyCode === RIGHT_ARROW) {\n this.next();\n }\n });\n }\n\n next(): void {\n this.previewInstance.next();\n }\n\n prev(): void {\n this.previewInstance.prev();\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ThyImagePreviewConfig, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS } from './image.config';\nimport { ThyImageInfo, ThyImagePreviewOptions } from './image.class';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyDialog, ThyDialogSizes } from 'ngx-tethys/dialog';\nimport { ThyImagePreviewRef } from './preview/image-preview-ref';\n\n/**\n * 图片预览服务\n */\n@Injectable()\nexport class ThyImageService {\n /**\n * 图片预览默认配置,外部可通过注入 THY_IMAGE_DEFAULT_PREVIEW_OPTIONS 进行配置\n */\n defaultConfig: ThyImagePreviewConfig;\n constructor(\n public thyDialog: ThyDialog,\n @Optional()\n @Inject(THY_IMAGE_DEFAULT_PREVIEW_OPTIONS)\n defaultConfig: ThyImagePreviewConfig\n ) {\n this.defaultConfig = defaultConfig;\n }\n\n /**\n * 图片预览方法\n */\n preview(images: ThyImageInfo[], options?: ThyImagePreviewOptions & { startIndex?: number }): ThyImagePreviewRef {\n const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {\n initialState: {\n images,\n previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,\n previewConfig: { ...this.defaultConfig, ...options }\n },\n backdropClass: 'thy-image-preview-backdrop',\n panelClass: 'thy-image-preview-container',\n size: ThyDialogSizes.full,\n ...options\n });\n const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);\n return imagePreviewRef;\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectFlags,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n Injector,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImageMeta } from './image.class';\nimport { ThyImageService } from './image.service';\n\n/**\n * thyImage: 预览图片指令,只可绑定到 img 标签上\n */\n@Directive({\n selector: 'img[thyImage]',\n exportAs: 'thyImage',\n host: {\n '(click)': 'onPreview($event)',\n class: 'thy-image'\n }\n})\nexport class ThyImageDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * 图片地址\n */\n @Input() thySrc: string;\n /**\n * 预览图片地址\n */\n @Input() thyPreviewSrc: string;\n /**\n * 图片原图地址\n */\n @Input() thyOriginSrc: string;\n /**\n * 图片附加信息,包含 { name: string, size?: string | number; }\n */\n @Input() thyImageMeta: ThyImageMeta;\n /**\n * 是否禁止预览\n * @default false\n */\n @Input() @InputBoolean() thyDisablePreview: boolean;\n\n /**\n * 是否自动计算图片资源大小\n * @default false\n */\n @Input() @InputBoolean() thyResolveSize = false;\n\n get previewable(): boolean {\n return !this.thyDisablePreview;\n }\n\n private parentGroup: ThyImageGroupComponent;\n\n constructor(private thyImageService: ThyImageService, private injector: Injector, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n this.getParentGroup();\n }\n\n ngAfterViewInit(): void {\n if (this.parentGroup) {\n this.addParentImage();\n }\n }\n\n getParentGroup() {\n while (true) {\n // 多层 thy-image-group 嵌套时,获取最外层 thy-image-group 下的所有图片\n const injector = this.parentGroup?.injector || this.injector;\n const parentGroup = injector.get(ThyImageGroupComponent, null, InjectFlags.SkipSelf);\n if (!parentGroup) {\n break;\n }\n this.parentGroup = parentGroup;\n }\n }\n\n addParentImage() {\n setTimeout(() => {\n const parentElement: HTMLElement = this.parentGroup.element.nativeElement;\n const images = parentElement.querySelectorAll('img[thyImage]');\n const index = Array.prototype.indexOf.call(images, this.elementRef.nativeElement);\n if (index >= 0) {\n this.parentGroup.addImage(this, index);\n } else {\n this.parentGroup.addImage(this, this.parentGroup.images.length);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thySrc } = changes;\n if (thySrc) {\n this.elementRef.nativeElement.src = thySrc.currentValue;\n }\n }\n\n onPreview(event: MouseEvent) {\n if (!this.previewable || event.button !== 0) {\n return;\n }\n if (this.parentGroup) {\n const previewAbleImages = this.parentGroup.images.filter(e => e.previewable);\n const previewImages = previewAbleImages.map(e => ({\n src: e.thyPreviewSrc || e.thySrc,\n ...e.thyImageMeta,\n origin: {\n src: e.thyOriginSrc\n }\n }));\n const startIndex = previewAbleImages.findIndex(el => this === el);\n this.thyImageService.preview(previewImages, {\n startIndex,\n resolveSize: this.thyResolveSize\n });\n } else {\n const previewImages = [\n {\n src: this.thyPreviewSrc || this.thySrc,\n ...this.thyImageMeta,\n origin: {\n src: this.thyOriginSrc\n }\n }\n ];\n this.thyImageService.preview(previewImages, { resolveSize: this.thyResolveSize });\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentGroup) {\n const index = this.parentGroup.images.findIndex(item => item === this);\n this.parentGroup.removeImage(index);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyImageDirective } from './image.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyImageService } from './image.service';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER } from './image.config';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyCopyModule } from 'ngx-tethys/copy';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyActionModule } from 'ngx-tethys/action';\n\n@NgModule({\n declarations: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n exports: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n imports: [\n CommonModule,\n PortalModule,\n DragDropModule,\n ThyIconModule,\n ThyDialogModule,\n ThyDividerModule,\n ThyTooltipModule,\n ThyCopyModule,\n ThyLoadingModule,\n ThyActionModule\n ],\n providers: [ThyImageService, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER]\n})\nexport class ThyImageModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyImageService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-image.mjs","sources":["../../../src/image/image-group.component.ts","../../../src/image/image.config.ts","../../../src/image/utils.ts","../../../src/image/preview/image-preview.component.ts","../../../src/image/preview/image-preview.component.html","../../../src/image/preview/image-preview-ref.ts","../../../src/image/image.service.ts","../../../src/image/image.directive.ts","../../../src/image/module.ts","../../../src/image/ngx-tethys-image.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation, Injector, ElementRef } from '@angular/core';\nimport { ThyImageDirective } from './image.directive';\n\n/**\n * 图片分组,提供 thyImageGroup 指令和 thy-image-group 标签两种使用方式\n *\n */\n@Component({\n selector: 'thy-image-group, [thyImageGroup]',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyImageGroupComponent {\n constructor(public injector: Injector, public element: ElementRef) {}\n\n images: ThyImageDirective[] = [];\n\n addImage(image: ThyImageDirective, index: number): void {\n this.images.splice(index, 0, image);\n }\n\n removeImage(index: number) {\n this.images.splice(index, 1);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyAbstractOverlayConfig, ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport class ThyImagePreviewConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n closeOnNavigation?: boolean;\n disableClose?: boolean;\n disableKeyboardSelectable?: boolean;\n zoom?: number;\n rotate?: number;\n}\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS = new InjectionToken<ThyImagePreviewConfig>('thy-image-default-options');\n\nexport const THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER = {\n provide: THY_IMAGE_DEFAULT_PREVIEW_OPTIONS,\n useValue: {\n hasBackdrop: true,\n closeOnNavigation: true,\n disableClose: false,\n disableKeyboardSelectable: false,\n restoreFocus: false\n }\n};\n\nexport const imageAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'image',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nexport const fetchImageBlob = (url: string) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n const loadedXhr$ = fromEvent(xhr, 'load').pipe(\n take(1),\n map(data => {\n return xhr.response;\n })\n );\n xhr.send();\n return loadedXhr$;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n ElementRef,\n ViewChild,\n NgZone,\n OnDestroy\n} from '@angular/core';\nimport { InternalImageInfo, ThyImageInfo, ThyImagePreviewMode, ThyImagePreviewOperation, ThyImagePreviewOptions } from '../image.class';\nimport { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';\nimport { fromEvent, Observable, of } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ThyDialog } from 'ngx-tethys/dialog';\nimport { getClientSize, getFitContentPosition, getOffset, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { ThyFullscreen } from 'ngx-tethys/fullscreen';\nimport { ThyCopyEvent } from 'ngx-tethys/copy';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { fetchImageBlob } from '../utils';\n\nconst initialPosition = {\n x: 0,\n y: 0\n};\nconst IMAGE_MAX_ZOOM = 3;\nconst IMAGE_MIN_ZOOM = 0.1;\nconst HORIZONTAL_SPACE = 100 * 2; // left: 100px; right: 100px\nconst VERTICAL_SPACE = 96 + 106; // top: 96px; bottom: 106px\n\n/**\n * 图片预览组件\n */\n@Component({\n selector: 'thy-image-preview',\n exportAs: 'thyImagePreview',\n templateUrl: './image-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-image-preview-wrap',\n '[class.thy-image-preview-moving]': 'isDragging'\n }\n})\nexport class ThyImagePreviewComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n images: InternalImageInfo[] = [];\n previewIndex: number = 0;\n previewConfig: ThyImagePreviewOptions;\n previewImageTransform = '';\n previewImageWrapperTransform = '';\n zoomDisabled = false;\n zoom: number = 1;\n position = { ...initialPosition };\n isDragging = false;\n isLoadingDone = false;\n isFullScreen = false;\n isInsideScreen = true;\n currentImageMode: ThyImagePreviewMode = 'original-scale';\n previewOperations: ThyImagePreviewOperation[];\n defaultPreviewOperations: ThyImagePreviewOperation[] = [\n {\n icon: 'zoom-out',\n name: '缩小',\n action: (image: ThyImageInfo) => {\n this.zoomOut();\n },\n type: 'zoom-out'\n },\n {\n icon: 'zoom-in',\n name: '放大',\n action: (image: ThyImageInfo) => {\n this.zoomIn();\n },\n type: 'zoom-in'\n },\n {\n icon: 'one-to-one',\n name: '原始比例',\n action: (image: ThyImageInfo) => {\n this.setOriginalSize();\n },\n type: 'original-scale'\n },\n {\n icon: 'max-view',\n name: '适应屏幕',\n action: () => {\n this.setFitScreen();\n },\n type: 'fit-screen'\n },\n {\n icon: 'expand-arrows',\n name: '全屏显示',\n action: () => {\n this.fullScreen();\n },\n type: 'full-screen'\n },\n {\n icon: 'rotate-right',\n name: '旋转',\n action: (image: ThyImageInfo) => {\n this.rotateRight();\n },\n type: 'rotate-right'\n },\n {\n icon: 'download',\n name: '下载',\n action: (image: ThyImageInfo) => {\n this.download(image);\n },\n type: 'download'\n },\n {\n icon: 'preview',\n name: '查看原图',\n action: () => {\n this.viewOriginal();\n },\n type: 'view-original'\n },\n {\n icon: 'link-insert',\n name: '复制链接',\n type: 'copyLink'\n }\n ];\n private rotate: number;\n\n get previewImage(): InternalImageInfo {\n return this.images[this.previewIndex];\n }\n\n get previewImageOriginSrc() {\n let imageSrc = this.previewImage.origin?.src || this.previewImage.src;\n if (imageSrc.startsWith('./')) {\n return window.location.host + '/' + imageSrc.split('./')[1];\n }\n return imageSrc;\n }\n\n get defaultZoom(): number {\n if (this.previewConfig?.zoom && this.previewConfig?.zoom > 0) {\n return this.previewConfig.zoom >= IMAGE_MAX_ZOOM\n ? IMAGE_MAX_ZOOM\n : this.previewConfig.zoom <= IMAGE_MIN_ZOOM\n ? IMAGE_MIN_ZOOM\n : this.previewConfig.zoom;\n }\n }\n\n @ViewChild('imgRef', { static: false }) imageRef!: ElementRef<HTMLImageElement>;\n @ViewChild('imagePreviewWrapper', { static: true }) imagePreviewWrapper!: ElementRef<HTMLElement>;\n\n constructor(\n public thyDialog: ThyDialog,\n public thyFullscreen: ThyFullscreen,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private notifyService: ThyNotifyService,\n private host: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.initPreview();\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.host.nativeElement, 'click')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(event => {\n if (\n (event.target === event.currentTarget ||\n (this.isInsideScreen && this.imagePreviewWrapper.nativeElement.contains(event.target as HTMLElement))) &&\n !this.previewConfig?.disableClose\n ) {\n this.ngZone.run(() => !this.isFullScreen && this.thyDialog.close());\n }\n });\n\n fromEvent(this.imagePreviewWrapper.nativeElement, 'mousedown')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this.isDragging = !this.isInsideScreen && true;\n });\n });\n }\n\n setOriginalSize() {\n this.reset();\n this.currentImageMode = 'fit-screen';\n this.zoom = 1;\n this.updatePreviewImageTransform();\n this.calculateInsideScreen();\n this.isLoadingDone = true;\n this.cdr.detectChanges();\n }\n\n setFitScreen() {\n this.reset();\n this.isInsideScreen = true;\n this.updatePreviewImage();\n }\n\n useDefaultZoomUpdate(isUpdateImageWrapper: boolean) {\n this.zoom = this.defaultZoom;\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n }\n\n useCalculateZoomUpdate(isUpdateImageWrapper?: boolean) {\n let img = new Image();\n img.src = this.previewImage.src;\n img.onload = () => {\n const { width: offsetWidth, height: offsetHeight } = getClientSize();\n const innerWidth = offsetWidth - HORIZONTAL_SPACE;\n const innerHeight = offsetHeight - VERTICAL_SPACE;\n const { naturalWidth, naturalHeight } = img;\n const xRatio = innerWidth / naturalWidth;\n const yRatio = innerHeight / naturalHeight;\n const zoom = Math.min(xRatio, yRatio);\n if (zoom > 1) {\n this.zoom = 1;\n } else {\n this.zoom = zoom;\n }\n this.isLoadingDone = true;\n this.updatePreviewImageTransform();\n if (isUpdateImageWrapper) {\n this.updatePreviewImageWrapperTransform();\n }\n this.cdr.detectChanges();\n };\n }\n\n updatePreviewImage() {\n this.resolvePreviewImage().subscribe(result => {\n if (!result) {\n // error\n this.isLoadingDone = true;\n return;\n }\n // image size\n if (!this.previewImage.size && this.previewImage.blob) {\n this.previewImage.size = Math.floor((this.previewImage.blob.size / 1024) * 100) / 100 + ' KB';\n }\n if (this.defaultZoom) {\n this.useDefaultZoomUpdate(true);\n } else {\n this.useCalculateZoomUpdate();\n }\n });\n }\n\n resolvePreviewImage() {\n return new Observable<Boolean>(subscriber => {\n if (this.previewImage.src.startsWith('blob:')) {\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(this.previewImage.src);\n subscriber.next(true);\n subscriber.complete();\n return;\n }\n if (this.previewImage.objectURL || !this.previewConfig.resolveSize) {\n subscriber.next(true);\n subscriber.complete();\n } else {\n fetchImageBlob(this.previewImage.src).subscribe(\n blob => {\n const urlCreator = window.URL || window.webkitURL;\n const objectURL = urlCreator.createObjectURL(blob);\n this.previewImage.objectURL = this.sanitizer.bypassSecurityTrustUrl(objectURL);\n this.previewImage.blob = blob;\n subscriber.next(true);\n subscriber.complete();\n },\n error => {\n subscriber.next(false);\n subscriber.complete();\n }\n );\n }\n });\n }\n\n initPreview() {\n if (Array.isArray(this.previewConfig?.operations) && this.previewConfig?.operations.length) {\n this.previewOperations = this.defaultPreviewOperations.filter(item => this.previewConfig.operations.includes(item.type));\n } else {\n this.previewOperations = this.defaultPreviewOperations;\n }\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.updatePreviewImage();\n }\n\n download(image: ThyImageInfo) {\n let img = new Image();\n img.setAttribute('crossOrigin', 'Anonymous');\n img.onload = () => {\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0, img.width, img.height);\n let url = canvas.toDataURL('images/png');\n let a = document.createElement('a');\n let event = new MouseEvent('click');\n a.download = image.name || 'default.png';\n a.href = url;\n a.dispatchEvent(event);\n };\n img.onerror = () => {\n let a = document.createElement('a');\n a.download = image.name || 'default.png';\n a.target = '_blank';\n a.href = image.origin?.src || image.src;\n let event = new MouseEvent('click');\n a.dispatchEvent(event);\n };\n img.src = image.origin?.src || image.src;\n }\n\n zoomIn(): void {\n if (this.zoom < IMAGE_MAX_ZOOM) {\n this.zoom = Math.min(this.zoom + 0.1, IMAGE_MAX_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n zoomOut(): void {\n if (this.zoom > IMAGE_MIN_ZOOM) {\n this.zoom = Math.max(this.zoom - 0.1, IMAGE_MIN_ZOOM);\n this.calculateInsideScreen();\n this.updatePreviewImageTransform();\n this.position = { ...initialPosition };\n }\n }\n\n calculateInsideScreen() {\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { width: clientWidth, height: clientHeight } = getClientSize();\n if (width >= clientWidth || height >= clientHeight) {\n this.isInsideScreen = false;\n } else {\n this.isInsideScreen = true;\n }\n }\n\n viewOriginal() {\n window.open(this.previewImage?.origin?.src || this.previewImage.src, '_blank');\n }\n\n rotateRight(): void {\n this.rotate += 90;\n this.updatePreviewImageTransform();\n }\n\n fullScreen(): void {\n const targetElement = this.host.nativeElement.querySelector('.thy-image-preview');\n this.isFullScreen = true;\n const fullscreenRef = this.thyFullscreen.launch({\n target: targetElement\n });\n fullscreenRef.afterExited().subscribe(() => {\n this.isFullScreen = false;\n this.cdr.markForCheck();\n });\n }\n\n copyLink(event: ThyCopyEvent) {\n if (event.isSuccess) {\n this.notifyService.success('复制图片地址成功');\n } else {\n this.notifyService.error('复制图片地址失败');\n }\n }\n\n prev() {\n if (this.previewIndex > 0) {\n this.previewIndex--;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n next() {\n if (this.previewIndex < this.images.length - 1) {\n this.previewIndex++;\n this.isLoadingDone = false;\n this.reset();\n this.updatePreviewImage();\n }\n }\n\n dragReleased() {\n this.isDragging = false;\n const width = this.imageRef.nativeElement.offsetWidth * this.zoom;\n const height = this.imageRef.nativeElement.offsetHeight * this.zoom;\n const { left, top } = getOffset(this.imageRef.nativeElement, window);\n const { width: clientWidth, height: clientHeight } = getClientSize();\n const isRotate = this.rotate % 180 !== 0;\n const fitContentParams = {\n width: isRotate ? height : width,\n height: isRotate ? width : height,\n left,\n top,\n clientWidth,\n clientHeight\n };\n const fitContentPos = getFitContentPosition(fitContentParams);\n if (!isUndefinedOrNull(fitContentPos.x) || !isUndefinedOrNull(fitContentPos.y)) {\n this.position = { ...this.position, ...fitContentPos };\n }\n }\n\n private reset(): void {\n this.currentImageMode = 'original-scale';\n this.rotate = this.previewConfig?.rotate ?? 0;\n this.position = { ...initialPosition };\n this.cdr.detectChanges();\n }\n\n private updatePreviewImageTransform(): void {\n this.previewImageTransform = `scale3d(${this.zoom}, ${this.zoom}, 1) rotate(${this.rotate}deg)`;\n }\n\n private updatePreviewImageWrapperTransform(): void {\n this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"退出预览\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"退出预览\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"退出全屏\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"上一张\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"下一张\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n","import { ThyImagePreviewComponent } from './image-preview.component';\nimport { ThyDialogRef } from 'ngx-tethys/dialog';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { ThyImagePreviewOptions } from '../image.class';\n\nexport class ThyImagePreviewRef {\n get componentInstance() {\n return this.dialogRef.componentInstance;\n }\n\n constructor(\n public previewInstance: ThyImagePreviewComponent,\n private config: ThyImagePreviewOptions,\n private dialogRef: ThyDialogRef<ThyImagePreviewComponent>\n ) {\n dialogRef\n .keydownEvents()\n .pipe()\n .subscribe(event => {\n if (!config.disableKeyboardSelectable && event.keyCode === LEFT_ARROW) {\n this.prev();\n }\n if (!config.disableKeyboardSelectable && event.keyCode === RIGHT_ARROW) {\n this.next();\n }\n });\n }\n\n next(): void {\n this.previewInstance.next();\n }\n\n prev(): void {\n this.previewInstance.prev();\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ThyImagePreviewConfig, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS } from './image.config';\nimport { ThyImageInfo, ThyImagePreviewOptions } from './image.class';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyDialog, ThyDialogSizes } from 'ngx-tethys/dialog';\nimport { ThyImagePreviewRef } from './preview/image-preview-ref';\n\n/**\n * 图片预览服务\n */\n@Injectable()\nexport class ThyImageService {\n /**\n * 图片预览默认配置,外部可通过注入 THY_IMAGE_DEFAULT_PREVIEW_OPTIONS 进行配置\n */\n defaultConfig: ThyImagePreviewConfig;\n constructor(\n public thyDialog: ThyDialog,\n @Optional()\n @Inject(THY_IMAGE_DEFAULT_PREVIEW_OPTIONS)\n defaultConfig: ThyImagePreviewConfig\n ) {\n this.defaultConfig = defaultConfig;\n }\n\n /**\n * 图片预览方法\n */\n preview(images: ThyImageInfo[], options?: ThyImagePreviewOptions & { startIndex?: number }): ThyImagePreviewRef {\n const config = { ...this.defaultConfig, ...options };\n const dialogRef = this.thyDialog.open(ThyImagePreviewComponent, {\n initialState: {\n images,\n previewIndex: options?.startIndex >= 0 && options?.startIndex < images.length ? options.startIndex : 0,\n previewConfig: config\n },\n backdropClass: 'thy-image-preview-backdrop',\n panelClass: 'thy-image-preview-container',\n size: ThyDialogSizes.full,\n ...config\n });\n const imagePreviewRef = new ThyImagePreviewRef(dialogRef.componentInstance, { ...this.defaultConfig, ...options }, dialogRef);\n return imagePreviewRef;\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectFlags,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n Injector,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { InputBoolean } from 'ngx-tethys/core';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImageMeta } from './image.class';\nimport { ThyImageService } from './image.service';\n\n/**\n * thyImage: 预览图片指令,只可绑定到 img 标签上\n */\n@Directive({\n selector: 'img[thyImage]',\n exportAs: 'thyImage',\n host: {\n '(click)': 'onPreview($event)',\n class: 'thy-image'\n }\n})\nexport class ThyImageDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * 图片地址\n */\n @Input() thySrc: string;\n /**\n * 预览图片地址\n */\n @Input() thyPreviewSrc: string;\n /**\n * 图片原图地址\n */\n @Input() thyOriginSrc: string;\n /**\n * 图片附加信息,包含 { name: string, size?: string | number; }\n */\n @Input() thyImageMeta: ThyImageMeta;\n /**\n * 是否禁止预览\n * @default false\n */\n @Input() @InputBoolean() thyDisablePreview: boolean;\n\n /**\n * 是否自动计算图片资源大小\n * @default false\n */\n @Input() @InputBoolean() thyResolveSize = false;\n\n get previewable(): boolean {\n return !this.thyDisablePreview;\n }\n\n private parentGroup: ThyImageGroupComponent;\n\n constructor(private thyImageService: ThyImageService, private injector: Injector, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n this.getParentGroup();\n }\n\n ngAfterViewInit(): void {\n if (this.parentGroup) {\n this.addParentImage();\n }\n }\n\n getParentGroup() {\n while (true) {\n // 多层 thy-image-group 嵌套时,获取最外层 thy-image-group 下的所有图片\n const injector = this.parentGroup?.injector || this.injector;\n const parentGroup = injector.get(ThyImageGroupComponent, null, InjectFlags.SkipSelf);\n if (!parentGroup) {\n break;\n }\n this.parentGroup = parentGroup;\n }\n }\n\n addParentImage() {\n setTimeout(() => {\n const parentElement: HTMLElement = this.parentGroup.element.nativeElement;\n const images = parentElement.querySelectorAll('img[thyImage]');\n const index = Array.prototype.indexOf.call(images, this.elementRef.nativeElement);\n if (index >= 0) {\n this.parentGroup.addImage(this, index);\n } else {\n this.parentGroup.addImage(this, this.parentGroup.images.length);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thySrc } = changes;\n if (thySrc) {\n this.elementRef.nativeElement.src = thySrc.currentValue;\n }\n }\n\n onPreview(event: MouseEvent) {\n if (!this.previewable || event.button !== 0) {\n return;\n }\n if (this.parentGroup) {\n const previewAbleImages = this.parentGroup.images.filter(e => e.previewable);\n const previewImages = previewAbleImages.map(e => ({\n src: e.thyPreviewSrc || e.thySrc,\n ...e.thyImageMeta,\n origin: {\n src: e.thyOriginSrc\n }\n }));\n const startIndex = previewAbleImages.findIndex(el => this === el);\n this.thyImageService.preview(previewImages, {\n startIndex,\n resolveSize: this.thyResolveSize\n });\n } else {\n const previewImages = [\n {\n src: this.thyPreviewSrc || this.thySrc,\n ...this.thyImageMeta,\n origin: {\n src: this.thyOriginSrc\n }\n }\n ];\n this.thyImageService.preview(previewImages, { resolveSize: this.thyResolveSize });\n }\n }\n\n ngOnDestroy(): void {\n if (this.parentGroup) {\n const index = this.parentGroup.images.findIndex(item => item === this);\n this.parentGroup.removeImage(index);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyImageDirective } from './image.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyImageGroupComponent } from './image-group.component';\nimport { ThyImagePreviewComponent } from './preview/image-preview.component';\nimport { ThyImageService } from './image.service';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER } from './image.config';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyCopyModule } from 'ngx-tethys/copy';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyActionModule } from 'ngx-tethys/action';\n\n@NgModule({\n declarations: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n exports: [ThyImageDirective, ThyImageGroupComponent, ThyImagePreviewComponent],\n imports: [\n CommonModule,\n PortalModule,\n DragDropModule,\n ThyIconModule,\n ThyDialogModule,\n ThyDividerModule,\n ThyTooltipModule,\n ThyCopyModule,\n ThyLoadingModule,\n ThyActionModule\n ],\n providers: [ThyImageService, THY_IMAGE_DEFAULT_PREVIEW_OPTIONS_PROVIDER]\n})\nexport class ThyImageModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyImageService"],"mappings":"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"}
|
package/fesm2020/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('13.1.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('13.1.9');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
|
package/package.json
CHANGED
package/schematics/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "13.1.
|
|
1
|
+
export declare const VERSION = "13.1.9";
|
package/schematics/version.js
CHANGED