pixi-scrollbox 2.3.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/@types/index.d.ts CHANGED
@@ -1,16 +1,18 @@
1
- import * as PIXI from 'pixi.js'
2
- import { Viewport } from 'pixi-viewport'
1
+ import { Container, DestroyOptions, EventSystem, FederatedPointerEvent, Graphics, Ticker } from 'pixi.js'
2
+ import type { Viewport } from 'pixi-viewport'
3
3
 
4
- type OverflowScrollType = 'none' | 'scroll' | 'hidden' | 'auto'
5
- type UnderflowType = 'center' | 'top' | 'left' | 'right' | 'bottom' | string
6
- interface ResizeOptions {
4
+ export type OverflowScrollType = 'none' | 'scroll' | 'hidden' | 'auto'
5
+ export type UnderflowType = 'center' | 'top' | 'left' | 'right' | 'bottom' | string
6
+ export interface ResizeOptions {
7
7
  boxWidth?: number
8
8
  boxHeight?: number
9
9
  scrollWidth?: number
10
10
  scrollHeight?: number
11
11
  }
12
12
 
13
- interface ScrollBoxOptions {
13
+ export interface ScrollboxOptions {
14
+ /** the renderer's EventSystem (app.renderer.events) */
15
+ events: EventSystem
14
16
  boxHeight?: number
15
17
  boxWidth?: number
16
18
  scrollbarSize?: number
@@ -30,18 +32,18 @@ interface ScrollBoxOptions {
30
32
  fadeScrollboxEase?: string | Function
31
33
  passiveWheel?: boolean
32
34
  clampWheel?: boolean
35
+ wheelSwapAxes?: boolean
33
36
  overflowX?: OverflowScrollType
34
37
  overflowY?: OverflowScrollType
35
38
  overflow?: OverflowScrollType
36
39
  noTicker?: boolean
37
- ticker?: PIXI.Ticker
38
- divWheel?: HTMLElement
40
+ ticker?: Ticker
39
41
  }
40
42
 
41
43
  /**
42
44
  * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars
43
45
  */
44
- export declare class Scrollbox extends PIXI.Container {
46
+ export declare class Scrollbox extends Container {
45
47
  boxHeight: number
46
48
  boxWidth: number
47
49
  content: Viewport
@@ -52,10 +54,10 @@ export declare class Scrollbox extends PIXI.Container {
52
54
  dragScroll: boolean
53
55
  readonly isScrollbarHorizontal: boolean
54
56
  readonly isScrollbarVertical: boolean
55
- overflow: string
56
- overflowX: string
57
- overflowY: string
58
- scrollbar: PIXI.Graphics
57
+ overflow: OverflowScrollType
58
+ overflowX: OverflowScrollType
59
+ overflowY: OverflowScrollType
60
+ scrollbar: Graphics
59
61
  scrollbarOffsetHorizontal: number
60
62
  scrollbarOffsetVertical: number
61
63
  scrollbarSize: number
@@ -68,7 +70,7 @@ export declare class Scrollbox extends PIXI.Container {
68
70
  /**
69
71
  * create a scrollbox
70
72
  */
71
- constructor(options?: ScrollBoxOptions)
73
+ constructor(options: ScrollboxOptions)
72
74
 
73
75
  /**
74
76
  * show the scrollbar and restart the timer for fade if options.fade is set
@@ -95,21 +97,27 @@ export declare class Scrollbox extends PIXI.Container {
95
97
  */
96
98
  updateLoop(elapsed: number): void
97
99
 
100
+ /**
101
+ * removes the ticker and the viewport's wheel listener, then destroys the scrollbox
102
+ */
103
+ destroy(options?: DestroyOptions): void
104
+
98
105
  private _drawMask(): void
99
106
  private _drawScrollbars(): void
107
+ private _clampAndDraw(): void
100
108
 
101
109
  /**
102
110
  * handle pointer down on scrollbar
103
111
  */
104
- private scrollbarDown(e: PIXI.InteractionEvent): void
112
+ private scrollbarDown(e: FederatedPointerEvent): void
105
113
 
106
114
  /**
107
115
  * handle pointer move on scrollbar
108
116
  */
109
- private scrollbarMove(e: PIXI.InteractionEvent): void
117
+ private scrollbarMove(e: FederatedPointerEvent): void
110
118
 
111
119
  /**
112
- * handle pointer down on scrollbar
120
+ * handle pointer up on scrollbar
113
121
  */
114
122
  private scrollbarUp(): void
115
123
  }
package/README.md CHANGED
@@ -7,53 +7,69 @@ Features:
7
7
  * scrollbox's scrollbars may be hidden when not needed (options.overflow=auto or hidden)
8
8
  * scrollbox may also be scrolled by dragging on the content window (options.dragScroll=true)
9
9
 
10
+ ## AI-assisted development
11
+
12
+ Starting in November 2026, [Claude](https://www.anthropic.com/claude) (an AI model by Anthropic) assists with editing this code, including code review, bug fixes, and changes to documentation. A maintainer reviews every change before it is released. If you prefer not to use software developed with AI assistance, please take this into account when choosing whether to use pixi-scrollbox.
13
+
10
14
  ## Live Example
11
15
  [davidfig.github.io/pixi-scrollbox/](https://davidfig.github.io/pixi-scrollbox/)
12
16
 
13
17
  ## Rationale
14
18
  I needed a scrollbox for the UI of my game and since I had this nifty pixi-viewport, I figured it wouldn't be much work to create it. Five hours later and I realized I was a bit off on my estimates. Hopefully others will find it useful.
15
19
 
16
- ## Migration from v1 to v2
17
- Scrollbox no longer exports a default object. Instead you need to use:
20
+ ## v3.0.0
18
21
 
19
- ```js
20
- const Scrollbox = require('pixi-scrollbox').Scrollbox
21
- ```
22
- or
23
- ```js
24
- import { Scrollbox } from 'pixi-scrollbox'
25
- ```
26
- There were some minor name changes to the fade options. See documentation.
22
+ Tested with pixi.js v8.22 and pixi-viewport v7.0. Use pixi-scrollbox v2 for older versions of pixi.js.
23
+
24
+ Breaking changes:
25
+
26
+ - Requires pixi.js v8 and pixi-viewport v7 (`peerDependencies` are now `pixi.js ^8` and `pixi-viewport ^7`).
27
+ - `options.events` is required: pass your renderer's EventSystem (`app.renderer.events`). pixi-viewport v7 uses it for wheel events and pointer positions.
28
+ - `options.interaction` and `options.divWheel` are removed. The wheel listener goes on `options.events.domElement` (normally the canvas).
29
+ - The ES module build is now `dist/scrollbox.mjs` (`dist/scrollbox.js` is still the UMD/CommonJS build).
30
+ - `options.passiveWheel` is now passed to the viewport (it was ignored before), so the page doesn't scroll when the wheel scrolls the scrollbox unless you set it to `true`.
31
+
32
+ Fixes and new options:
33
+
34
+ - Content inside the scrollbox gets pointer events (click, hover, pointerout) wherever it shows, including when scrolled to the end, and the mask never blocks them.
35
+ - The wheel scrolls the scrollbox at its current position after it moves or the canvas is resized or offset.
36
+ - Dragging the scrollbar keeps working when the pointer leaves the scrollbar, and clicking the vertical track below the thumb pages down instead of grabbing the thumb.
37
+ - The scrollbar stays clickable when its background is transparent or faded out.
38
+ - `options.fade` restarts its timer whenever the scrollbox scrolls.
39
+ - `options.wheelSwapAxes` lets a mouse wheel scroll a horizontal scrollbox.
40
+ - `scrollbox.destroy()` removes the ticker and the viewport's wheel listener.
41
+ - With `options.noTicker`, `updateLoop(elapsed)` also updates the viewport.
27
42
 
28
43
  ## Simple Example
29
44
  ```js
30
- const PIXI = require('pixi.js')
31
- const Scrollbox = require('pixi-scrollbox').Scrollbox
45
+ import { Application, Sprite, Texture } from 'pixi.js'
46
+ import { Scrollbox } from 'pixi-scrollbox'
47
+
48
+ const app = new Application()
49
+ await app.init()
50
+ document.body.appendChild(app.canvas)
32
51
 
33
52
  // create the scrollbox
34
- const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200})
53
+ const scrollbox = app.stage.addChild(new Scrollbox({ boxWidth: 200, boxHeight: 200, events: app.renderer.events }))
35
54
 
36
55
  // add a sprite to the scrollbox's content
37
- const sprite = scrollbox.content.addChild(new PIXI.Sprite(PIXI.Texture.WHITE))
56
+ const sprite = scrollbox.content.addChild(new Sprite(Texture.WHITE))
38
57
  sprite.width = sprite.height = 500
39
58
  sprite.tint = 0xff0000
40
59
 
41
60
  // force an update of the scrollbox's calculations after updating the children
42
61
  scrollbox.update()
43
-
44
- // add the viewport to the stage
45
- const app = new PIXI.Application()
46
- document.body.appendChild(app.view)
47
- app.stage.addChild(scrollbox)
48
62
  ```
49
63
 
64
+ `scrollbox.content` is a [pixi-viewport](https://github.com/pixijs-userland/pixi-viewport), so you can use any of its functions to move the content, e.g., `scrollbox.content.moveCorner(0, 0)`. To scroll a horizontal scrollbox with a mouse wheel, use `new Scrollbox({ overflowY: 'hidden', wheelSwapAxes: true, ... })`.
65
+
50
66
  ## Installation
51
67
  ```
52
68
  npm i pixi-scrollbox pixi-viewport pixi.js
53
69
  ```
54
70
  or
55
71
  ```
56
- yarn add pixi-scrollbox pixi-viewport pixi.js
72
+ pnpm add pixi-scrollbox pixi-viewport pixi.js
57
73
  ```
58
74
 
59
75
  Note: pixi-viewport and pixi.js are listed as peerDependency, which means you will need to manually install them if they're not already installed (this is to ensure you don't have two versions of these libraries).
@@ -61,16 +77,52 @@ Note: pixi-viewport and pixi.js are listed as peerDependency, which means you wi
61
77
  or [download the latest build from github](https://github.com/davidfig/pixi-scrollbox/releases)
62
78
  ```html
63
79
  <script src="/external-directory/pixi.js"></script>
64
- <script src="/external-directory/pixi-viewport.js"></script>
80
+ <script src="/external-directory/pixi_viewport.umd.cjs"></script>
65
81
  <script src="/external-directory/scrollbox.js"></script>
66
82
  <script>
67
- const Scrollbox = new Scrollbox(options)
83
+ const scrollbox = new Scrollbox.Scrollbox({ events: app.renderer.events })
68
84
  </script>
69
85
  ```
70
86
 
87
+ The UMD build expects pixi.js and pixi-viewport to be loaded first as the globals `PIXI` and `pixi_viewport`.
88
+
89
+ ## Migration from v2 to v3
90
+ Pass the renderer's EventSystem and remove `interaction` and `divWheel`:
91
+
92
+ ```js
93
+ // v2
94
+ const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200, interaction: app.renderer.plugins.interaction, divWheel: app.view })
95
+
96
+ // v3
97
+ const scrollbox = new Scrollbox({ boxWidth: 200, boxHeight: 200, events: app.renderer.events })
98
+ ```
99
+
100
+ ## Migration from v1 to v2
101
+ Scrollbox no longer exports a default object. Instead you need to use:
102
+
103
+ ```js
104
+ const Scrollbox = require('pixi-scrollbox').Scrollbox
105
+ ```
106
+ or
107
+ ```js
108
+ import { Scrollbox } from 'pixi-scrollbox'
109
+ ```
110
+ There were some minor name changes to the fade options. See documentation.
111
+
71
112
  ## API Documentation
72
113
  [https://davidfig.github.io/pixi-scrollbox/jsdoc/](https://davidfig.github.io/pixi-scrollbox/jsdoc/)
73
114
 
74
- ## license
115
+ ## Development Recipe
116
+
117
+ This project uses [pnpm](https://pnpm.io/) (the version is pinned in `package.json`'s `packageManager` field).
118
+
119
+ 1. clone repository
120
+ 2. pnpm install
121
+ 3. pnpm dev
122
+ 4. open browser to http://localhost:5173
123
+ 5. pnpm test (tests use [Vitest](https://vitest.dev/) with jsdom)
124
+ 6. pnpm run build-demo and pnpm run docs (build the demo and API docs into docs/)
125
+
126
+ ## license
75
127
  MIT License
76
128
  (c) 2019 [YOPEY YOPEY LLC](https://yopeyopey.com/) by [David Figatner](https://twitter.com/yopey_yopey/)
package/dist/scrollbox.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("pixi.js"),require("pixi-viewport")):"function"==typeof define&&define.amd?define(["exports","pixi.js","pixi-viewport"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).Scrollbox={},t.PIXI,t.Viewport)}(this,(function(t,i,o){"use strict";function s(t){if(t&&t.__esModule)return t;var i=Object.create(null);return t&&Object.keys(t).forEach((function(o){if("default"!==o){var s=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(i,o,s.get?s:{enumerable:!0,get:function(){return t[o]}})}})),i.default=t,Object.freeze(i)}var r=s(i),e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var l=function(t){var i={exports:{}};return t(i,i.exports),i.exports}((function(t,i){(function(){var i;(function(i){t.exports=i})(i={linear:function(t,i,o,s){return o*t/s+i},easeInQuad:function(t,i,o,s){return o*(t/=s)*t+i},easeOutQuad:function(t,i,o,s){return-o*(t/=s)*(t-2)+i},easeInOutQuad:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t+i:-o/2*(--t*(t-2)-1)+i},easeInCubic:function(t,i,o,s){return o*(t/=s)*t*t+i},easeOutCubic:function(t,i,o,s){return o*((t=t/s-1)*t*t+1)+i},easeInOutCubic:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t+i:o/2*((t-=2)*t*t+2)+i},easeInQuart:function(t,i,o,s){return o*(t/=s)*t*t*t+i},easeOutQuart:function(t,i,o,s){return-o*((t=t/s-1)*t*t*t-1)+i},easeInOutQuart:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t*t+i:-o/2*((t-=2)*t*t*t-2)+i},easeInQuint:function(t,i,o,s){return o*(t/=s)*t*t*t*t+i},easeOutQuint:function(t,i,o,s){return o*((t=t/s-1)*t*t*t*t+1)+i},easeInOutQuint:function(t,i,o,s){return(t/=s/2)<1?o/2*t*t*t*t*t+i:o/2*((t-=2)*t*t*t*t+2)+i},easeInSine:function(t,i,o,s){return-o*Math.cos(t/s*(Math.PI/2))+o+i},easeOutSine:function(t,i,o,s){return o*Math.sin(t/s*(Math.PI/2))+i},easeInOutSine:function(t,i,o,s){return-o/2*(Math.cos(Math.PI*t/s)-1)+i},easeInExpo:function(t,i,o,s){return 0===t?i:o*Math.pow(2,10*(t/s-1))+i},easeOutExpo:function(t,i,o,s){return t===s?i+o:o*(1-Math.pow(2,-10*t/s))+i},easeInOutExpo:function(t,i,o,s){return(t/=s/2)<1?o/2*Math.pow(2,10*(t-1))+i:o/2*(2-Math.pow(2,-10*--t))+i},easeInCirc:function(t,i,o,s){return-o*(Math.sqrt(1-(t/=s)*t)-1)+i},easeOutCirc:function(t,i,o,s){return o*Math.sqrt(1-(t=t/s-1)*t)+i},easeInOutCirc:function(t,i,o,s){return(t/=s/2)<1?-o/2*(Math.sqrt(1-t*t)-1)+i:o/2*(Math.sqrt(1-(t-=2)*t)+1)+i},easeInElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s),(e=0)||(e=.3*s),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),-r*Math.pow(2,10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)+i},easeOutElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s),(e=0)||(e=.3*s),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),r*Math.pow(2,-10*t)*Math.sin((t*s-l)*(2*Math.PI)/e)+o+i},easeInOutElastic:function(t,i,o,s){var r,e,l;return l=1.70158,0===t||(t/=s/2),(e=0)||(e=s*(.3*1.5)),(r=o)<Math.abs(o)?(r=o,l=e/4):l=e/(2*Math.PI)*Math.asin(o/r),t<1?r*Math.pow(2,10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)*-.5+i:r*Math.pow(2,-10*(t-=1))*Math.sin((t*s-l)*(2*Math.PI)/e)*.5+o+i},easeInBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),o*(t/=s)*t*((r+1)*t-r)+i},easeOutBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),o*((t=t/s-1)*t*((r+1)*t+r)+1)+i},easeInOutBack:function(t,i,o,s,r){return void 0===r&&(r=1.70158),(t/=s/2)<1?o/2*(t*t*((1+(r*=1.525))*t-r))+i:o/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+i},easeInBounce:function(t,o,s,r){return s-i.easeOutBounce(r-t,0,s,r)+o},easeOutBounce:function(t,i,o,s){return(t/=s)<1/2.75?o*(7.5625*t*t)+i:t<2/2.75?o*(7.5625*(t-=1.5/2.75)*t+.75)+i:t<2.5/2.75?o*(7.5625*(t-=2.25/2.75)*t+.9375)+i:o*(7.5625*(t-=2.625/2.75)*t+.984375)+i},easeInOutBounce:function(t,o,s,r){return t<r/2?.5*i.easeInBounce(2*t,0,s,r)+o:.5*i.easeOutBounce(2*t-r,0,s,r)+.5*s+o}})}).call(e)}));const n={boxWidth:100,boxHeight:100,scrollbarSize:10,scrollbarBackground:14540253,scrollbarBackgroundAlpha:1,scrollbarForeground:8947848,scrollbarForegroundAlpha:1,dragScroll:!0,stopPropagation:!0,scrollbarOffsetHorizontal:0,scrollbarOffsetVertical:0,underflow:"top-left",fadeScrollbar:!1,fadeScrollbarTime:1e3,fadeScrollboxWait:3e3,fadeScrollboxEase:"easeInOutSine",passiveWheel:!1,clampWheel:!0};class a extends r.Container{constructor(t={}){if(super(),this.options=Object.assign({},n,t),t.overflow&&(this.options.overflowX=this.options.overflowY=t.overflow),this.ease="function"==typeof this.options.fadeScrollboxEase?this.options.fadeScrollboxEase:l[this.options.fadeScrollboxEase],this.content=this.addChild(new o.Viewport({passiveWheel:!1,stopPropagation:this.options.stopPropagation,screenWidth:this.options.boxWidth,screenHeight:this.options.boxHeight,interaction:this.options.interaction,divWheel:this.options.divWheel})),this.content.decelerate().on("moved",()=>this._drawScrollbars()),t.ticker)this.options.ticker=t.ticker;else{let i;const o=r;i=parseInt(/^(\d+)\./.exec(r.VERSION)[1])<5?o.ticker.shared:o.Ticker.shared,this.options.ticker=t.ticker||i}this.scrollbar=this.addChild(new r.Graphics),this.scrollbar.interactive=!0,this.scrollbar.on("pointerdown",this.scrollbarDown,this),this.interactive=!0,this.on("pointermove",this.scrollbarMove,this),this.on("pointerup",this.scrollbarUp,this),this.on("pointercancel",this.scrollbarUp,this),this.on("pointerupoutside",this.scrollbarUp,this),this._maskContent=this.addChild(new r.Graphics),this.update(),this.options.noTicker||(this.tickerFunction=()=>this.updateLoop(Math.min(this.options.ticker.elapsedMS,16.6667)),this.options.ticker.add(this.tickerFunction))}get scrollbarOffsetHorizontal(){return this.options.scrollbarOffsetHorizontal}set scrollbarOffsetHorizontal(t){this.options.scrollbarOffsetHorizontal=t}get scrollbarOffsetVertical(){return this.options.scrollbarOffsetVertical}set scrollbarOffsetVertical(t){this.options.scrollbarOffsetVertical=t}get disable(){return this._disabled}set disable(t){this._disabled!==t&&(this._disabled=t,this.update())}get stopPropagation(){return this.options.stopPropagation}set stopPropagation(t){this.options.stopPropagation=t}get dragScroll(){return this.options.dragScroll}set dragScroll(t){this.options.dragScroll=t,t?this.content.drag():void 0!==this.content.removePlugin?this.content.removePlugin("drag"):this.content.plugins.remove("drag"),this.update()}get boxWidth(){return this.options.boxWidth}set boxWidth(t){this.options.boxWidth=t,this.content.screenWidth=t,this.update()}get overflow(){return this.options.overflow}set overflow(t){this.options.overflow=t,this.options.overflowX=t,this.options.overflowY=t,this.update()}get overflowX(){return this.options.overflowX}set overflowX(t){this.options.overflowX=t,this.update()}get overflowY(){return this.options.overflowY}set overflowY(t){this.options.overflowY=t,this.update()}get boxHeight(){return this.options.boxHeight}set boxHeight(t){this.options.boxHeight=t,this.content.screenHeight=t,this.update()}get scrollbarSize(){return this.options.scrollbarSize}set scrollbarSize(t){this.options.scrollbarSize=t}get contentWidth(){return this.options.boxWidth-(this.isScrollbarVertical?this.options.scrollbarSize:0)}get contentHeight(){return this.options.boxHeight-(this.isScrollbarHorizontal?this.options.scrollbarSize:0)}get isScrollbarVertical(){return this._isScrollbarVertical}get isScrollbarHorizontal(){return this._isScrollbarHorizontal}get scrollTop(){return this.content.top}set scrollTop(t){this.content.top=t,this._drawScrollbars()}get scrollLeft(){return this.content.left}set scrollLeft(t){this.content.left=t,this._drawScrollbars()}get scrollWidth(){return this._scrollWidth||this.content.width}set scrollWidth(t){this._scrollWidth=t}get scrollHeight(){return this._scrollHeight||this.content.height}set scrollHeight(t){this._scrollHeight=t}_drawScrollbars(){this._isScrollbarHorizontal="scroll"===this.overflowX||-1===["hidden","none"].indexOf(this.overflowX)&&this.scrollWidth>this.options.boxWidth,this._isScrollbarVertical="scroll"===this.overflowY||-1===["hidden","none"].indexOf(this.overflowY)&&this.scrollHeight>this.options.boxHeight,this.scrollbar.clear(),this.scrollWidth,this._isScrollbarVertical&&this.options.scrollbarSize,this.scrollHeight,this.isScrollbarHorizontal&&this.options.scrollbarSize;const t=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0),i=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop=this.content.top/i*this.boxHeight,this.scrollbarTop=this.scrollbarTop<0?0:this.scrollbarTop,this.scrollbarHeight=this.boxHeight/i*this.boxHeight,this.scrollbarHeight=this.scrollbarTop+this.scrollbarHeight>this.boxHeight?this.boxHeight-this.scrollbarTop:this.scrollbarHeight,this.scrollbarLeft=this.content.left/t*this.boxWidth,this.scrollbarLeft=this.scrollbarLeft<0?0:this.scrollbarLeft,this.scrollbarWidth=this.boxWidth/t*this.boxWidth,this.scrollbarWidth=this.scrollbarWidth+this.scrollbarLeft>this.boxWidth?this.boxWidth-this.scrollbarLeft:this.scrollbarWidth,this.isScrollbarVertical&&this.scrollbar.beginFill(this.options.scrollbarBackground,this.options.scrollbarBackgroundAlpha).drawRect(this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical,0,this.scrollbarSize,this.boxHeight).endFill(),this.isScrollbarHorizontal&&this.scrollbar.beginFill(this.options.scrollbarBackground,this.options.scrollbarBackgroundAlpha).drawRect(0,this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal,this.boxWidth,this.scrollbarSize).endFill(),this.isScrollbarVertical&&this.scrollbar.beginFill(this.options.scrollbarForeground,this.options.scrollbarForegroundAlpha).drawRect(this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical,this.scrollbarTop,this.scrollbarSize,this.scrollbarHeight).endFill(),this.isScrollbarHorizontal&&this.scrollbar.beginFill(this.options.scrollbarForeground,this.options.scrollbarForegroundAlpha).drawRect(this.scrollbarLeft,this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal,this.scrollbarWidth,this.scrollbarSize).endFill(),this.activateFade()}_drawMask(){this._maskContent.beginFill(0).drawRect(0,0,this.boxWidth,this.boxHeight).endFill(),this.content.mask=this._maskContent}update(){if(this.content.mask=null,this._maskContent.clear(),!this._disabled){this._drawScrollbars(),this._drawMask();const t=this.isScrollbarHorizontal&&this.isScrollbarVertical?"all":this.isScrollbarHorizontal?"x":"y";null!==t&&(this.options.dragScroll&&this.content.drag({clampWheel:this.options.clampWheel,direction:t}),this.content.clamp({direction:t,underflow:this.options.underflow}))}}updateLoop(t){if(this.fade){if(this.fade.wait>0){if(this.fade.wait-=t,!(this.fade.wait<=0))return;t+=this.fade.wait}this.fade.duration+=t,this.fade.duration>=this.options.fadeScrollbarTime?(this.fade=null,this.scrollbar.alpha=0):this.scrollbar.alpha=this.ease(this.fade.duration,1,-1,this.options.fadeScrollbarTime),this.content.dirty=!0}}get dirty(){return this.content.dirty}set dirty(t){this.content.dirty=t}activateFade(){!this.fade&&this.options.fade&&(this.scrollbar.alpha=1,this.fade={wait:this.options.fadeScrollboxWait,duration:0})}scrollbarDown(t){const i=this.toLocal(t.data.global);return this.isScrollbarHorizontal&&i.y>this.boxHeight-this.scrollbarSize?(i.x>=this.scrollbarLeft&&i.x<=this.scrollbarLeft+this.scrollbarWidth?this.pointerDown={type:"horizontal",last:i}:i.x>this.scrollbarLeft?(this.content.left+=this.content.worldScreenWidth,this.update()):(this.content.left-=this.content.worldScreenWidth,this.update()),void(this.options.stopPropagation&&t.stopPropagation())):this.isScrollbarVertical&&i.x>this.boxWidth-this.scrollbarSize?(i.y>=this.scrollbarTop&&i.y<=this.scrollbarTop+this.scrollbarWidth?this.pointerDown={type:"vertical",last:i}:i.y>this.scrollbarTop?(this.content.top+=this.content.worldScreenHeight,this.update()):(this.content.top-=this.content.worldScreenHeight,this.update()),void(this.options.stopPropagation&&t.stopPropagation())):void 0}scrollbarMove(t){if(this.pointerDown){if("horizontal"===this.pointerDown.type){const i=this.toLocal(t.data.global),o=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0);this.scrollbarLeft+=i.x-this.pointerDown.last.x,this.content.left=this.scrollbarLeft/this.boxWidth*o,this.pointerDown.last=i,this.update()}else if("vertical"===this.pointerDown.type){const i=this.toLocal(t.data.global),o=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop+=i.y-this.pointerDown.last.y,this.content.top=this.scrollbarTop/this.boxHeight*o,this.pointerDown.last=i,this.update()}this.options.stopPropagation&&t.stopPropagation()}}scrollbarUp(){this.pointerDown=null}resize(t){this.options.boxWidth=void 0!==t.boxWidth?t.boxWidth:this.options.boxWidth,this.options.boxHeight=void 0!==t.boxHeight?t.boxHeight:this.options.boxHeight,t.scrollWidth&&(this.scrollWidth=t.scrollWidth),t.scrollHeight&&(this.scrollHeight=t.scrollHeight),this.content.resize(this.options.boxWidth,this.options.boxHeight,this.scrollWidth,this.scrollHeight),this.update()}ensureVisible(t,i,o,s){this.content.ensureVisible(t,i,o,s),this._drawScrollbars()}}t.Scrollbox=a,Object.defineProperty(t,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=scrollbox.js.map
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("pixi.js"),require("pixi-viewport")):typeof define==`function`&&define.amd?define([`exports`,`pixi.js`,`pixi-viewport`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.Scrollbox={},e.PIXI,e.pixi_viewport))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var r=Object.create,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var s=o(t),l=0,u=s.length,d;l<u;l++)d=s[l],!c.call(e,d)&&d!==n&&i(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=a(t,d))||r.enumerable});return e},d=((e,t,n)=>(n=e==null?{}:r(s(e)),u(t||!e||!e.__esModule||!c.call(e,`default`)?i(n,`default`,{value:e,enumerable:!0}):n,e)))(l(((e,t,n)=>{(function(){var n={linear:function(e,t,n,r){return n*e/r+t},easeInQuad:function(e,t,n,r){return n*(e/=r)*e+t},easeOutQuad:function(e,t,n,r){return-n*(e/=r)*(e-2)+t},easeInOutQuad:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t},easeInCubic:function(e,t,n,r){return n*(e/=r)*e*e+t},easeOutCubic:function(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t},easeInOutCubic:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t},easeInQuart:function(e,t,n,r){return n*(e/=r)*e*e*e+t},easeOutQuart:function(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t},easeInOutQuart:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t},easeInQuint:function(e,t,n,r){return n*(e/=r)*e*e*e*e+t},easeOutQuint:function(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t},easeInOutQuint:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t},easeInSine:function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},easeOutSine:function(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t},easeInOutSine:function(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t},easeInExpo:function(e,t,n,r){return e===0?t:n*2**(10*(e/r-1))+t},easeOutExpo:function(e,t,n,r){return e===r?t+n:n*(-(2**(-10*e/r))+1)+t},easeInOutExpo:function(e,t,n,r){return e===r&&t+n,(e/=r/2)<1?n/2*2**(10*(e-1))+t:n/2*(-(2**(-10*--e))+2)+t},easeInCirc:function(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t},easeOutCirc:function(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t},easeInOutCirc:function(e,t,n,r){return(e/=r/2)<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t},easeInElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r)===1&&t+n,a||=r*.3,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),-(i*2**(10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a))+t},easeOutElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r)===1&&t+n,a||=r*.3,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),i*2**(-10*e)*Math.sin((e*r-o)*(2*Math.PI)/a)+n+t},easeInOutElastic:function(e,t,n,r){var i,a,o=1.70158;return a=0,i=n,e===0||(e/=r/2)==2&&t+n,a||=.3*1.5*r,i<Math.abs(n)?(i=n,o=a/4):o=a/(2*Math.PI)*Math.asin(n/i),e<1?-.5*(i*2**(10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a))+t:i*2**(-10*--e)*Math.sin((e*r-o)*(2*Math.PI)/a)*.5+n+t},easeInBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),n*(e/=r)*e*((i+1)*e-i)+t},easeOutBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),n*((e=e/r-1)*e*((i+1)*e+i)+1)+t},easeInOutBack:function(e,t,n,r,i){return i===void 0&&(i=1.70158),(e/=r/2)<1?n/2*(e*e*(((i*=1.525)+1)*e-i))+t:n/2*((e-=2)*e*(((i*=1.525)+1)*e+i)+2)+t},easeInBounce:function(e,t,r,i){return r-n.easeOutBounce(i-e,0,r,i)+t},easeOutBounce:function(e,t,n,r){return(e/=r)<1/2.75?n*(7.5625*e*e)+t:e<2/2.75?n*(7.5625*(e-=1.5/2.75)*e+.75)+t:e<2.5/2.75?n*(7.5625*(e-=2.25/2.75)*e+.9375)+t:n*(7.5625*(e-=2.625/2.75)*e+.984375)+t},easeInOutBounce:function(e,t,r,i){var a;return e<i/2?(a=n.easeInBounce(e*2,0,r,i),a*.5+t):(a=n.easeOutBounce(e*2-i,0,r,i),a*.5+r*.5+t)}};(function(n){return typeof e==`object`?t.exports=n:typeof define==`function`&&define.amd?define([],n):this.penner=n})(n)}).call(n)}))()),f={boxWidth:100,boxHeight:100,scrollbarSize:10,scrollbarBackground:14540253,scrollbarBackgroundAlpha:1,scrollbarForeground:8947848,scrollbarForegroundAlpha:1,dragScroll:!0,stopPropagation:!0,scrollbarOffsetHorizontal:0,scrollbarOffsetVertical:0,underflow:`top-left`,fade:!1,fadeScrollbarTime:1e3,fadeScrollboxWait:3e3,fadeScrollboxEase:`easeInOutSine`,passiveWheel:!1,clampWheel:!0,wheelSwapAxes:!1};e.Scrollbox=class extends t.Container{constructor(e={}){if(super(),this.options=Object.assign({},f,e),!this.options.events)throw Error(`pixi-scrollbox: options.events is required (e.g., new Scrollbox({ events: app.renderer.events }))`);e.overflow&&(this.options.overflowX=this.options.overflowY=e.overflow),e.fadeScrollbar&&(this.options.fade=!0),this.options.ticker=e.ticker||t.Ticker.shared,this.ease=typeof this.options.fadeScrollboxEase==`function`?this.options.fadeScrollboxEase:d.default[this.options.fadeScrollboxEase],this.content=this.addChild(new n.Viewport({passiveWheel:this.options.passiveWheel,stopPropagation:this.options.stopPropagation,screenWidth:this.options.boxWidth,screenHeight:this.options.boxHeight,events:this.options.events,noTicker:this.options.noTicker,ticker:this.options.ticker})),this.content.decelerate().on(`moved`,()=>this._drawScrollbars()),this.scrollbar=this.addChild(new t.Graphics),this.scrollbar.eventMode=`static`,this.scrollbar.hitArea={contains:(e,t)=>this._scrollbarContains(e,t)},this.scrollbar.on(`pointerdown`,this.scrollbarDown,this),this.scrollbar.on(`pointerup`,this.scrollbarUp,this),this.scrollbar.on(`pointerupoutside`,this.scrollbarUp,this),this.scrollbar.on(`pointercancel`,this.scrollbarUp,this),this._maskContent=this.addChild(new t.Graphics),this._maskContent.eventMode=`none`,this.update(),this.options.noTicker||(this.tickerFunction=()=>this.updateLoop(Math.min(this.options.ticker.elapsedMS,16.6667)),this.options.ticker.add(this.tickerFunction))}get scrollbarOffsetHorizontal(){return this.options.scrollbarOffsetHorizontal}set scrollbarOffsetHorizontal(e){this.options.scrollbarOffsetHorizontal=e}get scrollbarOffsetVertical(){return this.options.scrollbarOffsetVertical}set scrollbarOffsetVertical(e){this.options.scrollbarOffsetVertical=e}get disable(){return this._disabled}set disable(e){this._disabled!==e&&(this._disabled=e,this.update())}get stopPropagation(){return this.options.stopPropagation}set stopPropagation(e){this.options.stopPropagation=e,this.content.options.stopPropagation=e}get dragScroll(){return this.options.dragScroll}set dragScroll(e){this.options.dragScroll=e,e||this.content.plugins.remove(`drag`),this.update()}get boxWidth(){return this.options.boxWidth}set boxWidth(e){this.options.boxWidth=e,this.content.screenWidth=e,this.update()}get overflow(){return this.options.overflow}set overflow(e){this.options.overflow=e,this.options.overflowX=e,this.options.overflowY=e,this.update()}get overflowX(){return this.options.overflowX}set overflowX(e){this.options.overflowX=e,this.update()}get overflowY(){return this.options.overflowY}set overflowY(e){this.options.overflowY=e,this.update()}get boxHeight(){return this.options.boxHeight}set boxHeight(e){this.options.boxHeight=e,this.content.screenHeight=e,this.update()}get scrollbarSize(){return this.options.scrollbarSize}set scrollbarSize(e){this.options.scrollbarSize=e}get contentWidth(){return this.options.boxWidth-(this.isScrollbarVertical?this.options.scrollbarSize:0)}get contentHeight(){return this.options.boxHeight-(this.isScrollbarHorizontal?this.options.scrollbarSize:0)}get isScrollbarVertical(){return this._isScrollbarVertical}get isScrollbarHorizontal(){return this._isScrollbarHorizontal}get scrollTop(){return this.content.top}set scrollTop(e){this.content.top=e,this._clampAndDraw()}get scrollLeft(){return this.content.left}set scrollLeft(e){this.content.left=e,this._clampAndDraw()}get scrollWidth(){return this._scrollWidth||this.content.width}set scrollWidth(e){this._scrollWidth=e}get scrollHeight(){return this._scrollHeight||this.content.height}set scrollHeight(e){this._scrollHeight=e}_drawScrollbars(){this._isScrollbarHorizontal=this.overflowX===`scroll`||[`hidden`,`none`].indexOf(this.overflowX)===-1&&this.scrollWidth>this.options.boxWidth,this._isScrollbarVertical=this.overflowY===`scroll`||[`hidden`,`none`].indexOf(this.overflowY)===-1&&this.scrollHeight>this.options.boxHeight,this.scrollbar.clear();let e=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0),t=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop=this.content.top/t*this.boxHeight,this.scrollbarTop=this.scrollbarTop<0?0:this.scrollbarTop,this.scrollbarHeight=this.boxHeight/t*this.boxHeight,this.scrollbarHeight=this.scrollbarTop+this.scrollbarHeight>this.boxHeight?this.boxHeight-this.scrollbarTop:this.scrollbarHeight,this.scrollbarLeft=this.content.left/e*this.boxWidth,this.scrollbarLeft=this.scrollbarLeft<0?0:this.scrollbarLeft,this.scrollbarWidth=this.boxWidth/e*this.boxWidth,this.scrollbarWidth=this.scrollbarWidth+this.scrollbarLeft>this.boxWidth?this.boxWidth-this.scrollbarLeft:this.scrollbarWidth;let n={color:this.options.scrollbarBackground,alpha:this.options.scrollbarBackgroundAlpha},r={color:this.options.scrollbarForeground,alpha:this.options.scrollbarForegroundAlpha};this.isScrollbarVertical&&this.scrollbar.rect(this._scrollbarVerticalX,0,this.scrollbarSize,this.boxHeight).fill(n),this.isScrollbarHorizontal&&this.scrollbar.rect(0,this._scrollbarHorizontalY,this.boxWidth,this.scrollbarSize).fill(n),this.isScrollbarVertical&&this.scrollbar.rect(this._scrollbarVerticalX,this.scrollbarTop,this.scrollbarSize,this.scrollbarHeight).fill(r),this.isScrollbarHorizontal&&this.scrollbar.rect(this.scrollbarLeft,this._scrollbarHorizontalY,this.scrollbarWidth,this.scrollbarSize).fill(r),this.activateFade()}get _scrollbarVerticalX(){return this.boxWidth-this.scrollbarSize+this.options.scrollbarOffsetVertical}get _scrollbarHorizontalY(){return this.boxHeight-this.scrollbarSize+this.options.scrollbarOffsetHorizontal}_scrollbarContains(e,t){return this._disabled?!1:this.isScrollbarHorizontal&&this._overHorizontal(e,t)?!0:this.isScrollbarVertical&&this._overVertical(e,t)}_overHorizontal(e,t){return e>=0&&e<=this.boxWidth&&t>=this._scrollbarHorizontalY&&t<=this._scrollbarHorizontalY+this.scrollbarSize}_overVertical(e,t){return t>=0&&t<=this.boxHeight&&e>=this._scrollbarVerticalX&&e<=this._scrollbarVerticalX+this.scrollbarSize}_clampAndDraw(){let e=this.content.plugins.get(`clamp`,!0);e&&e.update(),this._drawScrollbars()}_drawMask(){this._maskContent.rect(0,0,this.boxWidth,this.boxHeight).fill(0),this.content.mask=this._maskContent}update(){if(this.content.mask=null,this._maskContent.clear(),this._disabled)this.scrollbar.clear();else{this._drawScrollbars(),this._drawMask();let e=this.isScrollbarHorizontal&&this.isScrollbarVertical?`all`:this.isScrollbarHorizontal?`x`:`y`;this.options.dragScroll&&this.content.drag({clampWheel:this.options.clampWheel,direction:e,wheelSwapAxes:this.options.wheelSwapAxes}),this.content.clamp({direction:e,underflow:this.options.underflow})}}updateLoop(e){if(this.options.noTicker&&this.content.update(e),this.fade){if(this.fade.wait>0){if(this.fade.wait-=e,this.fade.wait<=0)e=-this.fade.wait;else return}this.fade.duration+=e,this.fade.duration>=this.options.fadeScrollbarTime?(this.fade=null,this.scrollbar.alpha=0):this.scrollbar.alpha=this.ease(this.fade.duration,1,-1,this.options.fadeScrollbarTime),this.content.dirty=!0}}get dirty(){return this.content.dirty}set dirty(e){this.content.dirty=e}activateFade(){this.options.fade&&(this.scrollbar.alpha=1,this.fade={wait:this.options.fadeScrollboxWait,duration:0})}scrollbarDown(e){let t=this.toLocal(e.global);this.isScrollbarHorizontal&&this._overHorizontal(t.x,t.y)?(t.x>=this.scrollbarLeft&&t.x<=this.scrollbarLeft+this.scrollbarWidth?this._startScrollbarDrag(`horizontal`,t):(t.x>this.scrollbarLeft?this.content.left+=this.content.worldScreenWidth:this.content.left-=this.content.worldScreenWidth,this._clampAndDraw()),this.options.stopPropagation&&e.stopPropagation()):this.isScrollbarVertical&&this._overVertical(t.x,t.y)&&(t.y>=this.scrollbarTop&&t.y<=this.scrollbarTop+this.scrollbarHeight?this._startScrollbarDrag(`vertical`,t):(t.y>this.scrollbarTop?this.content.top+=this.content.worldScreenHeight:this.content.top-=this.content.worldScreenHeight,this._clampAndDraw()),this.options.stopPropagation&&e.stopPropagation())}_startScrollbarDrag(e,t){this.pointerDown={type:e,last:t},this.scrollbar.on(`globalpointermove`,this.scrollbarMove,this)}scrollbarMove(e){if(this.pointerDown){let t=this.toLocal(e.global);if(this.pointerDown.type===`horizontal`){let e=this.scrollWidth+(this.isScrollbarVertical?this.options.scrollbarSize:0);this.scrollbarLeft+=t.x-this.pointerDown.last.x,this.content.left=this.scrollbarLeft/this.boxWidth*e}else{let e=this.scrollHeight+(this.isScrollbarHorizontal?this.options.scrollbarSize:0);this.scrollbarTop+=t.y-this.pointerDown.last.y,this.content.top=this.scrollbarTop/this.boxHeight*e}this.pointerDown.last=t,this._clampAndDraw(),this.options.stopPropagation&&e.stopPropagation()}}scrollbarUp(){this.pointerDown=null,this.scrollbar.off(`globalpointermove`,this.scrollbarMove,this)}resize(e){this.options.boxWidth=e.boxWidth===void 0?this.options.boxWidth:e.boxWidth,this.options.boxHeight=e.boxHeight===void 0?this.options.boxHeight:e.boxHeight,e.scrollWidth&&(this.scrollWidth=e.scrollWidth),e.scrollHeight&&(this.scrollHeight=e.scrollHeight),this.content.resize(this.options.boxWidth,this.options.boxHeight,this.scrollWidth,this.scrollHeight),this.update()}ensureVisible(e,t,n,r){this.content.ensureVisible(e,t,n,r),this._drawScrollbars()}destroy(e){this.tickerFunction&&=(this.options.ticker.remove(this.tickerFunction),null),this.scrollbarUp(),this.content.destroy(e),super.destroy(e)}}});
2
+ //# sourceMappingURL=scrollbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbox.js","sources":["../node_modules/penner/penner.js","../src/scrollbox.js"],"sourcesContent":["\n/*\n\tCopyright © 2001 Robert Penner\n\tAll rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, \n\tare permitted provided that the following conditions are met:\n\n\tRedistributions of source code must retain the above copyright notice, this list of \n\tconditions and the following disclaimer.\n\tRedistributions in binary form must reproduce the above copyright notice, this list \n\tof conditions and the following disclaimer in the documentation and/or other materials \n\tprovided with the distribution.\n\n\tNeither the name of the author nor the names of contributors may be used to endorse \n\tor promote products derived from this software without specific prior written permission.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n\tMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\tCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\tEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n\tAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n\tOF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function() {\n var penner, umd;\n\n umd = function(factory) {\n if (typeof exports === 'object') {\n return module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else {\n return this.penner = factory;\n }\n };\n\n penner = {\n linear: function(t, b, c, d) {\n return c * t / d + b;\n },\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, c, d) {\n if (t === 0) {\n return b;\n } else {\n return c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n },\n easeOutExpo: function(t, b, c, d) {\n if (t === d) {\n return b + c;\n } else {\n return c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n },\n easeInOutExpo: function(t, b, c, d) {\n if (t === 0) {\n b;\n }\n if (t === d) {\n b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d / 2) === 2) {\n b + c;\n }\n if (!p) {\n p = d * (.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n }\n },\n easeInBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, c, d) {\n var v;\n v = penner.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b;\n }\n },\n easeInOutBounce: function(t, b, c, d) {\n var v;\n if (t < d / 2) {\n v = penner.easeInBounce(t * 2, 0, c, d);\n return v * .5 + b;\n } else {\n v = penner.easeOutBounce(t * 2 - d, 0, c, d);\n return v * .5 + c * .5 + b;\n }\n }\n };\n\n umd(penner);\n\n}).call(this);\n","import * as PIXI from 'pixi.js'\nimport { Viewport } from 'pixi-viewport'\nimport Penner from 'penner'\n\nconst scrollboxOptions = {\n 'boxWidth': 100,\n 'boxHeight': 100,\n 'scrollbarSize': 10,\n 'scrollbarBackground': 14540253,\n 'scrollbarBackgroundAlpha': 1,\n 'scrollbarForeground': 8947848,\n 'scrollbarForegroundAlpha': 1,\n 'dragScroll': true,\n 'stopPropagation': true,\n 'scrollbarOffsetHorizontal': 0,\n 'scrollbarOffsetVertical': 0,\n 'underflow': 'top-left',\n 'fadeScrollbar': false,\n 'fadeScrollbarTime': 1000,\n 'fadeScrollboxWait': 3000,\n 'fadeScrollboxEase': 'easeInOutSine',\n 'passiveWheel': false,\n 'clampWheel': true\n}\n\n/**\n * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars\n */\nexport class Scrollbox extends PIXI.Container {\n /**\n * create a scrollbox\n * @param {object} options\n * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content\n * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value\n * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels)\n * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox\n * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar\n * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar\n * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar\n * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar\n * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright')\n * @param {boolean} [options.noTicker] do not use PIXI.Ticker (for fade to work properly you will need to manually call updateLoop(elapsed) on each frame)\n * @param {PIXI.Ticker} [options.ticker=PIXI.Ticker.shared] use this PIXI.Ticker for updates\n * @param {boolean} [options.fade] fade the scrollbar when not in use\n * @param {number} [options.fadeScrollbarTime=1000] time to fade scrollbar if options.fade is set\n * @param {number} [options.fadeScrollboxWait=3000] time to wait before fading the scrollbar if options.fade is set\n * @param {(string|function)} [options.fadeScrollboxEase=easeInOutSine] easing function to use for fading\n * @param {boolean} [options.passiveWheel=false] whether wheel events are propogated beyond the scrollbox (NOTE: default is now false)\n * @param {boolean} [options.clampWheel=true] wheel events should be clamped (to avoid weird bounce with mouse wheel)\n * @param {PIXI.InteractionManager} [options.interaction] InteractionManager, available from instantiated PIXI.Renderer.plugins.interaction - used to calculate pointer postion relative to canvas location on screen\n * @param {HTMLElement} [options.divWheel] the HTMLElement to use for wheel interactions\n */\n constructor(options = {}) {\n super()\n this.options = Object.assign({}, scrollboxOptions, options)\n if (options.overflow) {\n this.options.overflowX = this.options.overflowY = options.overflow\n }\n this.ease = typeof this.options.fadeScrollboxEase === 'function' ? this.options.fadeScrollboxEase : Penner[this.options.fadeScrollboxEase]\n\n /**\n * content in placed in here\n * you can use any function from pixi-viewport on content to manually move the content (see https://davidfig.github.io/pixi-viewport/jsdoc/)\n * @type {Viewport}\n */\n this.content = this.addChild(new Viewport({\n passiveWheel: false,\n stopPropagation: this.options.stopPropagation,\n screenWidth: this.options.boxWidth,\n screenHeight: this.options.boxHeight,\n interaction: this.options.interaction,\n divWheel: this.options.divWheel,\n }))\n this.content\n .decelerate()\n .on('moved', () => this._drawScrollbars())\n\n // needed to pull this out of viewportOptions because of pixi.js v4 support (which changed from PIXI.ticker.shared to PIXI.Ticker.shared...sigh)\n if (options.ticker) {\n this.options.ticker = options.ticker\n }\n else {\n // to avoid Rollup transforming our import, save pixi namespace in a variable\n // from here: https://github.com/pixijs/pixi.js/issues/5757\n let ticker\n const pixiNS = PIXI\n if (parseInt(/^(\\d+)\\./.exec(PIXI.VERSION)[1]) < 5) {\n ticker = pixiNS.ticker.shared\n }\n else {\n ticker = pixiNS.Ticker.shared\n }\n this.options.ticker = options.ticker || ticker\n }\n\n /**\n * graphics element for drawing the scrollbars\n * @type {PIXI.Graphics}\n */\n this.scrollbar = this.addChild(new PIXI.Graphics())\n this.scrollbar.interactive = true\n this.scrollbar.on('pointerdown', this.scrollbarDown, this)\n this.interactive = true\n this.on('pointermove', this.scrollbarMove, this)\n this.on('pointerup', this.scrollbarUp, this)\n this.on('pointercancel', this.scrollbarUp, this)\n this.on('pointerupoutside', this.scrollbarUp, this)\n this._maskContent = this.addChild(new PIXI.Graphics())\n this.update()\n\n if (!this.options.noTicker) {\n this.tickerFunction = () => this.updateLoop(Math.min(this.options.ticker.elapsedMS, 16.6667))\n this.options.ticker.add(this.tickerFunction)\n }\n }\n\n /**\n * offset of horizontal scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetHorizontal() {\n return this.options.scrollbarOffsetHorizontal\n }\n set scrollbarOffsetHorizontal(value) {\n this.options.scrollbarOffsetHorizontal = value\n }\n\n /**\n * offset of vertical scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetVertical() {\n return this.options.scrollbarOffsetVertical\n }\n set scrollbarOffsetVertical(value) {\n this.options.scrollbarOffsetVertical = value\n }\n\n /**\n * disable the scrollbox (if set to true this will also remove the mask)\n * @type {boolean}\n */\n get disable() {\n return this._disabled\n }\n set disable(value) {\n if (this._disabled !== value) {\n this._disabled = value\n this.update()\n }\n }\n\n /**\n * call stopPropagation on any events that impact scrollbox\n * @type {boolean}\n */\n get stopPropagation() {\n return this.options.stopPropagation\n }\n set stopPropagation(value) {\n this.options.stopPropagation = value\n }\n\n /**\n * user may drag the content area to scroll content\n * @type {boolean}\n */\n get dragScroll() {\n return this.options.dragScroll\n }\n set dragScroll(value) {\n this.options.dragScroll = value\n if (value) {\n this.content.drag()\n }\n else {\n if (typeof this.content.removePlugin !== 'undefined') {\n this.content.removePlugin('drag')\n }\n else {\n this.content.plugins.remove('drag')\n }\n }\n this.update()\n }\n\n /**\n * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box\n * @type {number}\n */\n get boxWidth() {\n return this.options.boxWidth\n }\n set boxWidth(value) {\n this.options.boxWidth = value\n this.content.screenWidth = value\n this.update()\n }\n\n /**\n * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflow() {\n return this.options.overflow\n }\n set overflow(value) {\n this.options.overflow = value\n this.options.overflowX = value\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowX() {\n return this.options.overflowX\n }\n set overflowX(value) {\n this.options.overflowX = value\n this.update()\n }\n\n /**\n * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowY() {\n return this.options.overflowY\n }\n set overflowY(value) {\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box\n * @type {number}\n */\n get boxHeight() {\n return this.options.boxHeight\n }\n set boxHeight(value) {\n this.options.boxHeight = value\n this.content.screenHeight = value\n this.update()\n }\n\n /**\n * scrollbar size in pixels\n * @type {number}\n */\n get scrollbarSize() {\n return this.options.scrollbarSize\n }\n set scrollbarSize(value) {\n this.options.scrollbarSize = value\n }\n\n /**\n * width of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentWidth() {\n return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n }\n\n /**\n * height of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentHeight() {\n return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n }\n\n /**\n * is the vertical scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarVertical() {\n return this._isScrollbarVertical\n }\n\n /**\n * is the horizontal scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarHorizontal() {\n return this._isScrollbarHorizontal\n }\n\n /**\n * top coordinate of scrollbar\n */\n get scrollTop() {\n return this.content.top\n }\n set scrollTop(top) {\n this.content.top = top\n this._drawScrollbars()\n }\n\n /**\n * left coordinate of scrollbar\n */\n get scrollLeft() {\n return this.content.left\n }\n set scrollLeft(left) {\n this.content.left = left\n this._drawScrollbars()\n }\n\n /**\n * width of content area\n * if not set then it uses content.width to calculate width\n */\n get scrollWidth() {\n return this._scrollWidth || this.content.width\n }\n set scrollWidth(value) {\n this._scrollWidth = value\n }\n\n /**\n * height of content area\n * if not set then it uses content.height to calculate height\n */\n get scrollHeight() {\n return this._scrollHeight || this.content.height\n }\n set scrollHeight(value) {\n this._scrollHeight = value\n }\n\n /**\n * draws scrollbars\n * @private\n */\n _drawScrollbars() {\n this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth\n this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight\n this.scrollbar.clear()\n let options = {}\n options.left = 0\n options.right = this.scrollWidth + (this._isScrollbarVertical ? this.options.scrollbarSize : 0)\n options.top = 0\n options.bottom = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop = (this.content.top / height) * this.boxHeight\n this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop\n this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight\n this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight\n this.scrollbarLeft = (this.content.left / width) * this.boxWidth\n this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft\n this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth\n this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth\n if (this.isScrollbarVertical) {\n this.scrollbar\n .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha)\n .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, 0, this.scrollbarSize, this.boxHeight)\n .endFill()\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .beginFill(this.options.scrollbarBackground, this.options.scrollbarBackgroundAlpha)\n .drawRect(0, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.boxWidth, this.scrollbarSize)\n .endFill()\n }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha)\n .drawRect(this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight)\n .endFill()\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .beginFill(this.options.scrollbarForeground, this.options.scrollbarForegroundAlpha)\n .drawRect(this.scrollbarLeft, this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal, this.scrollbarWidth, this.scrollbarSize)\n .endFill()\n }\n // this.content.forceHitArea = new PIXI.Rectangle(0, 0 , this.boxWidth, this.boxHeight)\n this.activateFade()\n }\n\n /**\n * draws mask layer\n * @private\n */\n _drawMask() {\n this._maskContent\n .beginFill(0)\n .drawRect(0, 0, this.boxWidth, this.boxHeight)\n .endFill()\n this.content.mask = this._maskContent\n }\n\n /**\n * call when scrollbox content changes\n */\n update() {\n this.content.mask = null\n this._maskContent.clear()\n if (!this._disabled) {\n this._drawScrollbars()\n this._drawMask()\n const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y'\n if (direction !== null) {\n if (this.options.dragScroll) {\n this.content.drag({ clampWheel: this.options.clampWheel, direction })\n }\n this.content.clamp({ direction, underflow: this.options.underflow })\n }\n }\n }\n\n /**\n * called on each frame to update fade scrollbars (if enabled)\n * @param {number} elapsed since last frame in milliseconds (usually capped at 16.6667)\n */\n updateLoop(elapsed) {\n if (this.fade) {\n if (this.fade.wait > 0) {\n this.fade.wait -= elapsed\n if (this.fade.wait <= 0) {\n elapsed += this.fade.wait\n }\n else {\n return\n }\n }\n this.fade.duration += elapsed\n if (this.fade.duration >= this.options.fadeScrollbarTime) {\n this.fade = null\n this.scrollbar.alpha = 0\n }\n else {\n this.scrollbar.alpha = this.ease(this.fade.duration, 1, -1, this.options.fadeScrollbarTime)\n }\n this.content.dirty = true\n }\n }\n\n /**\n * dirty value (used for optimizing draws) for underlying viewport (scrollbox.content)\n * @type {boolean}\n */\n get dirty() {\n return this.content.dirty\n }\n set dirty(value) {\n this.content.dirty = value\n }\n\n /**\n * show the scrollbar and restart the timer for fade if options.fade is set\n */\n activateFade() {\n if (!this.fade && this.options.fade) {\n this.scrollbar.alpha = 1\n this.fade = { wait: this.options.fadeScrollboxWait, duration: 0 }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @param {PIXI.interaction.InteractionEvent} e\n * @private\n */\n scrollbarDown(e) {\n const local = this.toLocal(e.data.global)\n if (this.isScrollbarHorizontal) {\n if (local.y > this.boxHeight - this.scrollbarSize) {\n if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) {\n this.pointerDown = { type: 'horizontal', last: local }\n }\n else {\n if (local.x > this.scrollbarLeft) {\n this.content.left += this.content.worldScreenWidth\n this.update()\n }\n else {\n this.content.left -= this.content.worldScreenWidth\n this.update()\n }\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n }\n if (this.isScrollbarVertical) {\n if (local.x > this.boxWidth - this.scrollbarSize) {\n if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarWidth) {\n this.pointerDown = { type: 'vertical', last: local }\n }\n else {\n if (local.y > this.scrollbarTop) {\n this.content.top += this.content.worldScreenHeight\n this.update()\n }\n else {\n this.content.top -= this.content.worldScreenHeight\n this.update()\n }\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n }\n }\n\n /**\n * handle pointer move on scrollbar\n * @param {PIXI.interaction.InteractionEvent} e\n * @private\n */\n scrollbarMove(e) {\n if (this.pointerDown) {\n if (this.pointerDown.type === 'horizontal') {\n const local = this.toLocal(e.data.global)\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n this.scrollbarLeft += local.x - this.pointerDown.last.x\n this.content.left = this.scrollbarLeft / this.boxWidth * width\n this.pointerDown.last = local\n this.update()\n }\n else if (this.pointerDown.type === 'vertical') {\n const local = this.toLocal(e.data.global)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop += local.y - this.pointerDown.last.y\n this.content.top = this.scrollbarTop / this.boxHeight * height\n this.pointerDown.last = local\n this.update()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @private\n */\n scrollbarUp() {\n this.pointerDown = null\n }\n\n /**\n * resize the mask for the container\n * @param {object} options\n * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width)\n * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height)\n */\n resize(options) {\n this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth\n this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight\n if (options.scrollWidth) {\n this.scrollWidth = options.scrollWidth\n }\n if (options.scrollHeight) {\n this.scrollHeight = options.scrollHeight\n }\n this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight)\n this.update()\n }\n\n /**\n * ensure that the bounding box is visible\n * @param {number} x - relative to content's coordinate system\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n ensureVisible(x, y, width, height) {\n this.content.ensureVisible(x, y, width, height)\n this._drawScrollbars()\n }\n}\n"],"names":["penner","factory","module","umd","linear","t","b","c","d","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","a","p","s","abs","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","call","this","scrollboxOptions","boxWidth","boxHeight","scrollbarSize","scrollbarBackground","scrollbarBackgroundAlpha","scrollbarForeground","scrollbarForegroundAlpha","dragScroll","stopPropagation","scrollbarOffsetHorizontal","scrollbarOffsetVertical","underflow","fadeScrollbar","fadeScrollbarTime","fadeScrollboxWait","fadeScrollboxEase","passiveWheel","clampWheel","Scrollbox","PIXI","Container","[object Object]","options","super","Object","assign","overflow","overflowX","overflowY","ease","Penner","content","addChild","Viewport","screenWidth","screenHeight","interaction","divWheel","decelerate","on","_drawScrollbars","ticker","pixiNS","parseInt","exec","VERSION","shared","Ticker","scrollbar","Graphics","interactive","scrollbarDown","scrollbarMove","scrollbarUp","_maskContent","update","noTicker","tickerFunction","updateLoop","min","elapsedMS","add","value","disable","_disabled","drag","removePlugin","plugins","remove","contentWidth","isScrollbarVertical","contentHeight","isScrollbarHorizontal","_isScrollbarVertical","_isScrollbarHorizontal","scrollTop","top","scrollLeft","left","scrollWidth","_scrollWidth","width","scrollHeight","_scrollHeight","height","indexOf","clear","scrollbarTop","scrollbarHeight","scrollbarLeft","scrollbarWidth","beginFill","drawRect","endFill","activateFade","mask","_drawMask","direction","clamp","elapsed","fade","wait","duration","alpha","dirty","e","local","toLocal","data","global","y","x","pointerDown","type","last","worldScreenWidth","worldScreenHeight","resize","ensureVisible"],"mappings":"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"}
1
+ {"version":3,"file":"scrollbox.js","names":["Container","Ticker","Penner","Viewport","Graphics","factory","global","exports","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__commonJSMin","mod","cb","__copyProps","from","keys","i","n","key","to","except","k","desc","import_penner","isNodeMode","target","penner","c","t","d","b","a","p","s","v","this$1","scrollboxOptions","\"boxWidth\"","\"boxHeight\"","\"scrollbarSize\"","\"scrollbarBackground\"","\"scrollbarBackgroundAlpha\"","\"scrollbarForeground\"","\"scrollbarForegroundAlpha\"","\"dragScroll\"","\"stopPropagation\"","\"scrollbarOffsetHorizontal\"","\"scrollbarOffsetVertical\"","\"underflow\"","\"fade\"","\"fadeScrollbarTime\"","\"fadeScrollboxWait\"","\"fadeScrollboxEase\"","\"passiveWheel\"","\"clampWheel\"","\"wheelSwapAxes\"","pixi_js","options","pixi_viewport","x","y","value","top","left","width","height","background","foreground","clamp","direction","elapsed","local"],"sources":["../node_modules/.pnpm/penner@0.1.3/node_modules/penner/penner.js","../src/scrollbox.js"],"sourcesContent":["\n/*\n\tCopyright © 2001 Robert Penner\n\tAll rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, \n\tare permitted provided that the following conditions are met:\n\n\tRedistributions of source code must retain the above copyright notice, this list of \n\tconditions and the following disclaimer.\n\tRedistributions in binary form must reproduce the above copyright notice, this list \n\tof conditions and the following disclaimer in the documentation and/or other materials \n\tprovided with the distribution.\n\n\tNeither the name of the author nor the names of contributors may be used to endorse \n\tor promote products derived from this software without specific prior written permission.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n\tMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\tCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\tEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n\tGOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n\tAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n\tNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n\tOF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n(function() {\n var penner, umd;\n\n umd = function(factory) {\n if (typeof exports === 'object') {\n return module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else {\n return this.penner = factory;\n }\n };\n\n penner = {\n linear: function(t, b, c, d) {\n return c * t / d + b;\n },\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, c, d) {\n if (t === 0) {\n return b;\n } else {\n return c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n },\n easeOutExpo: function(t, b, c, d) {\n if (t === d) {\n return b + c;\n } else {\n return c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n },\n easeInOutExpo: function(t, b, c, d) {\n if (t === 0) {\n b;\n }\n if (t === d) {\n b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, c, d) {\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d) === 1) {\n b + c;\n }\n if (!p) {\n p = d * .3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, c, d) {\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n b;\n } else if ((t /= d / 2) === 2) {\n b + c;\n }\n if (!p) {\n p = d * (.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n }\n },\n easeInBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, c, d, s) {\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, c, d) {\n var v;\n v = penner.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b;\n }\n },\n easeInOutBounce: function(t, b, c, d) {\n var v;\n if (t < d / 2) {\n v = penner.easeInBounce(t * 2, 0, c, d);\n return v * .5 + b;\n } else {\n v = penner.easeOutBounce(t * 2 - d, 0, c, d);\n return v * .5 + c * .5 + b;\n }\n }\n };\n\n umd(penner);\n\n}).call(this);\n","import { Container, Graphics, Ticker } from 'pixi.js'\nimport { Viewport } from 'pixi-viewport'\nimport Penner from 'penner'\n\nconst scrollboxOptions = {\n 'boxWidth': 100,\n 'boxHeight': 100,\n 'scrollbarSize': 10,\n 'scrollbarBackground': 14540253,\n 'scrollbarBackgroundAlpha': 1,\n 'scrollbarForeground': 8947848,\n 'scrollbarForegroundAlpha': 1,\n 'dragScroll': true,\n 'stopPropagation': true,\n 'scrollbarOffsetHorizontal': 0,\n 'scrollbarOffsetVertical': 0,\n 'underflow': 'top-left',\n 'fade': false,\n 'fadeScrollbarTime': 1000,\n 'fadeScrollboxWait': 3000,\n 'fadeScrollboxEase': 'easeInOutSine',\n 'passiveWheel': false,\n 'clampWheel': true,\n 'wheelSwapAxes': false\n}\n\n/**\n * pixi.js scrollbox: a masked content box that can scroll vertically or horizontally with scrollbars\n */\nexport class Scrollbox extends Container {\n /**\n * create a scrollbox\n * @param {object} options\n * @param {PIXI.EventSystem} options.events the renderer's EventSystem (app.renderer.events); required by pixi-viewport for wheel and pointer positions\n * @param {boolean} [options.dragScroll=true] user may drag the content area to scroll content\n * @param {string} [options.overflowX=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflowY=auto] (none, scroll, hidden, auto) this changes whether the scrollbar is shown\n * @param {string} [options.overflow] (none, scroll, hidden, auto) sets overflowX and overflowY to this value\n * @param {number} [options.boxWidth=100] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight=100] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollbarSize=10] size of scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetHorizontal=0] offset of horizontal scrollbar (in pixels)\n * @param {number} [options.scrollbarOffsetVertical=0] offset of vertical scrollbar (in pixels)\n * @param {boolean} [options.stopPropagation=true] call stopPropagation on any events that impact scrollbox\n * @param {number} [options.scrollbarBackground=0xdddddd] background color of scrollbar\n * @param {number} [options.scrollbarBackgroundAlpha=1] alpha of background of scrollbar\n * @param {number} [options.scrollbarForeground=0x888888] foreground color of scrollbar\n * @param {number} [options.scrollbarForegroundAlpha=1] alpha of foreground of scrollbar\n * @param {string} [options.underflow=top-left] what to do when content underflows the scrollbox size: none: do nothing; (left/right/center AND top/bottom/center); OR center (e.g., 'top-left', 'center', 'none', 'bottomright')\n * @param {boolean} [options.noTicker] do not use PIXI.Ticker (you will need to manually call updateLoop(elapsed) on each frame)\n * @param {PIXI.Ticker} [options.ticker=PIXI.Ticker.shared] use this PIXI.Ticker for updates\n * @param {boolean} [options.fade] fade the scrollbar when not in use\n * @param {number} [options.fadeScrollbarTime=1000] time to fade scrollbar if options.fade is set\n * @param {number} [options.fadeScrollboxWait=3000] time to wait before fading the scrollbar if options.fade is set\n * @param {(string|function)} [options.fadeScrollboxEase=easeInOutSine] easing function to use for fading\n * @param {boolean} [options.passiveWheel=false] whether wheel events are propogated beyond the scrollbox (if false, e.preventDefault() is called when the wheel scrolls the scrollbox)\n * @param {boolean} [options.clampWheel=true] wheel events should be clamped (to avoid weird bounce with mouse wheel)\n * @param {boolean} [options.wheelSwapAxes=false] swap the wheel's x and y axes (e.g., so a mouse wheel scrolls a horizontal scrollbox)\n */\n constructor(options = {}) {\n super()\n this.options = Object.assign({}, scrollboxOptions, options)\n if (!this.options.events) {\n throw new Error('pixi-scrollbox: options.events is required (e.g., new Scrollbox({ events: app.renderer.events }))')\n }\n if (options.overflow) {\n this.options.overflowX = this.options.overflowY = options.overflow\n }\n if (options.fadeScrollbar) {\n this.options.fade = true\n }\n this.options.ticker = options.ticker || Ticker.shared\n this.ease = typeof this.options.fadeScrollboxEase === 'function' ? this.options.fadeScrollboxEase : Penner[this.options.fadeScrollboxEase]\n\n /**\n * content in placed in here\n * you can use any function from pixi-viewport on content to manually move the content (see https://viewport.pixijs.io/jsdoc/)\n * @type {Viewport}\n */\n this.content = this.addChild(new Viewport({\n passiveWheel: this.options.passiveWheel,\n stopPropagation: this.options.stopPropagation,\n screenWidth: this.options.boxWidth,\n screenHeight: this.options.boxHeight,\n events: this.options.events,\n noTicker: this.options.noTicker,\n ticker: this.options.ticker,\n }))\n this.content\n .decelerate()\n .on('moved', () => this._drawScrollbars())\n\n /**\n * graphics element for drawing the scrollbars\n * @type {PIXI.Graphics}\n */\n this.scrollbar = this.addChild(new Graphics())\n this.scrollbar.eventMode = 'static'\n this.scrollbar.hitArea = { contains: (x, y) => this._scrollbarContains(x, y) }\n this.scrollbar.on('pointerdown', this.scrollbarDown, this)\n this.scrollbar.on('pointerup', this.scrollbarUp, this)\n this.scrollbar.on('pointerupoutside', this.scrollbarUp, this)\n this.scrollbar.on('pointercancel', this.scrollbarUp, this)\n\n // the mask is only used for clipping, so it must never be the target of pointer events\n this._maskContent = this.addChild(new Graphics())\n this._maskContent.eventMode = 'none'\n this.update()\n\n if (!this.options.noTicker) {\n this.tickerFunction = () => this.updateLoop(Math.min(this.options.ticker.elapsedMS, 16.6667))\n this.options.ticker.add(this.tickerFunction)\n }\n }\n\n /**\n * offset of horizontal scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetHorizontal() {\n return this.options.scrollbarOffsetHorizontal\n }\n set scrollbarOffsetHorizontal(value) {\n this.options.scrollbarOffsetHorizontal = value\n }\n\n /**\n * offset of vertical scrollbar (in pixels)\n * @type {number}\n */\n get scrollbarOffsetVertical() {\n return this.options.scrollbarOffsetVertical\n }\n set scrollbarOffsetVertical(value) {\n this.options.scrollbarOffsetVertical = value\n }\n\n /**\n * disable the scrollbox (if set to true this will also remove the mask)\n * @type {boolean}\n */\n get disable() {\n return this._disabled\n }\n set disable(value) {\n if (this._disabled !== value) {\n this._disabled = value\n this.update()\n }\n }\n\n /**\n * call stopPropagation on any events that impact scrollbox\n * @type {boolean}\n */\n get stopPropagation() {\n return this.options.stopPropagation\n }\n set stopPropagation(value) {\n this.options.stopPropagation = value\n this.content.options.stopPropagation = value\n }\n\n /**\n * user may drag the content area to scroll content\n * @type {boolean}\n */\n get dragScroll() {\n return this.options.dragScroll\n }\n set dragScroll(value) {\n this.options.dragScroll = value\n if (!value) {\n this.content.plugins.remove('drag')\n }\n this.update()\n }\n\n /**\n * width of scrollbox including the scrollbar (if visible)- this changes the size and not the scale of the box\n * @type {number}\n */\n get boxWidth() {\n return this.options.boxWidth\n }\n set boxWidth(value) {\n this.options.boxWidth = value\n this.content.screenWidth = value\n this.update()\n }\n\n /**\n * sets overflowX and overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflow() {\n return this.options.overflow\n }\n set overflow(value) {\n this.options.overflow = value\n this.options.overflowX = value\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * sets overflowX to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowX() {\n return this.options.overflowX\n }\n set overflowX(value) {\n this.options.overflowX = value\n this.update()\n }\n\n /**\n * sets overflowY to (scroll, hidden, auto) changing whether the scrollbar is shown\n * scroll = always show scrollbar\n * hidden = hide overflow and do not show scrollbar\n * auto = if content is larger than box size, then show scrollbar\n * @type {string}\n */\n get overflowY() {\n return this.options.overflowY\n }\n set overflowY(value) {\n this.options.overflowY = value\n this.update()\n }\n\n /**\n * height of scrollbox including the scrollbar (if visible) - this changes the size and not the scale of the box\n * @type {number}\n */\n get boxHeight() {\n return this.options.boxHeight\n }\n set boxHeight(value) {\n this.options.boxHeight = value\n this.content.screenHeight = value\n this.update()\n }\n\n /**\n * scrollbar size in pixels\n * @type {number}\n */\n get scrollbarSize() {\n return this.options.scrollbarSize\n }\n set scrollbarSize(value) {\n this.options.scrollbarSize = value\n }\n\n /**\n * width of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentWidth() {\n return this.options.boxWidth - (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n }\n\n /**\n * height of scrollbox less the scrollbar (if visible)\n * @type {number}\n * @readonly\n */\n get contentHeight() {\n return this.options.boxHeight - (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n }\n\n /**\n * is the vertical scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarVertical() {\n return this._isScrollbarVertical\n }\n\n /**\n * is the horizontal scrollbar visible\n * @type {boolean}\n * @readonly\n */\n get isScrollbarHorizontal() {\n return this._isScrollbarHorizontal\n }\n\n /**\n * top coordinate of scrollbar\n */\n get scrollTop() {\n return this.content.top\n }\n set scrollTop(top) {\n this.content.top = top\n this._clampAndDraw()\n }\n\n /**\n * left coordinate of scrollbar\n */\n get scrollLeft() {\n return this.content.left\n }\n set scrollLeft(left) {\n this.content.left = left\n this._clampAndDraw()\n }\n\n /**\n * width of content area\n * if not set then it uses content.width to calculate width\n */\n get scrollWidth() {\n return this._scrollWidth || this.content.width\n }\n set scrollWidth(value) {\n this._scrollWidth = value\n }\n\n /**\n * height of content area\n * if not set then it uses content.height to calculate height\n */\n get scrollHeight() {\n return this._scrollHeight || this.content.height\n }\n set scrollHeight(value) {\n this._scrollHeight = value\n }\n\n /**\n * draws scrollbars\n * @private\n */\n _drawScrollbars() {\n this._isScrollbarHorizontal = this.overflowX === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowX) !== -1 ? false : this.scrollWidth > this.options.boxWidth\n this._isScrollbarVertical = this.overflowY === 'scroll' ? true : ['hidden', 'none'].indexOf(this.overflowY) !== -1 ? false : this.scrollHeight > this.options.boxHeight\n this.scrollbar.clear()\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop = (this.content.top / height) * this.boxHeight\n this.scrollbarTop = this.scrollbarTop < 0 ? 0 : this.scrollbarTop\n this.scrollbarHeight = (this.boxHeight / height) * this.boxHeight\n this.scrollbarHeight = this.scrollbarTop + this.scrollbarHeight > this.boxHeight ? this.boxHeight - this.scrollbarTop : this.scrollbarHeight\n this.scrollbarLeft = (this.content.left / width) * this.boxWidth\n this.scrollbarLeft = this.scrollbarLeft < 0 ? 0 : this.scrollbarLeft\n this.scrollbarWidth = (this.boxWidth / width) * this.boxWidth\n this.scrollbarWidth = this.scrollbarWidth + this.scrollbarLeft > this.boxWidth ? this.boxWidth - this.scrollbarLeft : this.scrollbarWidth\n const background = { color: this.options.scrollbarBackground, alpha: this.options.scrollbarBackgroundAlpha }\n const foreground = { color: this.options.scrollbarForeground, alpha: this.options.scrollbarForegroundAlpha }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .rect(this._scrollbarVerticalX, 0, this.scrollbarSize, this.boxHeight)\n .fill(background)\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .rect(0, this._scrollbarHorizontalY, this.boxWidth, this.scrollbarSize)\n .fill(background)\n }\n if (this.isScrollbarVertical) {\n this.scrollbar\n .rect(this._scrollbarVerticalX, this.scrollbarTop, this.scrollbarSize, this.scrollbarHeight)\n .fill(foreground)\n }\n if (this.isScrollbarHorizontal) {\n this.scrollbar\n .rect(this.scrollbarLeft, this._scrollbarHorizontalY, this.scrollbarWidth, this.scrollbarSize)\n .fill(foreground)\n }\n this.activateFade()\n }\n\n /**\n * x-coordinate of the vertical scrollbar\n * @private\n */\n get _scrollbarVerticalX() {\n return this.boxWidth - this.scrollbarSize + this.options.scrollbarOffsetVertical\n }\n\n /**\n * y-coordinate of the horizontal scrollbar\n * @private\n */\n get _scrollbarHorizontalY() {\n return this.boxHeight - this.scrollbarSize + this.options.scrollbarOffsetHorizontal\n }\n\n /**\n * whether a point (in the scrollbox's coordinates) is over a visible scrollbar\n * used as the scrollbar's hitArea so it works even when the scrollbar is transparent\n * @private\n */\n _scrollbarContains(x, y) {\n if (this._disabled) {\n return false\n }\n if (this.isScrollbarHorizontal && this._overHorizontal(x, y)) {\n return true\n }\n return this.isScrollbarVertical && this._overVertical(x, y)\n }\n\n /** @private */\n _overHorizontal(x, y) {\n return x >= 0 && x <= this.boxWidth && y >= this._scrollbarHorizontalY && y <= this._scrollbarHorizontalY + this.scrollbarSize\n }\n\n /** @private */\n _overVertical(x, y) {\n return y >= 0 && y <= this.boxHeight && x >= this._scrollbarVerticalX && x <= this._scrollbarVerticalX + this.scrollbarSize\n }\n\n /**\n * clamps the content after moving it directly and redraws the scrollbars\n * @private\n */\n _clampAndDraw() {\n const clamp = this.content.plugins.get('clamp', true)\n if (clamp) {\n clamp.update()\n }\n this._drawScrollbars()\n }\n\n /**\n * draws mask layer\n * @private\n */\n _drawMask() {\n this._maskContent\n .rect(0, 0, this.boxWidth, this.boxHeight)\n .fill(0)\n this.content.mask = this._maskContent\n }\n\n /**\n * call when scrollbox content changes\n */\n update() {\n this.content.mask = null\n this._maskContent.clear()\n if (!this._disabled) {\n this._drawScrollbars()\n this._drawMask()\n const direction = this.isScrollbarHorizontal && this.isScrollbarVertical ? 'all' : this.isScrollbarHorizontal ? 'x' : 'y'\n if (this.options.dragScroll) {\n this.content.drag({ clampWheel: this.options.clampWheel, direction, wheelSwapAxes: this.options.wheelSwapAxes })\n }\n this.content.clamp({ direction, underflow: this.options.underflow })\n }\n else {\n this.scrollbar.clear()\n }\n }\n\n /**\n * called on each frame to update fade scrollbars (if enabled)\n * if options.noTicker is set then call this on each frame (it also updates the underlying viewport)\n * @param {number} elapsed since last frame in milliseconds (usually capped at 16.6667)\n */\n updateLoop(elapsed) {\n if (this.options.noTicker) {\n this.content.update(elapsed)\n }\n if (this.fade) {\n if (this.fade.wait > 0) {\n this.fade.wait -= elapsed\n if (this.fade.wait <= 0) {\n elapsed = -this.fade.wait\n }\n else {\n return\n }\n }\n this.fade.duration += elapsed\n if (this.fade.duration >= this.options.fadeScrollbarTime) {\n this.fade = null\n this.scrollbar.alpha = 0\n }\n else {\n this.scrollbar.alpha = this.ease(this.fade.duration, 1, -1, this.options.fadeScrollbarTime)\n }\n this.content.dirty = true\n }\n }\n\n /**\n * dirty value (used for optimizing draws) for underlying viewport (scrollbox.content)\n * @type {boolean}\n */\n get dirty() {\n return this.content.dirty\n }\n set dirty(value) {\n this.content.dirty = value\n }\n\n /**\n * show the scrollbar and restart the timer for fade if options.fade is set\n */\n activateFade() {\n if (this.options.fade) {\n this.scrollbar.alpha = 1\n this.fade = { wait: this.options.fadeScrollboxWait, duration: 0 }\n }\n }\n\n /**\n * handle pointer down on scrollbar\n * @param {PIXI.FederatedPointerEvent} e\n * @private\n */\n scrollbarDown(e) {\n const local = this.toLocal(e.global)\n if (this.isScrollbarHorizontal && this._overHorizontal(local.x, local.y)) {\n if (local.x >= this.scrollbarLeft && local.x <= this.scrollbarLeft + this.scrollbarWidth) {\n this._startScrollbarDrag('horizontal', local)\n }\n else {\n if (local.x > this.scrollbarLeft) {\n this.content.left += this.content.worldScreenWidth\n }\n else {\n this.content.left -= this.content.worldScreenWidth\n }\n this._clampAndDraw()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n return\n }\n if (this.isScrollbarVertical && this._overVertical(local.x, local.y)) {\n if (local.y >= this.scrollbarTop && local.y <= this.scrollbarTop + this.scrollbarHeight) {\n this._startScrollbarDrag('vertical', local)\n }\n else {\n if (local.y > this.scrollbarTop) {\n this.content.top += this.content.worldScreenHeight\n }\n else {\n this.content.top -= this.content.worldScreenHeight\n }\n this._clampAndDraw()\n }\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * start dragging a scrollbar; listens to moves anywhere on the stage until the pointer is released\n * @private\n */\n _startScrollbarDrag(type, local) {\n this.pointerDown = { type, last: local }\n this.scrollbar.on('globalpointermove', this.scrollbarMove, this)\n }\n\n /**\n * handle pointer move on scrollbar\n * @param {PIXI.FederatedPointerEvent} e\n * @private\n */\n scrollbarMove(e) {\n if (this.pointerDown) {\n const local = this.toLocal(e.global)\n if (this.pointerDown.type === 'horizontal') {\n const width = this.scrollWidth + (this.isScrollbarVertical ? this.options.scrollbarSize : 0)\n this.scrollbarLeft += local.x - this.pointerDown.last.x\n this.content.left = this.scrollbarLeft / this.boxWidth * width\n }\n else {\n const height = this.scrollHeight + (this.isScrollbarHorizontal ? this.options.scrollbarSize : 0)\n this.scrollbarTop += local.y - this.pointerDown.last.y\n this.content.top = this.scrollbarTop / this.boxHeight * height\n }\n this.pointerDown.last = local\n this._clampAndDraw()\n if (this.options.stopPropagation) {\n e.stopPropagation()\n }\n }\n }\n\n /**\n * handle pointer up on scrollbar\n * @private\n */\n scrollbarUp() {\n this.pointerDown = null\n this.scrollbar.off('globalpointermove', this.scrollbarMove, this)\n }\n\n /**\n * resize the mask for the container\n * @param {object} options\n * @param {number} [options.boxWidth] width of scrollbox including scrollbar (in pixels)\n * @param {number} [options.boxHeight] height of scrollbox including scrollbar (in pixels)\n * @param {number} [options.scrollWidth] set the width of the inside of the scrollbox (leave null to use content.width)\n * @param {number} [options.scrollHeight] set the height of the inside of the scrollbox (leave null to use content.height)\n */\n resize(options) {\n this.options.boxWidth = typeof options.boxWidth !== 'undefined' ? options.boxWidth : this.options.boxWidth\n this.options.boxHeight = typeof options.boxHeight !== 'undefined' ? options.boxHeight : this.options.boxHeight\n if (options.scrollWidth) {\n this.scrollWidth = options.scrollWidth\n }\n if (options.scrollHeight) {\n this.scrollHeight = options.scrollHeight\n }\n this.content.resize(this.options.boxWidth, this.options.boxHeight, this.scrollWidth, this.scrollHeight)\n this.update()\n }\n\n /**\n * ensure that the bounding box is visible\n * @param {number} x - relative to content's coordinate system\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n ensureVisible(x, y, width, height) {\n this.content.ensureVisible(x, y, width, height)\n this._drawScrollbars()\n }\n\n /**\n * removes the ticker and the viewport's wheel listener, then destroys the scrollbox\n * @param {PIXI.DestroyOptions} [options]\n */\n destroy(options) {\n if (this.tickerFunction) {\n this.options.ticker.remove(this.tickerFunction)\n this.tickerFunction = null\n }\n this.scrollbarUp()\n this.content.destroy(options)\n super.destroy(options)\n }\n}\n"],"ignoreList":[0],"mappings":"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"}