@leafer-in/scroller 1.0.1 → 2.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"scroller.esm.min.js","sources":["../../../../../../src/preview/packages/scroller/src/config.ts","../../../../../../src/preview/packages/scroller/src/Scroller.ts","../../../../../../src/preview/packages/scroller/src/index.ts","../../../../../../src/preview/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
1
+ {"version":3,"file":"scroller.esm.min.js","sources":["../../../../../../src/in/packages/scroller/src/config.ts","../../../../../../src/in/packages/scroller/src/Scroller.ts","../../../../../../src/in/packages/scroller/src/index.ts","../../../../../../src/in/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scroller.min.cjs","sources":["../../../../../../src/preview/packages/scroller/src/config.ts","../../../../../../src/preview/packages/scroller/src/Scroller.ts","../../../../../../src/preview/packages/scroller/src/index.ts","../../../../../../src/preview/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
1
+ {"version":3,"file":"scroller.min.cjs","sources":["../../../../../../src/in/packages/scroller/src/config.ts","../../../../../../src/in/packages/scroller/src/Scroller.ts","../../../../../../src/in/packages/scroller/src/index.ts","../../../../../../src/in/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scroller.min.js","sources":["../../../../../../src/preview/packages/scroller/src/config.ts","../../../../../../src/preview/packages/scroller/src/Scroller.ts","../../../../../../src/preview/packages/scroller/src/index.ts","../../../../../../src/preview/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
1
+ {"version":3,"file":"scroller.min.js","sources":["../../../../../../src/in/packages/scroller/src/config.ts","../../../../../../src/in/packages/scroller/src/Scroller.ts","../../../../../../src/in/packages/scroller/src/index.ts","../../../../../../src/in/packages/scroller/src/decorate.ts"],"sourcesContent":["import { IScrollConfig } from '@leafer-ui/interface'\n\n\nexport const config: IScrollConfig = {\n theme: 'light',\n style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeWidthFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },\n size: 6,\n endsMargin: 2,\n sideMargin: 2,\n minSize: 10,\n scaleFixed: 'zoom-in',\n scrollType: 'both',\n hideOnActionEnd: 'hover'\n}\n\n","import { IBounds, IBox, IBoxInputData, IEventListenerId, IOverflow, IScroller, IScrollConfig, IScrollTheme, IObject } from '@leafer-ui/interface'\nimport { Group, Box, Bounds, DataHelper, DragEvent, LeafHelper, MoveEvent, DragBoundsHelper, ChildEvent, PointerEvent, Plugin, MathHelper, BranchHelper, isUndefined, BoundsEvent } from '@leafer-ui/core'\n\nimport { config } from './config'\n\n\nconst tempBounds = new Bounds(), { float } = MathHelper, { clone, assign } = DataHelper\n\nexport class Scroller extends Group implements IScroller {\n\n // 主题 map\n static themeMap: IObject = {}\n\n\n public target: IBox\n\n public config: IScrollConfig\n public mergedConfig: IScrollConfig\n\n public scrollXBar: IBox\n public scrollYBar: IBox\n\n // viewport 区域 / 内容区域\n public ratioX: number\n public ratioY: number\n\n // 滚动区域 / 内容区域\n public scrollRatioX: number\n public scrollRatioY: number\n\n // scroll之前的内容真实定位\n public contentRealX: number\n public contentRealY: number\n\n public dragScrolling: boolean\n\n // 用于比对数据,节流\n public targetOverflow: IOverflow\n public targetWorldBounds: IBounds = new Bounds()\n\n // viewport 与 内容区域\n public viewportBounds: IBounds = new Bounds()\n public contentBounds: IBounds = new Bounds()\n\n // 相对 viewport 区域收缩了一点边距\n public scrollXBounds: IBounds = new Bounds()\n public scrollYBounds: IBounds = new Bounds()\n\n\n protected get canUse(): boolean { return this.target.hasScroller }\n\n protected hideTimer: any\n\n protected __eventIds: IEventListenerId[]\n\n constructor(target: IBox) {\n super()\n this.target = target\n this.config = clone(config)\n this.updateConfig()\n this.__listenEvents()\n\n target.waitLeafer(() => {\n this.parent = target\n this.__bindLeafer(target.leafer)\n })\n\n if (this.mergedConfig.hideOnActionEnd) this.opacity = 0\n }\n\n\n static registerTheme(theme: IScrollTheme, themeConfig: IScrollConfig): void {\n S.themeMap[theme] = themeConfig\n }\n\n static getTheme(theme: IScrollTheme): IScrollConfig {\n return theme && S.themeMap[theme]\n }\n\n static hasTheme(theme: IScrollTheme): boolean {\n return theme && !!S.themeMap[theme]\n }\n\n\n public updateConfig(): void {\n const { scrollConfig } = this.target\n const themeConfig = S.getTheme((scrollConfig && S.hasTheme(scrollConfig.theme) && scrollConfig.theme) || this.config.theme)\n const mergedConfig: IScrollConfig = this.mergedConfig = clone(this.config)\n assign(mergedConfig, themeConfig)\n if (scrollConfig) assign(mergedConfig, scrollConfig)\n this.updateStyle(mergedConfig.style)\n }\n\n public updateStyle(style: IBoxInputData): void {\n if (!this.scrollXBar) this.addMany(this.scrollXBar = new Box(), this.scrollYBar = new Box())\n const { scrollXBar, scrollYBar } = this\n scrollXBar.set(style)\n scrollYBar.set(style)\n scrollXBar.draggable = 'x'\n scrollYBar.draggable = 'y'\n }\n\n public update(check: boolean = true): void {\n if (this.dragScrolling) return\n\n const { target, targetOverflow, targetWorldBounds, viewportBounds, contentBounds } = this, layout = target.__layout, { overflow } = target.__\n\n const { childrenRenderBounds } = layout // 内容 bounds\n const { boxBounds, worldBoxBounds } = layout // 容器 bounds\n\n const isSameWorldBounds = check && targetOverflow === overflow && targetWorldBounds.isSame(worldBoxBounds)\n const isSameConfig = layout.scrollConfigChanged ? (this.updateConfig(), layout.scrollConfigChanged = false) : true\n\n const nowContentBounds = tempBounds.set(viewportBounds).add(childrenRenderBounds)\n\n if (isSameWorldBounds && isSameConfig && contentBounds.isSame(nowContentBounds)) return // 节流\n\n this.targetOverflow = overflow\n viewportBounds.set(boxBounds)\n targetWorldBounds.set(worldBoxBounds)\n contentBounds.set(nowContentBounds)\n\n const { scrollXBar, scrollYBar } = this, { size, endsMargin, minSize } = this.mergedConfig, { width, height } = viewportBounds\n\n this.contentRealX = contentBounds.x - target.scrollX\n this.contentRealY = contentBounds.y - target.scrollY\n\n this.ratioX = viewportBounds.width / contentBounds.width\n this.ratioY = viewportBounds.height / contentBounds.height\n\n const min = size + endsMargin * 2 + minSize\n scrollXBar.visible = float(contentBounds.width) > float(width) && overflow !== 'y-scroll' && width > min\n scrollYBar.visible = float(contentBounds.height) > float(height) && overflow !== 'x-scroll' && height > min\n\n this.updateScrollBar()\n }\n\n public updateScrollBar() {\n const { target, viewportBounds, contentBounds, ratioX, ratioY, scrollXBar, scrollYBar, scrollXBounds, scrollYBounds } = this\n let { size, cornerRadius, endsMargin, sideMargin, minSize, scaleFixed, scrollType } = this.mergedConfig\n const scale = scaleFixed ? target.getClampRenderScale() : 1\n\n endsMargin /= scale\n sideMargin /= scale\n size /= scale\n if (isUndefined(cornerRadius)) cornerRadius = size / 2\n\n if (scrollXBar.visible) {\n scrollXBounds.set(viewportBounds).shrink([endsMargin, scrollYBar.visible ? size + sideMargin : endsMargin, sideMargin, endsMargin])\n const scrollRatioX = this.scrollRatioX = scrollXBounds.width / contentBounds.width\n\n scrollXBar.set({\n x: scrollXBounds.x - contentBounds.x * scrollRatioX,\n y: scrollXBounds.maxY - size,\n width: Math.max(scrollXBounds.width * ratioX, minSize),\n height: size,\n cornerRadius,\n dragBounds: scrollXBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n if (scrollYBar.visible) {\n scrollYBounds.set(viewportBounds).shrink([endsMargin, sideMargin, scrollXBar.visible ? size + sideMargin : endsMargin, endsMargin])\n const scrollRatioY = this.scrollRatioY = scrollYBounds.height / contentBounds.height\n\n scrollYBar.set({\n x: scrollYBounds.maxX - size,\n y: scrollYBounds.y - contentBounds.y * scrollRatioY,\n width: size,\n height: Math.max(scrollYBounds.height * ratioY, minSize),\n cornerRadius,\n dragBounds: scrollYBounds,\n hittable: scrollType !== 'move'\n })\n }\n\n this.x = -this.target.scrollX\n this.y = -this.target.scrollY\n\n LeafHelper.updateAllMatrix(this)\n BranchHelper.updateBounds(this)\n LeafHelper.updateAllChange(this)\n }\n\n protected onDrag(e: DragEvent): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = true\n\n const { scrollXBar, scrollYBar, target, scrollXBounds, scrollYBounds } = this\n const scrollX = e.current === scrollXBar\n\n if (scrollX) target.scrollX = -((scrollXBar.x - scrollXBounds.x) / this.scrollRatioX + this.contentRealX)\n else target.scrollY = -((scrollYBar.y - scrollYBounds.y) / this.scrollRatioY + this.contentRealY)\n }\n\n protected onDragEnd(): void {\n if (this.mergedConfig.scrollType === 'move') return\n\n this.dragScrolling = false\n }\n\n protected onMove(e: MoveEvent): void {\n if (!this.canUse) return\n\n this.onEnter()\n\n const { scrollType, stopDefault } = this.mergedConfig\n if (scrollType === 'drag') return\n\n const { viewportBounds, contentBounds, scrollXBar, scrollYBar } = this\n if (scrollXBar.visible || scrollYBar.visible) {\n const move = e.getInnerMove(this.target)\n DragBoundsHelper.getValidMove(contentBounds, viewportBounds, 'inner', move, true)\n\n let needStop: boolean\n if (move.x && scrollXBar.visible) this.target.scrollX += move.x, needStop = true\n if (move.y && scrollYBar.visible) this.target.scrollY += move.y, needStop = true\n if (needStop || stopDefault) e.stop()\n if (stopDefault) e.stopDefault()\n }\n }\n\n protected onMoveEnd(e: MoveEvent): void {\n if (!this.canUse) return\n\n if (!this.target.hit(e)) this.onLeave()\n }\n\n protected onEnter() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n this.killAnimate()\n this.opacity = 1\n }\n\n protected onLeave() {\n if (!this.canUse) return\n\n clearTimeout(this.hideTimer)\n\n if (this.mergedConfig.hideOnActionEnd) this.hideTimer = setTimeout(() => {\n this.set({ opacity: 0 }, Plugin.has('animate'))\n }, 600)\n }\n\n protected onResize() {\n if (this.canUse) this.update()\n }\n\n protected __listenEvents(): void {\n const { scrollXBar, scrollYBar, target } = this\n this.__eventIds = [\n scrollXBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollXBar.on_(DragEvent.END, this.onDragEnd, this),\n\n scrollYBar.on_(DragEvent.DRAG, this.onDrag, this),\n scrollYBar.on_(DragEvent.END, this.onDragEnd, this),\n\n target.on_(PointerEvent.ENTER, this.onEnter, this),\n target.on_(PointerEvent.LEAVE, this.onLeave, this),\n\n target.on_(MoveEvent.BEFORE_MOVE, this.onMove, this),\n target.on_(MoveEvent.END, this.onMoveEnd, this),\n\n target.on_(BoundsEvent.WORLD, this.onResize, this), // 更新\n target.on_(ChildEvent.DESTROY, this.destroy, this)\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 const { target } = this\n target.scroller = target.topChildren = target.hasScroller = undefined\n this.target = this.config = null\n super.destroy()\n }\n }\n\n}\n\nconst S = Scroller","export { Scroller } from './Scroller'\n\nimport { Plugin, Box } from '@leafer-ui/core'\nimport { Scroller } from './Scroller'\nimport { scrollConfigType } from './decorate'\n\n\nPlugin.add('scroller')\n\n\nconst box = Box.prototype\n\nBox.addAttr('scrollConfig', undefined, scrollConfigType)\n\nbox.__checkScroll = function (isScrollMode: boolean) {\n if (isScrollMode && this.isOverflow) {\n if (!this.scroller) {\n this.scroller = new Scroller(this)\n if (!this.topChildren) this.topChildren = []\n this.topChildren.push(this.scroller)\n }\n this.hasScroller = true\n } else {\n if (this.hasScroller && !this.scroller.dragScrolling) {\n this.hasScroller = undefined\n this.scroller.update()\n }\n }\n}\n\nScroller.registerTheme('light', { style: { fill: 'black' } }) // 白天模式\nScroller.registerTheme('dark', { style: { fill: 'white' } }) // 夜间模式","import { IValue } from '@leafer-ui/interface'\nimport { decorateLeafAttr, attr, doBoundsType } from '@leafer-ui/core'\n\n\nexport function scrollConfigType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const layout = this.__layout\n layout.scrollConfigChanged = true\n doBoundsType(this)\n }\n }\n }))\n}\n"],"names":["config","theme","style","dragBoundsType","strokeAlign","strokeWidthFixed","width","height","opacity","cornerRadius","hoverStyle","pressStyle","size","endsMargin","sideMargin","minSize","scaleFixed","scrollType","hideOnActionEnd","tempBounds","Bounds","float","MathHelper","clone","assign","DataHelper","Scroller","Group","canUse","this","target","hasScroller","constructor","super","targetWorldBounds","viewportBounds","contentBounds","scrollXBounds","scrollYBounds","updateConfig","__listenEvents","waitLeafer","parent","__bindLeafer","leafer","mergedConfig","registerTheme","themeConfig","S","themeMap","getTheme","hasTheme","scrollConfig","updateStyle","scrollXBar","addMany","Box","scrollYBar","set","draggable","update","check","dragScrolling","targetOverflow","layout","__layout","overflow","__","childrenRenderBounds","boxBounds","worldBoxBounds","isSameWorldBounds","isSame","isSameConfig","scrollConfigChanged","nowContentBounds","add","contentRealX","x","scrollX","contentRealY","y","scrollY","ratioX","ratioY","min","visible","updateScrollBar","scale","getClampRenderScale","isUndefined","shrink","scrollRatioX","maxY","Math","max","dragBounds","hittable","scrollRatioY","maxX","LeafHelper","updateAllMatrix","BranchHelper","updateBounds","updateAllChange","onDrag","e","current","onDragEnd","onMove","onEnter","stopDefault","move","getInnerMove","needStop","DragBoundsHelper","getValidMove","stop","onMoveEnd","hit","onLeave","clearTimeout","hideTimer","killAnimate","setTimeout","Plugin","has","onResize","__eventIds","on_","DragEvent","DRAG","END","PointerEvent","ENTER","LEAVE","MoveEvent","BEFORE_MOVE","BoundsEvent","WORLD","ChildEvent","DESTROY","destroy","__removeListenEvents","off_","destroyed","scroller","topChildren","undefined","box","prototype","addAttr","defaultValue","decorateLeafAttr","key","attr","value","__setAttr","doBoundsType","__checkScroll","isScrollMode","isOverflow","push","fill"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-in/scroller",
3
- "version": "1.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "@leafer-in/scroller",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -14,7 +14,11 @@
14
14
  "types": "types/index.d.ts",
15
15
  "unpkg": "dist/scroller.min.js",
16
16
  "jsdelivr": "dist/scroller.min.js",
17
- "files": ["src","types","dist"],
17
+ "files": [
18
+ "src",
19
+ "types",
20
+ "dist"
21
+ ],
18
22
  "repository": {
19
23
  "type": "git",
20
24
  "url": "https://github.com/leaferjs/leafer-in.git"
@@ -30,8 +34,8 @@
30
34
  "leaferjs"
31
35
  ],
32
36
  "peerDependencies": {
33
- "@leafer-ui/core": "^1.9.10",
34
- "@leafer-ui/interface": "^1.9.10",
35
- "@leafer-in/interface": "^1.9.10"
37
+ "@leafer-ui/core": "^2.0.2",
38
+ "@leafer-ui/interface": "^2.0.2",
39
+ "@leafer-in/interface": "^2.0.2"
36
40
  }
37
41
  }