@leafer-in/scroller 2.0.2 → 2.0.4

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/dist/scroller.cjs CHANGED
@@ -7,7 +7,7 @@ const config = {
7
7
  style: {
8
8
  dragBoundsType: "outer",
9
9
  strokeAlign: "center",
10
- strokeWidthFixed: "zoom-in",
10
+ strokeScaleFixed: "zoom-in",
11
11
  width: 6,
12
12
  height: 6,
13
13
  opacity: .5,
@@ -5,7 +5,7 @@ const config = {
5
5
  style: {
6
6
  dragBoundsType: "outer",
7
7
  strokeAlign: "center",
8
- strokeWidthFixed: "zoom-in",
8
+ strokeScaleFixed: "zoom-in",
9
9
  width: 6,
10
10
  height: 6,
11
11
  opacity: .5,
@@ -1,2 +1,2 @@
1
- import{Bounds as t,MathHelper as e,DataHelper as s,Group as i,Box as o,isUndefined as r,LeafHelper as n,BranchHelper as h,DragBoundsHelper as l,Plugin as a,DragEvent as c,PointerEvent as d,MoveEvent as g,BoundsEvent as u,ChildEvent as m,decorateLeafAttr as p,attr as f,doBoundsType as v}from"@leafer-ui/core";const B={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeWidthFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},y=new t,{float:_}=e,{clone:w,assign:E}=s;class C extends i{get canUse(){return this.target.hasScroller}constructor(e){super(),this.targetWorldBounds=new t,this.viewportBounds=new t,this.contentBounds=new t,this.scrollXBounds=new t,this.scrollYBounds=new t,this.target=e,this.config=w(B),this.updateConfig(),this.__listenEvents(),e.waitLeafer(()=>{this.parent=e,this.__bindLeafer(e.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){x.themeMap[t]=e}static getTheme(t){return t&&x.themeMap[t]}static hasTheme(t){return t&&!!x.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=x.getTheme(t&&x.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=w(this.config);E(s,e),t&&E(s,t),this.updateStyle(s.style)}updateStyle(t){this.scrollXBar||this.addMany(this.scrollXBar=new o,this.scrollYBar=new o);const{scrollXBar:e,scrollYBar:s}=this;e.set(t),s.set(t),e.draggable="x",s.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:s,targetWorldBounds:i,viewportBounds:o,contentBounds:r}=this,n=e.__layout,{overflow:h}=e.__,{childrenRenderBounds:l}=n,{boxBounds:a,worldBoxBounds:c}=n,d=t&&s===h&&i.isSame(c),g=!n.scrollConfigChanged||(this.updateConfig(),n.scrollConfigChanged=!1),u=y.set(o).add(l);if(d&&g&&r.isSame(u))return;this.targetOverflow=h,o.set(a),i.set(c),r.set(u);const{scrollXBar:m,scrollYBar:p}=this,{size:f,endsMargin:v,minSize:B}=this.mergedConfig,{width:w,height:E}=o;this.contentRealX=r.x-e.scrollX,this.contentRealY=r.y-e.scrollY,this.ratioX=o.width/r.width,this.ratioY=o.height/r.height;const C=f+2*v+B;m.visible=_(r.width)>_(w)&&"y-scroll"!==h&&w>C,p.visible=_(r.height)>_(E)&&"x-scroll"!==h&&E>C,this.updateScrollBar()}updateScrollBar(){const{target:t,viewportBounds:e,contentBounds:s,ratioX:i,ratioY:o,scrollXBar:l,scrollYBar:a,scrollXBounds:c,scrollYBounds:d}=this;let{size:g,cornerRadius:u,endsMargin:m,sideMargin:p,minSize:f,scaleFixed:v,scrollType:B}=this.mergedConfig;const y=v?t.getClampRenderScale():1;if(m/=y,p/=y,g/=y,r(u)&&(u=g/2),l.visible){c.set(e).shrink([m,a.visible?g+p:m,p,m]);const t=this.scrollRatioX=c.width/s.width;l.set({x:c.x-s.x*t,y:c.maxY-g,width:Math.max(c.width*i,f),height:g,cornerRadius:u,dragBounds:c,hittable:"move"!==B})}if(a.visible){d.set(e).shrink([m,p,l.visible?g+p:m,m]);const t=this.scrollRatioY=d.height/s.height;a.set({x:d.maxX-g,y:d.y-s.y*t,width:g,height:Math.max(d.height*o,f),cornerRadius:u,dragBounds:d,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,n.updateAllMatrix(this),h.updateBounds(this),n.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(t){if(!this.canUse)return;this.onEnter();const{scrollType:e,stopDefault:s}=this.mergedConfig;if("drag"===e)return;const{viewportBounds:i,contentBounds:o,scrollXBar:r,scrollYBar:n}=this;if(r.visible||n.visible){const e=t.getInnerMove(this.target);let h;l.getValidMove(o,i,"inner",e,!0),e.x&&r.visible&&(this.target.scrollX+=e.x,h=!0),e.y&&n.visible&&(this.target.scrollY+=e.y,h=!0),(h||s)&&t.stop(),s&&t.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},a.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:t,scrollYBar:e,target:s}=this;this.__eventIds=[t.on_(c.DRAG,this.onDrag,this),t.on_(c.END,this.onDragEnd,this),e.on_(c.DRAG,this.onDrag,this),e.on_(c.END,this.onDragEnd,this),s.on_(d.ENTER,this.onEnter,this),s.on_(d.LEAVE,this.onLeave,this),s.on_(g.BEFORE_MOVE,this.onMove,this),s.on_(g.END,this.onMoveEnd,this),s.on_(u.WORLD,this.onResize,this),s.on_(m.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}C.themeMap={};const x=C;a.add("scroller");const S=o.prototype;o.addAttr("scrollConfig",void 0,function(t){return p(t,t=>f({set(e){if(this.__setAttr(t,e)){this.__layout.scrollConfigChanged=!0,v(this)}}}))}),S.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new C(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},C.registerTheme("light",{style:{fill:"black"}}),C.registerTheme("dark",{style:{fill:"white"}});export{C as Scroller};
1
+ import{Bounds as t,MathHelper as e,DataHelper as s,Group as i,Box as o,isUndefined as r,LeafHelper as n,BranchHelper as h,DragBoundsHelper as l,Plugin as a,DragEvent as c,PointerEvent as d,MoveEvent as g,BoundsEvent as u,ChildEvent as m,decorateLeafAttr as p,attr as f,doBoundsType as v}from"@leafer-ui/core";const B={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeScaleFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},y=new t,{float:_}=e,{clone:w,assign:E}=s;class C extends i{get canUse(){return this.target.hasScroller}constructor(e){super(),this.targetWorldBounds=new t,this.viewportBounds=new t,this.contentBounds=new t,this.scrollXBounds=new t,this.scrollYBounds=new t,this.target=e,this.config=w(B),this.updateConfig(),this.__listenEvents(),e.waitLeafer(()=>{this.parent=e,this.__bindLeafer(e.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){x.themeMap[t]=e}static getTheme(t){return t&&x.themeMap[t]}static hasTheme(t){return t&&!!x.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=x.getTheme(t&&x.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=w(this.config);E(s,e),t&&E(s,t),this.updateStyle(s.style)}updateStyle(t){this.scrollXBar||this.addMany(this.scrollXBar=new o,this.scrollYBar=new o);const{scrollXBar:e,scrollYBar:s}=this;e.set(t),s.set(t),e.draggable="x",s.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:s,targetWorldBounds:i,viewportBounds:o,contentBounds:r}=this,n=e.__layout,{overflow:h}=e.__,{childrenRenderBounds:l}=n,{boxBounds:a,worldBoxBounds:c}=n,d=t&&s===h&&i.isSame(c),g=!n.scrollConfigChanged||(this.updateConfig(),n.scrollConfigChanged=!1),u=y.set(o).add(l);if(d&&g&&r.isSame(u))return;this.targetOverflow=h,o.set(a),i.set(c),r.set(u);const{scrollXBar:m,scrollYBar:p}=this,{size:f,endsMargin:v,minSize:B}=this.mergedConfig,{width:w,height:E}=o;this.contentRealX=r.x-e.scrollX,this.contentRealY=r.y-e.scrollY,this.ratioX=o.width/r.width,this.ratioY=o.height/r.height;const C=f+2*v+B;m.visible=_(r.width)>_(w)&&"y-scroll"!==h&&w>C,p.visible=_(r.height)>_(E)&&"x-scroll"!==h&&E>C,this.updateScrollBar()}updateScrollBar(){const{target:t,viewportBounds:e,contentBounds:s,ratioX:i,ratioY:o,scrollXBar:l,scrollYBar:a,scrollXBounds:c,scrollYBounds:d}=this;let{size:g,cornerRadius:u,endsMargin:m,sideMargin:p,minSize:f,scaleFixed:v,scrollType:B}=this.mergedConfig;const y=v?t.getClampRenderScale():1;if(m/=y,p/=y,g/=y,r(u)&&(u=g/2),l.visible){c.set(e).shrink([m,a.visible?g+p:m,p,m]);const t=this.scrollRatioX=c.width/s.width;l.set({x:c.x-s.x*t,y:c.maxY-g,width:Math.max(c.width*i,f),height:g,cornerRadius:u,dragBounds:c,hittable:"move"!==B})}if(a.visible){d.set(e).shrink([m,p,l.visible?g+p:m,m]);const t=this.scrollRatioY=d.height/s.height;a.set({x:d.maxX-g,y:d.y-s.y*t,width:g,height:Math.max(d.height*o,f),cornerRadius:u,dragBounds:d,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,n.updateAllMatrix(this),h.updateBounds(this),n.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(t){if(!this.canUse)return;this.onEnter();const{scrollType:e,stopDefault:s}=this.mergedConfig;if("drag"===e)return;const{viewportBounds:i,contentBounds:o,scrollXBar:r,scrollYBar:n}=this;if(r.visible||n.visible){const e=t.getInnerMove(this.target);let h;l.getValidMove(o,i,"inner",e,!0),e.x&&r.visible&&(this.target.scrollX+=e.x,h=!0),e.y&&n.visible&&(this.target.scrollY+=e.y,h=!0),(h||s)&&t.stop(),s&&t.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},a.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:t,scrollYBar:e,target:s}=this;this.__eventIds=[t.on_(c.DRAG,this.onDrag,this),t.on_(c.END,this.onDragEnd,this),e.on_(c.DRAG,this.onDrag,this),e.on_(c.END,this.onDragEnd,this),s.on_(d.ENTER,this.onEnter,this),s.on_(d.LEAVE,this.onLeave,this),s.on_(g.BEFORE_MOVE,this.onMove,this),s.on_(g.END,this.onMoveEnd,this),s.on_(u.WORLD,this.onResize,this),s.on_(m.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}C.themeMap={};const x=C;a.add("scroller");const S=o.prototype;o.addAttr("scrollConfig",void 0,function(t){return p(t,t=>f({set(e){if(this.__setAttr(t,e)){this.__layout.scrollConfigChanged=!0,v(this)}}}))}),S.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new C(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},C.registerTheme("light",{style:{fill:"black"}}),C.registerTheme("dark",{style:{fill:"white"}});export{C as Scroller};
2
2
  //# sourceMappingURL=scroller.esm.min.js.map
@@ -1 +1 @@
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
+ {"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', strokeScaleFixed: '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","strokeScaleFixed","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/dist/scroller.js CHANGED
@@ -7,7 +7,7 @@ this.LeaferIN.scroller = function(exports, core) {
7
7
  style: {
8
8
  dragBoundsType: "outer",
9
9
  strokeAlign: "center",
10
- strokeWidthFixed: "zoom-in",
10
+ strokeScaleFixed: "zoom-in",
11
11
  width: 6,
12
12
  height: 6,
13
13
  opacity: .5,
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@leafer-ui/core");const e={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeWidthFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},s=new t.Bounds,{float:i}=t.MathHelper,{clone:o,assign:r}=t.DataHelper;class n extends t.Group{get canUse(){return this.target.hasScroller}constructor(s){super(),this.targetWorldBounds=new t.Bounds,this.viewportBounds=new t.Bounds,this.contentBounds=new t.Bounds,this.scrollXBounds=new t.Bounds,this.scrollYBounds=new t.Bounds,this.target=s,this.config=o(e),this.updateConfig(),this.__listenEvents(),s.waitLeafer(()=>{this.parent=s,this.__bindLeafer(s.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){l.themeMap[t]=e}static getTheme(t){return t&&l.themeMap[t]}static hasTheme(t){return t&&!!l.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=l.getTheme(t&&l.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=o(this.config);r(s,e),t&&r(s,t),this.updateStyle(s.style)}updateStyle(e){this.scrollXBar||this.addMany(this.scrollXBar=new t.Box,this.scrollYBar=new t.Box);const{scrollXBar:s,scrollYBar:i}=this;s.set(e),i.set(e),s.draggable="x",i.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:o,targetWorldBounds:r,viewportBounds:n,contentBounds:l}=this,h=e.__layout,{overflow:a}=e.__,{childrenRenderBounds:d}=h,{boxBounds:c,worldBoxBounds:g}=h,u=t&&o===a&&r.isSame(g),p=!h.scrollConfigChanged||(this.updateConfig(),h.scrollConfigChanged=!1),v=s.set(n).add(d);if(u&&p&&l.isSame(v))return;this.targetOverflow=a,n.set(c),r.set(g),l.set(v);const{scrollXBar:B,scrollYBar:f}=this,{size:m,endsMargin:y,minSize:E}=this.mergedConfig,{width:_,height:w}=n;this.contentRealX=l.x-e.scrollX,this.contentRealY=l.y-e.scrollY,this.ratioX=n.width/l.width,this.ratioY=n.height/l.height;const x=m+2*y+E;B.visible=i(l.width)>i(_)&&"y-scroll"!==a&&_>x,f.visible=i(l.height)>i(w)&&"x-scroll"!==a&&w>x,this.updateScrollBar()}updateScrollBar(){const{target:e,viewportBounds:s,contentBounds:i,ratioX:o,ratioY:r,scrollXBar:n,scrollYBar:l,scrollXBounds:h,scrollYBounds:a}=this;let{size:d,cornerRadius:c,endsMargin:g,sideMargin:u,minSize:p,scaleFixed:v,scrollType:B}=this.mergedConfig;const f=v?e.getClampRenderScale():1;if(g/=f,u/=f,d/=f,t.isUndefined(c)&&(c=d/2),n.visible){h.set(s).shrink([g,l.visible?d+u:g,u,g]);const t=this.scrollRatioX=h.width/i.width;n.set({x:h.x-i.x*t,y:h.maxY-d,width:Math.max(h.width*o,p),height:d,cornerRadius:c,dragBounds:h,hittable:"move"!==B})}if(l.visible){a.set(s).shrink([g,u,n.visible?d+u:g,g]);const t=this.scrollRatioY=a.height/i.height;l.set({x:a.maxX-d,y:a.y-i.y*t,width:d,height:Math.max(a.height*r,p),cornerRadius:c,dragBounds:a,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,t.LeafHelper.updateAllMatrix(this),t.BranchHelper.updateBounds(this),t.LeafHelper.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(e){if(!this.canUse)return;this.onEnter();const{scrollType:s,stopDefault:i}=this.mergedConfig;if("drag"===s)return;const{viewportBounds:o,contentBounds:r,scrollXBar:n,scrollYBar:l}=this;if(n.visible||l.visible){const s=e.getInnerMove(this.target);let h;t.DragBoundsHelper.getValidMove(r,o,"inner",s,!0),s.x&&n.visible&&(this.target.scrollX+=s.x,h=!0),s.y&&l.visible&&(this.target.scrollY+=s.y,h=!0),(h||i)&&e.stop(),i&&e.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},t.Plugin.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:e,scrollYBar:s,target:i}=this;this.__eventIds=[e.on_(t.DragEvent.DRAG,this.onDrag,this),e.on_(t.DragEvent.END,this.onDragEnd,this),s.on_(t.DragEvent.DRAG,this.onDrag,this),s.on_(t.DragEvent.END,this.onDragEnd,this),i.on_(t.PointerEvent.ENTER,this.onEnter,this),i.on_(t.PointerEvent.LEAVE,this.onLeave,this),i.on_(t.MoveEvent.BEFORE_MOVE,this.onMove,this),i.on_(t.MoveEvent.END,this.onMoveEnd,this),i.on_(t.BoundsEvent.WORLD,this.onResize,this),i.on_(t.ChildEvent.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}n.themeMap={};const l=n;t.Plugin.add("scroller");const h=t.Box.prototype;t.Box.addAttr("scrollConfig",void 0,function(e){return t.decorateLeafAttr(e,e=>t.attr({set(s){if(this.__setAttr(e,s)){this.__layout.scrollConfigChanged=!0,t.doBoundsType(this)}}}))}),h.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new n(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},n.registerTheme("light",{style:{fill:"black"}}),n.registerTheme("dark",{style:{fill:"white"}}),exports.Scroller=n;
1
+ "use strict";var t=require("@leafer-ui/core");const e={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeScaleFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},s=new t.Bounds,{float:i}=t.MathHelper,{clone:o,assign:r}=t.DataHelper;class n extends t.Group{get canUse(){return this.target.hasScroller}constructor(s){super(),this.targetWorldBounds=new t.Bounds,this.viewportBounds=new t.Bounds,this.contentBounds=new t.Bounds,this.scrollXBounds=new t.Bounds,this.scrollYBounds=new t.Bounds,this.target=s,this.config=o(e),this.updateConfig(),this.__listenEvents(),s.waitLeafer(()=>{this.parent=s,this.__bindLeafer(s.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){l.themeMap[t]=e}static getTheme(t){return t&&l.themeMap[t]}static hasTheme(t){return t&&!!l.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=l.getTheme(t&&l.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=o(this.config);r(s,e),t&&r(s,t),this.updateStyle(s.style)}updateStyle(e){this.scrollXBar||this.addMany(this.scrollXBar=new t.Box,this.scrollYBar=new t.Box);const{scrollXBar:s,scrollYBar:i}=this;s.set(e),i.set(e),s.draggable="x",i.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:o,targetWorldBounds:r,viewportBounds:n,contentBounds:l}=this,h=e.__layout,{overflow:a}=e.__,{childrenRenderBounds:c}=h,{boxBounds:d,worldBoxBounds:g}=h,u=t&&o===a&&r.isSame(g),p=!h.scrollConfigChanged||(this.updateConfig(),h.scrollConfigChanged=!1),v=s.set(n).add(c);if(u&&p&&l.isSame(v))return;this.targetOverflow=a,n.set(d),r.set(g),l.set(v);const{scrollXBar:B,scrollYBar:f}=this,{size:m,endsMargin:y,minSize:E}=this.mergedConfig,{width:_,height:w}=n;this.contentRealX=l.x-e.scrollX,this.contentRealY=l.y-e.scrollY,this.ratioX=n.width/l.width,this.ratioY=n.height/l.height;const x=m+2*y+E;B.visible=i(l.width)>i(_)&&"y-scroll"!==a&&_>x,f.visible=i(l.height)>i(w)&&"x-scroll"!==a&&w>x,this.updateScrollBar()}updateScrollBar(){const{target:e,viewportBounds:s,contentBounds:i,ratioX:o,ratioY:r,scrollXBar:n,scrollYBar:l,scrollXBounds:h,scrollYBounds:a}=this;let{size:c,cornerRadius:d,endsMargin:g,sideMargin:u,minSize:p,scaleFixed:v,scrollType:B}=this.mergedConfig;const f=v?e.getClampRenderScale():1;if(g/=f,u/=f,c/=f,t.isUndefined(d)&&(d=c/2),n.visible){h.set(s).shrink([g,l.visible?c+u:g,u,g]);const t=this.scrollRatioX=h.width/i.width;n.set({x:h.x-i.x*t,y:h.maxY-c,width:Math.max(h.width*o,p),height:c,cornerRadius:d,dragBounds:h,hittable:"move"!==B})}if(l.visible){a.set(s).shrink([g,u,n.visible?c+u:g,g]);const t=this.scrollRatioY=a.height/i.height;l.set({x:a.maxX-c,y:a.y-i.y*t,width:c,height:Math.max(a.height*r,p),cornerRadius:d,dragBounds:a,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,t.LeafHelper.updateAllMatrix(this),t.BranchHelper.updateBounds(this),t.LeafHelper.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(e){if(!this.canUse)return;this.onEnter();const{scrollType:s,stopDefault:i}=this.mergedConfig;if("drag"===s)return;const{viewportBounds:o,contentBounds:r,scrollXBar:n,scrollYBar:l}=this;if(n.visible||l.visible){const s=e.getInnerMove(this.target);let h;t.DragBoundsHelper.getValidMove(r,o,"inner",s,!0),s.x&&n.visible&&(this.target.scrollX+=s.x,h=!0),s.y&&l.visible&&(this.target.scrollY+=s.y,h=!0),(h||i)&&e.stop(),i&&e.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},t.Plugin.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:e,scrollYBar:s,target:i}=this;this.__eventIds=[e.on_(t.DragEvent.DRAG,this.onDrag,this),e.on_(t.DragEvent.END,this.onDragEnd,this),s.on_(t.DragEvent.DRAG,this.onDrag,this),s.on_(t.DragEvent.END,this.onDragEnd,this),i.on_(t.PointerEvent.ENTER,this.onEnter,this),i.on_(t.PointerEvent.LEAVE,this.onLeave,this),i.on_(t.MoveEvent.BEFORE_MOVE,this.onMove,this),i.on_(t.MoveEvent.END,this.onMoveEnd,this),i.on_(t.BoundsEvent.WORLD,this.onResize,this),i.on_(t.ChildEvent.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}n.themeMap={};const l=n;t.Plugin.add("scroller");const h=t.Box.prototype;t.Box.addAttr("scrollConfig",void 0,function(e){return t.decorateLeafAttr(e,e=>t.attr({set(s){if(this.__setAttr(e,s)){this.__layout.scrollConfigChanged=!0,t.doBoundsType(this)}}}))}),h.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new n(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},n.registerTheme("light",{style:{fill:"black"}}),n.registerTheme("dark",{style:{fill:"white"}}),exports.Scroller=n;
2
2
  //# sourceMappingURL=scroller.min.cjs.map
@@ -1 +1 @@
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
+ {"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', strokeScaleFixed: '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","strokeScaleFixed","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,2 +1,2 @@
1
- this.LeaferIN=this.LeaferIN||{},this.LeaferIN.scroller=function(t,e){"use strict";const s={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeWidthFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},i=new e.Bounds,{float:o}=e.MathHelper,{clone:r,assign:n}=e.DataHelper;class l extends e.Group{get canUse(){return this.target.hasScroller}constructor(t){super(),this.targetWorldBounds=new e.Bounds,this.viewportBounds=new e.Bounds,this.contentBounds=new e.Bounds,this.scrollXBounds=new e.Bounds,this.scrollYBounds=new e.Bounds,this.target=t,this.config=r(s),this.updateConfig(),this.__listenEvents(),t.waitLeafer(()=>{this.parent=t,this.__bindLeafer(t.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){h.themeMap[t]=e}static getTheme(t){return t&&h.themeMap[t]}static hasTheme(t){return t&&!!h.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=h.getTheme(t&&h.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=r(this.config);n(s,e),t&&n(s,t),this.updateStyle(s.style)}updateStyle(t){this.scrollXBar||this.addMany(this.scrollXBar=new e.Box,this.scrollYBar=new e.Box);const{scrollXBar:s,scrollYBar:i}=this;s.set(t),i.set(t),s.draggable="x",i.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:s,targetWorldBounds:r,viewportBounds:n,contentBounds:l}=this,h=e.__layout,{overflow:a}=e.__,{childrenRenderBounds:d}=h,{boxBounds:c,worldBoxBounds:g}=h,u=t&&s===a&&r.isSame(g),p=!h.scrollConfigChanged||(this.updateConfig(),h.scrollConfigChanged=!1),v=i.set(n).add(d);if(u&&p&&l.isSame(v))return;this.targetOverflow=a,n.set(c),r.set(g),l.set(v);const{scrollXBar:B,scrollYBar:f}=this,{size:m,endsMargin:y,minSize:E}=this.mergedConfig,{width:_,height:w}=n;this.contentRealX=l.x-e.scrollX,this.contentRealY=l.y-e.scrollY,this.ratioX=n.width/l.width,this.ratioY=n.height/l.height;const x=m+2*y+E;B.visible=o(l.width)>o(_)&&"y-scroll"!==a&&_>x,f.visible=o(l.height)>o(w)&&"x-scroll"!==a&&w>x,this.updateScrollBar()}updateScrollBar(){const{target:t,viewportBounds:s,contentBounds:i,ratioX:o,ratioY:r,scrollXBar:n,scrollYBar:l,scrollXBounds:h,scrollYBounds:a}=this;let{size:d,cornerRadius:c,endsMargin:g,sideMargin:u,minSize:p,scaleFixed:v,scrollType:B}=this.mergedConfig;const f=v?t.getClampRenderScale():1;if(g/=f,u/=f,d/=f,e.isUndefined(c)&&(c=d/2),n.visible){h.set(s).shrink([g,l.visible?d+u:g,u,g]);const t=this.scrollRatioX=h.width/i.width;n.set({x:h.x-i.x*t,y:h.maxY-d,width:Math.max(h.width*o,p),height:d,cornerRadius:c,dragBounds:h,hittable:"move"!==B})}if(l.visible){a.set(s).shrink([g,u,n.visible?d+u:g,g]);const t=this.scrollRatioY=a.height/i.height;l.set({x:a.maxX-d,y:a.y-i.y*t,width:d,height:Math.max(a.height*r,p),cornerRadius:c,dragBounds:a,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,e.LeafHelper.updateAllMatrix(this),e.BranchHelper.updateBounds(this),e.LeafHelper.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(t){if(!this.canUse)return;this.onEnter();const{scrollType:s,stopDefault:i}=this.mergedConfig;if("drag"===s)return;const{viewportBounds:o,contentBounds:r,scrollXBar:n,scrollYBar:l}=this;if(n.visible||l.visible){const s=t.getInnerMove(this.target);let h;e.DragBoundsHelper.getValidMove(r,o,"inner",s,!0),s.x&&n.visible&&(this.target.scrollX+=s.x,h=!0),s.y&&l.visible&&(this.target.scrollY+=s.y,h=!0),(h||i)&&t.stop(),i&&t.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},e.Plugin.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:t,scrollYBar:s,target:i}=this;this.__eventIds=[t.on_(e.DragEvent.DRAG,this.onDrag,this),t.on_(e.DragEvent.END,this.onDragEnd,this),s.on_(e.DragEvent.DRAG,this.onDrag,this),s.on_(e.DragEvent.END,this.onDragEnd,this),i.on_(e.PointerEvent.ENTER,this.onEnter,this),i.on_(e.PointerEvent.LEAVE,this.onLeave,this),i.on_(e.MoveEvent.BEFORE_MOVE,this.onMove,this),i.on_(e.MoveEvent.END,this.onMoveEnd,this),i.on_(e.BoundsEvent.WORLD,this.onResize,this),i.on_(e.ChildEvent.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}l.themeMap={};const h=l;e.Plugin.add("scroller");const a=e.Box.prototype;return e.Box.addAttr("scrollConfig",void 0,function(t){return e.decorateLeafAttr(t,t=>e.attr({set(s){if(this.__setAttr(t,s)){this.__layout.scrollConfigChanged=!0,e.doBoundsType(this)}}}))}),a.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new l(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},l.registerTheme("light",{style:{fill:"black"}}),l.registerTheme("dark",{style:{fill:"white"}}),t.Scroller=l,t}({},LeaferUI);
1
+ this.LeaferIN=this.LeaferIN||{},this.LeaferIN.scroller=function(t,e){"use strict";const s={theme:"light",style:{dragBoundsType:"outer",strokeAlign:"center",strokeScaleFixed:"zoom-in",width:6,height:6,opacity:.5,cornerRadius:3,hoverStyle:{opacity:.6},pressStyle:{opacity:.66}},size:6,endsMargin:2,sideMargin:2,minSize:10,scaleFixed:"zoom-in",scrollType:"both",hideOnActionEnd:"hover"},i=new e.Bounds,{float:o}=e.MathHelper,{clone:r,assign:n}=e.DataHelper;class l extends e.Group{get canUse(){return this.target.hasScroller}constructor(t){super(),this.targetWorldBounds=new e.Bounds,this.viewportBounds=new e.Bounds,this.contentBounds=new e.Bounds,this.scrollXBounds=new e.Bounds,this.scrollYBounds=new e.Bounds,this.target=t,this.config=r(s),this.updateConfig(),this.__listenEvents(),t.waitLeafer(()=>{this.parent=t,this.__bindLeafer(t.leafer)}),this.mergedConfig.hideOnActionEnd&&(this.opacity=0)}static registerTheme(t,e){h.themeMap[t]=e}static getTheme(t){return t&&h.themeMap[t]}static hasTheme(t){return t&&!!h.themeMap[t]}updateConfig(){const{scrollConfig:t}=this.target,e=h.getTheme(t&&h.hasTheme(t.theme)&&t.theme||this.config.theme),s=this.mergedConfig=r(this.config);n(s,e),t&&n(s,t),this.updateStyle(s.style)}updateStyle(t){this.scrollXBar||this.addMany(this.scrollXBar=new e.Box,this.scrollYBar=new e.Box);const{scrollXBar:s,scrollYBar:i}=this;s.set(t),i.set(t),s.draggable="x",i.draggable="y"}update(t=!0){if(this.dragScrolling)return;const{target:e,targetOverflow:s,targetWorldBounds:r,viewportBounds:n,contentBounds:l}=this,h=e.__layout,{overflow:a}=e.__,{childrenRenderBounds:c}=h,{boxBounds:d,worldBoxBounds:g}=h,u=t&&s===a&&r.isSame(g),p=!h.scrollConfigChanged||(this.updateConfig(),h.scrollConfigChanged=!1),v=i.set(n).add(c);if(u&&p&&l.isSame(v))return;this.targetOverflow=a,n.set(d),r.set(g),l.set(v);const{scrollXBar:B,scrollYBar:f}=this,{size:m,endsMargin:y,minSize:E}=this.mergedConfig,{width:_,height:w}=n;this.contentRealX=l.x-e.scrollX,this.contentRealY=l.y-e.scrollY,this.ratioX=n.width/l.width,this.ratioY=n.height/l.height;const x=m+2*y+E;B.visible=o(l.width)>o(_)&&"y-scroll"!==a&&_>x,f.visible=o(l.height)>o(w)&&"x-scroll"!==a&&w>x,this.updateScrollBar()}updateScrollBar(){const{target:t,viewportBounds:s,contentBounds:i,ratioX:o,ratioY:r,scrollXBar:n,scrollYBar:l,scrollXBounds:h,scrollYBounds:a}=this;let{size:c,cornerRadius:d,endsMargin:g,sideMargin:u,minSize:p,scaleFixed:v,scrollType:B}=this.mergedConfig;const f=v?t.getClampRenderScale():1;if(g/=f,u/=f,c/=f,e.isUndefined(d)&&(d=c/2),n.visible){h.set(s).shrink([g,l.visible?c+u:g,u,g]);const t=this.scrollRatioX=h.width/i.width;n.set({x:h.x-i.x*t,y:h.maxY-c,width:Math.max(h.width*o,p),height:c,cornerRadius:d,dragBounds:h,hittable:"move"!==B})}if(l.visible){a.set(s).shrink([g,u,n.visible?c+u:g,g]);const t=this.scrollRatioY=a.height/i.height;l.set({x:a.maxX-c,y:a.y-i.y*t,width:c,height:Math.max(a.height*r,p),cornerRadius:d,dragBounds:a,hittable:"move"!==B})}this.x=-this.target.scrollX,this.y=-this.target.scrollY,e.LeafHelper.updateAllMatrix(this),e.BranchHelper.updateBounds(this),e.LeafHelper.updateAllChange(this)}onDrag(t){if("move"===this.mergedConfig.scrollType)return;this.dragScrolling=!0;const{scrollXBar:e,scrollYBar:s,target:i,scrollXBounds:o,scrollYBounds:r}=this;t.current===e?i.scrollX=-((e.x-o.x)/this.scrollRatioX+this.contentRealX):i.scrollY=-((s.y-r.y)/this.scrollRatioY+this.contentRealY)}onDragEnd(){"move"!==this.mergedConfig.scrollType&&(this.dragScrolling=!1)}onMove(t){if(!this.canUse)return;this.onEnter();const{scrollType:s,stopDefault:i}=this.mergedConfig;if("drag"===s)return;const{viewportBounds:o,contentBounds:r,scrollXBar:n,scrollYBar:l}=this;if(n.visible||l.visible){const s=t.getInnerMove(this.target);let h;e.DragBoundsHelper.getValidMove(r,o,"inner",s,!0),s.x&&n.visible&&(this.target.scrollX+=s.x,h=!0),s.y&&l.visible&&(this.target.scrollY+=s.y,h=!0),(h||i)&&t.stop(),i&&t.stopDefault()}}onMoveEnd(t){this.canUse&&(this.target.hit(t)||this.onLeave())}onEnter(){this.canUse&&(clearTimeout(this.hideTimer),this.killAnimate(),this.opacity=1)}onLeave(){this.canUse&&(clearTimeout(this.hideTimer),this.mergedConfig.hideOnActionEnd&&(this.hideTimer=setTimeout(()=>{this.set({opacity:0},e.Plugin.has("animate"))},600)))}onResize(){this.canUse&&this.update()}__listenEvents(){const{scrollXBar:t,scrollYBar:s,target:i}=this;this.__eventIds=[t.on_(e.DragEvent.DRAG,this.onDrag,this),t.on_(e.DragEvent.END,this.onDragEnd,this),s.on_(e.DragEvent.DRAG,this.onDrag,this),s.on_(e.DragEvent.END,this.onDragEnd,this),i.on_(e.PointerEvent.ENTER,this.onEnter,this),i.on_(e.PointerEvent.LEAVE,this.onLeave,this),i.on_(e.MoveEvent.BEFORE_MOVE,this.onMove,this),i.on_(e.MoveEvent.END,this.onMoveEnd,this),i.on_(e.BoundsEvent.WORLD,this.onResize,this),i.on_(e.ChildEvent.DESTROY,this.destroy,this)]}__removeListenEvents(){this.off_(this.__eventIds)}destroy(){if(!this.destroyed){this.__removeListenEvents();const{target:t}=this;t.scroller=t.topChildren=t.hasScroller=void 0,this.target=this.config=null,super.destroy()}}}l.themeMap={};const h=l;e.Plugin.add("scroller");const a=e.Box.prototype;return e.Box.addAttr("scrollConfig",void 0,function(t){return e.decorateLeafAttr(t,t=>e.attr({set(s){if(this.__setAttr(t,s)){this.__layout.scrollConfigChanged=!0,e.doBoundsType(this)}}}))}),a.__checkScroll=function(t){t&&this.isOverflow?(this.scroller||(this.scroller=new l(this),this.topChildren||(this.topChildren=[]),this.topChildren.push(this.scroller)),this.hasScroller=!0):this.hasScroller&&!this.scroller.dragScrolling&&(this.hasScroller=void 0,this.scroller.update())},l.registerTheme("light",{style:{fill:"black"}}),l.registerTheme("dark",{style:{fill:"white"}}),t.Scroller=l,t}({},LeaferUI);
2
2
  //# sourceMappingURL=scroller.min.js.map
@@ -1 +1 @@
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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"}
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', strokeScaleFixed: '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","strokeScaleFixed","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": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "@leafer-in/scroller",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -34,8 +34,8 @@
34
34
  "leaferjs"
35
35
  ],
36
36
  "peerDependencies": {
37
- "@leafer-ui/core": "^2.0.2",
38
- "@leafer-ui/interface": "^2.0.2",
39
- "@leafer-in/interface": "^2.0.2"
37
+ "@leafer-ui/core": "^2.0.4",
38
+ "@leafer-ui/interface": "^2.0.4",
39
+ "@leafer-in/interface": "^2.0.4"
40
40
  }
41
41
  }
package/src/config.ts CHANGED
@@ -3,7 +3,7 @@ import { IScrollConfig } from '@leafer-ui/interface'
3
3
 
4
4
  export const config: IScrollConfig = {
5
5
  theme: 'light',
6
- 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 } },
6
+ style: { dragBoundsType: 'outer', strokeAlign: 'center', strokeScaleFixed: 'zoom-in', width: 6, height: 6, opacity: 0.5, cornerRadius: 3, hoverStyle: { opacity: 0.6 }, pressStyle: { opacity: 0.66 } },
7
7
  size: 6,
8
8
  endsMargin: 2,
9
9
  sideMargin: 2,