{"version":3,"file":"obliczeniowo-elementary-scroller-nav.mjs","sources":["../../../../projects/components/scroller-nav/classes/page-controller-adapter.class.ts","../../../../projects/components/scroller-nav/classes/page-controller-element-adapter.class.ts","../../../../projects/components/scroller-nav/components/scroller-nav/scroller-nav.component.ts","../../../../projects/components/scroller-nav/components/scroller-nav/scroller-nav.component.html","../../../../projects/components/scroller-nav/scroller-nav.module.ts","../../../../projects/components/scroller-nav/classes/page-controller-record-adapter.class.ts","../../../../projects/components/scroller-nav/obliczeniowo-elementary-scroller-nav.ts"],"sourcesContent":["import { Controller } from '../interfaces/controller';\nimport { Page } from '../interfaces/page';\n\nexport type Move = 'up' | 'down';\nexport type MoveSize = 'step' | 'jump';\n\nexport abstract class PageControllerAdapter {\n  constructor(public page: Page) {\n  }\n\n  protected abstract scroll(nav: Controller, move?: number): void;\n  abstract positionChange(nav: Controller, pos: number): void;\n  abstract stepsPos(nav: Controller): number;\n  abstract show(nav: Controller): boolean;\n\n  move(nav: Controller, direction?: Move, size?: MoveSize) {\n    if (direction && size) {\n      this.scroll(nav, this.page[size] * (direction === 'up' && 1 || -1));\n    }\n    this.scroll(nav);\n  }\n}\n","import { Controller } from '../interfaces/controller';\nimport { PageControllerAdapter } from './page-controller-adapter.class';\n\nexport class PageControllerElementAdapter extends PageControllerAdapter {\n  constructor() {\n    super({\n      step: 50,\n      jump: 450\n    });\n  }\n\n  protected scroll(nav: Controller, move?: number): void {\n    const scroll = (sc: number, max: number) => sc / max;\n    const { element, horizontal } = nav;\n    if (horizontal) {\n      element?.scrollTo(\n        {\n          left: element.scrollLeft + (move || 0)\n        }\n      );\n      nav.position = element ? scroll(element.scrollLeft, element.scrollWidth - element.clientWidth) : 0;\n    } else {\n      element?.scrollTo(\n        {\n          top: element.scrollTop + (move || 0)\n        }\n      );\n      nav.position = element ? scroll(element.scrollTop, element.scrollHeight - element.clientHeight) : 0;\n    }\n  }\n\n  show(nav: Controller): boolean {\n    const { element, horizontal } = nav;\n    if (horizontal) {\n      return element && element.scrollWidth > element.clientWidth || false;\n    } else {\n      return element && element.scrollHeight > element.clientHeight || false;\n    }\n  }\n\n  positionChange(nav: Controller, pos: number): void {\n    nav.position = pos / 100;\n    const { element, horizontal } = nav;\n\n    if (horizontal) {\n      element?.scrollTo(\n        {\n          left: (element.scrollWidth - element.clientWidth) * nav.position\n        }\n      );\n    } else {\n      element?.scrollTo(\n        {\n          top: (element.scrollHeight - element.clientHeight) * nav.position\n        }\n      );\n    }\n  }\n\n  stepsPos(nav: Controller): number {\n    const { element, horizontal } = nav;\n    if (horizontal) {\n      return element && Math.floor((element.scrollWidth - element.clientWidth) / this.page.step) || 0;\n    }\n    return element && Math.floor((element.scrollHeight - element.clientHeight) / this.page.step) || 0;\n  }\n}\n","import { ChangeDetectorRef, Component, HostBinding, Input, OnInit, SimpleChanges } from '@angular/core';\n\nimport { Controller } from '../../interfaces/controller';\nimport { PageControllerAdapter } from '../../classes/page-controller-adapter.class';\nimport { PageControllerElementAdapter } from '../../classes/page-controller-element-adapter.class';\n\n@Component({\n    selector: 'obl-scroller-nav',\n    templateUrl: './scroller-nav.component.html',\n    styleUrls: ['./scroller-nav.component.scss'],\n    standalone: false\n})\nexport class ScrollerNavComponent implements Controller {\n  @Input() element: HTMLElement | undefined | null;\n\n  @Input()\n  @HostBinding('class.show') show: boolean = false;\n\n  @Input()\n  @HostBinding('class.horizontal') horizontal: boolean = true;\n\n  @Input()\n  pageController: PageControllerAdapter = new PageControllerElementAdapter();\n\n  position: number = 0;\n\n  isOpen: boolean = false;\n\n  protected resize: ResizeObserver = new ResizeObserver(_ => {\n    this.checkShow();\n    this.change.detectChanges();\n  })\n\n  constructor(protected change: ChangeDetectorRef) { }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.element) {\n      this.resize.disconnect();\n\n      if (this.element) {\n        this.resize.observe(this.element);\n\n        setTimeout(() => this.checkShow());\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.resize.disconnect();\n  }\n\n  checkShow(): void {\n    this.show = this.pageController.show(this);\n    this.pageController.move(this);\n  }\n\n  toggle(): void {\n    this.isOpen = !this.isOpen;\n  }\n}\n","<button oblButton (click)=\"pageController.move(this, 'down', 'jump')\">\n  <obl-icon [name]=\"horizontal ? 'left-more' : 'up-more'\"></obl-icon>\n</button>\n<button oblButton (click)=\"pageController.move(this, 'down', 'step')\">\n  <obl-icon [name]=\"horizontal ? 'left' : 'up'\"></obl-icon>\n</button>\n<button\n  oblButton\n  (click)=\"toggle()\"\n  cdkOverlayOrigin\n  #trigger=\"cdkOverlayOrigin\"\n>\n  <obl-pie-progress\n    [value]=\"position * 100\"\n    [display]=\"false\"\n    [size]=\"24\"\n  ></obl-pie-progress>\n</button>\n<button oblButton (click)=\"pageController.move(this, 'up', 'step')\">\n  <obl-icon [name]=\"horizontal ? 'right' : 'down'\"></obl-icon>\n</button>\n<button oblButton (click)=\"pageController.move(this, 'up', 'jump')\">\n  <obl-icon [name]=\"horizontal ? 'right-more' : 'down-more'\"></obl-icon>\n</button>\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"trigger\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  (overlayOutsideClick)=\"toggle()\"\n>\n  <div class=\"scroller\">\n    <obl-pie-progress\n      [value]=\"position * 100\"\n      (valueChange)=\"pageController.positionChange(this, $event)\"\n      [size]=\"100\"\n      [display]=\"false\"\n      [interactive]=\"true\"\n    ></obl-pie-progress>\n  </div>\n</ng-template>\n","import { PieProgressModule } from '@obliczeniowo/elementary/pie-progress';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\nimport { IconsModule } from '@obliczeniowo/elementary/icons';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollerNavComponent } from './components/scroller-nav/scroller-nav.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\n@NgModule({\n  declarations: [\n    ScrollerNavComponent\n  ],\n  imports: [\n    CommonModule,\n    ButtonsModule,\n    IconsModule,\n    PieProgressModule,\n    OverlayModule,\n  ],\n  exports: [\n    ScrollerNavComponent\n  ]\n})\nexport class ScrollerNavModule { }\n","import { Controller } from '../interfaces/controller';\nimport { PageControllerAdapter } from './page-controller-adapter.class';\n\nexport class PageControllerRecordAdapter extends PageControllerAdapter {\n  position = 0;\n\n  getMax(): number {\n    return this.max;\n  }\n\n  setMax(max: number, nav?: Controller) {\n    this.max = max;\n    nav?.checkShow();\n  }\n\n  constructor(protected max: number) {\n    super({\n      step: 1,\n      jump: 9\n    });\n  }\n\n  protected scroll(nav: Controller, move?: number): void {\n    this.position = Math.min(\n      Math.max(\n        this.position + (move || 0),\n        0\n      ),\n      this.max - this.page.jump\n    );\n    nav.position = this.position / ((this.max - this.page.jump) || 1);\n  }\n\n  positionChange(nav: Controller, pos: number): void {\n    nav.position = pos / 100;\n\n    this.position = Math.round(nav.position * (this.max - this.page.jump));\n  }\n\n  stepsPos(nav: Controller): number {\n    return this.position;\n  }\n\n  show(nav: Controller): boolean {\n    return this.max > this.page.jump;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}