{"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]' })\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]' })\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":"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"}