@libs-ui/components-gallery 0.1.1-1
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/README.md +3 -0
- package/esm2022/gallery.component.mjs +131 -0
- package/esm2022/index.mjs +4 -0
- package/esm2022/interfaces/functions-control-event.interface.mjs +2 -0
- package/esm2022/interfaces/index.mjs +3 -0
- package/esm2022/interfaces/zoom.interface.mjs +2 -0
- package/esm2022/libs-ui-components-gallery.mjs +5 -0
- package/esm2022/viewer/viewer.component.mjs +320 -0
- package/fesm2022/libs-ui-components-gallery.mjs +460 -0
- package/fesm2022/libs-ui-components-gallery.mjs.map +1 -0
- package/gallery.component.d.ts +29 -0
- package/index.d.ts +3 -0
- package/interfaces/functions-control-event.interface.d.ts +5 -0
- package/interfaces/index.d.ts +2 -0
- package/interfaces/zoom.interface.d.ts +3 -0
- package/package.json +33 -0
- package/viewer/viewer.component.d.ts +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libs-ui-components-gallery.mjs","sources":["../../../../../libs-ui/components/gallery/src/gallery.component.ts","../../../../../libs-ui/components/gallery/src/gallery.component.html","../../../../../libs-ui/components/gallery/src/viewer/viewer.component.ts","../../../../../libs-ui/components/gallery/src/viewer/viewer.component.html","../../../../../libs-ui/components/gallery/src/libs-ui-components-gallery.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ComponentRef, computed, effect, inject, input, model, OnDestroy, OnInit, output, signal, untracked } from '@angular/core';\nimport { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { getDayjs, isEmbedFrame, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { Dayjs } from 'dayjs';\nimport { IGalleryFunctionsControlEvent } from './interfaces/functions-control-event.interface';\nimport { LibsUiComponentsGalleryViewerComponent } from './viewer/viewer.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-gallery',\n templateUrl: './gallery.component.html',\n styleUrls: ['./gallery.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet, AsyncPipe, LibsUiIconsGetIconComponentPipe],\n})\nexport class LibsUiComponentsGalleryComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected imagesDisplay = computed(() => {\n return this.images().slice(this.start(), this.end());\n });\n\n private idOverlay = signal<string>(uuid());\n private idInterval = signal<number | undefined>(undefined);\n private viewerRef: ComponentRef<LibsUiComponentsGalleryViewerComponent> | undefined;\n\n // #region INPUT\n readonly images = model.required<Array<Record<string, any>>>();\n readonly start = input<number>(0);\n readonly end = input<number>(3);\n readonly zIndex = input<number>(1200);\n readonly fieldDisplaySrcImage = input<string>('url');\n readonly ignoreOverlayCountImage = input<boolean>();\n readonly imageArrayStringConvert = input<Array<string>>(); // sử dụng trong 1 số trường hợp images là Array<string>\n\n // #region OUTPUT\n readonly outFunctionsControl = output<IGalleryFunctionsControlEvent>();\n readonly outViewerEvent = output<'show' | 'remove'>();\n\n // #region INJECT\n private dynamicComponent = inject(LibsUiDynamicComponentService);\n\n constructor() {\n effect(() => {\n const imgConvert = this.imageArrayStringConvert();\n const fieldGetSrc = this.fieldDisplaySrcImage();\n\n if (!imgConvert?.length || !fieldGetSrc) {\n return;\n }\n untracked(() => {\n const convertedImages =\n imgConvert?.map((item) => {\n return {\n [fieldGetSrc]: item,\n } as Record<string, any>;\n }) || [];\n\n this.images.set(convertedImages);\n });\n });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): IGalleryFunctionsControlEvent {\n return {\n open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected),\n viewerRef: this.ViewerRef,\n };\n }\n\n protected async handlerSelectImage(event: MouseEvent | undefined, imageSelected: Record<string, any>) {\n event?.stopPropagation();\n\n if (this.viewerRef) {\n return;\n }\n\n const viewerComponent = await import('./viewer/viewer.component').then((c) => c.LibsUiComponentsGalleryViewerComponent);\n\n this.viewerRef = this.dynamicComponent.resolveComponentFactory(viewerComponent);\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n\n this.viewerRef.setInput('fieldDisplaySrcImage', this.fieldDisplaySrcImage());\n this.viewerRef.setInput('images', this.images());\n this.viewerRef.setInput('imageSelected', imageSelected);\n this.viewerRef.setInput('zIndex', this.zIndex());\n this.viewerRef.setInput('singleImage', this.images().length <= 1);\n\n const sub = this.viewerRef.instance.outClose.subscribe(() => {\n sub.unsubscribe();\n this.closePopup();\n });\n\n this.dynamicComponent.addToBody(this.viewerRef);\n this.outViewerEvent.emit('show');\n\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay,\n timeLiveUpdate: getDayjs().unix(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n this.idInterval.set(\n setInterval(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }, 2000) as unknown as number\n );\n }\n }\n\n protected handlerImageError(e: ErrorEvent, image: Record<string, any>) {\n const event = e as IEvent;\n\n event.stopPropagation();\n\n image['isError'] = true;\n }\n\n private closePopup() {\n clearInterval(this.idInterval());\n if (this.viewerRef) {\n this.outViewerEvent.emit('remove');\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay,\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n this.dynamicComponent.remove(this.viewerRef);\n this.viewerRef = undefined;\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n }\n\n private get ViewerRef() {\n return this.viewerRef;\n }\n\n ngOnDestroy() {\n this.viewerRef?.destroy();\n this.closePopup();\n }\n}\n","@if (images()) {\n <div class=\"flex w-full h-full\">\n @for (image of imagesDisplay(); track $index) {\n <div\n #itemRef\n class=\"w-full h-full rounded-[4px] overflow-hidden relative cursor-pointer\"\n [class.mr-[8px]]=\"!$last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img\n [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-w-full max-h-full m-auto\"\n (error)=\"handlerImageError($event, image)\" />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: itemRef.clientWidth }\"></div>\n }\n </div>\n @if ($last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-black/15\">\n <span class=\"libs-ui-font-h5m text-white\">+{{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, model, OnDestroy, output, signal, untracked, viewChild, viewChildren } from '@angular/core';\nimport { IBoundingClientRect, IEvent } from '@libs-ui/interfaces-types';\nimport { IZoomDragHTMLElement } from '../interfaces/zoom.interface';\nimport { fromEvent } from 'rxjs';\nimport { viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-gallery-viewer',\n templateUrl: './viewer.component.html',\n styleUrls: ['./viewer.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsPopoverComponent],\n})\nexport class LibsUiComponentsGalleryViewerComponent implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected indexSelected = signal<number>(0);\n protected scaleValue = signal<number>(1);\n protected ratio = signal<string>('100%');\n protected fullScreen = signal<boolean>(false);\n protected isShowButton = signal<boolean>(false);\n protected disable = signal<boolean>(true);\n protected hoverContentViewImage = signal<boolean>(false);\n\n private step = signal<number>(0.1);\n private draggableEl = signal<IZoomDragHTMLElement | null>(null);\n private widthDefault = signal<number>(0);\n private heightDefault = signal<number>(0);\n private viewPort = signal<IBoundingClientRect | undefined>(undefined);\n private canDrag = signal<boolean>(false);\n private widthImage = signal<number>(0);\n private isFirstRender = signal<boolean>(false);\n private timeouts = signal<Array<number>>([]);\n\n // #region INPUT\n readonly images = input.required<Array<Record<string, any>>>();\n readonly fieldDisplaySrcImage = input.required<string>();\n readonly imageSelected = model<Record<string, any>>();\n readonly removeBackdrop = input<boolean>();\n readonly zIndex = input<number, number | undefined>(1200, { transform: (val) => val ?? 1200 });\n readonly singleImage = input<boolean>(false);\n readonly classContainerInclude = input<string>();\n\n // #region OUTPUT\n readonly outClose = output<void>();\n\n // #region VIEW CHILD\n protected containerRef = viewChild<ElementRef>('containerRef');\n protected singleImageRef = viewChild<ElementRef>('singleImageRef');\n protected elementRatioRef = viewChild<ElementRef>('elementRatioRef');\n protected fullContainerRef = viewChild<ElementRef>('fullContainerRef');\n protected imagesRef = viewChildren<ElementRef>('imagesRef');\n\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => {\n if (this.singleImage()) {\n if (this.images().length) {\n untracked(() => {\n this.imageSelected.set(this.images()[0]);\n });\n }\n return;\n }\n\n untracked(() => {\n const indexSelected = this.images().findIndex((item) => item[this.fieldDisplaySrcImage()] === this.imageSelected()?.[this.fieldDisplaySrcImage()]);\n\n this.indexSelected.set(indexSelected);\n\n this.createTimeout((id) => {\n this.clearTimeout(id);\n this.imagesRef()[this.indexSelected()].nativeElement.scrollIntoView();\n }, 100);\n });\n });\n }\n\n ngAfterViewInit() {\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n event.stopPropagation();\n if (event.key === 'Escape') {\n this.handlerClosePopup(event);\n\n return;\n }\n if (event.key === 'ArrowLeft') {\n this.handlerPreviousImage(event);\n\n return;\n }\n if (event.key === 'ArrowRight') {\n this.handlerNextImage(event);\n\n return;\n }\n });\n this.isFirstRender.set(true);\n fromEvent(window, 'resize').pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.setWidthImages.bind(this));\n\n this.createTimeout((id) => {\n this.clearTimeout(id);\n this.setWidthImages();\n }, 300);\n }\n\n /* FUNCTIONS */\n\n private setWidthImages() {\n const singleImageRef = this.singleImageRef();\n if (singleImageRef) {\n singleImageRef.nativeElement.style.width = '';\n singleImageRef.nativeElement.style.height = '';\n }\n this.viewPort.set(this.containerRef()?.nativeElement.getBoundingClientRect());\n const img = new Image();\n\n img.src = this.imageSelected()?.[this.fieldDisplaySrcImage()] as string;\n img.onload = () => {\n this.widthDefault.set(img.naturalWidth);\n this.heightDefault.set(img.naturalHeight);\n this.widthImage.set(this.singleImageRef()?.nativeElement.width);\n\n this.setStyleSelectImage();\n };\n }\n\n protected handlerImageError(e: ErrorEvent, image: Record<string, any>) {\n const event = e as IEvent;\n\n event.stopPropagation();\n\n image['isError'] = true;\n }\n\n protected handlerShowButton(isShow: boolean) {\n this.isShowButton.set(isShow);\n }\n\n protected handlerMouseEvent(event: Event, status: boolean) {\n event.stopPropagation();\n this.hoverContentViewImage.set(status);\n }\n\n protected handlerClosePopup(e: Event) {\n e.stopPropagation();\n this.outClose.emit();\n }\n\n protected handlerZoom(event: MouseEvent, type: 'in' | 'out') {\n event.stopPropagation();\n this.isFirstRender.set(false);\n this.disable.set(false);\n const element = this.singleImageRef()?.nativeElement;\n\n if (!element) {\n return;\n }\n const draggableEl = this.makeElementDraggable({\n element: element,\n isOverflowHiddenDesired: true,\n });\n\n this.draggableEl.set(draggableEl);\n\n if (((this.scaleValue() * this.widthDefault()) / this.widthImage()) * 100 < 1) {\n this.scaleValue.set(((1 / 100) * this.widthImage()) / this.widthDefault());\n }\n if (((this.scaleValue() * this.widthDefault()) / this.widthImage()) * 100 > 5000 * 0.9) {\n this.scaleValue.set((((5000 * 0.9) / 100) * this.widthImage()) / this.widthDefault());\n }\n if (type === 'in') {\n const scaleValue = this.scaleValue() * (1 + this.step());\n this.scaleValue.set(scaleValue);\n }\n if (type === 'out') {\n const scaleValue = this.scaleValue() / (1 + this.step());\n this.scaleValue.set(scaleValue);\n }\n this.setWidthHeight(element);\n element.style.position = `absolute`;\n if (!this.canDrag() && this.draggableEl() && this.draggableEl()?.stopDraggableBehavior) {\n this.draggableEl()?.stopDraggableBehavior?.();\n }\n }\n\n protected handlerNextImage(e: Event) {\n const indexSelected = this.indexSelected() + 1;\n\n this.handlerSelectImage(e, this.images()[indexSelected], indexSelected);\n }\n\n protected handlerPreviousImage(e: Event) {\n const indexSelected = this.indexSelected() - 1;\n\n this.handlerSelectImage(e, this.images()[indexSelected], indexSelected);\n }\n\n protected handlerSelectImage(e: Event, imageSelected: Record<string, any>, indexSelected: number) {\n e.stopPropagation();\n if (!imageSelected) {\n return;\n }\n this.isFirstRender.set(true);\n const elementRatio = this.elementRatioRef()?.nativeElement;\n\n if (elementRatio) {\n elementRatio.style.display = 'none';\n }\n this.imageSelected.set(imageSelected);\n this.indexSelected.set(indexSelected);\n this.scaleValue.set(1);\n this.imagesRef()[indexSelected].nativeElement.scrollIntoView();\n this.setWidthImages();\n }\n\n protected handlerFullScreen() {\n this.createTimeout((id) => {\n this.clearTimeout(id);\n this.disable.set(true);\n const element = this.singleImageRef()?.nativeElement;\n const fullElement = this.fullContainerRef()?.nativeElement;\n\n this.fullScreen.set(!this.fullScreen());\n\n if (!fullElement) {\n return;\n }\n if (this.fullScreen()) {\n fullElement.style.width = '95%';\n fullElement.style.height = '95%';\n }\n if (!this.fullScreen()) {\n fullElement.style.width = '80%';\n fullElement.style.height = '90%';\n }\n this.viewPort.set(this.containerRef()?.nativeElement.getBoundingClientRect());\n if (!element) {\n return;\n }\n this.setStyleSelectImage(true);\n element.style.left = `unset`;\n element.style.top = `unset`;\n }, 0);\n }\n\n protected handlerReset() {\n this.disable.set(true);\n this.setStyleSelectImage(true);\n }\n\n private makeElementDraggable = ({ element, DRAGGABLE_CSS_CLASS = 'draggable-element' }: { element: HTMLElement | null; isOverflowHiddenDesired?: boolean; DRAGGABLE_CSS_CLASS?: string }): IZoomDragHTMLElement | null => {\n if (!element) {\n return null;\n }\n const isTheRequiredCSSAlreadyInPlace = !!Array.from(element.ownerDocument.getElementsByTagName('style')).filter((styleEl) => styleEl?.textContent?.includes(`.${DRAGGABLE_CSS_CLASS}`))?.[0];\n\n if (!isTheRequiredCSSAlreadyInPlace) {\n element.ownerDocument.body.appendChild(\n Object.assign(element.ownerDocument.createElement('style'), {\n textContent: `\n .${DRAGGABLE_CSS_CLASS} {\n position: absolute;\n cursor: grabbing !important;\n }\n `,\n })\n );\n }\n\n if (!element.classList.contains(DRAGGABLE_CSS_CLASS)) {\n element.classList.add(DRAGGABLE_CSS_CLASS);\n }\n element.onmousedown = (mouseDownEvent) => {\n mouseDownEvent.preventDefault();\n element.onmousemove = (mouseMoveEvent) => {\n mouseMoveEvent.preventDefault();\n const rectElement = element.getBoundingClientRect();\n\n if (rectElement.left + rectElement.width + mouseMoveEvent.movementX > (this.viewPort()?.width || 0) + (this.viewPort()?.left || 0) && rectElement.left + mouseMoveEvent.movementX < (this.viewPort()?.left || 0)) {\n element.style.left = `${element.offsetLeft + mouseMoveEvent.movementX}px`;\n }\n if (rectElement.top + rectElement.height + mouseMoveEvent.movementY > (this.viewPort()?.height || 0) + (this.viewPort()?.top || 0) && rectElement.top + mouseMoveEvent.movementY < (this.viewPort()?.top || 0)) {\n element.style.top = `${element.offsetTop + mouseMoveEvent.movementY}px`;\n }\n };\n };\n element.ownerDocument.onmouseup = (mouseUpEvent) => {\n mouseUpEvent.preventDefault();\n element.onmousemove = null;\n };\n\n return Object.assign(element, {\n stopDraggableBehavior() {\n element.classList.remove(DRAGGABLE_CSS_CLASS);\n element.onmousedown = null;\n element.onmousemove = null;\n element.onmouseup = null;\n element.style.left = 'unset';\n element.style.top = 'unset';\n\n return element;\n },\n });\n };\n\n private setStyleSelectImage(reset?: boolean) {\n const element = this.singleImageRef()?.nativeElement;\n\n if (!element) {\n return;\n }\n const scaleValue =\n (this.viewPort()?.width || 0) / this.widthDefault() < ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault()\n ? (this.viewPort()?.width || 0) / this.widthDefault()\n : ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault();\n\n this.scaleValue.set(scaleValue);\n\n if (this.scaleValue() > 1 && (reset || this.isFirstRender()) && !this.fullScreen()) {\n this.scaleValue.set(1);\n }\n this.setWidthHeight(element);\n if (this.fullScreen()) {\n element.style.position = `unset`;\n\n return;\n }\n }\n\n private setWidthHeight(element: HTMLElement) {\n element.style.width = `${this.scaleValue() * this.widthDefault()}px`;\n element.style.height = `${this.scaleValue() * this.heightDefault()}px`;\n this.canDrag.set(false);\n const rectElement = element.getBoundingClientRect();\n\n if (rectElement.width > (this.viewPort()?.width || 0) || rectElement.height > (this.viewPort()?.height || 0)) {\n this.canDrag.set(true);\n }\n if (rectElement.left + rectElement.width < (this.viewPort()?.width || 0) + (this.viewPort()?.left || 0) || rectElement.left > (this.viewPort()?.left || 0)) {\n element.style.left = `unset`;\n }\n if (rectElement.top + rectElement.height < (this.viewPort()?.top || 0) + (this.viewPort()?.height || 0) || rectElement.top > (this.viewPort()?.top || 0)) {\n element.style.top = `unset`;\n }\n\n this.setDisplayRatio();\n }\n\n private setDisplayRatio() {\n const element = this.singleImageRef()?.nativeElement;\n\n this.ratio.set(`${viewDataNumberByLanguage((element.width / this.widthDefault()) * 100, false, 0)}%`);\n const elementRatio = this.elementRatioRef()?.nativeElement;\n\n elementRatio.style.display = 'flex';\n this.createTimeout((id) => {\n this.clearTimeout(id);\n elementRatio.style.display = 'none';\n }, 1000);\n }\n\n private createTimeout(callback: (id: number) => void, delay: number) {\n const timeoutId = setTimeout(() => callback(timeoutId), delay) as unknown as number;\n this.timeouts.update((ids) => [...ids, timeoutId]);\n }\n\n private clearTimeout(id: number) {\n clearTimeout(id);\n\n this.timeouts.update((ids) => ids.filter((idStore) => idStore !== id));\n }\n\n ngOnDestroy() {\n this.timeouts().forEach((item) => clearTimeout(item));\n }\n}\n","@if (images() || singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup libs-ui-gallery-img-popup-backdrop\"\n [class.!bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div\n #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full justify-end mb-[16px] z-10\">\n <i\n class=\"libs-ui-icon-close text-[24px] p-[4px] rounded-[4px] text-[#ffffff] cursor-pointer bg-[#030B184D] hover:bg-[#030B1826]\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div\n class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div\n #containerRef\n class=\"flex w-full h-full relative\">\n <div\n class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event, false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img\n #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div\n #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio flex items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div\n class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_out', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event, 'out')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_in', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event, 'in')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex: zIndex() + 100 }\">\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i\n class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div\n class=\"libs-ui-font-h5r libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">\n {{ 'i18n_restore' | translate }}\n </div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex items-center\">{{ indexSelected() + 1 }}/{{ images().length }}</div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div\n #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [style.width.px]=\"imagesRef.offsetHeight\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div\n class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event, image, index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img\n [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { IGalleryFunctionsControlEvent } from './interfaces/functions-control-event.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class LibsUiComponentsGalleryComponent implements OnInit, OnDestroy {
|
|
5
|
+
protected imagesDisplay: import("@angular/core").Signal<Record<string, any>[]>;
|
|
6
|
+
private idOverlay;
|
|
7
|
+
private idInterval;
|
|
8
|
+
private viewerRef;
|
|
9
|
+
readonly images: import("@angular/core").ModelSignal<Record<string, any>[]>;
|
|
10
|
+
readonly start: import("@angular/core").InputSignal<number>;
|
|
11
|
+
readonly end: import("@angular/core").InputSignal<number>;
|
|
12
|
+
readonly zIndex: import("@angular/core").InputSignal<number>;
|
|
13
|
+
readonly fieldDisplaySrcImage: import("@angular/core").InputSignal<string>;
|
|
14
|
+
readonly ignoreOverlayCountImage: import("@angular/core").InputSignal<boolean | undefined>;
|
|
15
|
+
readonly imageArrayStringConvert: import("@angular/core").InputSignal<string[] | undefined>;
|
|
16
|
+
readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IGalleryFunctionsControlEvent>;
|
|
17
|
+
readonly outViewerEvent: import("@angular/core").OutputEmitterRef<"show" | "remove">;
|
|
18
|
+
private dynamicComponent;
|
|
19
|
+
constructor();
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
get FunctionsControl(): IGalleryFunctionsControlEvent;
|
|
22
|
+
protected handlerSelectImage(event: MouseEvent | undefined, imageSelected: Record<string, any>): Promise<void>;
|
|
23
|
+
protected handlerImageError(e: ErrorEvent, image: Record<string, any>): void;
|
|
24
|
+
private closePopup;
|
|
25
|
+
private get ViewerRef();
|
|
26
|
+
ngOnDestroy(): void;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsGalleryComponent, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsGalleryComponent, "libs_ui-components-gallery", never, { "images": { "alias": "images"; "required": true; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "fieldDisplaySrcImage": { "alias": "fieldDisplaySrcImage"; "required": false; "isSignal": true; }; "ignoreOverlayCountImage": { "alias": "ignoreOverlayCountImage"; "required": false; "isSignal": true; }; "imageArrayStringConvert": { "alias": "imageArrayStringConvert"; "required": false; "isSignal": true; }; }, { "images": "imagesChange"; "outFunctionsControl": "outFunctionsControl"; "outViewerEvent": "outViewerEvent"; }, never, never, true, never>;
|
|
29
|
+
}
|
package/index.d.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-gallery",
|
|
3
|
+
"version": "0.1.1-1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": ">=18.0.0",
|
|
6
|
+
"@angular/core": ">=18.0.0",
|
|
7
|
+
"@libs-ui/icons": "0.1.1-1",
|
|
8
|
+
"@libs-ui/interfaces-types": "0.1.1-1",
|
|
9
|
+
"@libs-ui/services-dynamic-component": "0.1.1-1",
|
|
10
|
+
"@libs-ui/utils": "0.1.1-1",
|
|
11
|
+
"dayjs": "1.11.5",
|
|
12
|
+
"rxjs": "~7.8.0",
|
|
13
|
+
"@libs-ui/components-popover": "0.1.1-1",
|
|
14
|
+
"@ngx-translate/core": "^15.0.0"
|
|
15
|
+
},
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"module": "fesm2022/libs-ui-components-gallery.mjs",
|
|
18
|
+
"typings": "index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": {
|
|
21
|
+
"default": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./index.d.ts",
|
|
25
|
+
"esm2022": "./esm2022/libs-ui-components-gallery.mjs",
|
|
26
|
+
"esm": "./esm2022/libs-ui-components-gallery.mjs",
|
|
27
|
+
"default": "./fesm2022/libs-ui-components-gallery.mjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"tslib": "^2.3.0"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class LibsUiComponentsGalleryViewerComponent implements AfterViewInit, OnDestroy {
|
|
4
|
+
protected indexSelected: import("@angular/core").WritableSignal<number>;
|
|
5
|
+
protected scaleValue: import("@angular/core").WritableSignal<number>;
|
|
6
|
+
protected ratio: import("@angular/core").WritableSignal<string>;
|
|
7
|
+
protected fullScreen: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
+
protected isShowButton: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
+
protected disable: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
+
protected hoverContentViewImage: import("@angular/core").WritableSignal<boolean>;
|
|
11
|
+
private step;
|
|
12
|
+
private draggableEl;
|
|
13
|
+
private widthDefault;
|
|
14
|
+
private heightDefault;
|
|
15
|
+
private viewPort;
|
|
16
|
+
private canDrag;
|
|
17
|
+
private widthImage;
|
|
18
|
+
private isFirstRender;
|
|
19
|
+
private timeouts;
|
|
20
|
+
readonly images: import("@angular/core").InputSignal<Record<string, any>[]>;
|
|
21
|
+
readonly fieldDisplaySrcImage: import("@angular/core").InputSignal<string>;
|
|
22
|
+
readonly imageSelected: import("@angular/core").ModelSignal<Record<string, any> | undefined>;
|
|
23
|
+
readonly removeBackdrop: import("@angular/core").InputSignal<boolean | undefined>;
|
|
24
|
+
readonly zIndex: import("@angular/core").InputSignalWithTransform<number, number | undefined>;
|
|
25
|
+
readonly singleImage: import("@angular/core").InputSignal<boolean>;
|
|
26
|
+
readonly classContainerInclude: import("@angular/core").InputSignal<string | undefined>;
|
|
27
|
+
readonly outClose: import("@angular/core").OutputEmitterRef<void>;
|
|
28
|
+
protected containerRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
29
|
+
protected singleImageRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
30
|
+
protected elementRatioRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
31
|
+
protected fullContainerRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
32
|
+
protected imagesRef: import("@angular/core").Signal<readonly ElementRef<any>[]>;
|
|
33
|
+
private destroyRef;
|
|
34
|
+
constructor();
|
|
35
|
+
ngAfterViewInit(): void;
|
|
36
|
+
private setWidthImages;
|
|
37
|
+
protected handlerImageError(e: ErrorEvent, image: Record<string, any>): void;
|
|
38
|
+
protected handlerShowButton(isShow: boolean): void;
|
|
39
|
+
protected handlerMouseEvent(event: Event, status: boolean): void;
|
|
40
|
+
protected handlerClosePopup(e: Event): void;
|
|
41
|
+
protected handlerZoom(event: MouseEvent, type: 'in' | 'out'): void;
|
|
42
|
+
protected handlerNextImage(e: Event): void;
|
|
43
|
+
protected handlerPreviousImage(e: Event): void;
|
|
44
|
+
protected handlerSelectImage(e: Event, imageSelected: Record<string, any>, indexSelected: number): void;
|
|
45
|
+
protected handlerFullScreen(): void;
|
|
46
|
+
protected handlerReset(): void;
|
|
47
|
+
private makeElementDraggable;
|
|
48
|
+
private setStyleSelectImage;
|
|
49
|
+
private setWidthHeight;
|
|
50
|
+
private setDisplayRatio;
|
|
51
|
+
private createTimeout;
|
|
52
|
+
private clearTimeout;
|
|
53
|
+
ngOnDestroy(): void;
|
|
54
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsGalleryViewerComponent, never>;
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsGalleryViewerComponent, "libs_ui-components-gallery-viewer", never, { "images": { "alias": "images"; "required": true; "isSignal": true; }; "fieldDisplaySrcImage": { "alias": "fieldDisplaySrcImage"; "required": true; "isSignal": true; }; "imageSelected": { "alias": "imageSelected"; "required": false; "isSignal": true; }; "removeBackdrop": { "alias": "removeBackdrop"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "singleImage": { "alias": "singleImage"; "required": false; "isSignal": true; }; "classContainerInclude": { "alias": "classContainerInclude"; "required": false; "isSignal": true; }; }, { "imageSelected": "imageSelectedChange"; "outClose": "outClose"; }, never, never, true, never>;
|
|
56
|
+
}
|