UNPKG

@leafer-in/scroll

Version:
1 lines 9.34 kB
{"version":3,"file":"scroll.min.cjs","sources":["../../../../../../src/in/packages/scroll/src/ScrollBar.ts","../../../../../../src/in/packages/scroll/src/index.ts"],"sourcesContent":["import { IApp, IBounds, IBox, IBoxInputData, IEventListenerId, IGroup } from '@leafer-ui/interface'\nimport { Group, RenderEvent, ResizeEvent, Box, Bounds, DataHelper, DragEvent } from '@leafer-ui/core'\n\nimport { IScrollBar, IScrollBarConfig, IScrollBarTheme } from '@leafer-in/interface'\n\n\nexport class ScrollBar extends Group implements IScrollBar {\n\n public target: IGroup\n public config: IScrollBarConfig = {\n theme: 'light',\n padding: 0,\n minSize: 10\n }\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n public ratioX: number\n public ratioY: number\n public dragScrolling: boolean\n public scrollBounds: IBounds\n\n public get isOutside() { return true }\n\n protected __dragOut: boolean | number\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IGroup, userConfig?: IScrollBarConfig) {\n super()\n if (target.isApp) {\n (target as IApp).sky.add(this)\n target = (target as IApp).tree\n }\n this.target = target\n if (userConfig) DataHelper.assign(this.config, userConfig)\n this.changeTheme(this.config.theme)\n this.waitLeafer(this.__listenEvents, this)\n }\n\n public changeTheme(theme: IScrollBarTheme): void {\n let style: IBoxInputData\n\n if (typeof theme === 'string') {\n style = { fill: 'black', stroke: 'rgba(255,255,255,0.8)' }\n if (theme === 'dark') {\n style.fill = 'white'\n style.stroke = 'rgba(0,0,0,0.2)'\n }\n } else {\n style = theme\n }\n\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n\n style = Object.assign({ strokeAlign: 'center', opacity: 0.5, width: 6, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.7 } } as IBoxInputData, style)\n if (!style.height) style.height = style.width\n this.scrollXBar.set({ ...style, visible: false })\n this.scrollYBar.set({ ...style, visible: false })\n if (this.leafer) this.update()\n }\n\n\n public update(check?: boolean): void {\n if (this.dragScrolling) return\n\n const { minSize, padding } = this.config\n const { zoomLayer, canvas } = this.target.leafer\n const { worldRenderBounds } = zoomLayer\n\n if (check && this.scrollBounds && this.scrollBounds.isSame(worldRenderBounds)) return\n this.scrollBounds = new Bounds(worldRenderBounds)\n\n const bounds = canvas.bounds.clone().shrink(padding)\n const totalBounds = bounds.clone().add(worldRenderBounds)\n\n const ratioX = this.ratioX = bounds.width / totalBounds.width\n const ratioY = this.ratioY = bounds.height / totalBounds.height\n const scrollRatioX = (bounds.x - totalBounds.x) / totalBounds.width\n const scrollRatioY = (bounds.y - totalBounds.y) / totalBounds.height\n const showScrollXBar = ratioX < 1\n const showScrollYBar = ratioY < 1\n\n const { scrollXBar, scrollYBar } = this\n const { x, y, width, height } = bounds.shrink([2, showScrollYBar ? scrollYBar.width + 6 : 2, showScrollXBar ? scrollXBar.height + 6 : 2, 2])\n\n scrollXBar.set({\n x: x + width * scrollRatioX,\n y: y + height + 2,\n width: Math.max(width * ratioX, minSize),\n visible: showScrollXBar\n })\n\n scrollYBar.set({\n x: x + width + 2,\n y: y + height * scrollRatioY,\n height: Math.max(height * ratioY, minSize),\n visible: showScrollYBar\n })\n }\n\n protected onDrag(e: DragEvent): void {\n this.dragScrolling = true\n this.__dragOut = this.app.config.move.dragOut\n this.app.config.move.dragOut = false\n\n const scrollX = e.current === this.scrollXBar\n const move = this.target.leafer.getValidMove(scrollX ? -e.moveX / this.ratioX : 0, scrollX ? 0 : -e.moveY / this.ratioY)\n this.target.moveWorld(move.x, move.y)\n e.current.moveWorld(move.x && -move.x * this.ratioX, move.y && -move.y * this.ratioY)\n }\n\n protected onDragEnd(): void {\n this.dragScrolling = false\n this.app.config.move.dragOut = this.__dragOut\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n this.target.on_(RenderEvent.BEFORE, () => this.update(true)),\n this.target.leafer.on_(ResizeEvent.RESIZE, () => this.update())\n ]\n }\n\n protected __removeListenEvents(): void {\n this.off_(this.__eventIds)\n }\n\n public destroy(): void {\n if (!this.destroyed) {\n this.__removeListenEvents()\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}","export { ScrollBar } from './ScrollBar'\n\nimport { Plugin } from '@leafer-ui/core'\n\nPlugin.add('scroll')"],"names":["ScrollBar","Group","isOutside","constructor","target","userConfig","super","this","config","theme","padding","minSize","isApp","sky","add","tree","DataHelper","assign","changeTheme","waitLeafer","__listenEvents","style","fill","stroke","scrollXBar","addMany","Box","scrollYBar","Object","strokeAlign","opacity","width","cornerRadius","hoverStyle","pressStyle","height","set","visible","leafer","update","check","dragScrolling","zoomLayer","canvas","worldRenderBounds","scrollBounds","isSame","Bounds","bounds","clone","shrink","totalBounds","ratioX","ratioY","scrollRatioX","x","scrollRatioY","y","showScrollXBar","showScrollYBar","Math","max","onDrag","e","__dragOut","app","move","dragOut","scrollX","current","getValidMove","moveX","moveY","moveWorld","onDragEnd","__eventIds","on_","DragEvent","DRAG","END","RenderEvent","BEFORE","ResizeEvent","RESIZE","__removeListenEvents","off_","destroy","destroyed","Plugin"],"mappings":"8CAMM,MAAOA,UAAkBC,EAAAA,MAiB3B,aAAWC,GAAc,OAAO,CAAI,CAKpC,WAAAC,CAAYC,EAAgBC,GACxBC,QApBGC,KAAAC,OAA2B,CAC9BC,MAAO,QACPC,QAAS,EACTC,QAAS,IAkBLP,EAAOQ,QACNR,EAAgBS,IAAIC,IAAIP,MACzBH,EAAUA,EAAgBW,MAE9BR,KAAKH,OAASA,EACVC,GAAYW,EAAAA,WAAWC,OAAOV,KAAKC,OAAQH,GAC/CE,KAAKW,YAAYX,KAAKC,OAAOC,OAC7BF,KAAKY,WAAWZ,KAAKa,eAAgBb,MAGlC,WAAAW,CAAYT,GACf,IAAIY,EAEiB,iBAAVZ,GACPY,EAAQ,CAAEC,KAAM,QAASC,OAAQ,yBACnB,SAAVd,IACAY,EAAMC,KAAO,QACbD,EAAME,OAAS,oBAGnBF,EAAQZ,EAGPF,KAAKiB,YAAYjB,KAAKkB,QAAQlB,KAAKiB,WAAa,IAAIE,MAAOnB,KAAKoB,WAAa,IAAID,EAAAA,KAEtFL,EAAQO,OAAOX,OAAO,CAAEY,YAAa,SAAUC,QAAS,GAAKC,MAAO,EAAGC,aAAc,EAAGC,WAAY,CAAEH,QAAS,IAAOI,WAAY,CAAEJ,QAAS,KAA0BT,GAClKA,EAAMc,SAAQd,EAAMc,OAASd,EAAMU,OACxCxB,KAAKiB,WAAWY,IAAGR,OAAAX,OAAAW,OAAAX,OAAA,CAAA,EAAMI,GAAK,CAAEgB,SAAS,KACzC9B,KAAKoB,WAAWS,IAAGR,OAAAX,OAAAW,OAAAX,OAAA,CAAA,EAAMI,GAAK,CAAEgB,SAAS,KACrC9B,KAAK+B,QAAQ/B,KAAKgC,SAInB,MAAAA,CAAOC,GACV,GAAIjC,KAAKkC,cAAe,OAExB,MAAM9B,QAAEA,EAAOD,QAAEA,GAAYH,KAAKC,QAC5BkC,UAAEA,EAASC,OAAEA,GAAWpC,KAAKH,OAAOkC,QACpCM,kBAAEA,GAAsBF,EAE9B,GAAIF,GAASjC,KAAKsC,cAAgBtC,KAAKsC,aAAaC,OAAOF,GAAoB,OAC/ErC,KAAKsC,aAAe,IAAIE,EAAMA,OAACH,GAE/B,MAAMI,EAASL,EAAOK,OAAOC,QAAQC,OAAOxC,GACtCyC,EAAcH,EAAOC,QAAQnC,IAAI8B,GAEjCQ,EAAS7C,KAAK6C,OAASJ,EAAOjB,MAAQoB,EAAYpB,MAClDsB,EAAS9C,KAAK8C,OAASL,EAAOb,OAASgB,EAAYhB,OACnDmB,GAAgBN,EAAOO,EAAIJ,EAAYI,GAAKJ,EAAYpB,MACxDyB,GAAgBR,EAAOS,EAAIN,EAAYM,GAAKN,EAAYhB,OACxDuB,EAAiBN,EAAS,EAC1BO,EAAiBN,EAAS,GAE1B7B,WAAEA,EAAUG,WAAEA,GAAepB,MAC7BgD,EAAEA,EAACE,EAAEA,EAAC1B,MAAEA,EAAKI,OAAEA,GAAWa,EAAOE,OAAO,CAAC,EAAGS,EAAiBhC,EAAWI,MAAQ,EAAI,EAAG2B,EAAiBlC,EAAWW,OAAS,EAAI,EAAG,IAEzIX,EAAWY,IAAI,CACXmB,EAAGA,EAAIxB,EAAQuB,EACfG,EAAGA,EAAItB,EAAS,EAChBJ,MAAO6B,KAAKC,IAAI9B,EAAQqB,EAAQzC,GAChC0B,QAASqB,IAGb/B,EAAWS,IAAI,CACXmB,EAAGA,EAAIxB,EAAQ,EACf0B,EAAGA,EAAItB,EAASqB,EAChBrB,OAAQyB,KAAKC,IAAI1B,EAASkB,EAAQ1C,GAClC0B,QAASsB,IAIP,MAAAG,CAAOC,GACbxD,KAAKkC,eAAgB,EACrBlC,KAAKyD,UAAYzD,KAAK0D,IAAIzD,OAAO0D,KAAKC,QACtC5D,KAAK0D,IAAIzD,OAAO0D,KAAKC,SAAU,EAE/B,MAAMC,EAAUL,EAAEM,UAAY9D,KAAKiB,WAC7B0C,EAAO3D,KAAKH,OAAOkC,OAAOgC,aAAaF,GAAWL,EAAEQ,MAAQhE,KAAK6C,OAAS,EAAGgB,EAAU,GAAKL,EAAES,MAAQjE,KAAK8C,QACjH9C,KAAKH,OAAOqE,UAAUP,EAAKX,EAAGW,EAAKT,GACnCM,EAAEM,QAAQI,UAAUP,EAAKX,IAAMW,EAAKX,EAAIhD,KAAK6C,OAAQc,EAAKT,IAAMS,EAAKT,EAAIlD,KAAK8C,QAGxE,SAAAqB,GACNnE,KAAKkC,eAAgB,EACrBlC,KAAK0D,IAAIzD,OAAO0D,KAAKC,QAAU5D,KAAKyD,UAG9B,cAAA5C,GACN,MAAMI,WAAEA,EAAUG,WAAEA,GAAepB,KACnCA,KAAKoE,WAAa,CACdnD,EAAWoD,IAAIC,EAASA,UAACC,KAAMvE,KAAKuD,OAAQvD,MAC5CoB,EAAWiD,IAAIC,EAASA,UAACC,KAAMvE,KAAKuD,OAAQvD,MAC5CiB,EAAWoD,IAAIC,EAASA,UAACE,IAAKxE,KAAKmE,UAAWnE,MAC9CoB,EAAWiD,IAAIC,EAASA,UAACE,IAAKxE,KAAKmE,UAAWnE,MAC9CA,KAAKH,OAAOwE,IAAII,EAAWA,YAACC,QAAQ,IAAM1E,KAAKgC,QAAO,KACtDhC,KAAKH,OAAOkC,OAAOsC,IAAIM,EAAWA,YAACC,QAAQ,IAAM5E,KAAKgC,YAIpD,oBAAA6C,GACN7E,KAAK8E,KAAK9E,KAAKoE,YAGZ,OAAAW,GACE/E,KAAKgF,YACNhF,KAAK6E,uBACL7E,KAAKH,OAASG,KAAKC,OAAS,KAC5BF,MAAMgF,YCrIlBE,EAAAA,OAAO1E,IAAI"}