{"version":3,"file":"tableau-ui-angular-arrow-scroll.mjs","sources":["../../../projects/component-library/arrow-scroll/src/arrow-scroll.component.ts","../../../projects/component-library/arrow-scroll/src/arrow-scroll.component.html","../../../projects/component-library/arrow-scroll/src/tableau-ui-arrow-scroll.module.ts","../../../projects/component-library/arrow-scroll/src/tableau-ui-angular-arrow-scroll.ts"],"sourcesContent":["import type { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, input, signal, viewChild } from '@angular/core';\nimport type { IconParams } from 'tableau-ui-angular/icon';\n\n@Component({\n  selector: 'tab-arrow-scroll',\n  standalone: false,\n  templateUrl: './arrow-scroll.component.html',\n  styleUrl: './arrow-scroll.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[style.overflow]': '\"hidden\"',\n    '[class.horizontal]': '$scrollDirection() === \"horizontal\"',\n    '[class.vertical]': '$scrollDirection() === \"vertical\"',\n  },\n})\nexport class ArrowScrollComponent implements AfterViewInit, OnDestroy {\n  /**\n   * The type of scroll behavior to use.\n   * 'default' uses the default scroll behavior,\n   * 'arrow' uses arrow buttons for scrolling.\n   */\n  readonly $scrollType = input.required<'arrow' | 'default'>({\n    alias: 'scrollType',\n  });\n  /**\n   * The direction of the scroll.\n   * 'horizontal' scrolls horizontally,\n   * 'vertical' scrolls vertically.\n   */\n  readonly $scrollDirection = input.required<'horizontal' | 'vertical'>({\n    alias: 'scrollDirection',\n  });\n  /**\n   * The icon to use for the back scroll button.\n   * This should be a valid Material Symbols icon name.\n   * If not provided, 'keyboard_arrow_up' will be used for vertical, 'keyboard_arrow_left' for horizontal scrolling.\n   */\n  readonly $backIcon = input<string>(undefined, {\n    alias: 'backIcon',\n  });\n  /**\n   * The icon to use for the forward scroll button.\n   * This should be a valid Material Symbols icon name.\n   * If not provided, 'keyboard_arrow_down' will be used for vertical, 'keyboard_arrow_right' for horizontal scrolling.\n   */\n  readonly $forwardIcon = input<string>(undefined, {\n    alias: 'forwardIcon',\n  });\n\n  /**\n   * Parameters for the icons used in the scroll buttons.\n   * This allows customization of the icon appearance, such as size and color.\n   * @default undefined\n   */\n  readonly $iconParams = input<Partial<IconParams>>(undefined, {\n    alias: 'iconParams',\n  });\n  /**\n   * Gap between the scroll buttons the scroll container, can be adjusted to fit design requirements.\n   * @default '0.25rem'\n   */\n  readonly $buttonsGap = input<string>('0.25rem', {\n    alias: 'buttonsGap',\n  });\n  /**\n   * Color of the scroll buttons, can be adjusted to fit design requirements.\n   * @default 'plain'\n   */\n  readonly $buttonsColor = input<'error' | 'plain' | 'primary' | 'secondary'>('plain', {\n    alias: 'buttonsColor',\n  });\n  /**\n   * CSS color for the scroll button icons, can be adjusted to fit design requirements.\n   * @default undefined\n   */\n  readonly $buttonsCssColor = input<string | undefined>(undefined, {\n    alias: 'buttonsCssColor',\n  });\n  /**\n   * The amount to scroll when the scroll buttons are clicked.\n   * This value is in pixels for vertical scrolling and in pixels for horizontal scrolling.\n   * @default 100\n   */\n  readonly $buttonScrollAmount = input<number>(100, {\n    alias: 'buttonScrollAmount',\n  });\n  /**\n   * Whether to show a separator between the scroll buttons and the scroll container.\n   * @default false\n   */\n  readonly $showScrollButtonSeparator = input<boolean>(false, {\n    alias: 'showScrollButtonSeparator',\n  });\n  private readonly $scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\n  protected readonly $actualBackIcon = computed(() => {\n    return this.$backIcon() ?? (this.$scrollDirection() === 'horizontal' ? 'keyboard_arrow_left' : 'keyboard_arrow_up');\n  });\n  protected readonly $actualForwardIcon = computed(() => {\n    return this.$forwardIcon() ?? (this.$scrollDirection() === 'horizontal' ? 'keyboard_arrow_right' : 'keyboard_arrow_down');\n  });\n  private readonly $scrollContainerDimensions = signal<{\n    scrollHeight: number;\n    clientHeight: number;\n    scrollWidth: number;\n    clientWidth: number;\n  }>({\n    scrollHeight: 0,\n    clientHeight: 0,\n    scrollWidth: 0,\n    clientWidth: 0,\n  });\n\n  protected readonly $scrollArrowsVisible = computed(() => {\n    if (this.$scrollType() === 'default') {\n      return false;\n    }\n\n    const dimensions = this.$scrollContainerDimensions();\n    if (this.$scrollDirection() === 'horizontal') {\n      return dimensions.scrollWidth > dimensions.clientWidth;\n    } else {\n      return dimensions.scrollHeight > dimensions.clientHeight;\n    }\n  });\n  private readonly scrollDirectionChanged = effect(() => {\n    const el = this.$scrollContainer().nativeElement;\n    if (this.$scrollDirection() === 'horizontal') {\n      this.overrideMouseWheelForHorizontal(el);\n    } else {\n      this.removeMouseWheelOverride(el);\n    }\n  });\n\n  private readonly $scrollLeft = signal(0);\n  private readonly $scrollTop = signal(0);\n\n  readonly $canScroll = computed(() => {\n    const el = this.$scrollContainer().nativeElement;\n    const dir = this.$scrollDirection();\n    const scrollLeft = this.$scrollLeft();\n    const scrollTop = this.$scrollTop();\n    if (dir === 'horizontal') {\n      return {\n        back: scrollLeft > 0,\n        forward: scrollLeft + el.clientWidth < el.scrollWidth,\n      };\n    } else {\n      return {\n        back: scrollTop > 0,\n        forward: scrollTop + el.clientHeight < el.scrollHeight,\n      };\n    }\n  });\n\n  private observer: ResizeObserver | null = null;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private scrollHandler: (event: Event) => void = () => {};\n  ngAfterViewInit(): void {\n    const el = this.$scrollContainer().nativeElement;\n    this.recalculateScrollContainerDimensions(el);\n    this.observer = new ResizeObserver(() => {\n      this.recalculateScrollContainerDimensions(el);\n    });\n    this.observer.observe(this.$scrollContainer().nativeElement);\n\n    this.scrollHandler = () => {\n      this.$scrollLeft.set(el.scrollLeft);\n      this.$scrollTop.set(el.scrollTop);\n    };\n    el.addEventListener('scroll', this.scrollHandler, {\n      passive: false,\n    });\n  }\n  ngOnDestroy(): void {\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n    const el = this.$scrollContainer().nativeElement;\n    this.removeMouseWheelOverride(el);\n    el.removeEventListener('scroll', this.scrollHandler);\n  }\n\n  @HostListener('window:resize')\n  onResize() {\n    this.recalculateScrollContainerDimensions(this.$scrollContainer().nativeElement);\n  }\n  private recalculateScrollContainerDimensions(el: HTMLDivElement) {\n    this.$scrollContainerDimensions.set({\n      scrollHeight: el.scrollHeight,\n      clientHeight: el.offsetHeight,\n      scrollWidth: el.scrollWidth,\n      clientWidth: el.clientWidth,\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private wheelHandler: (event: WheelEvent) => void = () => {};\n  private overrideMouseWheelForHorizontal(el: HTMLDivElement) {\n    this.wheelHandler = (event: WheelEvent) => {\n      if (event.deltaY !== 0) {\n        event.preventDefault();\n        el.scrollBy({\n          left: event.deltaY,\n          behavior: 'smooth',\n        });\n      }\n    };\n\n    el.addEventListener('wheel', this.wheelHandler, {\n      passive: false,\n    });\n  }\n  private removeMouseWheelOverride(el: HTMLDivElement) {\n    el.removeEventListener('wheel', this.wheelHandler);\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    this.wheelHandler = () => {};\n  }\n\n  scroll(direction: 'back' | 'forward') {\n    const el = this.$scrollContainer();\n    const amount = this.$buttonScrollAmount();\n    if (this.$scrollDirection() === 'horizontal') {\n      el.nativeElement.scrollBy({\n        left: direction === 'forward' ? amount : amount * -1,\n        behavior: 'smooth',\n      });\n    } else {\n      el.nativeElement.scrollBy({\n        top: direction === 'forward' ? amount : amount * -1,\n        behavior: 'smooth',\n      });\n    }\n  }\n}\n","@if ($scrollArrowsVisible()) {\n  <div class=\"scroll-arrow\" [style.margin-bottom]=\"$scrollDirection() === 'vertical' ? $buttonsGap() : '0'\" [style.margin-right]=\"$scrollDirection() === 'horizontal' ? $buttonsGap() : '0'\">\n    <button class=\"back\" layout=\"small-icon\" [color]=\"$buttonsColor()\" [disabled]=\"!$canScroll().back\" [style.color]=\"$buttonsCssColor()\" (click)=\"scroll('back')\">\n      <tab-icon [value]=\"$actualBackIcon()\" [params]=\"$iconParams()\" />\n    </button>\n    @if ($showScrollButtonSeparator()) {\n      <tab-separator [direction]=\"$scrollDirection() === 'vertical' ? 'horizontal' : 'vertical'\" />\n    }\n  </div>\n}\n\n<div\n  #scrollContainer\n  class=\"scroll-container\"\n  [class.arrow-scroll]=\"$scrollType() === 'arrow'\"\n  [class.vertical]=\"$scrollDirection() === 'vertical'\"\n  [class.horizontal]=\"$scrollDirection() === 'horizontal'\"\n>\n  <ng-content />\n</div>\n\n@if ($scrollArrowsVisible()) {\n  <div class=\"scroll-arrow\" [style.margin-top]=\"$scrollDirection() === 'vertical' ? $buttonsGap() : '0'\" [style.margin-left]=\"$scrollDirection() === 'horizontal' ? $buttonsGap() : '0'\">\n    @if ($showScrollButtonSeparator()) {\n      <tab-separator [direction]=\"$scrollDirection() === 'vertical' ? 'horizontal' : 'vertical'\" />\n    }\n    <button class=\"forward\" layout=\"small-icon\" [color]=\"$buttonsColor()\" [disabled]=\"!$canScroll().forward\" [style.color]=\"$buttonsCssColor()\" (click)=\"scroll('forward')\">\n      <tab-icon [value]=\"$actualForwardIcon()\" [params]=\"$iconParams()\" />\n    </button>\n  </div>\n}\n","import { NgModule } from '@angular/core';\nimport { ArrowScrollComponent } from './arrow-scroll.component';\nimport { TableauUiButtonModule } from 'tableau-ui-angular/button';\nimport { TableauUiCommonModule } from 'tableau-ui-angular/common';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\n\n@NgModule({\n  imports: [TableauUiButtonModule, TableauUiCommonModule, TableauUiIconModule],\n  declarations: [ArrowScrollComponent],\n  providers: [],\n  exports: [ArrowScrollComponent],\n})\nexport class TableauUiArrowScrollModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}