UNPKG

tdesign-vue-next

Version:
1 lines 27 kB
{"version":3,"file":"useAffix.mjs","sources":["../../../../components/table/hooks/useAffix.ts"],"sourcesContent":["import { debounce, isBoolean } from 'lodash-es';\nimport { computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { TdBaseTableProps } from '../type';\nimport { on, off } from '@tdesign/shared-utils';\nimport { AffixProps } from '../../affix';\n\n/**\n * 1. 表头吸顶(普通表头吸顶 和 虚拟滚动表头吸顶)\n * 2. 表尾吸底\n * 3. 底部滚动条吸底\n * 4. 分页器吸底\n */\nexport default function useAffix(props: TdBaseTableProps) {\n const tableContentRef = ref<HTMLDivElement>();\n // 吸顶表头\n const affixHeaderRef = ref<HTMLDivElement>();\n // 吸底表尾\n const affixFooterRef = ref<HTMLDivElement>();\n // 吸底滚动条\n const horizontalScrollbarRef = ref<HTMLDivElement>();\n // 吸底分页器\n const paginationRef = ref<HTMLDivElement>();\n // 当表格完全滚动消失在视野时,需要隐藏吸顶表头\n const showAffixHeader = ref(true);\n // 当表格完全滚动消失在视野时,需要隐藏吸底尾部\n const showAffixFooter = ref(true);\n // 当表格完全滚动消失在视野时,需要隐藏吸底分页器\n const showAffixPagination = ref(true);\n // 当鼠标按下拖动内容来滚动时,需要更新表头位置(Windows 按下鼠标横向滚动,滚动结束后,再松开鼠标)\n let isMousedown = false;\n let isMouseInScrollableArea = false;\n\n const isVirtualScroll = computed(\n () => props.scroll && props.scroll.type === 'virtual' && (props.scroll.threshold || 100) < props.data.length,\n );\n\n const isAffixed = computed(\n () => !!(props.headerAffixedTop || props.footerAffixedBottom || props.horizontalScrollAffixedBottom),\n );\n\n let lastScrollLeft = 0;\n const onHorizontalScroll = (scrollElement?: HTMLElement) => {\n if (!isAffixed.value && !isVirtualScroll.value) return;\n let target = scrollElement;\n if (!target && tableContentRef.value) {\n lastScrollLeft = 0;\n target = tableContentRef.value;\n }\n if (!target) return;\n const left = target.scrollLeft;\n // 如果 lastScrollLeft 等于 left,说明不是横向滚动,不需要更新横向滚动距离\n if (lastScrollLeft === left) return;\n lastScrollLeft = left;\n // 表格内容、吸顶表头、吸底表尾、吸底横向滚动更新\n const toUpdateScrollElement = [\n tableContentRef.value,\n affixHeaderRef.value,\n affixFooterRef.value,\n horizontalScrollbarRef.value,\n ];\n for (let i = 0, len = toUpdateScrollElement.length; i < len; i++) {\n if (toUpdateScrollElement[i] && scrollElement !== toUpdateScrollElement[i]) {\n toUpdateScrollElement[i].scrollLeft = left;\n }\n }\n };\n\n // 吸底的元素(footer、横向滚动条、分页器)是否显示\n const isAffixedBottomElementShow = (elementRect: DOMRect, tableRect: DOMRect, headerHeight: number) =>\n tableRect.top + headerHeight < elementRect.top && elementRect.top > elementRect.height;\n\n const getOffsetTop = (props: boolean | AffixProps) => {\n if (isBoolean(props)) return 0;\n return props.offsetTop || 0;\n };\n\n const updateAffixHeaderOrFooter = () => {\n if (!isAffixed.value && !isVirtualScroll.value && !tableContentRef.value) return;\n const pos = tableContentRef.value?.getBoundingClientRect();\n if (!pos) return;\n const headerRect = tableContentRef.value?.querySelector('thead')?.getBoundingClientRect();\n const headerHeight = headerRect?.height || 0;\n const footerRect = affixFooterRef.value?.getBoundingClientRect();\n if ((props.headerAffixedTop || isVirtualScroll.value) && affixHeaderRef.value) {\n const offsetTop = getOffsetTop(props.headerAffixProps || props.headerAffixedTop);\n const footerHeight = footerRect?.height || 0;\n let r = Math.abs(pos.top) < pos.height - headerHeight - offsetTop - footerHeight;\n // 如果是虚拟滚动的表头,只要表头在可视区域内,一律永久显示(虚拟滚动表头 和 吸顶表头可能同时存在)\n if (isVirtualScroll.value) {\n r = pos.top > -1 * headerRect.height;\n }\n showAffixHeader.value = r;\n }\n // 底部内容吸底 和 底部滚动条吸底,不可能同时存在,二选一即可\n if (props.footerAffixedBottom && affixFooterRef?.value) {\n showAffixFooter.value = isAffixedBottomElementShow(footerRect, pos, headerHeight);\n } else if (props.horizontalScrollAffixedBottom && horizontalScrollbarRef?.value) {\n const horizontalScrollbarRect = horizontalScrollbarRef.value.getBoundingClientRect();\n showAffixFooter.value = isAffixedBottomElementShow(horizontalScrollbarRect, pos, headerHeight);\n }\n if (props.paginationAffixedBottom && paginationRef.value) {\n const pageRect = paginationRef.value.getBoundingClientRect();\n showAffixPagination.value = isAffixedBottomElementShow(pageRect, pos, headerHeight);\n }\n };\n\n const onDocumentScroll = () => {\n updateAffixHeaderOrFooter();\n };\n\n const onFootScroll = () => {\n onHorizontalScroll(affixFooterRef.value);\n };\n\n const onHeaderScroll = () => {\n onHorizontalScroll(affixHeaderRef.value);\n };\n\n const horizontalScrollbarScroll = () => {\n onHorizontalScroll(horizontalScrollbarRef.value);\n };\n\n const onTableContentScroll = () => {\n onHorizontalScroll(tableContentRef.value);\n };\n\n const onFootMouseEnter = () => {\n on(affixFooterRef.value, 'scroll', onFootScroll);\n };\n\n const onFootMouseLeave = () => {\n off(affixFooterRef.value, 'scroll', onFootScroll);\n };\n\n const onHeaderMouseEnter = () => {\n on(affixHeaderRef.value, 'scroll', onHeaderScroll);\n onMouseEnterScrollableArea();\n };\n\n const onHeaderMouseLeave = () => {\n if (!isMousedown) off(affixHeaderRef.value, 'scroll', onHeaderScroll);\n onMouseLeaveScrollableArea();\n };\n\n const onScrollbarMouseEnter = () => {\n on(horizontalScrollbarRef.value, 'scroll', horizontalScrollbarScroll);\n };\n\n const onScrollbarMouseLeave = () => {\n off(horizontalScrollbarRef.value, 'scroll', horizontalScrollbarScroll);\n };\n\n const onTableContentMouseEnter = () => {\n on(tableContentRef.value, 'scroll', onTableContentScroll);\n onMouseEnterScrollableArea();\n };\n\n const onTableContentMouseLeave = () => {\n if (!isMousedown) off(tableContentRef.value, 'scroll', onTableContentScroll);\n onMouseLeaveScrollableArea();\n };\n\n const onMousedown = () => {\n isMousedown = true;\n };\n\n const onMouseup = () => {\n isMousedown = false;\n if (!isMouseInScrollableArea) {\n off(affixHeaderRef.value, 'scroll', onHeaderScroll);\n off(tableContentRef.value, 'scroll', onTableContentScroll);\n }\n };\n\n const onMouseEnterScrollableArea = () => {\n isMouseInScrollableArea = true;\n };\n\n const onMouseLeaveScrollableArea = () => {\n isMouseInScrollableArea = false;\n };\n\n // 记录激活中的 scroll,在新元素点击时要进行抢占\n const activatingTouchScrollListenerCleanups: Array<() => void> = [];\n const setupElementTouchScrollListener = (element: HTMLElement) => {\n // 思路来源 https://github.com/vueuse/vueuse/blob/main/packages/core/useScroll/index.ts\n // 兼容不支持 scrollend 但是又存在惯性滑动的场景,例如 safari\n // 200 毫秒这个默认值是 vueuse 的用法,后面有问题可以再重新考虑\n const debounceOffScrollListener = debounce((listener) => {\n off(element, 'scroll', listener);\n }, 200);\n\n function onElementTouchScroll() {\n onHorizontalScroll(element);\n debounceOffScrollListener(onElementTouchScroll);\n }\n function onElementTouchStart(e: UIEvent) {\n if (e.composedPath().includes(element)) {\n // 下一次 touch 清理所有的 scroll,不同于 pc 端的 enter,触碰打断是合理的\n activatingTouchScrollListenerCleanups.forEach((cleanup) => cleanup());\n activatingTouchScrollListenerCleanups.length = 0;\n // 即使是相同元素也重新绑定,因为 touch 必定带来滑动停止\n on(element, 'scroll', onElementTouchScroll);\n // 有可能触碰了一下,没触发 scroll,也销毁\n debounceOffScrollListener(onElementTouchScroll);\n activatingTouchScrollListenerCleanups.push(() => {\n off(element, 'scroll', onElementTouchScroll);\n });\n }\n }\n\n on(element, 'touchstart', onElementTouchStart);\n\n function removeElementTouchScrollListener() {\n off(element, 'touchstart', onElementTouchStart);\n }\n\n return {\n removeElementTouchScrollListener,\n };\n };\n\n // 清理所有 touch 相关的逻辑\n const elementTouchScrollCleanups: Array<() => void> = [];\n const cleanupElementTouchScroll = () => {\n elementTouchScrollCleanups.forEach((cleanup) => cleanup());\n elementTouchScrollCleanups.length = 0;\n };\n\n const removeHorizontalScrollListeners = () => {\n off(window, 'mousedown', onMousedown);\n off(window, 'mouseup', onMouseup);\n\n cleanupElementTouchScroll();\n if (affixHeaderRef.value) {\n off(affixHeaderRef.value, 'mouseenter', onHeaderMouseEnter);\n off(affixHeaderRef.value, 'mouseleave', onHeaderMouseLeave);\n }\n if (affixFooterRef.value) {\n off(affixFooterRef.value, 'mouseenter', onFootMouseEnter);\n off(affixFooterRef.value, 'mouseleave', onFootMouseLeave);\n }\n if (tableContentRef.value) {\n off(tableContentRef.value, 'mouseenter', onTableContentMouseEnter);\n off(tableContentRef.value, 'mouseleave', onTableContentMouseLeave);\n }\n if (horizontalScrollbarRef.value) {\n off(horizontalScrollbarRef.value, 'mouseenter', onScrollbarMouseEnter);\n off(horizontalScrollbarRef.value, 'mouseleave', onScrollbarMouseLeave);\n }\n };\n\n const addHorizontalScrollListeners = () => {\n on(window, 'mousedown', onMousedown);\n on(window, 'mouseup', onMouseup);\n\n removeHorizontalScrollListeners();\n if (affixHeaderRef.value) {\n on(affixHeaderRef.value, 'mouseenter', onHeaderMouseEnter);\n on(affixHeaderRef.value, 'mouseleave', onHeaderMouseLeave);\n const { removeElementTouchScrollListener } = setupElementTouchScrollListener(affixHeaderRef.value);\n elementTouchScrollCleanups.push(removeElementTouchScrollListener);\n }\n\n if (props.footerAffixedBottom && affixFooterRef.value) {\n on(affixFooterRef.value, 'mouseenter', onFootMouseEnter);\n on(affixFooterRef.value, 'mouseleave', onFootMouseLeave);\n const { removeElementTouchScrollListener } = setupElementTouchScrollListener(affixFooterRef.value);\n elementTouchScrollCleanups.push(removeElementTouchScrollListener);\n }\n\n if (props.horizontalScrollAffixedBottom && horizontalScrollbarRef.value) {\n on(horizontalScrollbarRef.value, 'mouseenter', onScrollbarMouseEnter);\n on(horizontalScrollbarRef.value, 'mouseleave', onScrollbarMouseLeave);\n const { removeElementTouchScrollListener } = setupElementTouchScrollListener(horizontalScrollbarRef.value);\n elementTouchScrollCleanups.push(removeElementTouchScrollListener);\n }\n\n if ((isAffixed.value || isVirtualScroll.value) && tableContentRef.value) {\n on(tableContentRef.value, 'mouseenter', onTableContentMouseEnter);\n on(tableContentRef.value, 'mouseleave', onTableContentMouseLeave);\n const { removeElementTouchScrollListener } = setupElementTouchScrollListener(tableContentRef.value);\n elementTouchScrollCleanups.push(removeElementTouchScrollListener);\n }\n };\n\n const addVerticalScrollListener = () => {\n if (!isAffixed.value && !props.paginationAffixedBottom) return;\n const timer = setTimeout(() => {\n if (isAffixed.value || props.paginationAffixedBottom) {\n on(document, 'scroll', onDocumentScroll);\n } else {\n off(document, 'scroll', onDocumentScroll);\n }\n clearTimeout(timer);\n });\n };\n\n watch([affixHeaderRef, affixFooterRef, horizontalScrollbarRef, tableContentRef], () => {\n addHorizontalScrollListeners();\n onHorizontalScroll();\n updateAffixHeaderOrFooter();\n });\n\n watch(isAffixed, addVerticalScrollListener);\n\n watch(\n () => [\n props.data,\n props.columns,\n props.headerAffixedTop,\n props.footerAffixedBottom,\n props.horizontalScrollAffixedBottom,\n ],\n () => {\n onHorizontalScroll();\n },\n );\n\n onBeforeUnmount(() => {\n off(document, 'scroll', onDocumentScroll);\n removeHorizontalScrollListeners();\n affixHeaderRef.value = null;\n affixFooterRef.value = null;\n horizontalScrollbarRef.value = null;\n tableContentRef.value = null;\n });\n\n const setTableContentRef = (tableContent: HTMLDivElement) => {\n tableContentRef.value = tableContent;\n addVerticalScrollListener();\n };\n\n return {\n showAffixHeader,\n showAffixFooter,\n showAffixPagination,\n affixHeaderRef,\n affixFooterRef,\n horizontalScrollbarRef,\n paginationRef,\n onHorizontalScroll,\n setTableContentRef,\n updateAffixHeaderOrFooter,\n };\n}\n"],"names":["useAffix","props","tableContentRef","ref","affixHeaderRef","affixFooterRef","horizontalScrollbarRef","paginationRef","showAffixHeader","showAffixFooter","showAffixPagination","isMousedown","isMouseInScrollableArea","isVirtualScroll","computed","scroll","type","threshold","data","length","isAffixed","headerAffixedTop","footerAffixedBottom","horizontalScrollAffixedBottom","lastScrollLeft","onHorizontalScroll","scrollElement","value","target","left","scrollLeft","toUpdateScrollElement","i","len","isAffixedBottomElementShow","elementRect","tableRect","headerHeight","top","height","getOffsetTop","isBoolean","offsetTop","updateAffixHeaderOrFooter","_tableContentRef$valu","_tableContentRef$valu2","_affixFooterRef$value","pos","getBoundingClientRect","headerRect","querySelector","footerRect","headerAffixProps","footerHeight","r","Math","abs","horizontalScrollbarRect","paginationAffixedBottom","pageRect","onDocumentScroll","onFootScroll","onHeaderScroll","horizontalScrollbarScroll","onTableContentScroll","onFootMouseEnter","on","onFootMouseLeave","off","onHeaderMouseEnter","onMouseEnterScrollableArea","onHeaderMouseLeave","onMouseLeaveScrollableArea","onScrollbarMouseEnter","onScrollbarMouseLeave","onTableContentMouseEnter","onTableContentMouseLeave","onMousedown","onMouseup","activatingTouchScrollListenerCleanups","setupElementTouchScrollListener","element","debounceOffScrollListener","debounce","listener","onElementTouchScroll","onElementTouchStart","e","composedPath","includes","forEach","cleanup","push","removeElementTouchScrollListener","elementTouchScrollCleanups","cleanupElementTouchScroll","removeHorizontalScrollListeners","window","addHorizontalScrollListeners","_setupElementTouchScr","_setupElementTouchScr2","_setupElementTouchScr3","_setupElementTouchScr4","addVerticalScrollListener","timer","setTimeout","document","clearTimeout","watch","columns","onBeforeUnmount","setTableContentRef","tableContent"],"mappings":";;;;;;;;;;;AAYA,SAAwBA,SAASC,KAAyB,EAAA;AACxD,EAAA,IAAMC,kBAAkBC,GAAoB,EAAA,CAAA;AAE5C,EAAA,IAAMC,iBAAiBD,GAAoB,EAAA,CAAA;AAE3C,EAAA,IAAME,iBAAiBF,GAAoB,EAAA,CAAA;AAE3C,EAAA,IAAMG,yBAAyBH,GAAoB,EAAA,CAAA;AAEnD,EAAA,IAAMI,gBAAgBJ,GAAoB,EAAA,CAAA;AAEpC,EAAA,IAAAK,eAAA,GAAkBL,IAAI,IAAI,CAAA,CAAA;AAE1B,EAAA,IAAAM,eAAA,GAAkBN,IAAI,IAAI,CAAA,CAAA;AAE1B,EAAA,IAAAO,mBAAA,GAAsBP,IAAI,IAAI,CAAA,CAAA;EAEpC,IAAIQ,WAAc,GAAA,KAAA,CAAA;EAClB,IAAIC,uBAA0B,GAAA,KAAA,CAAA;EAE9B,IAAMC,eAAkB,GAAAC,QAAA,CACtB,YAAA;IAAA,OAAMb,KAAA,CAAMc,MAAU,IAAAd,KAAA,CAAMc,MAAO,CAAAC,IAAA,KAAS,SAAc,IAAA,CAAAf,KAAA,CAAMc,MAAO,CAAAE,SAAA,IAAa,GAAO,IAAAhB,KAAA,CAAMiB,IAAK,CAAAC,MAAA,CAAA;AAAA,GACxG,CAAA,CAAA;EAEA,IAAMC,SAAY,GAAAN,QAAA,CAChB,YAAA;AAAA,IAAA,OAAM,CAAC,EAAEb,MAAMoB,gBAAoB,IAAApB,KAAA,CAAMqB,uBAAuBrB,KAAM,CAAAsB,6BAAA,CAAA,CAAA;AAAA,GACxE,CAAA,CAAA;EAEA,IAAIC,cAAiB,GAAA,CAAA,CAAA;AACf,EAAA,IAAAC,kBAAA,GAAqB,SAArBA,kBAAAA,CAAsBC,aAAgC,EAAA;IAC1D,IAAI,CAACN,SAAA,CAAUO,KAAS,IAAA,CAACd,eAAgB,CAAAc,KAAA,EAAO,OAAA;IAChD,IAAIC,MAAS,GAAAF,aAAA,CAAA;AACT,IAAA,IAAA,CAACE,MAAU,IAAA1B,eAAA,CAAgByB,KAAO,EAAA;AACnBH,MAAAA,cAAA,GAAA,CAAA,CAAA;MACjBI,MAAA,GAAS1B,eAAgB,CAAAyB,KAAA,CAAA;AAC3B,KAAA;IACA,IAAI,CAACC,MAAA,EAAQ,OAAA;AACb,IAAA,IAAMC,OAAOD,MAAO,CAAAE,UAAA,CAAA;IAEpB,IAAIN,cAAmB,KAAAK,IAAA,EAAM,OAAA;AACZL,IAAAA,cAAA,GAAAK,IAAA,CAAA;AAEjB,IAAA,IAAME,qBAAwB,GAAA,CAC5B7B,eAAgB,CAAAyB,KAAA,EAChBvB,cAAe,CAAAuB,KAAA,EACftB,cAAe,CAAAsB,KAAA,EACfrB,sBAAuB,CAAAqB,KAAA,CACzB,CAAA;AACA,IAAA,KAAA,IAASK,IAAI,CAAG,EAAAC,GAAA,GAAMF,sBAAsBZ,MAAQ,EAAAa,CAAA,GAAIC,KAAKD,CAAK,EAAA,EAAA;MAChE,IAAID,qBAAsB,CAAAC,CAAA,CAAA,IAAMN,aAAkB,KAAAK,qBAAA,CAAsBC,CAAI,CAAA,EAAA;AAC1ED,QAAAA,qBAAA,CAAsBC,GAAGF,UAAa,GAAAD,IAAA,CAAA;AACxC,OAAA;AACF,KAAA;GACF,CAAA;EAGA,IAAMK,0BAA6B,GAAA,SAA7BA,0BAA6BA,CAACC,WAAsB,EAAAC,SAAA,EAAoBC,YAC5E,EAAA;AAAA,IAAA,OAAAD,SAAA,CAAUE,GAAM,GAAAD,YAAA,GAAeF,WAAY,CAAAG,GAAA,IAAOH,WAAY,CAAAG,GAAA,GAAMH,WAAY,CAAAI,MAAA,CAAA;AAAA,GAAA,CAAA;AAE5E,EAAA,IAAAC,YAAA,GAAe,SAAfA,YAAAA,CAAgBvC,MAAgC,EAAA;AACpD,IAAA,IAAIwC,UAAUxC,MAAK,CAAA,EAAU,OAAA,CAAA,CAAA;AAC7B,IAAA,OAAOA,OAAMyC,SAAa,IAAA,CAAA,CAAA;GAC5B,CAAA;AAEA,EAAA,IAAMC,4BAA4B,SAA5BA,4BAAkC;AAAA,IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,CAAA;AACtC,IAAA,IAAI,CAAC1B,SAAU,CAAAO,KAAA,IAAS,CAACd,eAAgB,CAAAc,KAAA,IAAS,CAACzB,eAAgB,CAAAyB,KAAA,EAAO,OAAA;AACpE,IAAA,IAAAoB,GAAA,GAAA,CAAAH,qBAAA,GAAM1C,eAAgB,CAAAyB,KAAA,MAAAiB,IAAAA,IAAAA,qBAAA,KAAhBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAA,CAAuBI,qBAAsB,EAAA,CAAA;IACzD,IAAI,CAACD,GAAA,EAAK,OAAA;IACV,IAAME,uCAAa/C,eAAgB,CAAAyB,KAAA,MAAA,IAAA,IAAAkB,sBAAA,KAAA,KAAA,CAAA,IAAA,CAAAA,sBAAA,GAAhBA,sBAAA,CAAuBK,aAAc,CAAA,OAAO,4DAA5CL,sBAAA,CAA+CG,qBAAsB,EAAA,CAAA;IAClF,IAAAX,YAAA,GAAe,CAAAY,uBAAAA,iCAAAA,WAAYV,MAAU,KAAA,CAAA,CAAA;AACrC,IAAA,IAAAY,UAAA,GAAA,CAAAL,qBAAA,GAAazC,cAAe,CAAAsB,KAAA,MAAAmB,IAAAA,IAAAA,qBAAA,KAAfA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAA,CAAsBE,qBAAsB,EAAA,CAAA;AAC/D,IAAA,IAAA,CAAK/C,KAAM,CAAAoB,gBAAA,IAAoBR,eAAgB,CAAAc,KAAA,KAAUvB,eAAeuB,KAAO,EAAA;MAC7E,IAAMe,SAAY,GAAAF,YAAA,CAAavC,KAAM,CAAAmD,gBAAA,IAAoBnD,MAAMoB,gBAAgB,CAAA,CAAA;MACzE,IAAAgC,YAAA,GAAe,CAAAF,uBAAAA,iCAAAA,WAAYZ,MAAU,KAAA,CAAA,CAAA;AACvC,MAAA,IAAAe,CAAA,GAAIC,KAAKC,GAAI,CAAAT,GAAA,CAAIT,GAAG,CAAI,GAAAS,GAAA,CAAIR,MAAS,GAAAF,YAAA,GAAeK,SAAY,GAAAW,YAAA,CAAA;MAEpE,IAAIxC,gBAAgBc,KAAO,EAAA;QACrB2B,CAAA,GAAAP,GAAA,CAAIT,GAAM,GAAA,CAAA,CAAA,GAAKW,UAAW,CAAAV,MAAA,CAAA;AAChC,OAAA;MACA/B,eAAA,CAAgBmB,KAAQ,GAAA2B,CAAA,CAAA;AAC1B,KAAA;IAEI,IAAArD,KAAA,CAAMqB,mBAAuB,IAAAjB,cAAA,KAAAA,IAAAA,IAAAA,cAAA,KAAAA,KAAAA,CAAAA,IAAAA,cAAA,CAAgBsB,KAAO,EAAA;MACtDlB,eAAA,CAAgBkB,KAAQ,GAAAO,0BAAA,CAA2BiB,UAAY,EAAAJ,GAAA,EAAKV,YAAY,CAAA,CAAA;AAClF,KAAW,MAAA,IAAApC,KAAA,CAAMsB,6BAAiC,IAAAjB,sBAAA,KAAA,IAAA,IAAAA,sBAAA,KAAA,KAAA,CAAA,IAAAA,sBAAA,CAAwBqB,KAAO,EAAA;MACzE,IAAA8B,uBAAA,GAA0BnD,sBAAuB,CAAAqB,KAAA,CAAMqB,qBAAsB,EAAA,CAAA;MACnFvC,eAAA,CAAgBkB,KAAQ,GAAAO,0BAAA,CAA2BuB,uBAAyB,EAAAV,GAAA,EAAKV,YAAY,CAAA,CAAA;AAC/F,KAAA;AACI,IAAA,IAAApC,KAAA,CAAMyD,uBAA2B,IAAAnD,aAAA,CAAcoB,KAAO,EAAA;MAClD,IAAAgC,QAAA,GAAWpD,aAAc,CAAAoB,KAAA,CAAMqB,qBAAsB,EAAA,CAAA;MAC3DtC,mBAAA,CAAoBiB,KAAQ,GAAAO,0BAAA,CAA2ByB,QAAU,EAAAZ,GAAA,EAAKV,YAAY,CAAA,CAAA;AACpF,KAAA;GACF,CAAA;AAEA,EAAA,IAAMuB,mBAAmB,SAAnBA,mBAAyB;AACHjB,IAAAA,yBAAA,EAAA,CAAA;GAC5B,CAAA;AAEA,EAAA,IAAMkB,eAAe,SAAfA,eAAqB;AACzBpC,IAAAA,kBAAA,CAAmBpB,eAAesB,KAAK,CAAA,CAAA;GACzC,CAAA;AAEA,EAAA,IAAMmC,iBAAiB,SAAjBA,iBAAuB;AAC3BrC,IAAAA,kBAAA,CAAmBrB,eAAeuB,KAAK,CAAA,CAAA;GACzC,CAAA;AAEA,EAAA,IAAMoC,4BAA4B,SAA5BA,4BAAkC;AACtCtC,IAAAA,kBAAA,CAAmBnB,uBAAuBqB,KAAK,CAAA,CAAA;GACjD,CAAA;AAEA,EAAA,IAAMqC,uBAAuB,SAAvBA,uBAA6B;AACjCvC,IAAAA,kBAAA,CAAmBvB,gBAAgByB,KAAK,CAAA,CAAA;GAC1C,CAAA;AAEA,EAAA,IAAMsC,mBAAmB,SAAnBA,mBAAyB;IAC1BC,EAAA,CAAA7D,cAAA,CAAesB,KAAO,EAAA,QAAA,EAAUkC,YAAY,CAAA,CAAA;GACjD,CAAA;AAEA,EAAA,IAAMM,mBAAmB,SAAnBA,mBAAyB;IACzBC,GAAA,CAAA/D,cAAA,CAAesB,KAAO,EAAA,QAAA,EAAUkC,YAAY,CAAA,CAAA;GAClD,CAAA;AAEA,EAAA,IAAMQ,qBAAqB,SAArBA,qBAA2B;IAC5BH,EAAA,CAAA9D,cAAA,CAAeuB,KAAO,EAAA,QAAA,EAAUmC,cAAc,CAAA,CAAA;AACtBQ,IAAAA,0BAAA,EAAA,CAAA;GAC7B,CAAA;AAEA,EAAA,IAAMC,qBAAqB,SAArBA,qBAA2B;AAC/B,IAAA,IAAI,CAAC5D,WAAA,EAAiByD,GAAA,CAAAhE,cAAA,CAAeuB,KAAO,EAAA,QAAA,EAAUmC,cAAc,CAAA,CAAA;AACzCU,IAAAA,0BAAA,EAAA,CAAA;GAC7B,CAAA;AAEA,EAAA,IAAMC,wBAAwB,SAAxBA,wBAA8B;IAC/BP,EAAA,CAAA5D,sBAAA,CAAuBqB,KAAO,EAAA,QAAA,EAAUoC,yBAAyB,CAAA,CAAA;GACtE,CAAA;AAEA,EAAA,IAAMW,wBAAwB,SAAxBA,wBAA8B;IAC9BN,GAAA,CAAA9D,sBAAA,CAAuBqB,KAAO,EAAA,QAAA,EAAUoC,yBAAyB,CAAA,CAAA;GACvE,CAAA;AAEA,EAAA,IAAMY,2BAA2B,SAA3BA,2BAAiC;IAClCT,EAAA,CAAAhE,eAAA,CAAgByB,KAAO,EAAA,QAAA,EAAUqC,oBAAoB,CAAA,CAAA;AAC7BM,IAAAA,0BAAA,EAAA,CAAA;GAC7B,CAAA;AAEA,EAAA,IAAMM,2BAA2B,SAA3BA,2BAAiC;AACrC,IAAA,IAAI,CAACjE,WAAA,EAAiByD,GAAA,CAAAlE,eAAA,CAAgByB,KAAO,EAAA,QAAA,EAAUqC,oBAAoB,CAAA,CAAA;AAChDQ,IAAAA,0BAAA,EAAA,CAAA;GAC7B,CAAA;AAEA,EAAA,IAAMK,cAAc,SAAdA,cAAoB;AACVlE,IAAAA,WAAA,GAAA,IAAA,CAAA;GAChB,CAAA;AAEA,EAAA,IAAMmE,YAAY,SAAZA,YAAkB;AACRnE,IAAAA,WAAA,GAAA,KAAA,CAAA;IACd,IAAI,CAACC,uBAAyB,EAAA;MACxBwD,GAAA,CAAAhE,cAAA,CAAeuB,KAAO,EAAA,QAAA,EAAUmC,cAAc,CAAA,CAAA;MAC9CM,GAAA,CAAAlE,eAAA,CAAgByB,KAAO,EAAA,QAAA,EAAUqC,oBAAoB,CAAA,CAAA;AAC3D,KAAA;GACF,CAAA;AAEA,EAAA,IAAMM,6BAA6B,SAA7BA,6BAAmC;AACb1D,IAAAA,uBAAA,GAAA,IAAA,CAAA;GAC5B,CAAA;AAEA,EAAA,IAAM4D,6BAA6B,SAA7BA,6BAAmC;AACb5D,IAAAA,uBAAA,GAAA,KAAA,CAAA;GAC5B,CAAA;EAGA,IAAMmE,wCAA2D,EAAC,CAAA;AAC5D,EAAA,IAAAC,+BAAA,GAAkC,SAAlCA,+BAAAA,CAAmCC,OAAyB,EAAA;AAI1D,IAAA,IAAAC,yBAAA,GAA4BC,QAAS,CAAA,UAACC,QAAa,EAAA;AACnDhB,MAAAA,GAAA,CAAAa,OAAA,EAAS,UAAUG,QAAQ,CAAA,CAAA;OAC9B,GAAG,CAAA,CAAA;IAEN,SAASC,oBAAuBA,GAAA;MAC9B5D,kBAAA,CAAmBwD,OAAO,CAAA,CAAA;MAC1BC,yBAAA,CAA0BG,oBAAoB,CAAA,CAAA;AAChD,KAAA;IACA,SAASC,oBAAoBC,CAAY,EAAA;MACvC,IAAIA,CAAE,CAAAC,YAAA,EAAe,CAAAC,QAAA,CAASR,OAAO,CAAG,EAAA;AAEtCF,QAAAA,qCAAA,CAAsCW,OAAQ,CAAA,UAACC,OAAY,EAAA;UAAA,OAAAA,OAAA,EAAS,CAAA;SAAA,CAAA,CAAA;QACpEZ,qCAAA,CAAsC5D,MAAS,GAAA,CAAA,CAAA;AAE5C+C,QAAAA,EAAA,CAAAe,OAAA,EAAS,UAAUI,oBAAoB,CAAA,CAAA;QAE1CH,yBAAA,CAA0BG,oBAAoB,CAAA,CAAA;QAC9CN,qCAAA,CAAsCa,KAAK,YAAM;AAC3CxB,UAAAA,GAAA,CAAAa,OAAA,EAAS,UAAUI,oBAAoB,CAAA,CAAA;AAC7C,SAAC,CAAA,CAAA;AACH,OAAA;AACF,KAAA;AAEGnB,IAAAA,EAAA,CAAAe,OAAA,EAAS,cAAcK,mBAAmB,CAAA,CAAA;IAE7C,SAASO,gCAAmCA,GAAA;AACtCzB,MAAAA,GAAA,CAAAa,OAAA,EAAS,cAAcK,mBAAmB,CAAA,CAAA;AAChD,KAAA;IAEO,OAAA;AACLO,MAAAA,gCAAA,EAAAA,gCAAAA;KACF,CAAA;GACF,CAAA;EAGA,IAAMC,6BAAgD,EAAC,CAAA;AACvD,EAAA,IAAMC,4BAA4B,SAA5BA,4BAAkC;AACtCD,IAAAA,0BAAA,CAA2BJ,OAAQ,CAAA,UAACC,OAAY,EAAA;MAAA,OAAAA,OAAA,EAAS,CAAA;KAAA,CAAA,CAAA;IACzDG,0BAAA,CAA2B3E,MAAS,GAAA,CAAA,CAAA;GACtC,CAAA;AAEA,EAAA,IAAM6E,kCAAkC,SAAlCA,kCAAwC;AACxC5B,IAAAA,GAAA,CAAA6B,MAAA,EAAQ,aAAapB,WAAW,CAAA,CAAA;AAChCT,IAAAA,GAAA,CAAA6B,MAAA,EAAQ,WAAWnB,SAAS,CAAA,CAAA;AAENiB,IAAAA,yBAAA,EAAA,CAAA;IAC1B,IAAI3F,eAAeuB,KAAO,EAAA;MACpByC,GAAA,CAAAhE,cAAA,CAAeuB,KAAO,EAAA,YAAA,EAAc0C,kBAAkB,CAAA,CAAA;MACtDD,GAAA,CAAAhE,cAAA,CAAeuB,KAAO,EAAA,YAAA,EAAc4C,kBAAkB,CAAA,CAAA;AAC5D,KAAA;IACA,IAAIlE,eAAesB,KAAO,EAAA;MACpByC,GAAA,CAAA/D,cAAA,CAAesB,KAAO,EAAA,YAAA,EAAcsC,gBAAgB,CAAA,CAAA;MACpDG,GAAA,CAAA/D,cAAA,CAAesB,KAAO,EAAA,YAAA,EAAcwC,gBAAgB,CAAA,CAAA;AAC1D,KAAA;IACA,IAAIjE,gBAAgByB,KAAO,EAAA;MACrByC,GAAA,CAAAlE,eAAA,CAAgByB,KAAO,EAAA,YAAA,EAAcgD,wBAAwB,CAAA,CAAA;MAC7DP,GAAA,CAAAlE,eAAA,CAAgByB,KAAO,EAAA,YAAA,EAAciD,wBAAwB,CAAA,CAAA;AACnE,KAAA;IACA,IAAItE,uBAAuBqB,KAAO,EAAA;MAC5ByC,GAAA,CAAA9D,sBAAA,CAAuBqB,KAAO,EAAA,YAAA,EAAc8C,qBAAqB,CAAA,CAAA;MACjEL,GAAA,CAAA9D,sBAAA,CAAuBqB,KAAO,EAAA,YAAA,EAAc+C,qBAAqB,CAAA,CAAA;AACvE,KAAA;GACF,CAAA;AAEA,EAAA,IAAMwB,+BAA+B,SAA/BA,+BAAqC;AACtChC,IAAAA,EAAA,CAAA+B,MAAA,EAAQ,aAAapB,WAAW,CAAA,CAAA;AAChCX,IAAAA,EAAA,CAAA+B,MAAA,EAAQ,WAAWnB,SAAS,CAAA,CAAA;AAECkB,IAAAA,+BAAA,EAAA,CAAA;IAChC,IAAI5F,eAAeuB,KAAO,EAAA;MACrBuC,EAAA,CAAA9D,cAAA,CAAeuB,KAAO,EAAA,YAAA,EAAc0C,kBAAkB,CAAA,CAAA;MACtDH,EAAA,CAAA9D,cAAA,CAAeuB,KAAO,EAAA,YAAA,EAAc4C,kBAAkB,CAAA,CAAA;AACzD,MAAA,IAAA4B,qBAAA,GAA6CnB,+BAAA,CAAgC5E,eAAeuB,KAAK,CAAA;QAAzFkE,gCAAA,GAAAM,qBAAA,CAAAN,gCAAA,CAAA;AACRC,MAAAA,0BAAA,CAA2BF,KAAKC,gCAAgC,CAAA,CAAA;AAClE,KAAA;AAEI,IAAA,IAAA5F,KAAA,CAAMqB,mBAAuB,IAAAjB,cAAA,CAAesB,KAAO,EAAA;MAClDuC,EAAA,CAAA7D,cAAA,CAAesB,KAAO,EAAA,YAAA,EAAcsC,gBAAgB,CAAA,CAAA;MACpDC,EAAA,CAAA7D,cAAA,CAAesB,KAAO,EAAA,YAAA,EAAcwC,gBAAgB,CAAA,CAAA;AACvD,MAAA,IAAAiC,sBAAA,GAA6CpB,+BAAA,CAAgC3E,eAAesB,KAAK,CAAA;QAAzFkE,iCAAA,GAAAO,sBAAA,CAAAP,gCAAA,CAAA;AACRC,MAAAA,0BAAA,CAA2BF,KAAKC,iCAAgC,CAAA,CAAA;AAClE,KAAA;AAEI,IAAA,IAAA5F,KAAA,CAAMsB,6BAAiC,IAAAjB,sBAAA,CAAuBqB,KAAO,EAAA;MACpEuC,EAAA,CAAA5D,sBAAA,CAAuBqB,KAAO,EAAA,YAAA,EAAc8C,qBAAqB,CAAA,CAAA;MACjEP,EAAA,CAAA5D,sBAAA,CAAuBqB,KAAO,EAAA,YAAA,EAAc+C,qBAAqB,CAAA,CAAA;AACpE,MAAA,IAAA2B,sBAAA,GAA6CrB,+BAAA,CAAgC1E,uBAAuBqB,KAAK,CAAA;QAAjGkE,kCAAA,GAAAQ,sBAAA,CAAAR,gCAAA,CAAA;AACRC,MAAAA,0BAAA,CAA2BF,KAAKC,kCAAgC,CAAA,CAAA;AAClE,KAAA;AAEA,IAAA,IAAA,CAAKzE,SAAU,CAAAO,KAAA,IAASd,eAAgB,CAAAc,KAAA,KAAUzB,gBAAgByB,KAAO,EAAA;MACpEuC,EAAA,CAAAhE,eAAA,CAAgByB,KAAO,EAAA,YAAA,EAAcgD,wBAAwB,CAAA,CAAA;MAC7DT,EAAA,CAAAhE,eAAA,CAAgByB,KAAO,EAAA,YAAA,EAAciD,wBAAwB,CAAA,CAAA;AAChE,MAAA,IAAA0B,sBAAA,GAA6CtB,+BAAA,CAAgC9E,gBAAgByB,KAAK,CAAA;QAA1FkE,kCAAA,GAAAS,sBAAA,CAAAT,gCAAA,CAAA;AACRC,MAAAA,0BAAA,CAA2BF,KAAKC,kCAAgC,CAAA,CAAA;AAClE,KAAA;GACF,CAAA;AAEA,EAAA,IAAMU,4BAA4B,SAA5BA,4BAAkC;IACtC,IAAI,CAACnF,SAAA,CAAUO,KAAS,IAAA,CAAC1B,KAAM,CAAAyD,uBAAA,EAAyB,OAAA;AAClD,IAAA,IAAA8C,KAAA,GAAQC,WAAW,YAAM;AACzB,MAAA,IAAArF,SAAA,CAAUO,KAAS,IAAA1B,KAAA,CAAMyD,uBAAyB,EAAA;AACjDQ,QAAAA,EAAA,CAAAwC,QAAA,EAAU,UAAU9C,gBAAgB,CAAA,CAAA;AACzC,OAAO,MAAA;AACDQ,QAAAA,GAAA,CAAAsC,QAAA,EAAU,UAAU9C,gBAAgB,CAAA,CAAA;AAC1C,OAAA;MACA+C,YAAA,CAAaH,KAAK,CAAA,CAAA;AACpB,KAAC,CAAA,CAAA;GACH,CAAA;EAEAI,KAAA,CAAM,CAACxG,cAAgB,EAAAC,cAAA,EAAgBC,sBAAwB,EAAAJ,eAAe,GAAG,YAAM;AACxDgG,IAAAA,4BAAA,EAAA,CAAA;AACVzE,IAAAA,kBAAA,EAAA,CAAA;AACOkB,IAAAA,yBAAA,EAAA,CAAA;AAC5B,GAAC,CAAA,CAAA;AAEDiE,EAAAA,KAAA,CAAMxF,WAAWmF,yBAAyB,CAAA,CAAA;AAE1CK,EAAAA,KAAA,CACE,YAAA;IAAA,OAAM,CACJ3G,KAAM,CAAAiB,IAAA,EACNjB,KAAM,CAAA4G,OAAA,EACN5G,KAAM,CAAAoB,gBAAA,EACNpB,KAAM,CAAAqB,mBAAA,EACNrB,KAAM,CAAAsB,6BAAA,CACR,CAAA;AAAA,GAAA,EACA,YAAM;AACeE,IAAAA,kBAAA,EAAA,CAAA;AACrB,GACF,CAAA,CAAA;AAEAqF,EAAAA,eAAA,CAAgB,YAAM;AAChB1C,IAAAA,GAAA,CAAAsC,QAAA,EAAU,UAAU9C,gBAAgB,CAAA,CAAA;AACRoC,IAAAA,+BAAA,EAAA,CAAA;IAChC5F,cAAA,CAAeuB,KAAQ,GAAA,IAAA,CAAA;IACvBtB,cAAA,CAAesB,KAAQ,GAAA,IAAA,CAAA;IACvBrB,sBAAA,CAAuBqB,KAAQ,GAAA,IAAA,CAAA;IAC/BzB,eAAA,CAAgByB,KAAQ,GAAA,IAAA,CAAA;AAC1B,GAAC,CAAA,CAAA;AAEK,EAAA,IAAAoF,kBAAA,GAAqB,SAArBA,kBAAAA,CAAsBC,YAAiC,EAAA;IAC3D9G,eAAA,CAAgByB,KAAQ,GAAAqF,YAAA,CAAA;AACET,IAAAA,yBAAA,EAAA,CAAA;GAC5B,CAAA;EAEO,OAAA;AACL/F,IAAAA,eAAA,EAAAA,eAAA;AACAC,IAAAA,eAAA,EAAAA,eAAA;AACAC,IAAAA,mBAAA,EAAAA,mBAAA;AACAN,IAAAA,cAAA,EAAAA,cAAA;AACAC,IAAAA,cAAA,EAAAA,cAAA;AACAC,IAAAA,sBAAA,EAAAA,sBAAA;AACAC,IAAAA,aAAA,EAAAA,aAAA;AACAkB,IAAAA,kBAAA,EAAAA,kBAAA;AACAsF,IAAAA,kBAAA,EAAAA,kBAAA;AACApE,IAAAA,yBAAA,EAAAA,yBAAAA;GACF,CAAA;AACF;;;;"}