@ng-nest/ui 18.0.11 → 18.0.13

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.
Files changed (32) hide show
  1. package/core/config/config.d.ts +1 -0
  2. package/esm2022/core/config/config.mjs +1 -1
  3. package/esm2022/resizable/resizable.directive.mjs +5 -3
  4. package/esm2022/ripple/ripple.directive.mjs +28 -17
  5. package/esm2022/select/select-portal.component.mjs +4 -3
  6. package/esm2022/select/select.component.mjs +13 -6
  7. package/esm2022/select/select.property.mjs +9 -2
  8. package/esm2022/skeleton/skeleton.component.mjs +3 -1
  9. package/esm2022/slider-select/slider-select.component.mjs +8 -3
  10. package/esm2022/table/table-body.component.mjs +8 -3
  11. package/esm2022/table/table-head.component.mjs +2 -2
  12. package/esm2022/table/table.property.mjs +8 -3
  13. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  14. package/fesm2022/ng-nest-ui-resizable.mjs +4 -2
  15. package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
  16. package/fesm2022/ng-nest-ui-ripple.mjs +27 -16
  17. package/fesm2022/ng-nest-ui-ripple.mjs.map +1 -1
  18. package/fesm2022/ng-nest-ui-select.mjs +22 -7
  19. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  20. package/fesm2022/ng-nest-ui-skeleton.mjs +2 -0
  21. package/fesm2022/ng-nest-ui-skeleton.mjs.map +1 -1
  22. package/fesm2022/ng-nest-ui-slider-select.mjs +7 -2
  23. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  24. package/fesm2022/ng-nest-ui-table.mjs +14 -4
  25. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  26. package/package.json +151 -151
  27. package/ripple/ripple.directive.d.ts +7 -3
  28. package/select/select-portal.component.d.ts +2 -1
  29. package/select/select.component.d.ts +1 -0
  30. package/select/select.property.d.ts +6 -1
  31. package/table/table-body.component.d.ts +2 -0
  32. package/table/table.property.d.ts +11 -1
@@ -119,9 +119,11 @@ class XResizableDirective extends XResizableProperty {
119
119
  this.mouseUpSub = mouseup.subscribe((ev) => {
120
120
  this.mouseup(ev);
121
121
  });
122
- const mouseMoveSub = fromEvent(document, moveEvent)
122
+ const mouseMoveSub = fromEvent(this.document, moveEvent)
123
123
  .pipe(takeUntil(mouseup))
124
- .subscribe((ev) => this.move(ev, clientWidth, clientHeight, offsetTop, offsetLeft, screenX, screenY));
124
+ .subscribe((ev) => {
125
+ this.move(ev, clientWidth, clientHeight, offsetTop, offsetLeft, screenX, screenY);
126
+ });
125
127
  this.mouseUpSub.add(mouseMoveSub);
126
128
  }
127
129
  setPosition() {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-resizable.mjs","sources":["../../../../lib/ng-nest/ui/resizable/resizable.property.ts","../../../../lib/ng-nest/ui/resizable/resizable.directive.ts","../../../../lib/ng-nest/ui/resizable/resizable.module.ts","../../../../lib/ng-nest/ui/resizable/ng-nest-ui-resizable.ts"],"sourcesContent":["import { Directive, input, output } from '@angular/core';\r\nimport { XProperty, XToBoolean, XToCssPixelValue } from '@ng-nest/ui/core';\r\nimport type { XBoolean, XCorner, XNumber, XPosition } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Resizable 指令名称\r\n * @selector x-resizable\r\n * @decorator directive\r\n */\r\nexport const XResizablePrefix = 'x-resizable';\r\n\r\n/**\r\n * Resizable Property\r\n */\r\n@Directive({ selector: '[xResizable]', standalone: true })\r\nexport class XResizableProperty extends XProperty {\r\n /**\r\n * @zh_CN 启用调整尺寸大小\r\n * @en_US Enable adjustment size size\r\n */\r\n readonly xResizable = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 调整方位\r\n * @en_US Adjust the orientation\r\n */\r\n readonly position = input<XResizablePosition | XResizablePosition[]>('all');\r\n /**\r\n * @zh_CN 手动调整,通过回调的数值自行调整\r\n * @en_US Manual adjustment, adjustment of the number of callbacks\r\n */\r\n readonly ghost = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 偏移屏幕左边\r\n * @en_US Distance on the left side\r\n */\r\n readonly offsetLeft = input<string, XNumber>('0', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 偏移屏幕顶部\r\n * @en_US Distance to the top of the screen\r\n */\r\n readonly offsetTop = input<string, XNumber>('0', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 开始调整\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizeBegin = output<XResizableEvent>();\r\n /**\r\n * @zh_CN 调整中\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizing = output<XResizableEvent>();\r\n /**\r\n * @zh_CN 调整结束\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizeEnd = output<XResizableEvent>();\r\n}\r\n\r\n/**\r\n * @zh_CN 调整方位\r\n * @en_US Adjust the orientation\r\n */\r\nexport type XResizablePosition = XPosition | XCorner | 'all';\r\n\r\n/**\r\n * @zh_CN 调整尺寸的事件对象\r\n * @en_US Adjust the size of event objects\r\n */\r\nexport interface XResizableEvent {\r\n /**\r\n * @zh_CN 事件\r\n * @en_US Event\r\n */\r\n event?: MouseEvent;\r\n /**\r\n * @zh_CN 宽度\r\n * @en_US Width\r\n */\r\n clientWidth?: number;\r\n /**\r\n * @zh_CN 高度\r\n * @en_US height\r\n */\r\n clientHeight?: number;\r\n /**\r\n * @zh_CN 距离屏幕左边\r\n * @en_US Distance on the left side\r\n */\r\n offsetLeft?: number;\r\n /**\r\n * @zh_CN 距离屏幕顶部\r\n * @en_US Distance to the top of the screen\r\n */\r\n offsetTop?: number;\r\n /**\r\n * @zh_CN 改变方位\r\n * @en_US Change position\r\n */\r\n direction?: XResizablePosition;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Directive,\r\n ElementRef,\r\n HostBinding,\r\n HostListener,\r\n OnDestroy,\r\n Renderer2,\r\n SimpleChanges,\r\n computed,\r\n inject\r\n} from '@angular/core';\r\nimport { XComputed, XComputedStyle, XIsArray, XIsChange, XIsString, XToCssPx } from '@ng-nest/ui/core';\r\nimport { fromEvent, Subscription, takeUntil } from 'rxjs';\r\nimport { XResizablePosition, XResizablePrefix, XResizableProperty } from './resizable.property';\r\n\r\n@Directive({ selector: '[xResizable]', standalone: true })\r\nexport class XResizableDirective extends XResizableProperty implements OnDestroy {\r\n @HostBinding('class') className = XResizablePrefix;\r\n @HostBinding('class.x-resizable-disabled') get getDisabled() {\r\n return !this.xResizable();\r\n }\r\n\r\n cornerPositions: XResizablePosition[] = ['top-start', 'top-end', 'bottom-start', 'bottom-end'];\r\n allPositions: XResizablePosition[] = ['left', 'right', 'top', 'bottom', ...this.cornerPositions];\r\n positions: XResizablePosition[] = [];\r\n direction?: XResizablePosition;\r\n newBox = { clientWidth: 0, clientHeight: 0, offsetLeft: 0, offsetTop: 0 };\r\n mouseUpSub?: Subscription;\r\n\r\n minWidth?: number;\r\n maxWidth?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n\r\n positionNodes: { [key: string]: HTMLElement } = {};\r\n activatingNodes: HTMLElement[] = [];\r\n firstLoaded = true;\r\n\r\n private document = inject(DOCUMENT);\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private fontSize = computed(() => parseFloat(XComputedStyle(this.document.documentElement, 'font-size')));\r\n\r\n ngAfterViewInit() {\r\n this.setPosition();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroySubscription();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { xResizable } = changes;\r\n XIsChange(xResizable) && this.setPosition();\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n mousedown(event: MouseEvent | TouchEvent) {\r\n if (!this.xResizable()) return;\r\n const classList = (event.target as HTMLElement).classList;\r\n let direction: XResizablePosition | null = null;\r\n for (let pos of this.allPositions) {\r\n if (classList.contains(`x-resizable-${pos}`)) {\r\n direction = pos;\r\n break;\r\n }\r\n }\r\n if (!direction) return;\r\n\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n const { clientWidth, clientHeight, offsetLeft, offsetTop } = this.elementRef.nativeElement;\r\n const { screenX, screenY } = evt;\r\n const isTouchEvent = event.type.startsWith('touch');\r\n const moveEvent = isTouchEvent ? 'touchmove' : 'mousemove';\r\n const upEvent = isTouchEvent ? 'touchend' : 'mouseup';\r\n\r\n this.setActivatingNodes(direction);\r\n this.initResize(event, direction);\r\n\r\n const mouseup = fromEvent(this.document, upEvent);\r\n this.mouseUpSub = mouseup.subscribe((ev) => {\r\n this.mouseup(ev as MouseEvent | TouchEvent);\r\n });\r\n const mouseMoveSub = fromEvent(document, moveEvent)\r\n .pipe(takeUntil(mouseup))\r\n .subscribe((ev) =>\r\n this.move(ev as MouseEvent | TouchEvent, clientWidth, clientHeight, offsetTop, offsetLeft, screenX, screenY)\r\n );\r\n\r\n this.mouseUpSub.add(mouseMoveSub);\r\n }\r\n\r\n setPosition() {\r\n if (!this.xResizable() || !this.firstLoaded) return;\r\n let positions: XResizablePosition[] = [];\r\n if (XIsString(this.position())) {\r\n positions.push(this.position() as XResizablePosition);\r\n } else if (XIsArray(this.position())) {\r\n positions = this.position() as XResizablePosition[];\r\n }\r\n\r\n if (positions.includes('all')) {\r\n this.positions = this.allPositions;\r\n } else {\r\n this.positions = positions;\r\n }\r\n this.createNode(...this.positions);\r\n\r\n const computedStyle = XComputed(this.elementRef.nativeElement);\r\n setTimeout(() => {\r\n this.minWidth = parseFloat(computedStyle.minWidth);\r\n this.maxWidth = parseFloat(computedStyle.maxWidth);\r\n this.minHeight = parseFloat(computedStyle.minHeight);\r\n this.maxHeight = parseFloat(computedStyle.maxHeight);\r\n this.firstLoaded = false;\r\n });\r\n }\r\n\r\n setActivatingNodes(direction: XResizablePosition) {\r\n if (!this.positions.includes(direction)) return;\r\n const addActivatingNode = (...direction: XResizablePosition[]) => {\r\n for (let item of direction) {\r\n const nd = this.positionNodes[item];\r\n const isNd = this.activatingNodes.includes(nd);\r\n if (!nd || isNd) continue;\r\n this.renderer.addClass(nd, 'x-resizable-activating');\r\n this.activatingNodes.push(nd);\r\n }\r\n };\r\n if (this.cornerPositions.includes(direction)) {\r\n switch (direction) {\r\n case 'bottom-end':\r\n addActivatingNode('bottom', 'right');\r\n break;\r\n case 'top-end':\r\n addActivatingNode('top', 'right');\r\n break;\r\n case 'bottom-start':\r\n addActivatingNode('bottom', 'left');\r\n break;\r\n case 'top-start':\r\n addActivatingNode('top', 'left');\r\n break;\r\n }\r\n }\r\n addActivatingNode(direction);\r\n }\r\n\r\n createNode(...classes: XResizablePosition[]) {\r\n for (let cla of classes) {\r\n const pos = this.renderer.createElement('div');\r\n this.renderer.addClass(pos, `x-resizable-${cla}`);\r\n this.renderer.appendChild(this.elementRef.nativeElement, pos);\r\n this.positionNodes[cla] = pos;\r\n }\r\n }\r\n\r\n initResize(event: MouseEvent | TouchEvent, direction: XResizablePosition) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n this.direction = direction;\r\n this.renderer.addClass(this.elementRef.nativeElement, `x-resizable-resizing`);\r\n let { clientWidth, clientHeight, offsetLeft, offsetTop } = this.elementRef.nativeElement;\r\n this.newBox = { clientWidth, clientHeight, offsetLeft, offsetTop };\r\n event.stopPropagation();\r\n this.resizeBegin.emit({ event: evt as MouseEvent, ...this.newBox });\r\n }\r\n\r\n mouseup(event: MouseEvent | TouchEvent) {\r\n this.endResize(event);\r\n this.destroySubscription();\r\n }\r\n\r\n endResize(event: MouseEvent | TouchEvent) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n this.direction = undefined;\r\n this.renderer.removeClass(this.elementRef.nativeElement, `x-resizable-resizing`);\r\n for (const node of this.activatingNodes) {\r\n this.renderer.removeClass(node, 'x-resizable-activating');\r\n }\r\n this.activatingNodes = [];\r\n this.resizeEnd.emit({ event: evt as MouseEvent, ...this.newBox });\r\n }\r\n\r\n move(\r\n event: MouseEvent | TouchEvent,\r\n width: number,\r\n height: number,\r\n top: number,\r\n left: number,\r\n screenX: number,\r\n screenY: number\r\n ) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n const movementX = evt.screenX - screenX;\r\n const movementY = evt.screenY - screenY;\r\n\r\n this.newBox = {\r\n clientWidth:\r\n width - (['bottom-start', 'left', 'top-start'].includes(this.direction as string) ? movementX : -movementX),\r\n clientHeight:\r\n height - (['top-start', 'top', 'top-end'].includes(this.direction as string) ? movementY : -movementY),\r\n offsetLeft: left + movementX,\r\n offsetTop: top + movementY\r\n };\r\n\r\n const box = {\r\n ...this.newBox,\r\n offsetLeft: this.newBox.offsetLeft - XToCssPx(this.offsetLeft(), this.fontSize()),\r\n offsetTop: this.newBox.offsetTop - XToCssPx(this.offsetTop(), this.fontSize())\r\n };\r\n\r\n this.resizeBox(box);\r\n\r\n this.resizing.emit({ ...this.newBox, event: evt as MouseEvent, direction: this.direction });\r\n }\r\n\r\n resizeBox(box: { clientWidth: number; clientHeight: number; offsetLeft: number; offsetTop: number }) {\r\n if (this.ghost()) return;\r\n const overMinWidth = !this.minWidth || box.clientWidth >= this.minWidth;\r\n const underMaxWidth = !this.maxWidth || box.clientWidth <= this.maxWidth;\r\n const overMinHeight = !this.minHeight || box.clientHeight >= this.minHeight;\r\n const underMaxHeight = !this.maxHeight || box.clientHeight <= this.maxHeight;\r\n\r\n switch (this.direction) {\r\n case 'right':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n break;\r\n case 'top-end':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom-end':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom-start':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'left':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n break;\r\n case 'top-start':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'top':\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom':\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private destroySubscription() {\r\n if (this.mouseUpSub) {\r\n this.mouseUpSub.unsubscribe();\r\n this.mouseUpSub = undefined;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { XResizableDirective } from './resizable.directive';\r\n\r\n@NgModule({\r\n imports: [XResizableDirective],\r\n exports: [XResizableDirective]\r\n})\r\nexport class XResizableModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-resizable.mjs","sources":["../../../../lib/ng-nest/ui/resizable/resizable.property.ts","../../../../lib/ng-nest/ui/resizable/resizable.directive.ts","../../../../lib/ng-nest/ui/resizable/resizable.module.ts","../../../../lib/ng-nest/ui/resizable/ng-nest-ui-resizable.ts"],"sourcesContent":["import { Directive, input, output } from '@angular/core';\r\nimport { XProperty, XToBoolean, XToCssPixelValue } from '@ng-nest/ui/core';\r\nimport type { XBoolean, XCorner, XNumber, XPosition } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Resizable 指令名称\r\n * @selector x-resizable\r\n * @decorator directive\r\n */\r\nexport const XResizablePrefix = 'x-resizable';\r\n\r\n/**\r\n * Resizable Property\r\n */\r\n@Directive({ selector: '[xResizable]', standalone: true })\r\nexport class XResizableProperty extends XProperty {\r\n /**\r\n * @zh_CN 启用调整尺寸大小\r\n * @en_US Enable adjustment size size\r\n */\r\n readonly xResizable = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 调整方位\r\n * @en_US Adjust the orientation\r\n */\r\n readonly position = input<XResizablePosition | XResizablePosition[]>('all');\r\n /**\r\n * @zh_CN 手动调整,通过回调的数值自行调整\r\n * @en_US Manual adjustment, adjustment of the number of callbacks\r\n */\r\n readonly ghost = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 偏移屏幕左边\r\n * @en_US Distance on the left side\r\n */\r\n readonly offsetLeft = input<string, XNumber>('0', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 偏移屏幕顶部\r\n * @en_US Distance to the top of the screen\r\n */\r\n readonly offsetTop = input<string, XNumber>('0', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 开始调整\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizeBegin = output<XResizableEvent>();\r\n /**\r\n * @zh_CN 调整中\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizing = output<XResizableEvent>();\r\n /**\r\n * @zh_CN 调整结束\r\n * @en_US Adjust the orientation\r\n */\r\n readonly resizeEnd = output<XResizableEvent>();\r\n}\r\n\r\n/**\r\n * @zh_CN 调整方位\r\n * @en_US Adjust the orientation\r\n */\r\nexport type XResizablePosition = XPosition | XCorner | 'all';\r\n\r\n/**\r\n * @zh_CN 调整尺寸的事件对象\r\n * @en_US Adjust the size of event objects\r\n */\r\nexport interface XResizableEvent {\r\n /**\r\n * @zh_CN 事件\r\n * @en_US Event\r\n */\r\n event?: MouseEvent;\r\n /**\r\n * @zh_CN 宽度\r\n * @en_US Width\r\n */\r\n clientWidth?: number;\r\n /**\r\n * @zh_CN 高度\r\n * @en_US height\r\n */\r\n clientHeight?: number;\r\n /**\r\n * @zh_CN 距离屏幕左边\r\n * @en_US Distance on the left side\r\n */\r\n offsetLeft?: number;\r\n /**\r\n * @zh_CN 距离屏幕顶部\r\n * @en_US Distance to the top of the screen\r\n */\r\n offsetTop?: number;\r\n /**\r\n * @zh_CN 改变方位\r\n * @en_US Change position\r\n */\r\n direction?: XResizablePosition;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Directive,\r\n ElementRef,\r\n HostBinding,\r\n HostListener,\r\n OnDestroy,\r\n Renderer2,\r\n SimpleChanges,\r\n computed,\r\n inject\r\n} from '@angular/core';\r\nimport { XComputed, XComputedStyle, XIsArray, XIsChange, XIsString, XToCssPx } from '@ng-nest/ui/core';\r\nimport { fromEvent, Subscription, takeUntil } from 'rxjs';\r\nimport { XResizablePosition, XResizablePrefix, XResizableProperty } from './resizable.property';\r\n\r\n@Directive({ selector: '[xResizable]', standalone: true })\r\nexport class XResizableDirective extends XResizableProperty implements OnDestroy {\r\n @HostBinding('class') className = XResizablePrefix;\r\n @HostBinding('class.x-resizable-disabled') get getDisabled() {\r\n return !this.xResizable();\r\n }\r\n\r\n cornerPositions: XResizablePosition[] = ['top-start', 'top-end', 'bottom-start', 'bottom-end'];\r\n allPositions: XResizablePosition[] = ['left', 'right', 'top', 'bottom', ...this.cornerPositions];\r\n positions: XResizablePosition[] = [];\r\n direction?: XResizablePosition;\r\n newBox = { clientWidth: 0, clientHeight: 0, offsetLeft: 0, offsetTop: 0 };\r\n mouseUpSub?: Subscription;\r\n\r\n minWidth?: number;\r\n maxWidth?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n\r\n positionNodes: { [key: string]: HTMLElement } = {};\r\n activatingNodes: HTMLElement[] = [];\r\n firstLoaded = true;\r\n\r\n private document = inject(DOCUMENT);\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private fontSize = computed(() => parseFloat(XComputedStyle(this.document.documentElement, 'font-size')));\r\n\r\n ngAfterViewInit() {\r\n this.setPosition();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroySubscription();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { xResizable } = changes;\r\n XIsChange(xResizable) && this.setPosition();\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n mousedown(event: MouseEvent | TouchEvent) {\r\n if (!this.xResizable()) return;\r\n const classList = (event.target as HTMLElement).classList;\r\n let direction: XResizablePosition | null = null;\r\n for (let pos of this.allPositions) {\r\n if (classList.contains(`x-resizable-${pos}`)) {\r\n direction = pos;\r\n break;\r\n }\r\n }\r\n if (!direction) return;\r\n\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n const { clientWidth, clientHeight, offsetLeft, offsetTop } = this.elementRef.nativeElement;\r\n const { screenX, screenY } = evt;\r\n const isTouchEvent = event.type.startsWith('touch');\r\n const moveEvent = isTouchEvent ? 'touchmove' : 'mousemove';\r\n const upEvent = isTouchEvent ? 'touchend' : 'mouseup';\r\n\r\n this.setActivatingNodes(direction);\r\n this.initResize(event, direction);\r\n\r\n const mouseup = fromEvent(this.document, upEvent);\r\n this.mouseUpSub = mouseup.subscribe((ev) => {\r\n this.mouseup(ev as MouseEvent | TouchEvent);\r\n });\r\n const mouseMoveSub = fromEvent(this.document, moveEvent)\r\n .pipe(takeUntil(mouseup))\r\n .subscribe((ev) => {\r\n this.move(ev as MouseEvent | TouchEvent, clientWidth, clientHeight, offsetTop, offsetLeft, screenX, screenY);\r\n });\r\n\r\n this.mouseUpSub.add(mouseMoveSub);\r\n }\r\n\r\n setPosition() {\r\n if (!this.xResizable() || !this.firstLoaded) return;\r\n let positions: XResizablePosition[] = [];\r\n if (XIsString(this.position())) {\r\n positions.push(this.position() as XResizablePosition);\r\n } else if (XIsArray(this.position())) {\r\n positions = this.position() as XResizablePosition[];\r\n }\r\n\r\n if (positions.includes('all')) {\r\n this.positions = this.allPositions;\r\n } else {\r\n this.positions = positions;\r\n }\r\n this.createNode(...this.positions);\r\n\r\n const computedStyle = XComputed(this.elementRef.nativeElement);\r\n setTimeout(() => {\r\n this.minWidth = parseFloat(computedStyle.minWidth);\r\n this.maxWidth = parseFloat(computedStyle.maxWidth);\r\n this.minHeight = parseFloat(computedStyle.minHeight);\r\n this.maxHeight = parseFloat(computedStyle.maxHeight);\r\n this.firstLoaded = false;\r\n });\r\n }\r\n\r\n setActivatingNodes(direction: XResizablePosition) {\r\n if (!this.positions.includes(direction)) return;\r\n const addActivatingNode = (...direction: XResizablePosition[]) => {\r\n for (let item of direction) {\r\n const nd = this.positionNodes[item];\r\n const isNd = this.activatingNodes.includes(nd);\r\n if (!nd || isNd) continue;\r\n this.renderer.addClass(nd, 'x-resizable-activating');\r\n this.activatingNodes.push(nd);\r\n }\r\n };\r\n if (this.cornerPositions.includes(direction)) {\r\n switch (direction) {\r\n case 'bottom-end':\r\n addActivatingNode('bottom', 'right');\r\n break;\r\n case 'top-end':\r\n addActivatingNode('top', 'right');\r\n break;\r\n case 'bottom-start':\r\n addActivatingNode('bottom', 'left');\r\n break;\r\n case 'top-start':\r\n addActivatingNode('top', 'left');\r\n break;\r\n }\r\n }\r\n addActivatingNode(direction);\r\n }\r\n\r\n createNode(...classes: XResizablePosition[]) {\r\n for (let cla of classes) {\r\n const pos = this.renderer.createElement('div');\r\n this.renderer.addClass(pos, `x-resizable-${cla}`);\r\n this.renderer.appendChild(this.elementRef.nativeElement, pos);\r\n this.positionNodes[cla] = pos;\r\n }\r\n }\r\n\r\n initResize(event: MouseEvent | TouchEvent, direction: XResizablePosition) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n this.direction = direction;\r\n this.renderer.addClass(this.elementRef.nativeElement, `x-resizable-resizing`);\r\n let { clientWidth, clientHeight, offsetLeft, offsetTop } = this.elementRef.nativeElement;\r\n this.newBox = { clientWidth, clientHeight, offsetLeft, offsetTop };\r\n event.stopPropagation();\r\n this.resizeBegin.emit({ event: evt as MouseEvent, ...this.newBox });\r\n }\r\n\r\n mouseup(event: MouseEvent | TouchEvent) {\r\n this.endResize(event);\r\n this.destroySubscription();\r\n }\r\n\r\n endResize(event: MouseEvent | TouchEvent) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n this.direction = undefined;\r\n this.renderer.removeClass(this.elementRef.nativeElement, `x-resizable-resizing`);\r\n for (const node of this.activatingNodes) {\r\n this.renderer.removeClass(node, 'x-resizable-activating');\r\n }\r\n this.activatingNodes = [];\r\n this.resizeEnd.emit({ event: evt as MouseEvent, ...this.newBox });\r\n }\r\n\r\n move(\r\n event: MouseEvent | TouchEvent,\r\n width: number,\r\n height: number,\r\n top: number,\r\n left: number,\r\n screenX: number,\r\n screenY: number\r\n ) {\r\n const evt = event.type.startsWith('touch') ? (event as TouchEvent).targetTouches[0] : (event as MouseEvent);\r\n const movementX = evt.screenX - screenX;\r\n const movementY = evt.screenY - screenY;\r\n\r\n this.newBox = {\r\n clientWidth:\r\n width - (['bottom-start', 'left', 'top-start'].includes(this.direction as string) ? movementX : -movementX),\r\n clientHeight:\r\n height - (['top-start', 'top', 'top-end'].includes(this.direction as string) ? movementY : -movementY),\r\n offsetLeft: left + movementX,\r\n offsetTop: top + movementY\r\n };\r\n\r\n const box = {\r\n ...this.newBox,\r\n offsetLeft: this.newBox.offsetLeft - XToCssPx(this.offsetLeft(), this.fontSize()),\r\n offsetTop: this.newBox.offsetTop - XToCssPx(this.offsetTop(), this.fontSize())\r\n };\r\n\r\n this.resizeBox(box);\r\n\r\n this.resizing.emit({ ...this.newBox, event: evt as MouseEvent, direction: this.direction });\r\n }\r\n\r\n resizeBox(box: { clientWidth: number; clientHeight: number; offsetLeft: number; offsetTop: number }) {\r\n if (this.ghost()) return;\r\n const overMinWidth = !this.minWidth || box.clientWidth >= this.minWidth;\r\n const underMaxWidth = !this.maxWidth || box.clientWidth <= this.maxWidth;\r\n const overMinHeight = !this.minHeight || box.clientHeight >= this.minHeight;\r\n const underMaxHeight = !this.maxHeight || box.clientHeight <= this.maxHeight;\r\n\r\n switch (this.direction) {\r\n case 'right':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n break;\r\n case 'top-end':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom-end':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom-start':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'left':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n break;\r\n case 'top-start':\r\n if (overMinWidth && underMaxWidth) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${box.offsetLeft}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${box.clientWidth}px`);\r\n }\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'top':\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${box.offsetTop}px`);\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n case 'bottom':\r\n if (overMinHeight && underMaxHeight) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${box.clientHeight}px`);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private destroySubscription() {\r\n if (this.mouseUpSub) {\r\n this.mouseUpSub.unsubscribe();\r\n this.mouseUpSub = undefined;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { XResizableDirective } from './resizable.directive';\r\n\r\n@NgModule({\r\n imports: [XResizableDirective],\r\n exports: [XResizableDirective]\r\n})\r\nexport class XResizableModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAIA;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,cAAc;AAE9C;;AAEG;AAEG,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AADjD,IAAA,WAAA,GAAA;;AAEE;;;AAGG;QACM,IAAU,CAAA,UAAA,GAAG,KAAK,CAAoB,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AACjF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA4C,KAAK,CAAC,CAAC;AAC5E;;;AAGG;QACM,IAAK,CAAA,KAAA,GAAG,KAAK,CAAoB,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC5E;;;AAGG;QACM,IAAU,CAAA,UAAA,GAAG,KAAK,CAAkB,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACnF;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,CAAkB,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAClF;;;AAGG;QACM,IAAW,CAAA,WAAA,GAAG,MAAM,EAAmB,CAAC;AACjD;;;AAGG;QACM,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAmB,CAAC;AAC9C;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAAmB,CAAC;AAChD,KAAA;iIAzCY,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;qHAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;;ACGnD,MAAO,mBAAoB,SAAQ,kBAAkB,CAAA;AAD3D,IAAA,WAAA,GAAA;;QAEwB,IAAS,CAAA,SAAA,GAAG,gBAAgB,CAAC;QAKnD,IAAe,CAAA,eAAA,GAAyB,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAC/F,QAAA,IAAA,CAAA,YAAY,GAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QACjG,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAC;AAErC,QAAA,IAAA,CAAA,MAAM,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAQ1E,IAAa,CAAA,aAAA,GAAmC,EAAE,CAAC;QACnD,IAAe,CAAA,eAAA,GAAkB,EAAE,CAAC;QACpC,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;AAEX,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AA0P3G,KAAA;AAjRC,IAAA,IAA+C,WAAW,GAAA;AACxD,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;KAC3B;IAuBD,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,WAAW,GAAA;QACT,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC/B,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;KAC7C;AAGD,IAAA,SAAS,CAAC,KAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;AAC/B,QAAA,MAAM,SAAS,GAAI,KAAK,CAAC,MAAsB,CAAC,SAAS,CAAC;QAC1D,IAAI,SAAS,GAA8B,IAAI,CAAC;AAChD,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;YACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAA,CAAE,CAAC,EAAE;gBAC5C,SAAS,GAAG,GAAG,CAAC;gBAChB,MAAM;aACP;SACF;AACD,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAI,KAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAI,KAAoB,CAAC;AAC5G,QAAA,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAC3F,QAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACjC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;QAC3D,MAAM,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtD,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;AACzC,YAAA,IAAI,CAAC,OAAO,CAAC,EAA6B,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AACrD,aAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,aAAA,SAAS,CAAC,CAAC,EAAE,KAAI;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,EAA6B,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/G,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACnC;IAED,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QACpD,IAAI,SAAS,GAAyB,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAwB,CAAC,CAAC;SACvD;aAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AACpC,YAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,EAA0B,CAAC;SACrD;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;SACpC;aAAM;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC/D,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,kBAAkB,CAAC,SAA6B,EAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;AAChD,QAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,SAA+B,KAAI;AAC/D,YAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;gBAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,IAAI,IAAI;oBAAE,SAAS;gBAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/B;AACH,SAAC,CAAC;QACF,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC5C,QAAQ,SAAS;AACf,gBAAA,KAAK,YAAY;AACf,oBAAA,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACrC,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAClC,MAAM;AACR,gBAAA,KAAK,cAAc;AACjB,oBAAA,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACpC,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACjC,MAAM;aACT;SACF;QACD,iBAAiB,CAAC,SAAS,CAAC,CAAC;KAC9B;IAED,UAAU,CAAC,GAAG,OAA6B,EAAA;AACzC,QAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAe,YAAA,EAAA,GAAG,CAAE,CAAA,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;SAC/B;KACF;IAED,UAAU,CAAC,KAA8B,EAAE,SAA6B,EAAA;QACtE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAI,KAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAI,KAAoB,CAAC;AAC5G,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAA,oBAAA,CAAsB,CAAC,CAAC;AAC9E,QAAA,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACzF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACnE,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAiB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACrE;AAED,IAAA,OAAO,CAAC,KAA8B,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,SAAS,CAAC,KAA8B,EAAA;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAI,KAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAI,KAAoB,CAAC;AAC5G,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAA,oBAAA,CAAsB,CAAC,CAAC;AACjF,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;SAC3D;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAiB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACnE;AAED,IAAA,IAAI,CACF,KAA8B,EAC9B,KAAa,EACb,MAAc,EACd,GAAW,EACX,IAAY,EACZ,OAAe,EACf,OAAe,EAAA;QAEf,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAI,KAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,GAAI,KAAoB,CAAC;AAC5G,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AACxC,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;QAExC,IAAI,CAAC,MAAM,GAAG;YACZ,WAAW,EACT,KAAK,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAmB,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC;YAC7G,YAAY,EACV,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAmB,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC;YACxG,UAAU,EAAE,IAAI,GAAG,SAAS;YAC5B,SAAS,EAAE,GAAG,GAAG,SAAS;SAC3B,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG;YACV,GAAG,IAAI,CAAC,MAAM;AACd,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjF,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC/E,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC7F;AAED,IAAA,SAAS,CAAC,GAAyF,EAAA;QACjG,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO;AACzB,QAAA,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACxE,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACzE,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC;AAC5E,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC;AAE7E,QAAA,QAAQ,IAAI,CAAC,SAAS;AACpB,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;gBACD,MAAM;AACR,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;AACD,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,CAAG,EAAA,GAAG,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC,CAAC;AACnF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;AACR,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;AACD,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;AACR,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,CAAG,EAAA,GAAG,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,CAAC;AACrF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;AACD,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,CAAG,EAAA,GAAG,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,CAAC;AACrF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;gBACD,MAAM;AACR,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,CAAG,EAAA,GAAG,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,CAAC;AACrF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAG,EAAA,GAAG,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,CAAC;iBACxF;AACD,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,CAAG,EAAA,GAAG,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC,CAAC;AACnF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,CAAG,EAAA,GAAG,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC,CAAC;AACnF,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,aAAa,IAAI,cAAc,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAG,EAAA,GAAG,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;iBAC1F;gBACD,MAAM;SACT;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;KACF;iIAlRU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;qHAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;8BAEjC,SAAS,EAAA,CAAA;sBAA9B,WAAW;uBAAC,OAAO,CAAA;gBAC2B,WAAW,EAAA,CAAA;sBAAzD,WAAW;uBAAC,4BAA4B,CAAA;gBAuCzC,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MClD1B,gBAAgB,CAAA;iIAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;kIAAhB,gBAAgB,EAAA,OAAA,EAAA,CAHjB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CACnB,mBAAmB,CAAA,EAAA,CAAA,CAAA,EAAA;kIAElB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC/B,iBAAA,CAAA;;;ACND;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, Directive, inject, Renderer2, ElementRef, ChangeDetectorRef, HostBinding, NgModule } from '@angular/core';
2
+ import { input, Directive, inject, Renderer2, ElementRef, ChangeDetectorRef, effect, HostBinding, NgModule } from '@angular/core';
3
3
  import { Subject, fromEvent, takeUntil, of, delay, tap } from 'rxjs';
4
4
  import { XPropertyFunction, XToNumber, XToBoolean, XComputed } from '@ng-nest/ui/core';
5
5
  import { DOCUMENT } from '@angular/common';
@@ -42,21 +42,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
42
42
  }] });
43
43
 
44
44
  class XRippleDirective extends XRippleProperty {
45
+ get className() {
46
+ return `${XRipplePrefix} ${XRipplePrefix}-${this.type()}`;
47
+ }
45
48
  constructor() {
46
- super(...arguments);
49
+ super();
47
50
  this.unsub = new Subject();
48
51
  this.renderer = inject(Renderer2);
49
52
  this.elementRef = inject(ElementRef);
50
53
  this.cdr = inject(ChangeDetectorRef);
51
54
  this.document = inject(DOCUMENT);
55
+ this.downEvent = null;
56
+ this.upEvent = null;
57
+ effect(() => {
58
+ if (this.disabled()) {
59
+ this.downEvent?.unsubscribe();
60
+ this.upEvent?.unsubscribe();
61
+ }
62
+ else {
63
+ this.downEvent?.unsubscribe();
64
+ this.upEvent?.unsubscribe();
65
+ this.setEvent();
66
+ }
67
+ });
52
68
  }
53
- get className() {
54
- return `${XRipplePrefix} ${XRipplePrefix}-${this.type()}`;
69
+ ngOnDestroy() {
70
+ this.unsub.next();
71
+ this.unsub.complete();
55
72
  }
56
- ngOnInit() {
57
- if (this.disabled())
58
- return;
59
- fromEvent(this.elementRef.nativeElement, 'mousedown')
73
+ setEvent() {
74
+ this.downEvent = fromEvent(this.elementRef.nativeElement, 'mousedown')
60
75
  .pipe(takeUntil(this.unsub))
61
76
  .subscribe((event) => {
62
77
  const eleRect = this.elementRef.nativeElement.getBoundingClientRect();
@@ -75,7 +90,7 @@ class XRippleDirective extends XRippleProperty {
75
90
  ripple.style.transform = 'scale(1)';
76
91
  ripple.style.opacity = '0.3';
77
92
  const downTime = new Date().getTime();
78
- const upEvent = fromEvent(this.document.documentElement, 'mouseup')
93
+ this.upEvent = fromEvent(this.document.documentElement, 'mouseup')
79
94
  .pipe(takeUntil(this.unsub))
80
95
  .subscribe(() => {
81
96
  const upTime = new Date().getTime();
@@ -86,16 +101,12 @@ class XRippleDirective extends XRippleProperty {
86
101
  }
87
102
  // TODO: use zoneless, renderer removeChild will not take effect immediately
88
103
  this.cdr.markForCheck();
89
- upEvent.unsubscribe();
104
+ this.upEvent?.unsubscribe();
90
105
  }), takeUntil(this.unsub))
91
106
  .subscribe();
92
107
  });
93
108
  });
94
109
  }
95
- ngOnDestroy() {
96
- this.unsub.next();
97
- this.unsub.complete();
98
- }
99
110
  distanceToFurthestCorner(x, y, rect) {
100
111
  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));
101
112
  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));
@@ -104,7 +115,7 @@ class XRippleDirective extends XRippleProperty {
104
115
  enforceStyleRecalculation(element) {
105
116
  XComputed(element).getPropertyValue('opacity');
106
117
  }
107
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XRippleDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
118
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XRippleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
108
119
  /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: XRippleDirective, isStandalone: true, selector: "[x-ripple]", host: { properties: { "class": "this.className" } }, usesInheritance: true, ngImport: i0 }); }
109
120
  }
110
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XRippleDirective, decorators: [{
@@ -113,7 +124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
113
124
  selector: `[${XRipplePrefix}]`,
114
125
  standalone: true
115
126
  }]
116
- }], propDecorators: { className: [{
127
+ }], ctorParameters: () => [], propDecorators: { className: [{
117
128
  type: HostBinding,
118
129
  args: ['class']
119
130
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-ripple.mjs","sources":["../../../../lib/ng-nest/ui/ripple/ripple.property.ts","../../../../lib/ng-nest/ui/ripple/ripple.directive.ts","../../../../lib/ng-nest/ui/ripple/ripple.module.ts","../../../../lib/ng-nest/ui/ripple/ng-nest-ui-ripple.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { Directive, input } from '@angular/core';\r\nimport type { XBoolean, XNumber, XType } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Ripple\r\n * @selector x-ripple\r\n * @decorator directive\r\n */\r\nexport const XRipplePrefix = 'x-ripple';\r\nconst X_RIPPLE_CONFIG_NAME = 'ripple';\r\n\r\n/**\r\n * Ripple Property\r\n */\r\n@Directive({ selector: '[x-ripple]' })\r\nexport class XRippleProperty extends XPropertyFunction(X_RIPPLE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 类型\r\n * @en_US Types of\r\n */\r\n readonly type = input<XRippleType>(this.config?.type ?? 'initial');\r\n /**\r\n * @zh_CN 执行时间\r\n * @en_US The execution time\r\n */\r\n readonly duration = input<number, XNumber>(500, {transform: XToNumber});\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disable\r\n */\r\n readonly disabled = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 波纹类型\r\n * @en_US Ripple type\r\n */\r\nexport type XRippleType = XType;\r\n","import {\r\n OnInit,\r\n Renderer2,\r\n ElementRef,\r\n Directive,\r\n OnDestroy,\r\n inject,\r\n HostBinding,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { delay, fromEvent, of, Subject, takeUntil, tap } from 'rxjs';\r\nimport { XRipplePrefix, XRippleProperty } from './ripple.property';\r\nimport { XComputed } from '@ng-nest/ui/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Directive({\r\n selector: `[${XRipplePrefix}]`,\r\n standalone: true\r\n})\r\nexport class XRippleDirective extends XRippleProperty implements OnInit, OnDestroy {\r\n @HostBinding('class') get className() {\r\n return `${XRipplePrefix} ${XRipplePrefix}-${this.type()}`;\r\n }\r\n\r\n private unsub = new Subject<void>();\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private cdr = inject(ChangeDetectorRef);\r\n private document = inject(DOCUMENT);\r\n\r\n ngOnInit() {\r\n if (this.disabled()) return;\r\n\r\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\r\n .pipe(takeUntil(this.unsub))\r\n .subscribe((event) => {\r\n const eleRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const radius = this.distanceToFurthestCorner(event.x, event.y, eleRect);\r\n const offsetX = event.x - eleRect.left;\r\n const offsetY = event.y - eleRect.top;\r\n const ripple = this.renderer.createElement('div');\r\n this.renderer.addClass(ripple, 'x-ripple-element');\r\n ripple.style.left = `${offsetX - radius}px`;\r\n ripple.style.top = `${offsetY - radius}px`;\r\n ripple.style.height = `${radius * 2}px`;\r\n ripple.style.width = `${radius * 2}px`;\r\n ripple.style.transitionDuration = `${this.duration()}ms`;\r\n this.renderer.appendChild(this.elementRef.nativeElement, ripple);\r\n this.enforceStyleRecalculation(ripple);\r\n ripple.style.transform = 'scale(1)';\r\n ripple.style.opacity = '0.3';\r\n const downTime = new Date().getTime();\r\n\r\n const upEvent = fromEvent<MouseEvent>(this.document.documentElement, 'mouseup')\r\n .pipe(takeUntil(this.unsub))\r\n .subscribe(() => {\r\n const upTime = new Date().getTime();\r\n of(true)\r\n .pipe(\r\n delay(upTime - downTime > this.duration() ? 0 : this.duration() - (upTime - downTime)),\r\n tap(() => {\r\n if (this.renderer.parentNode(ripple)) {\r\n this.renderer.removeChild(this.elementRef.nativeElement, ripple);\r\n }\r\n // TODO: use zoneless, renderer removeChild will not take effect immediately\r\n this.cdr.markForCheck();\r\n upEvent.unsubscribe();\r\n }),\r\n takeUntil(this.unsub)\r\n )\r\n .subscribe();\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsub.next();\r\n this.unsub.complete();\r\n }\r\n\r\n distanceToFurthestCorner(x: number, y: number, rect: DOMRect) {\r\n const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\r\n const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\r\n return Math.sqrt(distX * distX + distY * distY);\r\n }\r\n\r\n enforceStyleRecalculation(element: HTMLElement) {\r\n XComputed(element).getPropertyValue('opacity');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { XRippleDirective } from './ripple.directive';\r\n\r\n@NgModule({\r\n imports: [XRippleDirective],\r\n exports: [XRippleDirective]\r\n})\r\nexport class XRippleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-ripple.mjs","sources":["../../../../lib/ng-nest/ui/ripple/ripple.property.ts","../../../../lib/ng-nest/ui/ripple/ripple.directive.ts","../../../../lib/ng-nest/ui/ripple/ripple.module.ts","../../../../lib/ng-nest/ui/ripple/ng-nest-ui-ripple.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { Directive, input } from '@angular/core';\r\nimport type { XBoolean, XNumber, XType } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Ripple\r\n * @selector x-ripple\r\n * @decorator directive\r\n */\r\nexport const XRipplePrefix = 'x-ripple';\r\nconst X_RIPPLE_CONFIG_NAME = 'ripple';\r\n\r\n/**\r\n * Ripple Property\r\n */\r\n@Directive({ selector: '[x-ripple]' })\r\nexport class XRippleProperty extends XPropertyFunction(X_RIPPLE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 类型\r\n * @en_US Types of\r\n */\r\n readonly type = input<XRippleType>(this.config?.type ?? 'initial');\r\n /**\r\n * @zh_CN 执行时间\r\n * @en_US The execution time\r\n */\r\n readonly duration = input<number, XNumber>(500, {transform: XToNumber});\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disable\r\n */\r\n readonly disabled = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 波纹类型\r\n * @en_US Ripple type\r\n */\r\nexport type XRippleType = XType;\r\n","import {\r\n Renderer2,\r\n ElementRef,\r\n Directive,\r\n OnDestroy,\r\n inject,\r\n HostBinding,\r\n ChangeDetectorRef,\r\n effect\r\n} from '@angular/core';\r\nimport { delay, fromEvent, of, Subject, Subscription, takeUntil, tap } from 'rxjs';\r\nimport { XRipplePrefix, XRippleProperty } from './ripple.property';\r\nimport { XComputed } from '@ng-nest/ui/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Directive({\r\n selector: `[${XRipplePrefix}]`,\r\n standalone: true\r\n})\r\nexport class XRippleDirective extends XRippleProperty implements OnDestroy {\r\n @HostBinding('class') get className() {\r\n return `${XRipplePrefix} ${XRipplePrefix}-${this.type()}`;\r\n }\r\n\r\n private unsub = new Subject<void>();\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private cdr = inject(ChangeDetectorRef);\r\n private document = inject(DOCUMENT);\r\n downEvent: Subscription | null = null;\r\n upEvent: Subscription | null = null;\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.disabled()) {\r\n this.downEvent?.unsubscribe();\r\n this.upEvent?.unsubscribe();\r\n } else {\r\n this.downEvent?.unsubscribe();\r\n this.upEvent?.unsubscribe();\r\n this.setEvent();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsub.next();\r\n this.unsub.complete();\r\n }\r\n\r\n setEvent() {\r\n this.downEvent = fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\r\n .pipe(takeUntil(this.unsub))\r\n .subscribe((event) => {\r\n const eleRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const radius = this.distanceToFurthestCorner(event.x, event.y, eleRect);\r\n const offsetX = event.x - eleRect.left;\r\n const offsetY = event.y - eleRect.top;\r\n const ripple = this.renderer.createElement('div');\r\n this.renderer.addClass(ripple, 'x-ripple-element');\r\n ripple.style.left = `${offsetX - radius}px`;\r\n ripple.style.top = `${offsetY - radius}px`;\r\n ripple.style.height = `${radius * 2}px`;\r\n ripple.style.width = `${radius * 2}px`;\r\n ripple.style.transitionDuration = `${this.duration()}ms`;\r\n this.renderer.appendChild(this.elementRef.nativeElement, ripple);\r\n this.enforceStyleRecalculation(ripple);\r\n ripple.style.transform = 'scale(1)';\r\n ripple.style.opacity = '0.3';\r\n const downTime = new Date().getTime();\r\n\r\n this.upEvent = fromEvent<MouseEvent>(this.document.documentElement, 'mouseup')\r\n .pipe(takeUntil(this.unsub))\r\n .subscribe(() => {\r\n const upTime = new Date().getTime();\r\n of(true)\r\n .pipe(\r\n delay(upTime - downTime > this.duration() ? 0 : this.duration() - (upTime - downTime)),\r\n tap(() => {\r\n if (this.renderer.parentNode(ripple)) {\r\n this.renderer.removeChild(this.elementRef.nativeElement, ripple);\r\n }\r\n // TODO: use zoneless, renderer removeChild will not take effect immediately\r\n this.cdr.markForCheck();\r\n this.upEvent?.unsubscribe();\r\n }),\r\n takeUntil(this.unsub)\r\n )\r\n .subscribe();\r\n });\r\n });\r\n }\r\n\r\n distanceToFurthestCorner(x: number, y: number, rect: DOMRect) {\r\n const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\r\n const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\r\n return Math.sqrt(distX * distX + distY * distY);\r\n }\r\n\r\n enforceStyleRecalculation(element: HTMLElement) {\r\n XComputed(element).getPropertyValue('opacity');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { XRippleDirective } from './ripple.directive';\r\n\r\n@NgModule({\r\n imports: [XRippleDirective],\r\n exports: [XRippleDirective]\r\n})\r\nexport class XRippleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}