tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 19.5 kB
Source Map (JSON)
{"version":3,"file":"fab.mjs","sources":["../../src/fab/fab.tsx"],"sourcesContent":["import { defineComponent, ref, computed, onMounted, watch } from 'vue';\nimport config from '../config';\nimport FabProps from './props';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useClass';\nimport TButton from '../button';\nimport { TdFabProps } from './type';\nimport { reconvertUnit } from '../shared';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-fab`,\n props: FabProps,\n setup(props) {\n const renderTNodeJSX = useTNodeJSX();\n\n const fabClass = usePrefixClass('fab');\n const fabRef = ref();\n const fabButtonRef = ref();\n const customNodeRef = ref();\n\n const handleClick = (e: MouseEvent) => {\n props.onClick?.({ e });\n };\n\n const mounted = ref(false);\n const fabButtonSize = ref({\n width: 48,\n height: 48,\n });\n const btnSwitchPos = ref({\n x: 16,\n y: 32,\n });\n const switchPos = ref({\n hasMoved: false, // exclude click event\n x: btnSwitchPos.value.x, // right\n y: btnSwitchPos.value.y, // bottom\n startX: 0,\n startY: 0,\n endX: 0,\n endY: 0,\n });\n\n const onTouchStart = (e: TouchEvent) => {\n props.onDragStart?.({ e });\n\n switchPos.value.startX = e.touches[0].pageX;\n switchPos.value.startY = e.touches[0].pageY;\n };\n\n const onTouchMove = (e: TouchEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.draggable) {\n return;\n }\n\n if (e.touches.length <= 0) {\n return;\n }\n const offsetX = e.touches[0].pageX - switchPos.value.startX;\n const offsetY = e.touches[0].pageY - switchPos.value.startY;\n let x = Math.floor(switchPos.value.x - offsetX);\n let y = Math.floor(switchPos.value.y - offsetY);\n\n [x, y] = getSwitchButtonSafeAreaXY(x, y);\n\n if (props.draggable !== 'vertical') {\n btnSwitchPos.value.x = x;\n switchPos.value.endX = x;\n }\n if (props.draggable !== 'horizontal') {\n btnSwitchPos.value.y = y;\n switchPos.value.endY = y;\n }\n switchPos.value.hasMoved = true;\n };\n\n const getSwitchButtonSafeAreaXY = (x: number, y: number) => {\n const bottomThreshold = reconvertUnit(props.yBounds?.[1] ?? 0);\n const topThreshold = reconvertUnit(props.yBounds?.[0] ?? 0);\n const leftBound = reconvertUnit(props.xBounds?.[0] ?? 0);\n const rightBound = reconvertUnit(props.xBounds?.[1] ?? 0);\n\n const docWidth = Math.min(window.innerWidth, document.documentElement.clientWidth, screen.width);\n const docHeight = Math.min(window.innerHeight, document.documentElement.clientHeight, screen.height);\n\n const maxY = docHeight - fabButtonSize.value.height - topThreshold;\n // x 是 right 值:\n // - 最小 right 值是右边界(即 right = rightBound,最靠近右边)\n // - 最大 right 值是 docWidth - width - leftBound(即 left = leftBound,最靠近左边)\n const minX = rightBound;\n const maxX = docWidth - fabButtonSize.value.width - leftBound;\n\n x = Math.max(minX, Math.min(maxX, x));\n y = Math.max(bottomThreshold, Math.min(maxY, y));\n\n return [x, y];\n };\n\n const onTouchEnd = (e: TouchEvent) => {\n if (!switchPos.value.hasMoved) {\n return;\n }\n props.onDragEnd?.({ e });\n switchPos.value.startX = 0;\n switchPos.value.startY = 0;\n switchPos.value.hasMoved = false;\n setSwitchPosition(switchPos.value.endX, switchPos.value.endY);\n\n // 自动吸附\n if (props.magnet) {\n handleMagnet();\n }\n };\n\n const handleMagnet = () => {\n const docWidth = Math.min(window.innerWidth, document.documentElement.clientWidth, screen.width);\n const currentRight = btnSwitchPos.value.x;\n const currentLeft = docWidth - fabButtonSize.value.width - currentRight;\n const leftBound = reconvertUnit(props.xBounds?.[0] ?? 0);\n const rightBound = reconvertUnit(props.xBounds?.[1] ?? 0);\n\n if (props.magnet === 'left') {\n // 固定吸附到左边(right = docWidth - width - leftBound)\n setSwitchPosition(docWidth - fabButtonSize.value.width - leftBound, switchPos.value.y);\n } else if (props.magnet === 'right') {\n // 固定吸附到右边(right = rightBound)\n setSwitchPosition(rightBound, switchPos.value.y);\n } else if (props.magnet === true) {\n // 自动判断吸附到左右两侧\n if (currentLeft < currentRight) {\n setSwitchPosition(docWidth - fabButtonSize.value.width - leftBound, switchPos.value.y);\n } else {\n setSwitchPosition(rightBound, switchPos.value.y);\n }\n }\n };\n\n const setSwitchPosition = (switchX: number, switchY: number) => {\n [switchX, switchY] = getSwitchButtonSafeAreaXY(switchX, switchY);\n switchPos.value.x = switchX;\n switchPos.value.y = switchY;\n\n if (props.draggable !== 'vertical') {\n btnSwitchPos.value.x = switchX;\n }\n if (props.draggable !== 'horizontal') {\n btnSwitchPos.value.y = switchY;\n }\n };\n\n const fabStyle = computed(() => {\n const { x, y } = btnSwitchPos.value;\n\n return `right: ${x}px;bottom: ${y}px;`;\n });\n\n const fabClasses = computed(() => [\n `${fabClass.value}`,\n { [`${fabClass.value}--animation`]: !switchPos.value.hasMoved && props.magnet },\n ]);\n\n onMounted(() => {\n mounted.value = true;\n resetDraggableParams();\n\n if (fabButtonRef.value || customNodeRef.value) {\n const info = window.getComputedStyle(fabButtonRef.value?.$el || customNodeRef.value);\n\n fabButtonSize.value.height = +reconvertUnit(info.height);\n fabButtonSize.value.width = +reconvertUnit(info.width);\n }\n });\n\n const getFabOriginStyle = () => {\n const info = window.getComputedStyle(fabRef.value);\n const { right, bottom } = info || {};\n\n return {\n right: +(reconvertUnit(right) || 0),\n bottom: +(reconvertUnit(bottom) || 0),\n };\n };\n\n const resetDraggableParams = () => {\n const { right, bottom } = getFabOriginStyle();\n\n btnSwitchPos.value.x = right;\n btnSwitchPos.value.y = bottom;\n\n switchPos.value.x = right;\n switchPos.value.y = bottom;\n };\n\n watch(\n () => props.style,\n () => {\n resetDraggableParams();\n },\n );\n\n return () => {\n const icon = () => renderTNodeJSX('icon');\n const defaultContent = (\n <TButton\n size=\"large\"\n theme=\"primary\"\n shape={props.text ? 'round' : 'circle'}\n class={`${fabClass.value}__button`}\n {...(props.buttonProps as TdFabProps['buttonProps'])}\n icon={icon}\n ref={fabButtonRef}\n >\n {props.text}\n </TButton>\n );\n\n const customNode = renderTNodeJSX('default');\n return (\n <div\n class={fabClasses.value}\n style={mounted.value && props.draggable ? fabStyle.value : props.style}\n onClick={handleClick}\n onTouchstart={onTouchStart}\n onTouchmove={onTouchMove}\n onTouchend={onTouchEnd}\n ref={fabRef}\n >\n {customNode ? <div ref={customNodeRef}>{customNode}</div> : defaultContent}\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","props","FabProps","setup","renderTNodeJSX","useTNodeJSX","fabClass","usePrefixClass","fabRef","ref","fabButtonRef","customNodeRef","handleClick","e","_props$onClick","onClick","call","mounted","fabButtonSize","width","height","btnSwitchPos","x","y","switchPos","hasMoved","value","startX","startY","endX","endY","onTouchStart","_props$onDragStart","onDragStart","touches","pageX","pageY","onTouchMove","stopPropagation","preventDefault","draggable","length","offsetX","offsetY","Math","floor","_getSwitchButtonSafeA","getSwitchButtonSafeAreaXY","_getSwitchButtonSafeA2","_slicedToArray","_props$yBounds$","_props$yBounds","_props$yBounds$2","_props$yBounds2","_props$xBounds$","_props$xBounds","_props$xBounds$2","_props$xBounds2","bottomThreshold","reconvertUnit","yBounds","topThreshold","leftBound","xBounds","rightBound","docWidth","min","window","innerWidth","document","documentElement","clientWidth","screen","docHeight","innerHeight","clientHeight","maxY","minX","maxX","max","onTouchEnd","_props$onDragEnd","onDragEnd","setSwitchPosition","magnet","handleMagnet","_props$xBounds$3","_props$xBounds3","_props$xBounds$4","_props$xBounds4","currentRight","currentLeft","switchX","switchY","_getSwitchButtonSafeA3","_getSwitchButtonSafeA4","fabStyle","computed","_btnSwitchPos$value","concat","fabClasses","_defineProperty","onMounted","resetDraggableParams","_fabButtonRef$value","info","getComputedStyle","$el","getFabOriginStyle","_ref2","right","bottom","_getFabOriginStyle","watch","style","icon","defaultContent","_createVNode","TButton","_mergeProps","text","buttonProps","default","_default","customNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAQA,SAAWC,MAAA,CAAXD;AAER,WAAeE,eAAgB,CAAA;AAC7BC,EAAAA,gBAASH,MAAA,EAAA,MAAA,CAAA;AACTI,EAAAA,KAAO,EAAAC,QAAA;AACPC,EAAAA,OAAAA,SAAAA,MAAMF,KAAO,EAAA;AACX,IAAA,IAAMG,iBAAiBC,WAAY,EAAA,CAAA;AAE7B,IAAA,IAAAC,QAAA,GAAWC,eAAe,KAAK,CAAA,CAAA;AACrC,IAAA,IAAMC,SAASC,GAAI,EAAA,CAAA;AACnB,IAAA,IAAMC,eAAeD,GAAI,EAAA,CAAA;AACzB,IAAA,IAAME,gBAAgBF,GAAI,EAAA,CAAA;AAEpB,IAAA,IAAAG,WAAA,GAAc,SAAdA,WAAAA,CAAeC,CAAkB,EAAA;AAAA,MAAA,IAAAC,cAAA,CAAA;AAC/B,MAAA,CAAAA,cAAA,GAAAb,KAAA,CAAAc,OAAA,MAAA,IAAA,IAAAD,cAAA,KAAA,KAAA,CAAA,IAAAA,cAAA,CAAAE,IAAA,CAAAf,KAAA,EAAU;AAAEY,QAAAA,CAAA,EAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;KACvB,CAAA;AAEM,IAAA,IAAAI,OAAA,GAAUR,IAAI,KAAK,CAAA,CAAA;IACzB,IAAMS,gBAAgBT,GAAI,CAAA;AACxBU,MAAAA,KAAO,EAAA,EAAA;AACPC,MAAAA,MAAQ,EAAA,EAAA;AACV,KAAC,CAAA,CAAA;IACD,IAAMC,eAAeZ,GAAI,CAAA;AACvBa,MAAAA,CAAG,EAAA,EAAA;AACHC,MAAAA,CAAG,EAAA,EAAA;AACL,KAAC,CAAA,CAAA;IACD,IAAMC,YAAYf,GAAI,CAAA;AACpBgB,MAAAA,QAAU,EAAA,KAAA;AACVH,MAAAA,CAAA,EAAGD,aAAaK,KAAM,CAAAJ,CAAA;AACtBC,MAAAA,CAAA,EAAGF,aAAaK,KAAM,CAAAH,CAAA;AACtBI,MAAAA,MAAQ,EAAA,CAAA;AACRC,MAAAA,MAAQ,EAAA,CAAA;AACRC,MAAAA,IAAM,EAAA,CAAA;AACNC,MAAAA,IAAM,EAAA,CAAA;AACR,KAAC,CAAA,CAAA;AAEK,IAAA,IAAAC,YAAA,GAAe,SAAfA,YAAAA,CAAgBlB,CAAkB,EAAA;AAAA,MAAA,IAAAmB,kBAAA,CAAA;AAChC,MAAA,CAAAA,kBAAA,GAAA/B,KAAA,CAAAgC,WAAA,MAAA,IAAA,IAAAD,kBAAA,KAAA,KAAA,CAAA,IAAAA,kBAAA,CAAAhB,IAAA,CAAAf,KAAA,EAAc;AAAEY,QAAAA,CAAA,EAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;AAEzBW,MAAAA,SAAA,CAAUE,KAAM,CAAAC,MAAA,GAASd,CAAE,CAAAqB,OAAA,CAAQ,CAAG,CAAA,CAAAC,KAAA,CAAA;AACtCX,MAAAA,SAAA,CAAUE,KAAM,CAAAE,MAAA,GAASf,CAAE,CAAAqB,OAAA,CAAQ,CAAG,CAAA,CAAAE,KAAA,CAAA;KACxC,CAAA;AAEM,IAAA,IAAAC,WAAA,GAAc,SAAdA,WAAAA,CAAexB,CAAkB,EAAA;MACrCA,CAAA,CAAEyB,eAAgB,EAAA,CAAA;MAClBzB,CAAA,CAAE0B,cAAe,EAAA,CAAA;AAEb,MAAA,IAAA,CAACtC,MAAMuC,SAAW,EAAA;AACpB,QAAA,OAAA;AACF,OAAA;AAEI,MAAA,IAAA3B,CAAA,CAAEqB,OAAQ,CAAAO,MAAA,IAAU,CAAG,EAAA;AACzB,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAMC,UAAU7B,CAAE,CAAAqB,OAAA,CAAQ,CAAG,CAAA,CAAAC,KAAA,GAAQX,UAAUE,KAAM,CAAAC,MAAA,CAAA;AACrD,MAAA,IAAMgB,UAAU9B,CAAE,CAAAqB,OAAA,CAAQ,CAAG,CAAA,CAAAE,KAAA,GAAQZ,UAAUE,KAAM,CAAAE,MAAA,CAAA;AACrD,MAAA,IAAIN,IAAIsB,IAAK,CAAAC,KAAA,CAAMrB,SAAU,CAAAE,KAAA,CAAMJ,IAAIoB,OAAO,CAAA,CAAA;AAC9C,MAAA,IAAInB,IAAIqB,IAAK,CAAAC,KAAA,CAAMrB,SAAU,CAAAE,KAAA,CAAMH,IAAIoB,OAAO,CAAA,CAAA;AAAA,MAAA,IAAAG,qBAAA,GAErCC,yBAAA,CAA0BzB,GAAGC,CAAC,CAAA,CAAA;AAAA,MAAA,IAAAyB,sBAAA,GAAAC,cAAA,CAAAH,qBAAA,EAAA,CAAA,CAAA,CAAA;AAAtCxB,MAAAA,CAAG,GAAA0B,sBAAA,CAAA,CAAA,CAAA,CAAA;AAAAzB,MAAAA,CAAC,GAAAyB,sBAAA,CAAA,CAAA,CAAA,CAAA;AAED,MAAA,IAAA/C,KAAA,CAAMuC,cAAc,UAAY,EAAA;AAClCnB,QAAAA,YAAA,CAAaK,MAAMJ,CAAI,GAAAA,CAAA,CAAA;AACvBE,QAAAA,SAAA,CAAUE,MAAMG,IAAO,GAAAP,CAAA,CAAA;AACzB,OAAA;AACI,MAAA,IAAArB,KAAA,CAAMuC,cAAc,YAAc,EAAA;AACpCnB,QAAAA,YAAA,CAAaK,MAAMH,CAAI,GAAAA,CAAA,CAAA;AACvBC,QAAAA,SAAA,CAAUE,MAAMI,IAAO,GAAAP,CAAA,CAAA;AACzB,OAAA;AACAC,MAAAA,SAAA,CAAUE,MAAMD,QAAW,GAAA,IAAA,CAAA;KAC7B,CAAA;IAEM,IAAAsB,yBAAA,GAA4B,SAA5BA,yBAAAA,CAA6BzB,CAAA,EAAWC,CAAc,EAAA;AAAA,MAAA,IAAA2B,eAAA,EAAAC,cAAA,EAAAC,gBAAA,EAAAC,eAAA,EAAAC,eAAA,EAAAC,cAAA,EAAAC,gBAAA,EAAAC,eAAA,CAAA;MAC1D,IAAMC,eAAkB,GAAAC,aAAA,CAAAT,CAAAA,eAAA,IAAAC,cAAA,GAAclD,KAAM,CAAA2D,OAAA,MAAA,IAAA,IAAAT,cAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAA,CAAgB,+DAAM,CAAC,CAAA,CAAA;MAC7D,IAAMU,YAAe,GAAAF,aAAA,CAAAP,CAAAA,gBAAA,IAAAC,eAAA,GAAcpD,KAAM,CAAA2D,OAAA,MAAA,IAAA,IAAAP,eAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB,iEAAM,CAAC,CAAA,CAAA;MAC1D,IAAMS,SAAY,GAAAH,aAAA,CAAAL,CAAAA,eAAA,IAAAC,cAAA,GAActD,KAAM,CAAA8D,OAAA,MAAA,IAAA,IAAAR,cAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAA,CAAgB,+DAAM,CAAC,CAAA,CAAA;MACvD,IAAMS,UAAa,GAAAL,aAAA,CAAAH,CAAAA,gBAAA,IAAAC,eAAA,GAAcxD,KAAM,CAAA8D,OAAA,MAAA,IAAA,IAAAN,eAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB,iEAAM,CAAC,CAAA,CAAA;AAElD,MAAA,IAAAQ,QAAA,GAAWrB,KAAKsB,GAAI,CAAAC,MAAA,CAAOC,YAAYC,QAAS,CAAAC,eAAA,CAAgBC,WAAa,EAAAC,MAAA,CAAOrD,KAAK,CAAA,CAAA;AACzF,MAAA,IAAAsD,SAAA,GAAY7B,KAAKsB,GAAI,CAAAC,MAAA,CAAOO,aAAaL,QAAS,CAAAC,eAAA,CAAgBK,YAAc,EAAAH,MAAA,CAAOpD,MAAM,CAAA,CAAA;MAEnG,IAAMwD,IAAO,GAAAH,SAAA,GAAYvD,aAAc,CAAAQ,KAAA,CAAMN,MAAS,GAAAyC,YAAA,CAAA;MAItD,IAAMgB,IAAO,GAAAb,UAAA,CAAA;MACb,IAAMc,IAAO,GAAAb,QAAA,GAAW/C,aAAc,CAAAQ,KAAA,CAAMP,KAAQ,GAAA2C,SAAA,CAAA;AAEpDxC,MAAAA,CAAA,GAAIsB,KAAKmC,GAAI,CAAAF,IAAA,EAAMjC,KAAKsB,GAAI,CAAAY,IAAA,EAAMxD,CAAC,CAAC,CAAA,CAAA;AACpCC,MAAAA,CAAA,GAAIqB,KAAKmC,GAAI,CAAArB,eAAA,EAAiBd,KAAKsB,GAAI,CAAAU,IAAA,EAAMrD,CAAC,CAAC,CAAA,CAAA;AAExC,MAAA,OAAA,CAACD,GAAGC,CAAC,CAAA,CAAA;KACd,CAAA;AAEM,IAAA,IAAAyD,UAAA,GAAa,SAAbA,UAAAA,CAAcnE,CAAkB,EAAA;AAAA,MAAA,IAAAoE,gBAAA,CAAA;AAChC,MAAA,IAAA,CAACzD,SAAU,CAAAE,KAAA,CAAMD,QAAU,EAAA;AAC7B,QAAA,OAAA;AACF,OAAA;AACM,MAAA,CAAAwD,gBAAA,GAAAhF,KAAA,CAAAiF,SAAA,MAAA,IAAA,IAAAD,gBAAA,KAAA,KAAA,CAAA,IAAAA,gBAAA,CAAAjE,IAAA,CAAAf,KAAA,EAAY;AAAEY,QAAAA,CAAA,EAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;AACvBW,MAAAA,SAAA,CAAUE,MAAMC,MAAS,GAAA,CAAA,CAAA;AACzBH,MAAAA,SAAA,CAAUE,MAAME,MAAS,GAAA,CAAA,CAAA;AACzBJ,MAAAA,SAAA,CAAUE,MAAMD,QAAW,GAAA,KAAA,CAAA;AAC3B0D,MAAAA,iBAAA,CAAkB3D,SAAU,CAAAE,KAAA,CAAMG,IAAM,EAAAL,SAAA,CAAUE,MAAMI,IAAI,CAAA,CAAA;MAG5D,IAAI7B,MAAMmF,MAAQ,EAAA;AACHC,QAAAA,YAAA,EAAA,CAAA;AACf,OAAA;KACF,CAAA;AAEA,IAAA,IAAMA,eAAe,SAAfA,eAAqB;AAAA,MAAA,IAAAC,gBAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,eAAA,CAAA;AACnB,MAAA,IAAAxB,QAAA,GAAWrB,KAAKsB,GAAI,CAAAC,MAAA,CAAOC,YAAYC,QAAS,CAAAC,eAAA,CAAgBC,WAAa,EAAAC,MAAA,CAAOrD,KAAK,CAAA,CAAA;AACzF,MAAA,IAAAuE,YAAA,GAAerE,aAAaK,KAAM,CAAAJ,CAAA,CAAA;MACxC,IAAMqE,WAAc,GAAA1B,QAAA,GAAW/C,aAAc,CAAAQ,KAAA,CAAMP,KAAQ,GAAAuE,YAAA,CAAA;MAC3D,IAAM5B,SAAY,GAAAH,aAAA,CAAA2B,CAAAA,gBAAA,IAAAC,eAAA,GAActF,KAAM,CAAA8D,OAAA,MAAA,IAAA,IAAAwB,eAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB,iEAAM,CAAC,CAAA,CAAA;MACvD,IAAMvB,UAAa,GAAAL,aAAA,CAAA6B,CAAAA,gBAAA,IAAAC,eAAA,GAAcxF,KAAM,CAAA8D,OAAA,MAAA,IAAA,IAAA0B,eAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB,iEAAM,CAAC,CAAA,CAAA;AAEpD,MAAA,IAAAxF,KAAA,CAAMmF,WAAW,MAAQ,EAAA;AAE3BD,QAAAA,iBAAA,CAAkBlB,WAAW/C,aAAc,CAAAQ,KAAA,CAAMP,QAAQ2C,SAAW,EAAAtC,SAAA,CAAUE,MAAMH,CAAC,CAAA,CAAA;AACvF,OAAA,MAAA,IAAWtB,KAAM,CAAAmF,MAAA,KAAW,OAAS,EAAA;QAEjBD,iBAAA,CAAAnB,UAAA,EAAYxC,SAAU,CAAAE,KAAA,CAAMH,CAAC,CAAA,CAAA;AACjD,OAAA,MAAA,IAAWtB,KAAM,CAAAmF,MAAA,KAAW,IAAM,EAAA;QAEhC,IAAIO,cAAcD,YAAc,EAAA;AAC9BP,UAAAA,iBAAA,CAAkBlB,WAAW/C,aAAc,CAAAQ,KAAA,CAAMP,QAAQ2C,SAAW,EAAAtC,SAAA,CAAUE,MAAMH,CAAC,CAAA,CAAA;AACvF,SAAO,MAAA;UACa4D,iBAAA,CAAAnB,UAAA,EAAYxC,SAAU,CAAAE,KAAA,CAAMH,CAAC,CAAA,CAAA;AACjD,SAAA;AACF,OAAA;KACF,CAAA;IAEM,IAAA4D,iBAAA,GAAoB,SAApBA,iBAAAA,CAAqBS,OAAA,EAAiBC,OAAoB,EAAA;AAAA,MAAA,IAAAC,sBAAA,GACzC/C,yBAAA,CAA0B6C,SAASC,OAAO,CAAA,CAAA;AAAA,MAAA,IAAAE,sBAAA,GAAA9C,cAAA,CAAA6C,sBAAA,EAAA,CAAA,CAAA,CAAA;AAA9DF,MAAAA,OAAS,GAAAG,sBAAA,CAAA,CAAA,CAAA,CAAA;AAAAF,MAAAA,OAAO,GAAAE,sBAAA,CAAA,CAAA,CAAA,CAAA;AACjBvE,MAAAA,SAAA,CAAUE,MAAMJ,CAAI,GAAAsE,OAAA,CAAA;AACpBpE,MAAAA,SAAA,CAAUE,MAAMH,CAAI,GAAAsE,OAAA,CAAA;AAEhB,MAAA,IAAA5F,KAAA,CAAMuC,cAAc,UAAY,EAAA;AAClCnB,QAAAA,YAAA,CAAaK,MAAMJ,CAAI,GAAAsE,OAAA,CAAA;AACzB,OAAA;AACI,MAAA,IAAA3F,KAAA,CAAMuC,cAAc,YAAc,EAAA;AACpCnB,QAAAA,YAAA,CAAaK,MAAMH,CAAI,GAAAsE,OAAA,CAAA;AACzB,OAAA;KACF,CAAA;AAEM,IAAA,IAAAG,QAAA,GAAWC,SAAS,YAAM;AAC9B,MAAA,IAAAC,mBAAA,GAAiB7E,YAAa,CAAAK,KAAA;QAAtBJ,CAAA,GAAA4E,mBAAA,CAAA5E,CAAA;QAAGC,CAAE,GAAA2E,mBAAA,CAAF3E,CAAE,CAAA;AAEb,MAAA,OAAA,SAAA,CAAA4E,MAAA,CAAiB7E,CAAe,EAAA6E,aAAAA,CAAAA,CAAAA,MAAA,CAAA5E,CAAA,EAAA,KAAA,CAAA,CAAA;AAClC,KAAC,CAAA,CAAA;IAEK,IAAA6E,UAAA,GAAaH,SAAS,YAAA;MAAA,OAAM,CAAA,EAAA,CAAAE,MAAA,CAC7B7F,QAAS,CAAAoB,KAAA,CAAA2E,EAAAA,eAAA,CAAAF,EAAAA,EAAAA,EAAAA,CAAAA,MAAA,CACN7F,QAAS,CAAAoB,KAAA,EAAA,aAAA,CAAA,EAAqB,CAACF,SAAU,CAAAE,KAAA,CAAMD,QAAY,IAAAxB,KAAA,CAAMmF,MAAO,CAC/E,CAAA,CAAA;KAAA,CAAA,CAAA;AAEDkB,IAAAA,SAAA,CAAU,YAAM;MACdrF,OAAA,CAAQS,KAAQ,GAAA,IAAA,CAAA;AACK6E,MAAAA,oBAAA,EAAA,CAAA;AAEjB,MAAA,IAAA7F,YAAA,CAAagB,KAAS,IAAAf,aAAA,CAAce,KAAO,EAAA;AAAA,QAAA,IAAA8E,mBAAA,CAAA;QAC7C,IAAMC,OAAOtC,MAAO,CAAAuC,gBAAA,CAAiB,CAAA,CAAAF,mBAAA,GAAA9F,aAAagB,KAAO,MAAA8E,IAAAA,IAAAA,mBAAA,uBAApBA,mBAAA,CAAoBG,GAAA,KAAOhG,cAAce,KAAK,CAAA,CAAA;QAEnFR,aAAA,CAAcQ,KAAM,CAAAN,MAAA,GAAS,CAACuC,aAAA,CAAc8C,KAAKrF,MAAM,CAAA,CAAA;QACvDF,aAAA,CAAcQ,KAAM,CAAAP,KAAA,GAAQ,CAACwC,aAAA,CAAc8C,KAAKtF,KAAK,CAAA,CAAA;AACvD,OAAA;AACF,KAAC,CAAA,CAAA;AAED,IAAA,IAAMyF,oBAAoB,SAApBA,oBAA0B;MAC9B,IAAMH,IAAO,GAAAtC,MAAA,CAAOuC,gBAAiB,CAAAlG,MAAA,CAAOkB,KAAK,CAAA,CAAA;AACjD,MAAA,IAAAmF,KAAA,GAA0BJ,QAAQ,EAAC;QAA3BK,KAAA,GAAAD,KAAA,CAAAC,KAAA;QAAOC,MAAO,GAAAF,KAAA,CAAPE,MAAO,CAAA;MAEf,OAAA;QACLD,KAAO,EAAA,EAAEnD,aAAc,CAAAmD,KAAK,CAAK,IAAA,CAAA,CAAA;AACjCC,QAAAA,MAAQ,EAAA,EAAEpD,aAAc,CAAAoD,MAAM,CAAK,IAAA,CAAA,CAAA;OACrC,CAAA;KACF,CAAA;AAEA,IAAA,IAAMR,uBAAuB,SAAvBA,uBAA6B;AACjC,MAAA,IAAAS,kBAAA,GAA0BJ,iBAAkB,EAAA;QAApCE,KAAA,GAAAE,kBAAA,CAAAF,KAAA;QAAOC,MAAO,GAAAC,kBAAA,CAAPD,MAAO,CAAA;AAEtB1F,MAAAA,YAAA,CAAaK,MAAMJ,CAAI,GAAAwF,KAAA,CAAA;AACvBzF,MAAAA,YAAA,CAAaK,MAAMH,CAAI,GAAAwF,MAAA,CAAA;AAEvBvF,MAAAA,SAAA,CAAUE,MAAMJ,CAAI,GAAAwF,KAAA,CAAA;AACpBtF,MAAAA,SAAA,CAAUE,MAAMH,CAAI,GAAAwF,MAAA,CAAA;KACtB,CAAA;AAEAE,IAAAA,KAAA,CACE,YAAA;MAAA,OAAMhH,KAAM,CAAAiH,KAAA,CAAA;AAAA,KAAA,EACZ,YAAM;AACiBX,MAAAA,oBAAA,EAAA,CAAA;AACvB,KACF,CAAA,CAAA;AAEA,IAAA,OAAO,YAAM;AACL,MAAA,IAAAY,IAAA,GAAO,SAAPA,IAAAA,GAAA;QAAA,OAAa/G,cAAA,CAAe,MAAM,CAAA,CAAA;AAAA,OAAA,CAAA;AAClC,MAAA,IAAAgH,cAAA,GAAAC,WAAA,CAAAC,MAAA,EAAAC,UAAA,CAAA;AAAA,QAAA,MAAA,EAEG,OAAA;AAAA,QAAA,OAAA,EACC,SACN;AAAA,QAAA,OAAA,EAAOtH,KAAM,CAAAuH,IAAA,GAAO,OAAU,GAAA,QAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArB,MAAA,CACpB7F,QAAA,CAASoB,KACd,EAAA,UAAA,CAAA;OAAAzB,EAAAA,KAAA,CAAMwH,WACX,EAAA;AAAA,QAAA,MAAA,EAAMN;aACDzG,EAAAA,YAAAA;AAAA,OAAA,CAAA,EAAA;AAAAgH,QAAAA,OAAA,WAAAC,QAAA,GAAA;UAAA,OAEJ1H,CAAAA,KAAM,CAAAuH,IAAA,CAAA,CAAA;AAAA,SAAA;OATR,CAAA,CAAA;AAaG,MAAA,IAAAI,UAAA,GAAaxH,eAAe,SAAS,CAAA,CAAA;AAC3C,MAAA,OAAAiH,WAAA,CAAA,KAAA,EAAA;QAAA,OAEWjB,EAAAA,UAAA,CAAW1E;iBACXT,OAAA,CAAQS,KAAS,IAAAzB,KAAA,CAAMuC,SAAY,GAAAwD,QAAA,CAAStE,KAAQ,GAAAzB,KAAA,CAAMiH;mBACxDtG,WAAA;AAAA,QAAA,cAAA,EACKmB,YAAA;AAAA,QAAA,aAAA,EACDM,WAAA;AAAA,QAAA,YAAA,EACD2C,UAAA;QAAA,KACPxE,EAAAA,MAAAA;OAEJoH,EAAAA,CAAAA,UAAA,GAAAP,WAAA,CAAA,KAAA,EAAA;QAAA,KAAuB1G,EAAAA,aAAAA;OAAgBiH,EAAAA,CAAAA,UAAA,KAAoBR;KAGlE,CAAA;AACF,GAAA;AACF,CAAC,CAAA;;;;"}