@tarojs/components-advanced 4.1.4-beta.2 → 4.1.4-beta.21

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.
Files changed (37) hide show
  1. package/dist/components/virtual-list/dom-helpers.js.map +1 -1
  2. package/dist/components/virtual-list/index.d.ts +5 -5
  3. package/dist/components/virtual-list/index.js.map +1 -1
  4. package/dist/components/virtual-list/list-set.js.map +1 -1
  5. package/dist/components/virtual-list/preset.js.map +1 -1
  6. package/dist/components/virtual-list/react/index.js.map +1 -1
  7. package/dist/components/virtual-list/react/list.js.map +1 -1
  8. package/dist/components/virtual-list/react/validate.js.map +1 -1
  9. package/dist/components/virtual-list/react/wrapper.js.map +1 -1
  10. package/dist/components/virtual-list/utils.js.map +1 -1
  11. package/dist/components/virtual-list/vue/list.js.map +1 -1
  12. package/dist/components/virtual-waterfall/index.js.map +1 -1
  13. package/dist/components/virtual-waterfall/list-map.js.map +1 -1
  14. package/dist/components/virtual-waterfall/preset.js.map +1 -1
  15. package/dist/components/virtual-waterfall/react/index.js.map +1 -1
  16. package/dist/components/virtual-waterfall/react/waterfall.js.map +1 -1
  17. package/dist/components/virtual-waterfall/react/wrapper.js.map +1 -1
  18. package/dist/components/virtual-waterfall/vue/waterfall.js.map +1 -1
  19. package/dist/components/water-flow/flow-item.js.map +1 -1
  20. package/dist/components/water-flow/flow-section.js +2 -2
  21. package/dist/components/water-flow/flow-section.js.map +1 -1
  22. package/dist/components/water-flow/node.js.map +1 -1
  23. package/dist/components/water-flow/root.d.ts +1 -1
  24. package/dist/components/water-flow/root.js +11 -23
  25. package/dist/components/water-flow/root.js.map +1 -1
  26. package/dist/components/water-flow/section.d.ts +2 -0
  27. package/dist/components/water-flow/section.js +28 -21
  28. package/dist/components/water-flow/section.js.map +1 -1
  29. package/dist/components/water-flow/stateful-event-bus.js.map +1 -1
  30. package/dist/components/water-flow/use-observed-attr.js.map +1 -1
  31. package/dist/components/water-flow/utils.js.map +1 -1
  32. package/dist/components/water-flow/water-flow.js +22 -9
  33. package/dist/components/water-flow/water-flow.js.map +1 -1
  34. package/dist/utils/dom.js.map +1 -1
  35. package/dist/utils/math.js.map +1 -1
  36. package/dist/utils/vue-render.js.map +1 -1
  37. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"waterfall.js","sources":["../../../../src/components/virtual-waterfall/vue/waterfall.ts"],"sourcesContent":["import { isNumber } from '@tarojs/shared'\nimport classNames from 'classnames'\nimport memoizeOne from 'memoize-one'\nimport { defineComponent } from 'vue'\n\nimport { cancelTimeout, convertNumber2PX, defaultItemKey, getRectSizeSync, getScrollViewContextNode, omit, requestTimeout } from '../../../utils'\nimport render from '../../../utils/vue-render'\nimport { IS_SCROLLING_DEBOUNCE_INTERVAL } from '../constants'\nimport Preset, { type IProps } from '../preset'\n\nexport default defineComponent({\n props: {\n id: String,\n height: {\n type: [String, Number],\n required: true\n },\n width: {\n type: [String, Number],\n required: true\n },\n column: Number,\n columnWidth: Number,\n item: {\n required: true\n },\n itemCount: {\n type: Number,\n required: true\n },\n itemData: {\n type: Array,\n required: true\n },\n itemKey: Function,\n itemSize: {\n type: [Number, Function],\n required: true\n },\n unlimitedSize: {\n type: Boolean,\n default: false\n },\n queryPrefix: {\n type: String,\n default: ''\n },\n position: {\n type: String,\n default: 'absolute'\n },\n initialScrollOffset: {\n type: Number,\n default: 0\n },\n overscanDistance: {\n type: Number,\n default: 50\n },\n placeholderCount: {\n type: Number,\n default: 0\n },\n useIsScrolling: {\n type: Boolean,\n default: false\n },\n enhanced: {\n type: Boolean,\n default: true\n },\n shouldResetStyleCacheOnItemSizeChange: {\n type: Boolean,\n default: true\n },\n outerElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-scroll-view-core' : 'scroll-view'\n },\n innerElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-view-core' : 'view'\n },\n itemElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-view-core' : 'view'\n },\n outerTagName: String,\n innerTagName: String,\n itemTagName: String,\n outerRef: String,\n onScrollNative: Function,\n onItemsRendered: Function,\n },\n data () {\n const preset = new Preset(this.$props as IProps, this.refresh as TFunc)\n const id = this.$props.id || preset.id\n preset.updateWrapper(id)\n\n return {\n itemMap: preset.itemMap,\n preset,\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.$props.initialScrollOffset === 'number'\n ? this.$props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n resetIsScrollingTimeoutId: null,\n refreshCount: 0\n }\n },\n methods: {\n refresh () {\n this.refreshCount = this.refreshCount + 1\n },\n scrollTo (scrollOffset = 0, enhanced = this.preset.enhanced) {\n scrollOffset = Math.max(0, scrollOffset)\n if (this.scrollOffset === scrollOffset) return\n\n if (enhanced) {\n const option: any = {\n animated: true,\n duration: 300,\n }\n option.top = scrollOffset\n return getScrollViewContextNode(`${this.$props.queryPrefix}#${this.preset.id}`).then((node: any) => node.scrollTo(option))\n }\n\n this.scrollDirection = this.scrollOffset < scrollOffset ? 'forward' : 'backward'\n this.scrollOffset = scrollOffset\n this.scrollUpdateWasRequested = true\n\n this.$nextTick(this._resetIsScrollingDebounced)\n },\n\n scrollToItem (index: number, align = 'auto', enhanced = this.preset.enhanced) {\n const { itemCount } = this.$props\n const { scrollOffset } = this.$data\n\n index = Math.max(0, Math.min(index, itemCount - 1))\n\n this.scrollTo(\n this.itemMap.getOffsetForIndexAndAlignment(\n index,\n align,\n scrollOffset\n ),\n enhanced,\n )\n },\n\n _callOnItemsRendered: memoizeOne(function (overscanStartIndex, overscanStopIndex, startIndex, stopIndex) {\n return this.$props.onItemsRendered({\n overscanStartIndex,\n overscanStopIndex,\n startIndex,\n stopIndex\n })\n }),\n\n _callOnScroll: memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested, detail) {\n this.$emit('scroll', {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n detail\n })\n }),\n\n _callPropsCallbacks () {\n if (typeof this.$props.onItemsRendered === 'function') {\n if (this.$props.itemCount > 0) {\n for (let columnIndex = 0; columnIndex < this.itemMap.columns; columnIndex++) {\n const [overscanStartIndex, overscanStopIndex] = this._getRangeToRender(columnIndex)\n this._callOnItemsRendered(columnIndex, overscanStartIndex, overscanStopIndex)\n }\n }\n }\n\n if (typeof this.$props.onScroll === 'function') {\n this._callOnScroll(\n this.scrollDirection,\n this.scrollOffset,\n this.scrollUpdateWasRequested,\n this.preset.field\n )\n }\n\n if (this.itemMap.isUnlimitedMode) {\n setTimeout(() => {\n for (let column = 0; column < this.itemMap.columns; column++) {\n const [startIndex, stopIndex] = this._getRangeToRender(column)\n for (let row = startIndex; row <= stopIndex; row++) {\n const itemIndex = this.itemMap.getItemIndexByPosition(column, row)\n if (itemIndex >= 0 && itemIndex < this.$props.itemCount) {\n const times = this.itemMap.compareSizeByPosition(column, row) ? 3 : 0\n getRectSizeSync(`${this.$props.queryPrefix}#${this.preset.id}-${itemIndex}`, 100, times).then(({ height }) => {\n if (typeof height === 'number' && height > 0 && !this.itemMap.compareSizeByPosition(column, row, height)) {\n this.itemMap.setSizeByPosition(column, row, height)\n }\n })\n }\n }\n }\n }, 0)\n }\n },\n\n _getRangeToRender (columnIndex = 0) {\n return this.itemMap.getRangeToRender(\n this.$data.scrollDirection,\n columnIndex,\n this.$data.scrollOffset,\n this.$data.isScrolling\n )\n },\n\n _outerRefSetter (ref) {\n const { outerRef } = this.$props\n this._outerRef = ref\n\n if (typeof outerRef === 'function') {\n outerRef(ref)\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('value')) {\n outerRef.value = ref\n }\n },\n\n _resetIsScrollingDebounced () {\n if (this.resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this.resetIsScrollingTimeoutId)\n }\n\n this.resetIsScrollingTimeoutId = requestTimeout(this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL)\n },\n\n _resetIsScrolling () {\n this.resetIsScrollingTimeoutId = null\n this.isScrolling = false\n this.$nextTick(() => {\n this.preset.resetCache()\n })\n },\n\n _onScroll (event) {\n const {\n scrollHeight = this.itemMap.maxColumnSize,\n scrollWidth,\n scrollTop,\n scrollLeft,\n } = event.currentTarget\n if (!isNumber(scrollHeight) || !isNumber(scrollWidth)) return\n const clientHeight = this.itemMap.wrapperHeight\n const clientWidth = this.itemMap.wrapperWidth\n if (this.$props.onScrollNative) {\n this.$props.onScrollNative(event)\n }\n const diffOffset = this.preset.field.scrollTop - scrollTop\n if (this.scrollOffset === scrollTop || this.preset.isShaking(diffOffset)) {\n return\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight))\n this.preset.field = {\n scrollHeight: this.itemMap.maxColumnSize,\n scrollWidth,\n scrollTop: scrollOffset,\n scrollLeft,\n clientHeight,\n clientWidth,\n diffOffset: this.preset.field.scrollTop - scrollOffset,\n }\n\n this.isScrolling = true\n this.scrollDirection = this.scrollOffset < scrollOffset ? 'forward' : 'backward'\n this.scrollOffset = scrollOffset\n this.scrollUpdateWasRequested = false\n this.$nextTick(this._resetIsScrollingDebounced)\n },\n\n getRenderItemNode (itemIndex: number, type: 'node' | 'placeholder' = 'node') {\n const { item, itemData, itemKey = defaultItemKey, useIsScrolling } = this.$props\n const { isScrolling } = this.$data\n const key = itemKey(itemIndex, itemData)\n\n const style = this.preset.getItemStyle(itemIndex)\n if (type === 'placeholder') {\n return render(this.preset.itemElement, {\n key,\n id: `${this.preset.id}-${itemIndex}-wrapper`,\n style: this.preset.isBrick ? style : { display: 'none' }\n })\n }\n\n return render(this.preset.itemElement, {\n key,\n id: `${this.preset.id}-${itemIndex}-wrapper`,\n style\n }, render(item, {\n id: `${this.preset.id}-${itemIndex}`,\n data: itemData,\n index: itemIndex,\n isScrolling: useIsScrolling ? isScrolling : undefined\n }))\n },\n\n getRenderColumnNode (columnIndex: number) {\n const columnProps: any = {\n key: `${this.preset.id}-column-${columnIndex}`,\n id: `${this.preset.id}-column-${columnIndex}`,\n style: {\n height: '100%',\n position: 'relative',\n width: convertNumber2PX(this.itemMap.columnWidth)\n }\n }\n\n const [startIndex, stopIndex] = this._getRangeToRender(columnIndex)\n const items = []\n if (this.preset.isRelative && !this.preset.isBrick) {\n const pre = convertNumber2PX(this.itemMap.getOffsetSizeCache(columnIndex, startIndex))\n items.push(\n render(this.preset.itemElement, {\n key: `${this.preset.id}-${columnIndex}-pre`,\n id: `${this.preset.id}-${columnIndex}-pre`,\n style: {\n height: pre,\n width: '100%'\n }\n })\n )\n }\n const placeholderCount = this.preset.placeholderCount\n const restCount = this.itemMap.getColumnLength(columnIndex) - stopIndex\n const prevPlaceholder = startIndex < placeholderCount ? startIndex : placeholderCount\n const postPlaceholder = restCount < placeholderCount ? restCount : placeholderCount\n const visibleItem = (stopIndex + postPlaceholder) * this.itemMap.columns + columnIndex\n this.itemMap.updateItem(visibleItem)\n for (let row = 0; row < stopIndex + postPlaceholder; row++) {\n const itemIndex = this.itemMap.getItemIndexByPosition(columnIndex, row)\n if (itemIndex >= 0 && itemIndex < this.$props.itemCount) {\n if (!this.preset.isBrick) {\n if (row < startIndex - prevPlaceholder) {\n row = startIndex - prevPlaceholder\n continue\n }\n }\n\n if (row < startIndex || row > stopIndex) {\n items.push(this.getRenderItemNode(itemIndex, 'placeholder'))\n } else {\n items.push(this.getRenderItemNode(itemIndex))\n }\n }\n }\n return render(this.preset.innerElement, columnProps, items)\n },\n\n getRenderExpandNodes (direction: 'top' | 'bottom') {\n const props: any = {\n id: `${this.preset.id}-${direction}`,\n style: {\n visibility: 'hidden',\n height: 100,\n width: '100%',\n marginTop: -100,\n zIndex: -1,\n }\n }\n return render(this.preset.innerElement, props)\n }\n },\n mounted () {\n const { initialScrollOffset } = this.$props\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = this._outerRef\n outerRef.scrollTop = initialScrollOffset\n }\n\n this._callPropsCallbacks()\n this.preset.boundaryDetection()\n },\n updated () {\n const { scrollOffset, scrollUpdateWasRequested } = this.$data\n\n this.preset.update(this.$props)\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n this._outerRef.scrollTop = scrollOffset\n }\n\n this._callPropsCallbacks()\n },\n\n beforeDestroy () {\n if (this.resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this.resetIsScrollingTimeoutId)\n }\n this.preset.dispose()\n },\n\n render () {\n const {\n height,\n width,\n enhanced = false\n } = omit(this.$props, [\n 'item', 'itemCount', 'itemData', 'itemKey', 'useIsScrolling',\n 'innerElementType', 'innerTagName', 'itemElementType', 'itemTagName',\n 'outerElementType', 'outerTagName', 'onScrollToLower', 'onScrollToUpper',\n 'upperThreshold', 'lowerThreshold',\n 'position'\n ])\n const {\n isScrolling,\n scrollOffset,\n scrollUpdateWasRequested\n } = this.$data\n\n const estimatedHeight = convertNumber2PX(this.itemMap.maxColumnSize)\n const outerElementProps: any = {\n id: this.preset.id,\n ref: this._outerRefSetter,\n enhanced,\n class: classNames(this.$attrs.class, 'virtual-waterfall'),\n style: {\n height: convertNumber2PX(height),\n width: convertNumber2PX(width),\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n },\n attrs: {\n scrollY: true,\n },\n on: {\n scroll: this._onScroll\n },\n }\n\n if (!enhanced) {\n outerElementProps.scrollTop = scrollUpdateWasRequested ? scrollOffset : this.preset.field.scrollTop\n }\n\n const columnNodes: React.ReactNode[] = []\n for (let i = 0; i < this.itemMap.columns; i++) {\n columnNodes.push(this.getRenderColumnNode(i))\n }\n\n return render(this.preset.outerElement, outerElementProps, [\n this.getRenderExpandNodes('top'),\n this.$slots.top?.(),\n render(this.preset.innerElement, {\n key: `${this.preset.id}-wrapper`,\n id: `${this.preset.id}-wrapper`,\n class: classNames(this.$attrs.class, 'virtual-waterfall-wrapper'),\n style: {\n display: 'flex',\n justifyContent: 'space-evenly',\n pointerEvents: isScrolling ? 'none' : 'auto',\n position: 'relative',\n height: estimatedHeight,\n width: '100%',\n },\n } as any, columnNodes),\n this.$slots.bottom?.(),\n this.getRenderExpandNodes('bottom'),\n ])\n }\n})\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAUA,gBAAe,eAAe,CAAC;AAC7B,IAAA,KAAK,EAAE;AACL,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACtB,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACtB,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,IAAI,EAAE;AACJ,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;AACxB,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,mBAAmB,EAAE;AACnB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,cAAc,EAAE;AACd,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,qCAAqC,EAAE;AACrC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,KAAK,GAAG,uBAAuB,GAAG;AAC1E,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,KAAK,GAAG,gBAAgB,GAAG;AACnE,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,KAAK,GAAG,gBAAgB,GAAG;AACnE,SAAA;AACD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,eAAe,EAAE,QAAQ;AAC1B,KAAA;IACD,IAAI,GAAA;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAgB,EAAE,IAAI,CAAC,OAAgB,CAAC;QACvE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE;AACtC,QAAA,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAExB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,eAAe,EAAE,SAAS;YAC1B,YAAY,EACV,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,KAAK;AACzC,kBAAE,IAAI,CAAC,MAAM,CAAC;AACd,kBAAE,CAAC;AACP,YAAA,wBAAwB,EAAE,KAAK;AAC/B,YAAA,yBAAyB,EAAE,IAAI;AAC/B,YAAA,YAAY,EAAE;SACf;KACF;AACD,IAAA,OAAO,EAAE;QACP,OAAO,GAAA;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;SAC1C;QACD,QAAQ,CAAE,YAAY,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;YACzD,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY;gBAAE;YAExC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,MAAM,GAAQ;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,QAAQ,EAAE,GAAG;iBACd;AACD,gBAAA,MAAM,CAAC,GAAG,GAAG,YAAY;AACzB,gBAAA,OAAO,wBAAwB,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAG5H,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU;AAChF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AAEpC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;SAChD;AAED,QAAA,YAAY,CAAE,KAAa,EAAE,KAAK,GAAG,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;AAC1E,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM;AACjC,YAAA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK;AAEnC,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;AAEnD,YAAA,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,OAAO,CAAC,6BAA6B,CACxC,KAAK,EACL,KAAK,EACL,YAAY,CACb,EACD,QAAQ,CACT;SACF;QAED,oBAAoB,EAAE,UAAU,CAAC,UAAU,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAA;AACrG,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gBACjC,kBAAkB;gBAClB,iBAAiB;gBACjB,UAAU;gBACV;AACD,aAAA,CAAC;AACJ,SAAC,CAAC;QAEF,aAAa,EAAE,UAAU,CAAC,UAAU,eAAe,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,EAAA;AACjG,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACnB,eAAe;gBACf,YAAY;gBACZ,wBAAwB;gBACxB;AACD,aAAA,CAAC;AACJ,SAAC,CAAC;QAEF,mBAAmB,GAAA;YACjB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;gBACrD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;AAC7B,oBAAA,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE;AAC3E,wBAAA,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;wBACnF,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;;;;YAKnF,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;gBAC9C,IAAI,CAAC,aAAa,CAChB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,wBAAwB,EAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAClB;;AAGH,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBAChC,UAAU,CAAC,MAAK;AACd,oBAAA,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;AAC5D,wBAAA,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9D,wBAAA,KAAK,IAAI,GAAG,GAAG,UAAU,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG,EAAE,EAAE;AAClD,4BAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC;AAClE,4BAAA,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gCACvD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACrE,gCAAA,eAAe,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAI;oCAC3G,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;wCACxG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;;AAEvD,iCAAC,CAAC;;;;iBAIT,EAAE,CAAC,CAAC;;SAER;QAED,iBAAiB,CAAE,WAAW,GAAG,CAAC,EAAA;YAChC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAClC,IAAI,CAAC,KAAK,CAAC,eAAe,EAC1B,WAAW,EACX,IAAI,CAAC,KAAK,CAAC,YAAY,EACvB,IAAI,CAAC,KAAK,CAAC,WAAW,CACvB;SACF;AAED,QAAA,eAAe,CAAE,GAAG,EAAA;AAClB,YAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AAEpB,YAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;gBAClC,QAAQ,CAAC,GAAG,CAAC;;AACR,iBAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AAC/F,gBAAA,QAAQ,CAAC,KAAK,GAAG,GAAG;;SAEvB;QAED,0BAA0B,GAAA;AACxB,YAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;AAC3C,gBAAA,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;;YAG/C,IAAI,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACxG;QAED,iBAAiB,GAAA;AACf,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC1B,aAAC,CAAC;SACH;AAED,QAAA,SAAS,CAAE,KAAK,EAAA;AACd,YAAA,MAAM,EACJ,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EACzC,WAAW,EACX,SAAS,EACT,UAAU,GACX,GAAG,KAAK,CAAC,aAAa;YACvB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE;AACvD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AAC/C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;AAC7C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;;YAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;AAC1D,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;gBACxE;;;AAIF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;AAClF,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG;AAClB,gBAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;gBACxC,WAAW;AACX,gBAAA,SAAS,EAAE,YAAY;gBACvB,UAAU;gBACV,YAAY;gBACZ,WAAW;gBACX,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY;aACvD;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU;AAChF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;SAChD;AAED,QAAA,iBAAiB,CAAE,SAAiB,EAAE,IAAA,GAA+B,MAAM,EAAA;AACzE,YAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM;AAChF,YAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;YAExC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;AACjD,YAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBACrC,GAAG;oBACH,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,QAAA,CAAU;AAC5C,oBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM;AACvD,iBAAA,CAAC;;AAGJ,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACrC,GAAG;gBACH,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,QAAA,CAAU;gBAC5C;aACD,EAAE,MAAM,CAAC,IAAI,EAAE;gBACd,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;AACpC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,cAAc,GAAG,WAAW,GAAG;AAC7C,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,mBAAmB,CAAE,WAAmB,EAAA;AACtC,YAAA,MAAM,WAAW,GAAQ;gBACvB,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE;gBAC9C,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE;AAC7C,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;AACjD;aACF;AAED,YAAA,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACnE,MAAM,KAAK,GAAG,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAClD,gBAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBACtF,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC9B,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,IAAA,CAAM;oBAC3C,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,IAAA,CAAM;AAC1C,oBAAA,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,GAAG;AACX,wBAAA,KAAK,EAAE;AACR;AACF,iBAAA,CAAC,CACH;;AAEH,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB;AACrD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,SAAS;AACvE,YAAA,MAAM,eAAe,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,gBAAgB;AACrF,YAAA,MAAM,eAAe,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,GAAG,gBAAgB;AACnF,YAAA,MAAM,WAAW,GAAG,CAAC,SAAS,GAAG,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,WAAW;AACtF,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;AACpC,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,eAAe,EAAE,GAAG,EAAE,EAAE;AAC1D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,WAAW,EAAE,GAAG,CAAC;AACvE,gBAAA,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACvD,oBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxB,wBAAA,IAAI,GAAG,GAAG,UAAU,GAAG,eAAe,EAAE;AACtC,4BAAA,GAAG,GAAG,UAAU,GAAG,eAAe;4BAClC;;;oBAIJ,IAAI,GAAG,GAAG,UAAU,IAAI,GAAG,GAAG,SAAS,EAAE;AACvC,wBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;yBACvD;wBACL,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;;;;AAInD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC;SAC5D;AAED,QAAA,oBAAoB,CAAE,SAA2B,EAAA;AAC/C,YAAA,MAAM,KAAK,GAAQ;gBACjB,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;AACpC,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,CAAC,GAAG;oBACf,MAAM,EAAE,CAAC,CAAC;AACX;aACF;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC;;AAEjD,KAAA;IACD,OAAO,GAAA;AACL,QAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,MAAM;QAE3C,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AACrE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/B,YAAA,QAAQ,CAAC,SAAS,GAAG,mBAAmB;;QAG1C,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;KAChC;IACD,OAAO,GAAA;QACL,MAAM,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAC,KAAK;QAE7D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,wBAAwB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AACtD,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;;QAGzC,IAAI,CAAC,mBAAmB,EAAE;KAC3B;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;AAC3C,YAAA,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAE/C,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;KACtB;IAED,MAAM,GAAA;;AACJ,QAAA,MAAM,EACJ,MAAM,EACN,KAAK,EACL,QAAQ,GAAG,KAAK,EACjB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB;AAC5D,YAAA,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa;AACpE,YAAA,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB;AACxE,YAAA,gBAAgB,EAAE,gBAAgB;YAClC;AACD,SAAA,CAAC;QACF,MAAM,EACJ,WAAW,EACX,YAAY,EACZ,wBAAwB,EACzB,GAAG,IAAI,CAAC,KAAK;QAEd,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AACpE,QAAA,MAAM,iBAAiB,GAAQ;AAC7B,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAClB,GAAG,EAAE,IAAI,CAAC,eAAe;YACzB,QAAQ;YACR,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC;AACzD,YAAA,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;AAChC,gBAAA,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;AAC9B,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,uBAAuB,EAAE,OAAO;AAChC,gBAAA,UAAU,EAAE,WAAW;AACxB,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA;AACD,YAAA,EAAE,EAAE;gBACF,MAAM,EAAE,IAAI,CAAC;AACd,aAAA;SACF;QAED,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,iBAAiB,CAAC,SAAS,GAAG,wBAAwB,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS;;QAGrG,MAAM,WAAW,GAAsB,EAAE;AACzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC7C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;;QAG/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE;AACzD,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAChC,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,MAAM,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC/B,gBAAA,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,QAAA,CAAU;AAChC,gBAAA,EAAE,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,QAAA,CAAU;gBAC/B,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC;AACjE,gBAAA,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,cAAc,EAAE,cAAc;oBAC9B,aAAa,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM;AAC5C,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,MAAM,EAAE,eAAe;AACvB,oBAAA,KAAK,EAAE,MAAM;AACd,iBAAA;AACK,aAAA,EAAE,WAAW,CAAC;AACtB,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,MAAM,EAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI;AACtB,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACpC,SAAA,CAAC;;AAEL,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"waterfall.js","sources":["../../../../src/components/virtual-waterfall/vue/waterfall.ts"],"sourcesContent":["import { isNumber } from '@tarojs/shared'\nimport classNames from 'classnames'\nimport memoizeOne from 'memoize-one'\nimport { defineComponent } from 'vue'\n\nimport { cancelTimeout, convertNumber2PX, defaultItemKey, getRectSizeSync, getScrollViewContextNode, omit, requestTimeout } from '../../../utils'\nimport render from '../../../utils/vue-render'\nimport { IS_SCROLLING_DEBOUNCE_INTERVAL } from '../constants'\nimport Preset, { type IProps } from '../preset'\n\nexport default defineComponent({\n props: {\n id: String,\n height: {\n type: [String, Number],\n required: true\n },\n width: {\n type: [String, Number],\n required: true\n },\n column: Number,\n columnWidth: Number,\n item: {\n required: true\n },\n itemCount: {\n type: Number,\n required: true\n },\n itemData: {\n type: Array,\n required: true\n },\n itemKey: Function,\n itemSize: {\n type: [Number, Function],\n required: true\n },\n unlimitedSize: {\n type: Boolean,\n default: false\n },\n queryPrefix: {\n type: String,\n default: ''\n },\n position: {\n type: String,\n default: 'absolute'\n },\n initialScrollOffset: {\n type: Number,\n default: 0\n },\n overscanDistance: {\n type: Number,\n default: 50\n },\n placeholderCount: {\n type: Number,\n default: 0\n },\n useIsScrolling: {\n type: Boolean,\n default: false\n },\n enhanced: {\n type: Boolean,\n default: true\n },\n shouldResetStyleCacheOnItemSizeChange: {\n type: Boolean,\n default: true\n },\n outerElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-scroll-view-core' : 'scroll-view'\n },\n innerElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-view-core' : 'view'\n },\n itemElementType: {\n type: String,\n default: process.env.TARO_PLATFORM === 'web' ? 'taro-view-core' : 'view'\n },\n outerTagName: String,\n innerTagName: String,\n itemTagName: String,\n outerRef: String,\n onScrollNative: Function,\n onItemsRendered: Function,\n },\n data () {\n const preset = new Preset(this.$props as IProps, this.refresh as TFunc)\n const id = this.$props.id || preset.id\n preset.updateWrapper(id)\n\n return {\n itemMap: preset.itemMap,\n preset,\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.$props.initialScrollOffset === 'number'\n ? this.$props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n resetIsScrollingTimeoutId: null,\n refreshCount: 0\n }\n },\n methods: {\n refresh () {\n this.refreshCount = this.refreshCount + 1\n },\n scrollTo (scrollOffset = 0, enhanced = this.preset.enhanced) {\n scrollOffset = Math.max(0, scrollOffset)\n if (this.scrollOffset === scrollOffset) return\n\n if (enhanced) {\n const option: any = {\n animated: true,\n duration: 300,\n }\n option.top = scrollOffset\n return getScrollViewContextNode(`${this.$props.queryPrefix}#${this.preset.id}`).then((node: any) => node.scrollTo(option))\n }\n\n this.scrollDirection = this.scrollOffset < scrollOffset ? 'forward' : 'backward'\n this.scrollOffset = scrollOffset\n this.scrollUpdateWasRequested = true\n\n this.$nextTick(this._resetIsScrollingDebounced)\n },\n\n scrollToItem (index: number, align = 'auto', enhanced = this.preset.enhanced) {\n const { itemCount } = this.$props\n const { scrollOffset } = this.$data\n\n index = Math.max(0, Math.min(index, itemCount - 1))\n\n this.scrollTo(\n this.itemMap.getOffsetForIndexAndAlignment(\n index,\n align,\n scrollOffset\n ),\n enhanced,\n )\n },\n\n _callOnItemsRendered: memoizeOne(function (overscanStartIndex, overscanStopIndex, startIndex, stopIndex) {\n return this.$props.onItemsRendered({\n overscanStartIndex,\n overscanStopIndex,\n startIndex,\n stopIndex\n })\n }),\n\n _callOnScroll: memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested, detail) {\n this.$emit('scroll', {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n detail\n })\n }),\n\n _callPropsCallbacks () {\n if (typeof this.$props.onItemsRendered === 'function') {\n if (this.$props.itemCount > 0) {\n for (let columnIndex = 0; columnIndex < this.itemMap.columns; columnIndex++) {\n const [overscanStartIndex, overscanStopIndex] = this._getRangeToRender(columnIndex)\n this._callOnItemsRendered(columnIndex, overscanStartIndex, overscanStopIndex)\n }\n }\n }\n\n if (typeof this.$props.onScroll === 'function') {\n this._callOnScroll(\n this.scrollDirection,\n this.scrollOffset,\n this.scrollUpdateWasRequested,\n this.preset.field\n )\n }\n\n if (this.itemMap.isUnlimitedMode) {\n setTimeout(() => {\n for (let column = 0; column < this.itemMap.columns; column++) {\n const [startIndex, stopIndex] = this._getRangeToRender(column)\n for (let row = startIndex; row <= stopIndex; row++) {\n const itemIndex = this.itemMap.getItemIndexByPosition(column, row)\n if (itemIndex >= 0 && itemIndex < this.$props.itemCount) {\n const times = this.itemMap.compareSizeByPosition(column, row) ? 3 : 0\n getRectSizeSync(`${this.$props.queryPrefix}#${this.preset.id}-${itemIndex}`, 100, times).then(({ height }) => {\n if (typeof height === 'number' && height > 0 && !this.itemMap.compareSizeByPosition(column, row, height)) {\n this.itemMap.setSizeByPosition(column, row, height)\n }\n })\n }\n }\n }\n }, 0)\n }\n },\n\n _getRangeToRender (columnIndex = 0) {\n return this.itemMap.getRangeToRender(\n this.$data.scrollDirection,\n columnIndex,\n this.$data.scrollOffset,\n this.$data.isScrolling\n )\n },\n\n _outerRefSetter (ref) {\n const { outerRef } = this.$props\n this._outerRef = ref\n\n if (typeof outerRef === 'function') {\n outerRef(ref)\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('value')) {\n outerRef.value = ref\n }\n },\n\n _resetIsScrollingDebounced () {\n if (this.resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this.resetIsScrollingTimeoutId)\n }\n\n this.resetIsScrollingTimeoutId = requestTimeout(this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL)\n },\n\n _resetIsScrolling () {\n this.resetIsScrollingTimeoutId = null\n this.isScrolling = false\n this.$nextTick(() => {\n this.preset.resetCache()\n })\n },\n\n _onScroll (event) {\n const {\n scrollHeight = this.itemMap.maxColumnSize,\n scrollWidth,\n scrollTop,\n scrollLeft,\n } = event.currentTarget\n if (!isNumber(scrollHeight) || !isNumber(scrollWidth)) return\n const clientHeight = this.itemMap.wrapperHeight\n const clientWidth = this.itemMap.wrapperWidth\n if (this.$props.onScrollNative) {\n this.$props.onScrollNative(event)\n }\n const diffOffset = this.preset.field.scrollTop - scrollTop\n if (this.scrollOffset === scrollTop || this.preset.isShaking(diffOffset)) {\n return\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight))\n this.preset.field = {\n scrollHeight: this.itemMap.maxColumnSize,\n scrollWidth,\n scrollTop: scrollOffset,\n scrollLeft,\n clientHeight,\n clientWidth,\n diffOffset: this.preset.field.scrollTop - scrollOffset,\n }\n\n this.isScrolling = true\n this.scrollDirection = this.scrollOffset < scrollOffset ? 'forward' : 'backward'\n this.scrollOffset = scrollOffset\n this.scrollUpdateWasRequested = false\n this.$nextTick(this._resetIsScrollingDebounced)\n },\n\n getRenderItemNode (itemIndex: number, type: 'node' | 'placeholder' = 'node') {\n const { item, itemData, itemKey = defaultItemKey, useIsScrolling } = this.$props\n const { isScrolling } = this.$data\n const key = itemKey(itemIndex, itemData)\n\n const style = this.preset.getItemStyle(itemIndex)\n if (type === 'placeholder') {\n return render(this.preset.itemElement, {\n key,\n id: `${this.preset.id}-${itemIndex}-wrapper`,\n style: this.preset.isBrick ? style : { display: 'none' }\n })\n }\n\n return render(this.preset.itemElement, {\n key,\n id: `${this.preset.id}-${itemIndex}-wrapper`,\n style\n }, render(item, {\n id: `${this.preset.id}-${itemIndex}`,\n data: itemData,\n index: itemIndex,\n isScrolling: useIsScrolling ? isScrolling : undefined\n }))\n },\n\n getRenderColumnNode (columnIndex: number) {\n const columnProps: any = {\n key: `${this.preset.id}-column-${columnIndex}`,\n id: `${this.preset.id}-column-${columnIndex}`,\n style: {\n height: '100%',\n position: 'relative',\n width: convertNumber2PX(this.itemMap.columnWidth)\n }\n }\n\n const [startIndex, stopIndex] = this._getRangeToRender(columnIndex)\n const items = []\n if (this.preset.isRelative && !this.preset.isBrick) {\n const pre = convertNumber2PX(this.itemMap.getOffsetSizeCache(columnIndex, startIndex))\n items.push(\n render(this.preset.itemElement, {\n key: `${this.preset.id}-${columnIndex}-pre`,\n id: `${this.preset.id}-${columnIndex}-pre`,\n style: {\n height: pre,\n width: '100%'\n }\n })\n )\n }\n const placeholderCount = this.preset.placeholderCount\n const restCount = this.itemMap.getColumnLength(columnIndex) - stopIndex\n const prevPlaceholder = startIndex < placeholderCount ? startIndex : placeholderCount\n const postPlaceholder = restCount < placeholderCount ? restCount : placeholderCount\n const visibleItem = (stopIndex + postPlaceholder) * this.itemMap.columns + columnIndex\n this.itemMap.updateItem(visibleItem)\n for (let row = 0; row < stopIndex + postPlaceholder; row++) {\n const itemIndex = this.itemMap.getItemIndexByPosition(columnIndex, row)\n if (itemIndex >= 0 && itemIndex < this.$props.itemCount) {\n if (!this.preset.isBrick) {\n if (row < startIndex - prevPlaceholder) {\n row = startIndex - prevPlaceholder\n continue\n }\n }\n\n if (row < startIndex || row > stopIndex) {\n items.push(this.getRenderItemNode(itemIndex, 'placeholder'))\n } else {\n items.push(this.getRenderItemNode(itemIndex))\n }\n }\n }\n return render(this.preset.innerElement, columnProps, items)\n },\n\n getRenderExpandNodes (direction: 'top' | 'bottom') {\n const props: any = {\n id: `${this.preset.id}-${direction}`,\n style: {\n visibility: 'hidden',\n height: 100,\n width: '100%',\n marginTop: -100,\n zIndex: -1,\n }\n }\n return render(this.preset.innerElement, props)\n }\n },\n mounted () {\n const { initialScrollOffset } = this.$props\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = this._outerRef\n outerRef.scrollTop = initialScrollOffset\n }\n\n this._callPropsCallbacks()\n this.preset.boundaryDetection()\n },\n updated () {\n const { scrollOffset, scrollUpdateWasRequested } = this.$data\n\n this.preset.update(this.$props)\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n this._outerRef.scrollTop = scrollOffset\n }\n\n this._callPropsCallbacks()\n },\n\n beforeDestroy () {\n if (this.resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this.resetIsScrollingTimeoutId)\n }\n this.preset.dispose()\n },\n\n render () {\n const {\n height,\n width,\n enhanced = false\n } = omit(this.$props, [\n 'item', 'itemCount', 'itemData', 'itemKey', 'useIsScrolling',\n 'innerElementType', 'innerTagName', 'itemElementType', 'itemTagName',\n 'outerElementType', 'outerTagName', 'onScrollToLower', 'onScrollToUpper',\n 'upperThreshold', 'lowerThreshold',\n 'position'\n ])\n const {\n isScrolling,\n scrollOffset,\n scrollUpdateWasRequested\n } = this.$data\n\n const estimatedHeight = convertNumber2PX(this.itemMap.maxColumnSize)\n const outerElementProps: any = {\n id: this.preset.id,\n ref: this._outerRefSetter,\n enhanced,\n class: classNames(this.$attrs.class, 'virtual-waterfall'),\n style: {\n height: convertNumber2PX(height),\n width: convertNumber2PX(width),\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n },\n attrs: {\n scrollY: true,\n },\n on: {\n scroll: this._onScroll\n },\n }\n\n if (!enhanced) {\n outerElementProps.scrollTop = scrollUpdateWasRequested ? scrollOffset : this.preset.field.scrollTop\n }\n\n const columnNodes: React.ReactNode[] = []\n for (let i = 0; i < this.itemMap.columns; i++) {\n columnNodes.push(this.getRenderColumnNode(i))\n }\n\n return render(this.preset.outerElement, outerElementProps, [\n this.getRenderExpandNodes('top'),\n this.$slots.top?.(),\n render(this.preset.innerElement, {\n key: `${this.preset.id}-wrapper`,\n id: `${this.preset.id}-wrapper`,\n class: classNames(this.$attrs.class, 'virtual-waterfall-wrapper'),\n style: {\n display: 'flex',\n justifyContent: 'space-evenly',\n pointerEvents: isScrolling ? 'none' : 'auto',\n position: 'relative',\n height: estimatedHeight,\n width: '100%',\n },\n } as any, columnNodes),\n this.$slots.bottom?.(),\n this.getRenderExpandNodes('bottom'),\n ])\n }\n})\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flow-item.js","sources":["../../../src/components/water-flow/flow-item.ts"],"sourcesContent":["import { View } from '@tarojs/components'\nimport {\n type CSSProperties,\n type PropsWithChildren,\n createContext,\n createElement,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { Node, NodeEvents } from './node'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { isWeb } from './utils'\n\nimport type { FlowItemContainerProps } from './interface'\n\nconst FlowItemContext = createContext<{ node: Node }>(Object.create(null))\nexport const useFlowItemPositioner = () => {\n const nodeModel = useContext(FlowItemContext).node\n const width$ = useObservedAttr(nodeModel, 'width')\n const height$ = useObservedAttr(nodeModel, 'height')\n const top$ = useObservedAttr(nodeModel, 'top')\n const scrollTop$ = useObservedAttr(nodeModel, 'scrollTop')\n\n return {\n resize: useMemoizedFn(() => {\n if (!isWeb()) {\n nodeModel.pub(NodeEvents.Resize)\n }\n }),\n top: top$,\n scrollTop: scrollTop$,\n width: width$,\n height: height$,\n }\n}\n\nexport function FlowItemContainer({\n children,\n ...props\n}: PropsWithChildren<FlowItemContainerProps>) {\n const { node } = props\n const layouted$ = useObservedAttr(node, 'layouted')\n const top$ = useObservedAttr(node, 'top')\n const height$ = useObservedAttr(node, 'height')\n const refFlowItem = useRef<HTMLElement>()\n\n const itemStyle: CSSProperties = useMemo(() => {\n const baseStyle: CSSProperties = {\n width: '100%',\n minHeight: node.section.defaultSize,\n }\n if (!layouted$) {\n return baseStyle\n }\n Reflect.deleteProperty(baseStyle, 'minHeight')\n return {\n ...baseStyle,\n height: height$,\n transition: 'transform 20ms cubic-bezier(0.075, 0.82, 0.165, 1)',\n willChange: 'transform',\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translate3d(0px, ${top$}px, 0px)`,\n }\n }, [top$, layouted$, height$])\n\n useEffect(() => {\n let observer: ResizeObserver\n if (isWeb() && typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(() => {\n node.pub(NodeEvents.Resize)\n })\n observer.observe(refFlowItem.current!)\n }\n return () => {\n if (observer) {\n observer.disconnect()\n }\n }\n }, [node])\n\n useLayoutEffect(() => {\n node.measure()\n }, [node])\n\n return createElement(\n View,\n { style: itemStyle, key: node.id },\n createElement(\n View,\n { id: node.id, ref: refFlowItem },\n createElement(FlowItemContext.Provider, { value: { node } }, children)\n )\n )\n}\n\nexport function FlowItem(props: PropsWithChildren) {\n return props.children\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-item.js","sources":["../../../src/components/water-flow/flow-item.ts"],"sourcesContent":["import { View } from '@tarojs/components'\nimport {\n type CSSProperties,\n type PropsWithChildren,\n createContext,\n createElement,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n\nimport { Node, NodeEvents } from './node'\nimport { useMemoizedFn } from './use-memoized-fn'\nimport { useObservedAttr } from './use-observed-attr'\nimport { isWeb } from './utils'\n\nimport type { FlowItemContainerProps } from './interface'\n\nconst FlowItemContext = createContext<{ node: Node }>(Object.create(null))\nexport const useFlowItemPositioner = () => {\n const nodeModel = useContext(FlowItemContext).node\n const width$ = useObservedAttr(nodeModel, 'width')\n const height$ = useObservedAttr(nodeModel, 'height')\n const top$ = useObservedAttr(nodeModel, 'top')\n const scrollTop$ = useObservedAttr(nodeModel, 'scrollTop')\n\n return {\n resize: useMemoizedFn(() => {\n if (!isWeb()) {\n nodeModel.pub(NodeEvents.Resize)\n }\n }),\n top: top$,\n scrollTop: scrollTop$,\n width: width$,\n height: height$,\n }\n}\n\nexport function FlowItemContainer({\n children,\n ...props\n}: PropsWithChildren<FlowItemContainerProps>) {\n const { node } = props\n const layouted$ = useObservedAttr(node, 'layouted')\n const top$ = useObservedAttr(node, 'top')\n const height$ = useObservedAttr(node, 'height')\n const refFlowItem = useRef<HTMLElement>()\n\n const itemStyle: CSSProperties = useMemo(() => {\n const baseStyle: CSSProperties = {\n width: '100%',\n minHeight: node.section.defaultSize,\n }\n if (!layouted$) {\n return baseStyle\n }\n Reflect.deleteProperty(baseStyle, 'minHeight')\n return {\n ...baseStyle,\n height: height$,\n transition: 'transform 20ms cubic-bezier(0.075, 0.82, 0.165, 1)',\n willChange: 'transform',\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translate3d(0px, ${top$}px, 0px)`,\n }\n }, [top$, layouted$, height$])\n\n useEffect(() => {\n let observer: ResizeObserver\n if (isWeb() && typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(() => {\n node.pub(NodeEvents.Resize)\n })\n observer.observe(refFlowItem.current!)\n }\n return () => {\n if (observer) {\n observer.disconnect()\n }\n }\n }, [node])\n\n useLayoutEffect(() => {\n node.measure()\n }, [node])\n\n return createElement(\n View,\n { style: itemStyle, key: node.id },\n createElement(\n View,\n { id: node.id, ref: refFlowItem },\n createElement(FlowItemContext.Provider, { value: { node } }, children)\n )\n )\n}\n\nexport function FlowItem(props: PropsWithChildren) {\n return props.children\n}\n"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@ function FlowSection(_a) {
41
41
  const childNode = childNodes[node.childIndex];
42
42
  const columnProps = {
43
43
  node,
44
- key: `${id}-item-${node.childIndex}`,
44
+ key: node.id,
45
45
  };
46
46
  return createElement(FlowItemContainer, columnProps, childNode);
47
47
  }));
@@ -53,7 +53,7 @@ function FlowSection(_a) {
53
53
  const childNode = childNodes[node.childIndex];
54
54
  const columnProps = {
55
55
  node,
56
- key: `${id}-item-${node.childIndex}`,
56
+ key: node.id,
57
57
  };
58
58
  return createElement(FlowItemContainer, columnProps, childNode);
59
59
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"flow-section.js","sources":["../../../src/components/water-flow/flow-section.ts"],"sourcesContent":["import { View } from '@tarojs/components'\nimport {\n type CSSProperties,\n type PropsWithChildren,\n Children,\n createElement,\n useMemo,\n} from 'react'\n\nimport { FlowItemContainer } from './flow-item'\nimport { Section } from './section'\nimport { useObservedAttr } from './use-observed-attr'\n\nimport type { FlowSectionProps } from './interface'\n\nexport interface _FlowSectionProps extends FlowSectionProps {\n section: Section\n}\n\nexport function FlowSection({\n children,\n ...props\n}: PropsWithChildren<FlowSectionProps>) {\n const {\n id,\n className,\n style,\n section,\n rowGap = 0,\n columnGap = 0,\n } = props as _FlowSectionProps\n const layouted$ = useObservedAttr(section, 'layouted')\n const height$ = useObservedAttr(section, 'height')\n const renderRange$ = useObservedAttr(section, 'renderRange')\n const scrollTop$ = useObservedAttr(section, 'scrollTop')\n\n const sectionStyle: CSSProperties = useMemo(() => {\n const baseStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n height: height$,\n gap: columnGap,\n visibility: layouted$ ? 'visible' : 'hidden',\n ...style,\n }\n\n if (!layouted$) {\n return baseStyle\n }\n\n return {\n ...baseStyle,\n position: 'absolute',\n top: 0,\n transform: `translate3d(0px, ${scrollTop$}px, 0px)`,\n left: 0,\n }\n }, [height$, style, layouted$, scrollTop$, columnGap])\n\n const columns = useMemo(() => {\n const childNodes = Children.toArray(children)\n const columnStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n gap: rowGap,\n flex: 1,\n }\n /** 已经完成布局计算,使用虚拟滚动 */\n if (layouted$) {\n return renderRange$.map(([startIndex, endIndex], colIndex) => {\n const columnId = `col-${colIndex}`\n return createElement(\n View,\n {\n style: columnStyle,\n id: columnId,\n key: columnId,\n },\n section.columnMap[colIndex]\n .slice(startIndex, endIndex + 1)\n .map((node) => {\n const childNode = childNodes[node.childIndex]\n const columnProps: any = {\n node,\n key: `${id}-item-${node.childIndex}`,\n }\n return createElement(FlowItemContainer, columnProps, childNode)\n })\n )\n })\n }\n\n return section.columnMap.map((column, colIndex) => {\n const columnId = `col-${colIndex}`\n return createElement(\n View,\n { style: columnStyle, id: columnId, key: columnId },\n column.map((node) => {\n const childNode = childNodes[node.childIndex]\n const columnProps: any = {\n node,\n key: `${id}-item-${node.childIndex}`,\n }\n return createElement(FlowItemContainer, columnProps, childNode)\n })\n )\n })\n }, [children, layouted$, section.columnMap, renderRange$, id])\n\n return createElement(\n View,\n { style: sectionStyle, className, id: id ?? section.id },\n columns\n )\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-section.js","sources":["../../../src/components/water-flow/flow-section.ts"],"sourcesContent":["import { View } from '@tarojs/components'\nimport {\n type CSSProperties,\n type PropsWithChildren,\n Children,\n createElement,\n useMemo,\n} from 'react'\n\nimport { FlowItemContainer } from './flow-item'\nimport { Section } from './section'\nimport { useObservedAttr } from './use-observed-attr'\n\nimport type { FlowSectionProps } from './interface'\n\nexport interface _FlowSectionProps extends FlowSectionProps {\n section: Section\n}\n\nexport function FlowSection({\n children,\n ...props\n}: PropsWithChildren<FlowSectionProps>) {\n const {\n id,\n className,\n style,\n section,\n rowGap = 0,\n columnGap = 0,\n } = props as _FlowSectionProps\n const layouted$ = useObservedAttr(section, 'layouted')\n const height$ = useObservedAttr(section, 'height')\n const renderRange$ = useObservedAttr(section, 'renderRange')\n const scrollTop$ = useObservedAttr(section, 'scrollTop')\n\n const sectionStyle: CSSProperties = useMemo(() => {\n const baseStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n height: height$,\n gap: columnGap,\n visibility: layouted$ ? 'visible' : 'hidden',\n ...style,\n }\n\n if (!layouted$) {\n return baseStyle\n }\n\n return {\n ...baseStyle,\n position: 'absolute',\n top: 0,\n transform: `translate3d(0px, ${scrollTop$}px, 0px)`,\n left: 0,\n }\n }, [height$, style, layouted$, scrollTop$, columnGap])\n\n const columns = useMemo(() => {\n const childNodes = Children.toArray(children)\n const columnStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n gap: rowGap,\n flex: 1,\n }\n /** 已经完成布局计算,使用虚拟滚动 */\n if (layouted$) {\n return renderRange$.map(([startIndex, endIndex], colIndex) => {\n const columnId = `col-${colIndex}`\n return createElement(\n View,\n {\n style: columnStyle,\n id: columnId,\n key: columnId,\n },\n section.columnMap[colIndex]\n .slice(startIndex, endIndex + 1)\n .map((node) => {\n const childNode = childNodes[node.childIndex]\n const columnProps: any = {\n node,\n key: node.id,\n }\n return createElement(FlowItemContainer, columnProps, childNode)\n })\n )\n })\n }\n\n return section.columnMap.map((column, colIndex) => {\n const columnId = `col-${colIndex}`\n return createElement(\n View,\n { style: columnStyle, id: columnId, key: columnId },\n column.map((node) => {\n const childNode = childNodes[node.childIndex]\n const columnProps: any = {\n node,\n key: node.id,\n }\n return createElement(FlowItemContainer, columnProps, childNode)\n })\n )\n })\n }, [children, layouted$, section.columnMap, renderRange$, id])\n\n return createElement(\n View,\n { style: sectionStyle, className, id: id ?? section.id },\n columns\n )\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sources":["../../../src/components/water-flow/node.ts"],"sourcesContent":["import { getRectSizeSync } from '../../utils'\nimport { Root } from './root'\nimport { Section, SectionEvents } from './section'\nimport { StatefulEventBus } from './stateful-event-bus'\n\ninterface NodeProps {\n /**\n * 原始索引,即一维数组中的索引\n */\n childIndex: number\n /**\n * 在列里的顺序\n */\n order: number\n /**\n * 位于哪一列\n */\n col: number\n height: number\n}\n\ntype NodeState = {\n top: number\n width: number\n height: number\n layouted: boolean\n scrollTop: number\n};\n\nexport const NodeEvents = {\n Resize: Symbol.for('resize'),\n}\n\nexport class Node extends StatefulEventBus<NodeState> {\n id: string\n /**\n * 原始索引,即一维数组中的索引\n */\n childIndex: number\n /**\n * 在列里的顺序\n */\n order: number\n /**\n * 位于哪一列\n */\n col: number\n constructor(public root: Root, public section: Section, props: NodeProps) {\n const { height, childIndex, order, col } = props\n super({\n top: 0,\n width: 0,\n height,\n scrollTop: 0,\n layouted: false,\n })\n const nodeId = `${root.id}-${section.id}-item-${childIndex}`\n Object.assign(this, { id: nodeId, childIndex, order, col })\n this.setupSubscriptions()\n }\n\n private setupSubscriptions() {\n this.sub('layouted', () => {\n /**\n * 如果当前分组所有的节点都完成布局计算,那么向分组推送 `AllNodesLayouted` 事件,section会在这个时机做一些计算\n */\n if (\n [...this.section.nodes.values()].every(\n (node) => node.getState().layouted\n )\n ) {\n this.section.notify(SectionEvents.AllNodesLayouted)\n }\n })\n\n /**\n * 如果节点的尺寸发生了变化(这通常出现在节点内容包含网络数据的情况下,比如图片,这时要求用户调用 useFlowItemPositioner 返回的 resize 方法通知数据模型去重新计算布局)\n *\n * - 更新当前节点所在列之后的所有节点的位置信息\n *\n * - 通知 section 更新布局\n */\n this.sub(NodeEvents.Resize, async () => {\n const { width, height } = this.getState()\n const newSize = await this.measure()\n if (newSize.height === height && newSize.width === width) {\n return\n }\n this.updateBehindNodesPosition()\n this.section.pub(SectionEvents.Resize, {\n node: this,\n newSize,\n originalSize: { width, height },\n })\n })\n }\n\n /**\n * 测量节点的尺寸信息\n */\n public async measure() {\n const { height, width } = await getRectSizeSync(`#${this.id}`, 100, 3)\n this.setStateBatch({\n width,\n height,\n layouted: true,\n })\n return { width, height }\n }\n\n /**\n * 更新节点所在列后面的节点的位置\n */\n updateBehindNodesPosition() {\n const currentColumn = this.section.columnMap[this.col]\n let start = this.order + 1\n\n if (start > currentColumn.length - 1) {\n return\n }\n for (; start < currentColumn.length; start++) {\n const node = currentColumn[start]\n const previousNode = currentColumn[start - 1]\n const {\n top: previousNodeTop,\n height: previousNodeHeight,\n scrollTop: previousNodeScrollTop,\n } = previousNode.getState()\n const rowGap = this.section.rowGap\n node.setStateBatch({\n top: previousNodeTop + previousNodeHeight + rowGap,\n scrollTop: previousNodeScrollTop + previousNodeHeight + rowGap,\n })\n }\n }\n\n /**\n * 节点是否可见\n */\n get isInRange() {\n const { scrollBoundaryStart, scrollBoundaryEnd } = this.root\n const { height: nodeHeight, scrollTop: nodeScrollTop } = this.getState()\n return (\n nodeScrollTop < scrollBoundaryEnd &&\n nodeScrollTop + nodeHeight > scrollBoundaryStart\n )\n }\n}\n"],"names":[],"mappings":";;;;;AA6BO,MAAM,UAAU,GAAG;AACxB,IAAA,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAGxB,MAAO,IAAK,SAAQ,gBAA2B,CAAA;AAcnD,IAAA,WAAA,CAAmB,IAAU,EAAS,OAAgB,EAAE,KAAgB,EAAA;QACtE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK;AAChD,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,KAAK,EAAE,CAAC;YACR,MAAM;AACN,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC;QARe,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAe,IAAA,CAAA,OAAO,GAAP,OAAO;AAS3C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAA,EAAI,OAAO,CAAC,EAAE,CAAA,MAAA,EAAS,UAAU,EAAE;AAC5D,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC3D,IAAI,CAAC,kBAAkB,EAAE;;IAGnB,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK;AACxB;;AAEG;YACH,IACE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CACpC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnC,EACD;gBACA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;;AAEvD,SAAC,CAAC;AAEF;;;;;;AAMG;QACH,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,YAAW;YACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;gBACxD;;YAEF,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,EAAE,IAAI;gBACV,OAAO;AACP,gBAAA,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,aAAA,CAAC;AACJ,SAAC,CAAC;;AAGJ;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC;YACjB,KAAK;YACL,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AACF,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;AAG1B;;AAEG;IACH,yBAAyB,GAAA;AACvB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;QAE1B,IAAI,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC;;QAEF,OAAO,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC5C,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;YACjC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7C,YAAA,MAAM,EACJ,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,qBAAqB,GACjC,GAAG,YAAY,CAAC,QAAQ,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YAClC,IAAI,CAAC,aAAa,CAAC;AACjB,gBAAA,GAAG,EAAE,eAAe,GAAG,kBAAkB,GAAG,MAAM;AAClD,gBAAA,SAAS,EAAE,qBAAqB,GAAG,kBAAkB,GAAG,MAAM;AAC/D,aAAA,CAAC;;;AAIN;;AAEG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,IAAI;AAC5D,QAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;QACxE,QACE,aAAa,GAAG,iBAAiB;AACjC,YAAA,aAAa,GAAG,UAAU,GAAG,mBAAmB;;AAGrD;;;;"}
1
+ {"version":3,"file":"node.js","sources":["../../../src/components/water-flow/node.ts"],"sourcesContent":["import { getRectSizeSync } from '../../utils'\nimport { Root } from './root'\nimport { Section, SectionEvents } from './section'\nimport { StatefulEventBus } from './stateful-event-bus'\n\ninterface NodeProps {\n /**\n * 原始索引,即一维数组中的索引\n */\n childIndex: number\n /**\n * 在列里的顺序\n */\n order: number\n /**\n * 位于哪一列\n */\n col: number\n height: number\n}\n\ntype NodeState = {\n top: number\n width: number\n height: number\n layouted: boolean\n scrollTop: number\n};\n\nexport const NodeEvents = {\n Resize: Symbol.for('resize'),\n}\n\nexport class Node extends StatefulEventBus<NodeState> {\n id: string\n /**\n * 原始索引,即一维数组中的索引\n */\n childIndex: number\n /**\n * 在列里的顺序\n */\n order: number\n /**\n * 位于哪一列\n */\n col: number\n constructor(public root: Root, public section: Section, props: NodeProps) {\n const { height, childIndex, order, col } = props\n super({\n top: 0,\n width: 0,\n height,\n scrollTop: 0,\n layouted: false,\n })\n const nodeId = `${root.id}-${section.id}-item-${childIndex}`\n Object.assign(this, { id: nodeId, childIndex, order, col })\n this.setupSubscriptions()\n }\n\n private setupSubscriptions() {\n this.sub('layouted', () => {\n /**\n * 如果当前分组所有的节点都完成布局计算,那么向分组推送 `AllNodesLayouted` 事件,section会在这个时机做一些计算\n */\n if (\n [...this.section.nodes.values()].every(\n (node) => node.getState().layouted\n )\n ) {\n this.section.notify(SectionEvents.AllNodesLayouted)\n }\n })\n\n /**\n * 如果节点的尺寸发生了变化(这通常出现在节点内容包含网络数据的情况下,比如图片,这时要求用户调用 useFlowItemPositioner 返回的 resize 方法通知数据模型去重新计算布局)\n *\n * - 更新当前节点所在列之后的所有节点的位置信息\n *\n * - 通知 section 更新布局\n */\n this.sub(NodeEvents.Resize, async () => {\n const { width, height } = this.getState()\n const newSize = await this.measure()\n if (newSize.height === height && newSize.width === width) {\n return\n }\n this.updateBehindNodesPosition()\n this.section.pub(SectionEvents.Resize, {\n node: this,\n newSize,\n originalSize: { width, height },\n })\n })\n }\n\n /**\n * 测量节点的尺寸信息\n */\n public async measure() {\n const { height, width } = await getRectSizeSync(`#${this.id}`, 100, 3)\n this.setStateBatch({\n width,\n height,\n layouted: true,\n })\n return { width, height }\n }\n\n /**\n * 更新节点所在列后面的节点的位置\n */\n updateBehindNodesPosition() {\n const currentColumn = this.section.columnMap[this.col]\n let start = this.order + 1\n\n if (start > currentColumn.length - 1) {\n return\n }\n for (; start < currentColumn.length; start++) {\n const node = currentColumn[start]\n const previousNode = currentColumn[start - 1]\n const {\n top: previousNodeTop,\n height: previousNodeHeight,\n scrollTop: previousNodeScrollTop,\n } = previousNode.getState()\n const rowGap = this.section.rowGap\n node.setStateBatch({\n top: previousNodeTop + previousNodeHeight + rowGap,\n scrollTop: previousNodeScrollTop + previousNodeHeight + rowGap,\n })\n }\n }\n\n /**\n * 节点是否可见\n */\n get isInRange() {\n const { scrollBoundaryStart, scrollBoundaryEnd } = this.root\n const { height: nodeHeight, scrollTop: nodeScrollTop } = this.getState()\n return (\n nodeScrollTop < scrollBoundaryEnd &&\n nodeScrollTop + nodeHeight > scrollBoundaryStart\n )\n }\n}\n"],"names":[],"mappings":"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"}
@@ -115,7 +115,7 @@ export declare class Root extends StatefulEventBus<RootState, Events> {
115
115
  /**
116
116
  * 计算滚动高度
117
117
  */
118
- private updateScrollHeight;
118
+ updateScrollHeight(): void;
119
119
  /**
120
120
  * 注册分组
121
121
  */
@@ -81,16 +81,17 @@ class Root extends StatefulEventBus {
81
81
  */
82
82
  this.sub('scrollOffset', () => {
83
83
  this.setStateIn('renderRange', this.getSectionRenderRange());
84
- this.updateScrollHeight();
85
84
  this.handleReachThreshold();
85
+ if (this.getState().scrollDirection === 'forward') {
86
+ this.updateScrollHeight();
87
+ }
86
88
  });
87
- const lowerThresholdScrollTopDisposer = this.sub('scrollOffset', () => {
89
+ this.sub('scrollOffset', () => {
88
90
  const sectionSize = this.sections.length;
89
91
  const lastSection = this.sections[sectionSize - 1];
90
92
  // 最后一个分组的每一列最后一行都已经完成了布局计算,那么这个时候的总高度应该是准确的
91
93
  if (lastSection.columnMap.every((column) => column[column.length - 1].getState().layouted)) {
92
94
  this.setLowerThresholdScrollTop();
93
- lowerThresholdScrollTopDisposer();
94
95
  }
95
96
  });
96
97
  this.sub(RootEvents.AllSectionsLayouted, () => {
@@ -120,10 +121,7 @@ class Root extends StatefulEventBus {
120
121
  }
121
122
  const section = this.sections[i];
122
123
  section.layoutedSignal.promise.then(() => {
123
- this.setStateIn('renderRange', [
124
- 0,
125
- i + 1 > sectionSize ? sectionSize - 1 : i + 1,
126
- ]);
124
+ this.setStateIn('renderRange', [0, i + 1 > sectionSize ? sectionSize - 1 : i + 1]);
127
125
  // 容器可视区域已经填满了,没必要再继续
128
126
  if (section.getState().scrollTop > this.getState().containerSize.height) {
129
127
  this.pub(RootEvents.InitialRenderCompleted, section);
@@ -171,8 +169,7 @@ class Root extends StatefulEventBus {
171
169
  // 扫描当前列的每一行
172
170
  loopItem: for (let j = 0; j < columnSize; j++) {
173
171
  colTracker.accCount += 1;
174
- colTracker.accHeight +=
175
- column[j].getState().height + (j === 0 ? 0 : section.rowGap);
172
+ colTracker.accHeight += column[j].getState().height + (j === 0 ? 0 : section.rowGap);
176
173
  if (colTracker.accCount >= this.upperThresholdCount) {
177
174
  break loopItem;
178
175
  }
@@ -193,14 +190,13 @@ class Root extends StatefulEventBus {
193
190
  */
194
191
  setLowerThresholdScrollTop() {
195
192
  if (this.lowerThresholdCount === 0) {
196
- this.lowerThresholdScrollTop =
197
- this.getState().scrollHeight - this.getState().containerSize.height;
193
+ this.lowerThresholdScrollTop = this.getState().scrollHeight - this.getState().containerSize.height;
198
194
  return 0;
199
195
  }
200
196
  const sectionSize = this.sections.length;
201
197
  const tracker = Array.from({ length: sectionSize }, () => new Map());
202
198
  // 从最后一个分组开始计算
203
- loopSeciton: for (let i = sectionSize - 1; i > 0; i--) {
199
+ loopSeciton: for (let i = sectionSize - 1; i >= 0; i--) {
204
200
  const section = this.sections[i];
205
201
  const sectionTracker = tracker[i];
206
202
  const columnMap = section.columnMap;
@@ -280,10 +276,7 @@ class Root extends StatefulEventBus {
280
276
  const length = this.sections.length;
281
277
  if (length === 0)
282
278
  return [];
283
- const range = Array.from({ length }, () => [
284
- 0,
285
- this.sections[0].maxColumnHeight,
286
- ]);
279
+ const range = Array.from({ length }, () => [0, this.sections[0].maxColumnHeight]);
287
280
  for (let i = 1; i < length; i++) {
288
281
  const previous = range[i - 1];
289
282
  range[i] = [previous[1], previous[1] + this.sections[i].maxColumnHeight];
@@ -347,13 +340,8 @@ class Root extends StatefulEventBus {
347
340
  const overscanBackward = result[0] - backwardDistance;
348
341
  const overscanForward = result[1] + forwardDistance;
349
342
  result[0] = overscanBackward < 0 ? 0 : overscanBackward;
350
- result[1] =
351
- overscanForward > this.sections.length
352
- ? this.sections.length - 1
353
- : overscanForward;
354
- return isSameRenderRange(result, this.getState().renderRange)
355
- ? this.getState().renderRange
356
- : result;
343
+ result[1] = overscanForward > this.sections.length ? this.sections.length - 1 : overscanForward;
344
+ return isSameRenderRange(result, this.getState().renderRange) ? this.getState().renderRange : result;
357
345
  }
358
346
  /**
359
347
  * 计算预渲染的分组个数
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sources":["../../../src/components/water-flow/root.ts"],"sourcesContent":["/* eslint-disable no-labels */\nimport { nextTick } from '@tarojs/taro'\n\nimport { getRectSizeSync } from '../../utils'\nimport { Node } from './node'\nimport { Section } from './section'\nimport { StatefulEventBus } from './stateful-event-bus'\nimport { getSysInfo, isSameRenderRange } from './utils'\n\nimport type { BaseProps, ScrollDirection, Size, WaterFlowProps } from './interface'\n\nexport type RootProps = Pick<\nWaterFlowProps,\n'cacheCount' | 'lowerThresholdCount' | 'upperThresholdCount'\n> &\nRequired<Pick<BaseProps, 'id'>>;\n\nconst { windowHeight, windowWidth } = getSysInfo()\n\ntype RootState = {\n /** 是否在滚动中 */\n isScrolling: boolean\n /** 滚动偏移量 */\n scrollOffset: number\n /**\n * 滚动方向\n *\n * - forward 向下滚动\n *\n * - backward 向上滚动\n */\n scrollDirection: ScrollDirection\n /** 滚动高度 */\n scrollHeight: number\n /** 容器的尺寸信息 */\n containerSize: Size\n /** 渲染的分组区间范围 */\n renderRange: [number, number]\n};\n\nexport const RootEvents = {\n ReachUpperThreshold: Symbol.for('ReachUpperThreshold'),\n ReachLowerThreshold: Symbol.for('ReachLowerThreshold'),\n Resize: Symbol.for('Resize'),\n AllSectionsLayouted: Symbol.for('AllSectionsLayouted'),\n InitialRenderCompleted: Symbol.for('InitialRenderCompleted'),\n}\n\ntype Events = keyof typeof RootEvents;\n\n/**\n * 数据模型继承自有状态的事件总线,便于在节点之间通信,以及通过 useSyncExternalStore 关联 React 视图\n */\nexport class Root extends StatefulEventBus<RootState, Events> {\n /**\n * 瀑布流根节点唯一标识\n */\n id: string\n /**\n * 分组映射表,便于查找分组\n */\n sectionMap: Map<string, Section> = new Map()\n /**\n * 节点映射表,便于查找节点\n */\n nodeMap: Map<string, Node> = new Map()\n /**\n * 分组列表,基于计算出的渲染的分组区间范围 sections.slice(start, end + 1) 进行渲染\n */\n sections: Section[] = []\n /**\n * 设置预加载的 Item 条数。\n */\n cacheCount = 1\n\n upperThresholdCount = 0\n\n lowerThresholdCount = 0\n\n /**\n * 触发滚动阈值对应的 scrollTop 值\n */\n upperThresholdScrollTop = -Infinity\n\n /**\n * 触发滚动阈值对应的 scrollTop 值\n */\n lowerThresholdScrollTop = Infinity\n\n constructor(props: RootProps) {\n const { id, cacheCount, lowerThresholdCount, upperThresholdCount } = props\n super({\n isScrolling: false,\n scrollOffset: 0,\n scrollDirection: 'forward',\n scrollHeight: windowHeight,\n renderRange: [0, 0],\n containerSize: {\n width: windowWidth,\n height: windowHeight,\n },\n })\n Object.assign(this, {\n id,\n cacheCount,\n lowerThresholdCount,\n upperThresholdCount,\n })\n this.setupSubscriptions()\n getRectSizeSync(`#${id}`, 100).then(\n ({ width = windowWidth, height = windowHeight }) => {\n this.setStateIn('containerSize', {\n width,\n height,\n })\n }\n )\n this.renderInitialLayout()\n }\n\n /**\n * 设置订阅事件\n */\n private setupSubscriptions() {\n /**\n * 滚动过程中计算渲染的分组区间\n * 滚动过程中分组的最大高度会发生更新,可以在这时计算滚动高度\n */\n this.sub('scrollOffset', () => {\n this.setStateIn('renderRange', this.getSectionRenderRange())\n this.updateScrollHeight()\n this.handleReachThreshold()\n })\n\n const lowerThresholdScrollTopDisposer = this.sub('scrollOffset', () => {\n const sectionSize = this.sections.length\n const lastSection = this.sections[sectionSize - 1]\n // 最后一个分组的每一列最后一行都已经完成了布局计算,那么这个时候的总高度应该是准确的\n if (\n lastSection.columnMap.every(\n (column) => column[column.length - 1].getState().layouted\n )\n ) {\n this.setLowerThresholdScrollTop()\n lowerThresholdScrollTopDisposer()\n }\n })\n\n this.sub(RootEvents.AllSectionsLayouted, () => {\n this.setUpperThresholdScrollTop()\n })\n\n this.sub(RootEvents.Resize, () => {\n this.setUpperThresholdScrollTop()\n this.setLowerThresholdScrollTop()\n })\n }\n\n /**\n * 渐进式渲染\n *\n * 因为初始没法知道每个分组的高度信息,不知道渲染边界,所以需要渐进式渲染\n *\n * 当目前的渲染批次的首个分组的scrollTop大于容器的高度,说明容器可视区域已经填满,没必要再往下渲染了\n *\n * @param [i=0] 从第几个分组开始渲染\n *\n */\n renderInitialLayout(i = 0) {\n nextTick(() => {\n const sectionSize = this.sections.length\n\n if (i >= sectionSize || i < 0) {\n this.pub(RootEvents.InitialRenderCompleted, null)\n return\n }\n const section = this.sections[i]\n section.layoutedSignal.promise.then(() => {\n this.setStateIn('renderRange', [\n 0,\n i + 1 > sectionSize ? sectionSize - 1 : i + 1,\n ])\n // 容器可视区域已经填满了,没必要再继续\n if (\n section.getState().scrollTop > this.getState().containerSize.height\n ) {\n this.pub(RootEvents.InitialRenderCompleted, section)\n return\n }\n\n this.renderInitialLayout(i + 1)\n })\n })\n }\n\n /**\n * 计算滚动阈值对应的 scrollTop 并设置 upperThresholdScrollTop\n * 当距顶部还有 upperThresholdCount 个 FlowItem 时的 scrollTop 值\n */\n private setUpperThresholdScrollTop() {\n // 如果没有设置阈值或阈值为0,则返回0\n if (!this.upperThresholdCount) {\n this.upperThresholdScrollTop = 0\n return 0\n }\n const sectionSize = this.sections.length\n const tracker = Array.from(\n { length: sectionSize },\n () => new Map<number, { accCount: number, accHeight: number }>() // Map<列, { 当前列累计个数,当前列累计高度 }>\n )\n\n // 从第一个分组开始扫描\n loopSeciton: for (let i = 0; i < sectionSize; i++) {\n const section = this.sections[i]\n const sectionTracker = tracker[i]\n const columnMap = section.columnMap\n // 扫描当前分组的每一列\n for (let col = 0; col < columnMap.length; col++) {\n const column = columnMap[col]\n const columnSize = column.length\n if (!sectionTracker.has(col)) {\n if (i === 0) {\n sectionTracker.set(col, { accCount: 0, accHeight: 0 })\n } else {\n const previousSectionTracker = tracker[i - 1]\n sectionTracker.set(col, {\n accCount: Math.max(\n ...[...previousSectionTracker.values()].map(\n (nodeTracker) => nodeTracker.accCount\n )\n ),\n accHeight: section.getState().scrollTop,\n })\n }\n }\n const colTracker = sectionTracker.get(col)!\n // 扫描当前列的每一行\n loopItem: for (let j = 0; j < columnSize; j++) {\n colTracker.accCount += 1\n colTracker.accHeight +=\n column[j].getState().height + (j === 0 ? 0 : section.rowGap)\n if (colTracker.accCount >= this.upperThresholdCount) {\n break loopItem\n }\n }\n }\n for (const [, colTracker] of sectionTracker) {\n if (colTracker.accCount >= this.upperThresholdCount) {\n this.upperThresholdScrollTop = colTracker.accHeight\n break loopSeciton\n }\n }\n }\n return this.upperThresholdScrollTop\n }\n\n /**\n * 计算滚动阈值对应的 scrollTop 并设置 lowerThresholdScrollTop\n * 当距底部还有 lowerThresholdCount 个 FlowItem 时的 scrollTop 值\n */\n private setLowerThresholdScrollTop() {\n if (this.lowerThresholdCount === 0) {\n this.lowerThresholdScrollTop =\n this.getState().scrollHeight - this.getState().containerSize.height\n return 0\n }\n const sectionSize = this.sections.length\n const tracker = Array.from(\n { length: sectionSize },\n () => new Map<number, { accCount: number, scrollTop: number }>()\n )\n // 从最后一个分组开始计算\n loopSeciton: for (let i = sectionSize - 1; i > 0; i--) {\n const section = this.sections[i]\n const sectionTracker = tracker[i]\n const columnMap = section.columnMap\n // 扫描当前分组的每一列\n for (let col = 0; col < columnMap.length; col++) {\n const column = columnMap[col]\n const columnSize = column.length\n if (!sectionTracker.has(col)) {\n if (i === sectionSize - 1) {\n sectionTracker.set(col, { accCount: 0, scrollTop: 0 })\n } else {\n const belowSectionTracker = tracker[i + 1]\n sectionTracker.set(col, {\n accCount: Math.max(\n ...[...belowSectionTracker.values()].map(\n (nodeTracker) => nodeTracker.accCount\n )\n ),\n scrollTop: 0,\n })\n }\n }\n const colTracker = sectionTracker.get(col)!\n // 从当前列的最后一行开始往前扫描\n loopItem: for (let j = columnSize - 1; j >= 0; j--) {\n colTracker.accCount += 1\n colTracker.scrollTop = column[j].getState().scrollTop\n if (colTracker.accCount >= this.lowerThresholdCount) {\n break loopItem\n }\n }\n }\n\n for (const [, colTracker] of sectionTracker) {\n if (colTracker.accCount >= this.lowerThresholdCount) {\n this.lowerThresholdScrollTop = colTracker.scrollTop\n break loopSeciton\n }\n }\n }\n\n return this.lowerThresholdScrollTop\n }\n\n /**\n * 处理滚动到阈值的情况\n * 检测当前滚动位置是否达到了上下阈值,并触发相应的事件\n */\n private handleReachThreshold() {\n const { upperThresholdScrollTop } = this\n const { scrollOffset, scrollDirection, containerSize } = this.getState()\n if (\n scrollDirection === 'backward' &&\n this.upperThresholdScrollTop !== -Infinity &&\n scrollOffset <= upperThresholdScrollTop\n ) {\n this.pub(RootEvents.ReachUpperThreshold)\n }\n if (\n scrollDirection === 'forward' &&\n this.lowerThresholdCount !== Infinity &&\n scrollOffset + containerSize.height >= this.lowerThresholdScrollTop\n ) {\n this.pub(RootEvents.ReachLowerThreshold)\n }\n }\n\n /**\n * 容器的滚动上边界\n */\n get scrollBoundaryStart() {\n return this.getState().scrollOffset\n }\n\n /**\n * 容器的滚动下边界\n */\n get scrollBoundaryEnd() {\n return this.scrollBoundaryStart + this.getStateIn('containerSize').height\n }\n\n /**\n * 计算每个section的底部位置\n *\n * sectionBottomRange = [ [section1.top, section1.bottom], [section2.top, section2.bottom], ..., [sectionN.top, sectionN.bottom] ]\n *\n * @returns [number,number][]\n */\n get sectionRange() {\n const length = this.sections.length\n if (length === 0) return []\n const range = Array.from({ length }, () => [\n 0,\n this.sections[0].maxColumnHeight,\n ])\n for (let i = 1; i < length; i++) {\n const previous = range[i - 1]\n range[i] = [previous[1], previous[1] + this.sections[i].maxColumnHeight]\n }\n\n return range\n }\n\n /**\n * 计算滚动高度\n */\n private updateScrollHeight() {\n this.setStateIn(\n 'scrollHeight',\n this.sectionRange[this.sectionRange.length - 1][1]\n )\n }\n\n /**\n * 注册分组\n */\n public registerSection(section: Section) {\n const { id, order } = section\n this.sectionMap.set(id, section)\n this.sections[order] = section\n }\n\n /**\n * 注册节点\n */\n public registerNode(node: Node) {\n this.nodeMap.set(node.id, node)\n }\n\n /**\n * 查找分组\n */\n public findSection(id: string) {\n return this.sectionMap.get(id)\n }\n\n /**\n * 查找节点\n */\n public findNode(id: string) {\n return this.nodeMap.get(id)\n }\n\n /**\n * 获取分组渲染区间\n */\n public getSectionRenderRange() {\n const result: [number, number] = [Infinity, -Infinity]\n\n for (let i = 0; i < this.sections.length; i++) {\n const section = this.sections[i]\n if (section.isInRange) {\n result[0] = Math.min(result[0], i)\n result[1] = Math.max(result[1], i)\n }\n }\n\n if (result[0] === Infinity) {\n result[0] = 0\n }\n\n if (result[1] === -Infinity) {\n result[1] = this.sections.length - 1\n }\n\n const scrollDirection = this.getState().scrollDirection\n const [backwardCache, forwardCache] = this.calcCacheSection(result)\n const backwardDistance = scrollDirection === 'backward' ? backwardCache : 0\n const forwardDistance = scrollDirection === 'forward' ? forwardCache : 0\n\n const overscanBackward = result[0] - backwardDistance\n const overscanForward = result[1] + forwardDistance\n\n result[0] = overscanBackward < 0 ? 0 : overscanBackward\n\n result[1] =\n overscanForward > this.sections.length\n ? this.sections.length - 1\n : overscanForward\n\n return isSameRenderRange(result, this.getState().renderRange)\n ? this.getState().renderRange\n : result\n }\n\n /**\n * 计算预渲染的分组个数\n */\n private calcCacheSection(renderRange: [number, number]) {\n const clientHeight = this.getState().containerSize.height\n const sectionCount = this.sectionMap.size\n let [start, end] = renderRange\n let cacheBackward = 1\n let cacheForward = 1\n\n if (start > 0) {\n let acc = this.sections[--start]?.getState().height ?? 0\n while (--start > 0) {\n const prevSection = this.sections[start]\n acc += prevSection.getState().height\n cacheBackward += 1\n if (acc >= clientHeight >>> 1) {\n break\n }\n }\n }\n\n if (end < sectionCount - 1) {\n let acc = this.sections[++end]?.getState().height ?? 0\n while (++end < sectionCount - 1) {\n const nextSection = this.sections[end]\n acc += nextSection.getState().height\n cacheForward += 1\n if (acc >= clientHeight >>> 1) {\n break\n }\n }\n }\n\n return [cacheBackward, cacheForward]\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root.js","sources":["../../../src/components/water-flow/root.ts"],"sourcesContent":["/* eslint-disable no-labels */\nimport { nextTick } from '@tarojs/taro'\n\nimport { getRectSizeSync } from '../../utils'\nimport { Node } from './node'\nimport { Section } from './section'\nimport { StatefulEventBus } from './stateful-event-bus'\nimport { getSysInfo, isSameRenderRange } from './utils'\n\nimport type { BaseProps, ScrollDirection, Size, WaterFlowProps } from './interface'\n\nexport type RootProps = Pick<WaterFlowProps, 'cacheCount' | 'lowerThresholdCount' | 'upperThresholdCount'> &\nRequired<Pick<BaseProps, 'id'>>\n\nconst { windowHeight, windowWidth } = getSysInfo()\n\ntype RootState = {\n /** 是否在滚动中 */\n isScrolling: boolean\n /** 滚动偏移量 */\n scrollOffset: number\n /**\n * 滚动方向\n *\n * - forward 向下滚动\n *\n * - backward 向上滚动\n */\n scrollDirection: ScrollDirection\n /** 滚动高度 */\n scrollHeight: number\n /** 容器的尺寸信息 */\n containerSize: Size\n /** 渲染的分组区间范围 */\n renderRange: [number, number]\n}\n\nexport const RootEvents = {\n ReachUpperThreshold: Symbol.for('ReachUpperThreshold'),\n ReachLowerThreshold: Symbol.for('ReachLowerThreshold'),\n Resize: Symbol.for('Resize'),\n AllSectionsLayouted: Symbol.for('AllSectionsLayouted'),\n InitialRenderCompleted: Symbol.for('InitialRenderCompleted'),\n}\n\ntype Events = keyof typeof RootEvents\n\n/**\n * 数据模型继承自有状态的事件总线,便于在节点之间通信,以及通过 useSyncExternalStore 关联 React 视图\n */\nexport class Root extends StatefulEventBus<RootState, Events> {\n /**\n * 瀑布流根节点唯一标识\n */\n id: string\n /**\n * 分组映射表,便于查找分组\n */\n sectionMap: Map<string, Section> = new Map()\n /**\n * 节点映射表,便于查找节点\n */\n nodeMap: Map<string, Node> = new Map()\n /**\n * 分组列表,基于计算出的渲染的分组区间范围 sections.slice(start, end + 1) 进行渲染\n */\n sections: Section[] = []\n /**\n * 设置预加载的 Item 条数。\n */\n cacheCount = 1\n\n upperThresholdCount = 0\n\n lowerThresholdCount = 0\n\n /**\n * 触发滚动阈值对应的 scrollTop 值\n */\n upperThresholdScrollTop = -Infinity\n\n /**\n * 触发滚动阈值对应的 scrollTop 值\n */\n lowerThresholdScrollTop = Infinity\n\n constructor(props: RootProps) {\n const { id, cacheCount, lowerThresholdCount, upperThresholdCount } = props\n super({\n isScrolling: false,\n scrollOffset: 0,\n scrollDirection: 'forward',\n scrollHeight: windowHeight,\n renderRange: [0, 0],\n containerSize: {\n width: windowWidth,\n height: windowHeight,\n },\n })\n Object.assign(this, {\n id,\n cacheCount,\n lowerThresholdCount,\n upperThresholdCount,\n })\n this.setupSubscriptions()\n getRectSizeSync(`#${id}`, 100).then(({ width = windowWidth, height = windowHeight }) => {\n this.setStateIn('containerSize', {\n width,\n height,\n })\n })\n this.renderInitialLayout()\n }\n\n /**\n * 设置订阅事件\n */\n private setupSubscriptions() {\n /**\n * 滚动过程中计算渲染的分组区间\n * 滚动过程中分组的最大高度会发生更新,可以在这时计算滚动高度\n */\n this.sub('scrollOffset', () => {\n this.setStateIn('renderRange', this.getSectionRenderRange())\n this.handleReachThreshold()\n if (this.getState().scrollDirection === 'forward') {\n this.updateScrollHeight()\n }\n })\n\n this.sub('scrollOffset', () => {\n const sectionSize = this.sections.length\n const lastSection = this.sections[sectionSize - 1]\n // 最后一个分组的每一列最后一行都已经完成了布局计算,那么这个时候的总高度应该是准确的\n if (lastSection.columnMap.every((column) => column[column.length - 1].getState().layouted)) {\n this.setLowerThresholdScrollTop()\n }\n })\n\n this.sub(RootEvents.AllSectionsLayouted, () => {\n this.setUpperThresholdScrollTop()\n })\n\n this.sub(RootEvents.Resize, () => {\n this.setUpperThresholdScrollTop()\n this.setLowerThresholdScrollTop()\n })\n }\n\n /**\n * 渐进式渲染\n *\n * 因为初始没法知道每个分组的高度信息,不知道渲染边界,所以需要渐进式渲染\n *\n * 当目前的渲染批次的首个分组的scrollTop大于容器的高度,说明容器可视区域已经填满,没必要再往下渲染了\n *\n * @param [i=0] 从第几个分组开始渲染\n *\n */\n renderInitialLayout(i = 0) {\n nextTick(() => {\n const sectionSize = this.sections.length\n\n if (i >= sectionSize || i < 0) {\n this.pub(RootEvents.InitialRenderCompleted, null)\n return\n }\n const section = this.sections[i]\n section.layoutedSignal.promise.then(() => {\n this.setStateIn('renderRange', [0, i + 1 > sectionSize ? sectionSize - 1 : i + 1])\n // 容器可视区域已经填满了,没必要再继续\n if (section.getState().scrollTop > this.getState().containerSize.height) {\n this.pub(RootEvents.InitialRenderCompleted, section)\n return\n }\n\n this.renderInitialLayout(i + 1)\n })\n })\n }\n\n /**\n * 计算滚动阈值对应的 scrollTop 并设置 upperThresholdScrollTop\n * 当距顶部还有 upperThresholdCount 个 FlowItem 时的 scrollTop 值\n */\n private setUpperThresholdScrollTop() {\n // 如果没有设置阈值或阈值为0,则返回0\n if (!this.upperThresholdCount) {\n this.upperThresholdScrollTop = 0\n return 0\n }\n const sectionSize = this.sections.length\n const tracker = Array.from(\n { length: sectionSize },\n () => new Map<number, { accCount: number, accHeight: number }>() // Map<列, { 当前列累计个数,当前列累计高度 }>\n )\n\n // 从第一个分组开始扫描\n loopSeciton: for (let i = 0; i < sectionSize; i++) {\n const section = this.sections[i]\n const sectionTracker = tracker[i]\n const columnMap = section.columnMap\n // 扫描当前分组的每一列\n for (let col = 0; col < columnMap.length; col++) {\n const column = columnMap[col]\n const columnSize = column.length\n if (!sectionTracker.has(col)) {\n if (i === 0) {\n sectionTracker.set(col, { accCount: 0, accHeight: 0 })\n } else {\n const previousSectionTracker = tracker[i - 1]\n sectionTracker.set(col, {\n accCount: Math.max(...[...previousSectionTracker.values()].map((nodeTracker) => nodeTracker.accCount)),\n accHeight: section.getState().scrollTop,\n })\n }\n }\n const colTracker = sectionTracker.get(col)!\n // 扫描当前列的每一行\n loopItem: for (let j = 0; j < columnSize; j++) {\n colTracker.accCount += 1\n colTracker.accHeight += column[j].getState().height + (j === 0 ? 0 : section.rowGap)\n if (colTracker.accCount >= this.upperThresholdCount) {\n break loopItem\n }\n }\n }\n for (const [, colTracker] of sectionTracker) {\n if (colTracker.accCount >= this.upperThresholdCount) {\n this.upperThresholdScrollTop = colTracker.accHeight\n break loopSeciton\n }\n }\n }\n return this.upperThresholdScrollTop\n }\n\n /**\n * 计算滚动阈值对应的 scrollTop 并设置 lowerThresholdScrollTop\n * 当距底部还有 lowerThresholdCount 个 FlowItem 时的 scrollTop 值\n */\n private setLowerThresholdScrollTop() {\n if (this.lowerThresholdCount === 0) {\n this.lowerThresholdScrollTop = this.getState().scrollHeight - this.getState().containerSize.height\n return 0\n }\n const sectionSize = this.sections.length\n const tracker = Array.from(\n { length: sectionSize },\n () => new Map<number, { accCount: number, scrollTop: number }>()\n )\n // 从最后一个分组开始计算\n loopSeciton: for (let i = sectionSize - 1; i >= 0; i--) {\n const section = this.sections[i]\n const sectionTracker = tracker[i]\n const columnMap = section.columnMap\n // 扫描当前分组的每一列\n for (let col = 0; col < columnMap.length; col++) {\n const column = columnMap[col]\n const columnSize = column.length\n if (!sectionTracker.has(col)) {\n if (i === sectionSize - 1) {\n sectionTracker.set(col, { accCount: 0, scrollTop: 0 })\n } else {\n const belowSectionTracker = tracker[i + 1]\n sectionTracker.set(col, {\n accCount: Math.max(...[...belowSectionTracker.values()].map((nodeTracker) => nodeTracker.accCount)),\n scrollTop: 0,\n })\n }\n }\n const colTracker = sectionTracker.get(col)!\n // 从当前列的最后一行开始往前扫描\n loopItem: for (let j = columnSize - 1; j >= 0; j--) {\n colTracker.accCount += 1\n colTracker.scrollTop = column[j].getState().scrollTop\n if (colTracker.accCount >= this.lowerThresholdCount) {\n break loopItem\n }\n }\n }\n\n for (const [, colTracker] of sectionTracker) {\n if (colTracker.accCount >= this.lowerThresholdCount) {\n this.lowerThresholdScrollTop = colTracker.scrollTop\n break loopSeciton\n }\n }\n }\n\n return this.lowerThresholdScrollTop\n }\n\n /**\n * 处理滚动到阈值的情况\n * 检测当前滚动位置是否达到了上下阈值,并触发相应的事件\n */\n private handleReachThreshold() {\n const { upperThresholdScrollTop } = this\n const { scrollOffset, scrollDirection, containerSize } = this.getState()\n if (\n scrollDirection === 'backward' &&\n this.upperThresholdScrollTop !== -Infinity &&\n scrollOffset <= upperThresholdScrollTop\n ) {\n this.pub(RootEvents.ReachUpperThreshold)\n }\n if (\n scrollDirection === 'forward' &&\n this.lowerThresholdCount !== Infinity &&\n scrollOffset + containerSize.height >= this.lowerThresholdScrollTop\n ) {\n this.pub(RootEvents.ReachLowerThreshold)\n }\n }\n\n /**\n * 容器的滚动上边界\n */\n get scrollBoundaryStart() {\n return this.getState().scrollOffset\n }\n\n /**\n * 容器的滚动下边界\n */\n get scrollBoundaryEnd() {\n return this.scrollBoundaryStart + this.getStateIn('containerSize').height\n }\n\n /**\n * 计算每个section的底部位置\n *\n * sectionBottomRange = [ [section1.top, section1.bottom], [section2.top, section2.bottom], ..., [sectionN.top, sectionN.bottom] ]\n *\n * @returns [number,number][]\n */\n get sectionRange() {\n const length = this.sections.length\n if (length === 0) return []\n const range = Array.from({ length }, () => [0, this.sections[0].maxColumnHeight])\n for (let i = 1; i < length; i++) {\n const previous = range[i - 1]\n range[i] = [previous[1], previous[1] + this.sections[i].maxColumnHeight]\n }\n\n return range\n }\n\n /**\n * 计算滚动高度\n */\n public updateScrollHeight() {\n this.setStateIn('scrollHeight', this.sectionRange[this.sectionRange.length - 1][1])\n }\n\n /**\n * 注册分组\n */\n public registerSection(section: Section) {\n const { id, order } = section\n this.sectionMap.set(id, section)\n this.sections[order] = section\n }\n\n /**\n * 注册节点\n */\n public registerNode(node: Node) {\n this.nodeMap.set(node.id, node)\n }\n\n /**\n * 查找分组\n */\n public findSection(id: string) {\n return this.sectionMap.get(id)\n }\n\n /**\n * 查找节点\n */\n public findNode(id: string) {\n return this.nodeMap.get(id)\n }\n\n /**\n * 获取分组渲染区间\n */\n public getSectionRenderRange() {\n const result: [number, number] = [Infinity, -Infinity]\n\n for (let i = 0; i < this.sections.length; i++) {\n const section = this.sections[i]\n if (section.isInRange) {\n result[0] = Math.min(result[0], i)\n result[1] = Math.max(result[1], i)\n }\n }\n\n if (result[0] === Infinity) {\n result[0] = 0\n }\n\n if (result[1] === -Infinity) {\n result[1] = this.sections.length - 1\n }\n\n const scrollDirection = this.getState().scrollDirection\n const [backwardCache, forwardCache] = this.calcCacheSection(result)\n const backwardDistance = scrollDirection === 'backward' ? backwardCache : 0\n const forwardDistance = scrollDirection === 'forward' ? forwardCache : 0\n\n const overscanBackward = result[0] - backwardDistance\n const overscanForward = result[1] + forwardDistance\n\n result[0] = overscanBackward < 0 ? 0 : overscanBackward\n\n result[1] = overscanForward > this.sections.length ? this.sections.length - 1 : overscanForward\n\n return isSameRenderRange(result, this.getState().renderRange) ? this.getState().renderRange : result\n }\n\n /**\n * 计算预渲染的分组个数\n */\n private calcCacheSection(renderRange: [number, number]) {\n const clientHeight = this.getState().containerSize.height\n const sectionCount = this.sectionMap.size\n let [start, end] = renderRange\n let cacheBackward = 1\n let cacheForward = 1\n\n if (start > 0) {\n let acc = this.sections[--start]?.getState().height ?? 0\n while (--start > 0) {\n const prevSection = this.sections[start]\n acc += prevSection.getState().height\n cacheBackward += 1\n if (acc >= clientHeight >>> 1) {\n break\n }\n }\n }\n\n if (end < sectionCount - 1) {\n let acc = this.sections[++end]?.getState().height ?? 0\n while (++end < sectionCount - 1) {\n const nextSection = this.sections[end]\n acc += nextSection.getState().height\n cacheForward += 1\n if (acc >= clientHeight >>> 1) {\n break\n }\n }\n }\n\n return [cacheBackward, cacheForward]\n }\n}\n"],"names":[],"mappings":"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"}
@@ -106,5 +106,7 @@ export declare class Section extends StatefulEventBus<SectionState> {
106
106
  * 计算当前分组内每列应该渲染的节点索引区间
107
107
  */
108
108
  getNodeRenderRange(): [number, number][];
109
+ pushNode(nodeIndex: number, col: number): void;
110
+ pushNodes(count: number): void;
109
111
  }
110
112
  export {};
@@ -2,7 +2,7 @@ import '../../utils/index.js';
2
2
  import { Node } from './node.js';
3
3
  import { RootEvents } from './root.js';
4
4
  import { StatefulEventBus } from './stateful-event-bus.js';
5
- import { createImperativePromise, getMatrixPosition, isSameRenderRange } from './utils.js';
5
+ import { createImperativePromise, isSameRenderRange, getMatrixPosition } from './utils.js';
6
6
  import { debounce } from '../../utils/lodash.js';
7
7
 
8
8
  const SectionEvents = {
@@ -97,8 +97,7 @@ class Section extends StatefulEventBus {
97
97
  get isInRange() {
98
98
  const { scrollBoundaryStart, scrollBoundaryEnd } = this.root;
99
99
  const { height: sectionHeight, scrollTop: sectionScrollTop } = this.getState();
100
- return (sectionScrollTop < scrollBoundaryEnd &&
101
- sectionScrollTop + sectionHeight > scrollBoundaryStart);
100
+ return sectionScrollTop <= scrollBoundaryEnd && sectionScrollTop + sectionHeight >= scrollBoundaryStart;
102
101
  }
103
102
  /**
104
103
  * 注册节点
@@ -114,15 +113,7 @@ class Section extends StatefulEventBus {
114
113
  initializeColumnMap() {
115
114
  const { count, col } = this;
116
115
  for (let i = 0; i < count; i++) {
117
- const { row: rowIndex, col: columnIndex } = getMatrixPosition(i, col);
118
- const node = new Node(this.root, this, {
119
- childIndex: i,
120
- order: rowIndex,
121
- col: columnIndex,
122
- height: this.defaultSize,
123
- });
124
- this.register(node);
125
- this.root.registerNode(node);
116
+ this.pushNode(i, col);
126
117
  }
127
118
  }
128
119
  /**
@@ -157,7 +148,7 @@ class Section extends StatefulEventBus {
157
148
  }
158
149
  else {
159
150
  const prevNode = column[i - 1];
160
- const { scrollTop: prevNodeScrollTop, height: prevNodeHeight, top: prevNodeTop, } = prevNode.getState();
151
+ const { scrollTop: prevNodeScrollTop, height: prevNodeHeight, top: prevNodeTop } = prevNode.getState();
161
152
  node.setStateBatch({
162
153
  scrollTop: prevNodeScrollTop + prevNodeHeight + this.rowGap,
163
154
  top: prevNodeHeight + prevNodeTop + this.rowGap,
@@ -177,9 +168,7 @@ class Section extends StatefulEventBus {
177
168
  * 计算当前分组的 scrollTop,即该分组之前的所有分组的最大列高度之和
178
169
  */
179
170
  calcScrollTop() {
180
- return this.root.sections
181
- .slice(0, this.order)
182
- .reduce((acc, section) => acc + section.maxColumnHeight, 0);
171
+ return this.root.sections.slice(0, this.order).reduce((acc, section) => acc + section.maxColumnHeight, 0);
183
172
  }
184
173
  /**
185
174
  * 计算当前分组内每列应该渲染的节点索引区间
@@ -213,12 +202,30 @@ class Section extends StatefulEventBus {
213
202
  const overscanBackward = result[i][0] - backwardDistance;
214
203
  const overscanForward = result[i][1] + forwardDistance;
215
204
  result[i][0] = overscanBackward < 0 ? 0 : overscanBackward;
216
- result[i][1] =
217
- overscanForward > column.length ? column.length - 1 : overscanForward;
205
+ result[i][1] = overscanForward > column.length ? column.length - 1 : overscanForward;
206
+ }
207
+ return isSameRenderRange(result, this.getState().renderRange) ? this.getState().renderRange : result;
208
+ }
209
+ pushNode(nodeIndex, col) {
210
+ const { row: rowIndex, col: columnIndex } = getMatrixPosition(nodeIndex, col);
211
+ const node = new Node(this.root, this, {
212
+ childIndex: nodeIndex,
213
+ order: rowIndex,
214
+ col: columnIndex,
215
+ height: this.defaultSize,
216
+ });
217
+ this.register(node);
218
+ this.root.registerNode(node);
219
+ }
220
+ pushNodes(count) {
221
+ const { count: originalCount, col } = this;
222
+ for (let i = originalCount; i < originalCount + count; i++) {
223
+ this.pushNode(i, col);
218
224
  }
219
- return isSameRenderRange(result, this.getState().renderRange)
220
- ? this.getState().renderRange
221
- : result;
225
+ this.count += count;
226
+ this.root.lowerThresholdScrollTop = Infinity;
227
+ this.updateNodes();
228
+ this.updateBehindSectionsPosition();
222
229
  }
223
230
  }
224
231