1 line
23 KiB
Plaintext
Executable File
1 line
23 KiB
Plaintext
Executable File
{"version":3,"file":"tab-nav.mjs","names":["computed","defineComponent","inject","nextTick","onMounted","onUpdated","ref","shallowRef","triggerRef","watch","createVNode","_createVNode","useDocumentVisibility","useElementSize","useResizeObserver","useWindowFocus","buildProps","capitalize","definePropType","getEventCode","mutable","rAF","throwError","EVENT_CODE","ElIcon","ArrowLeft","ArrowRight","Close","useNamespace","useWheel","clamp","TabBar","tabsRootContextKey","tabNavProps","panes","type","Array","default","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","name","props","emits","setup","expose","emit","rootTabs","ns","visibility","focused","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","isHorizontal","includes","tabPosition","sizeName","value","navStyle","dir","transform","width","navContainerWidth","height","navContainerHeight","navWidth","navHeight","box","navContainerSize","navSize","onWheel","atStartEdge","atEndEdge","layout","offset","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","event","code","step","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","setTimeout","tabListRef","scheduleRender","scrollBtn","e","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace"],"sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\ninterface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: [String, Number],\n default: '',\n },\n editable: Boolean,\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\n }\n )\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n props.stretch && tabBarRef.value?.update()\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && props.editable))\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, tabName)}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus()\n emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n {props.panes.length > 0 ? (\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n onWheel={onWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkDA,MAAaiC,cAAcjB,WAAW;CACpCkB,OAAO;EACLC,MAAMjB,eAAkCkB,MAAM;EAC9CC,eAAejB,QAAQ,EAAW,CAAA;EACnC;CACDkB,aAAa;EACXH,MAAM,CAACI,QAAQC,OAAO;EACtBH,SAAS;EACV;CACDI,UAAUC;CACVP,MAAM;EACJA,MAAMI;EACNI,QAAQ;GAAC;GAAQ;GAAe;GAAG;EACnCN,SAAS;EACV;CACDO,SAASF;CAITG,UAAU;EACRV,MAAM,CAACI,QAAQC,OAAO;EACtBH,SAASS;EACX;CACQ,CAAC;AAEX,MAAaC,cAAc;CACzBC,WAAWC,KAAsBC,SAAsBC,OACrDA,cAAcC;CAChBC,YAAYJ,KAAsBE,OAAcA,cAAcC;CAC/D;AAMD,MAAME,iBAAiB;AACvB,MAAMC,SAAStD,gCAAgB;CAC7BuD,MAAMF;CACNG,OAAOxB;CACPyB,OAAOX;CACPY,MAAMF,OAAO,EAAEG,QAAQC,QAAQ;EAC7B,MAAMC,WAAW5D,OAAO8B,mBAAmB;AAC3C,MAAI,CAAC8B,SAAUxC,YAAWgC,gBAAgB,iCAAiC;EAE3E,MAAMS,KAAKnC,aAAa,OAAO;EAC/B,MAAMoC,aAAapD,uBAAuB;EAC1C,MAAMqD,UAAUlD,gBAAgB;EAEhC,MAAMmD,aAAa5D,KAAqB;EACxC,MAAM6D,OAAO7D,KAAqB;EAClC,MAAM8D,MAAM9D,KAAqB;EACjC,MAAM+D,aAAa/D,IAA4C,EAAE,CAAC;EAElE,MAAMgE,YAAYhE,KAAqB;EAEvC,MAAMiE,aAAajE,IAAwB,MAAM;EACjD,MAAMkE,YAAYlE,IAAI,EAAE;EACxB,MAAMmE,UAAUnE,IAAI,MAAM;EAC1B,MAAMoE,YAAYpE,IAAI,KAAK;EAC3B,MAAMqE,UAAUpE,YAAY;EAE5B,MAAMqE,eAAe5E,eACnB,CAAC,OAAO,SAAS,CAAC6E,SAASf,SAASL,MAAMqB,YAC5C,CAAC;EAED,MAAMC,WAAW/E,eAAgB4E,aAAaI,QAAQ,UAAU,SAAU;EAC1E,MAAMC,WAAWjF,eAA8B;AAE7C,UAAO,EACLmF,WAAW,YAFDJ,SAASC,UAAU,UAAU,MAAM,IAEnB,IAAKR,UAAUQ,MAAK,MAC/C;IACD;EAEF,MAAM,EAAEI,OAAOC,mBAAmBC,QAAQC,uBACxC1E,eAAeqD,WAAW;EAC5B,MAAM,EAAEkB,OAAOI,UAAUF,QAAQG,cAAc5E,eAC7CsD,MACA;GAAEiB,OAAO;GAAGE,QAAQ;GAAG,EACvB,EAAEI,KAAK,cACT,CAAC;EAED,MAAMC,mBAAmB3F,eACvB4E,aAAaI,QAAQK,kBAAkBL,QAAQO,mBAAmBP,MACnE;EACD,MAAMY,UAAU5F,eACd4E,aAAaI,QAAQQ,SAASR,QAAQS,UAAUT,MACjD;EAED,MAAM,EAAEa,YAAYhE,SAClB;GACEiE,aAAa9F,eAAewE,UAAUQ,SAAS,EAAE;GACjDe,WAAW/F,eACH4F,QAAQZ,QAAQR,UAAUQ,SAASW,iBAAiBX,MAC3D;GACDgB,QAAQhG,eACN4E,aAAaI,QAAQ,eAAe,WACtC;GACD,GACAiB,WAAW;AACVzB,aAAUQ,QAAQlD,QAChB0C,UAAUQ,QAAQiB,QAClB,GACAL,QAAQZ,QAAQW,iBAAiBX,MAClC;IAEJ;EAED,MAAMkB,mBAAmB;AACvB,OAAI,CAAChC,WAAWc,MAAO;GAEvB,MAAMmB,gBACJjC,WAAWc,MAAM,SAAS/D,WAAW8D,SAASC,MAAM;GACtD,MAAMoB,gBAAgB5B,UAAUQ;AAEhC,OAAI,CAACoB,cAAe;AAKpB5B,aAAUQ,QAFRoB,gBAAgBD,gBAAgBC,gBAAgBD,gBAAgB;;EAKpE,MAAMG,mBAAmB;AACvB,OAAI,CAACpC,WAAWc,SAAS,CAACb,KAAKa,MAAO;GAEtC,MAAMY,UAAUzB,KAAKa,MAAM,SAAS/D,WAAW8D,SAASC,MAAM;GAC9D,MAAMmB,gBACJjC,WAAWc,MAAM,SAAS/D,WAAW8D,SAASC,MAAM;GACtD,MAAMoB,gBAAgB5B,UAAUQ;AAEhC,OAAIY,UAAUQ,iBAAiBD,cAAe;AAO9C3B,aAAUQ,QAJRY,UAAUQ,gBAAgBD,gBAAgB,IACtCC,gBAAgBD,gBAChBP,UAAUO;;EAKlB,MAAMI,oBAAoB,YAAY;GACpC,MAAMC,MAAMrC,KAAKa;AACjB,OAAI,CAACT,WAAWS,SAAS,CAACZ,IAAIY,SAAS,CAACd,WAAWc,SAAS,CAACwB,IAAK;AAElE,SAAMrG,UAAU;GAEhB,MAAMsG,YAAYpC,WAAWW,MAAMvB,MAAMnB;AACzC,OAAI,CAACmE,UAAW;GAEhB,MAAMC,YAAYxC,WAAWc;GAE7B,MAAM2B,oBAAoBF,UAAUG,uBAAuB;GAC3D,MAAMC,oBAAoBH,UAAUE,uBAAuB;GAC3D,MAAME,YAAYlC,aAAaI,QAC3BwB,IAAIO,cAAcF,kBAAkBzB,QACpCoB,IAAIQ,eAAeH,kBAAkBvB;GACzC,MAAMc,gBAAgB5B,UAAUQ;GAChC,IAAIqB,YAAYD;AAEhB,OAAIxB,aAAaI,OAAO;AACtB,QAAI2B,kBAAkBM,OAAOJ,kBAAkBI,KAC7CZ,aACED,iBAAiBS,kBAAkBI,OAAON,kBAAkBM;AAEhE,QAAIN,kBAAkBO,QAAQL,kBAAkBK,MAC9Cb,aACED,gBAAgBO,kBAAkBO,QAAQL,kBAAkBK;UAE3D;AACL,QAAIP,kBAAkBQ,MAAMN,kBAAkBM,IAC5Cd,aACED,iBAAiBS,kBAAkBM,MAAMR,kBAAkBQ;AAE/D,QAAIR,kBAAkBS,SAASP,kBAAkBO,OAC/Cf,aACED,iBACCO,kBAAkBS,SAASP,kBAAkBO;;AAGpDf,eAAYgB,KAAKC,IAAIjB,WAAW,EAAE;AAClC7B,aAAUQ,QAAQqC,KAAKE,IAAIlB,WAAWS,UAAU;;EAGlD,MAAMU,eAAe;AACnB,OAAI,CAACrD,KAAKa,SAAS,CAACd,WAAWc,MAAO;AAEtCvB,SAAMb,WAAW0B,UAAUU,OAAOwC,QAAQ;GAE1C,MAAM5B,UAAUzB,KAAKa,MAAM,SAAS/D,WAAW8D,SAASC,MAAM;GAC9D,MAAMmB,gBACJjC,WAAWc,MAAM,SAAS/D,WAAW8D,SAASC,MAAM;GACtD,MAAMoB,gBAAgB5B,UAAUQ;AAEhC,OAAImB,gBAAgBP,SAAS;AAC3BrB,eAAWS,QAAQT,WAAWS,SAAS,EAAE;AACzCT,eAAWS,MAAMyC,OAAOrB;AACxB7B,eAAWS,MAAM0C,OAAOtB,gBAAgBD,gBAAgBP;AACxD,QAAIA,UAAUQ,gBAAgBD,cAC5B3B,WAAUQ,QAAQY,UAAUO;UAEzB;AACL5B,eAAWS,QAAQ;AACnB,QAAIoB,gBAAgB,EAClB5B,WAAUQ,QAAQ;;;EAKxB,MAAM2C,aAAaC,UAAyB;GAC1C,MAAMC,OAAO1G,aAAayG,MAAM;GAChC,IAAIE,OAAO;AAEX,WAAQD,MAAR;IACE,KAAKtG,WAAW0F;IAChB,KAAK1F,WAAWwG;AACdD,YAAO;AACP;IACF,KAAKvG,WAAW2F;IAChB,KAAK3F,WAAWyG;AACdF,YAAO;AACP;IACF,QACE;;GAGJ,MAAMG,UAAU7F,MAAM8F,KAElBN,MAAMO,cACNC,iBAAiC,+BACrC,CAAC;GAED,IAAII,YADiBP,QAAQK,QAAQV,MAAMW,OAAyB,GACrCT;AAE/B,OAAIU,YAAY,EACdA,aAAYP,QAAQQ,SAAS;YACpBD,aAAaP,QAAQQ,OAC9BD,aAAY;AAGdP,WAAQO,WAAWE,MAAM,EAAEC,eAAe,MAAM,CAAC;AACjDV,WAAQO,WAAWI,OAAO;AAC1BC,aAAU;;EAGZ,MAAMA,iBAAiB;AACrB,OAAInE,UAAUM,MAAOP,SAAQO,QAAQ;;EAEvC,MAAM8D,oBAAqBrE,QAAQO,QAAQ;EAE3C,MAAM+D,WACJC,IACAC,QACG;AACH5E,cAAWW,MAAMiE,OAAOD;;EAG1B,MAAME,iBAAiB,YAAY;AACjC,SAAM/I,UAAU;AAGhBsG,GADkBpC,WAAWW,MAAMvB,MAAMnB,cAC9BoG,MAAM,EAAEC,eAAe,MAAM,CAAC;;AAG3ClI,QAAMuD,aAAaA,eAAe;AAChC,OAAIA,eAAe,SACjBU,WAAUM,QAAQ;YACThB,eAAe,UACxBmF,kBAAkBzE,UAAUM,QAAQ,MAAO,GAAG;IAEhD;AACFvE,QAAMwD,UAAUA,YAAY;AAC1B,OAAIA,QACFkF,kBAAkBzE,UAAUM,QAAQ,MAAO,GAAG;OAE9CN,WAAUM,QAAQ;IAEpB;AAEFlE,oBAAkBsD,WAAW;AAC3B/C,OAAImG,OAAO;IACX;AAEFpH,kBAAgB+I,iBAAiB5C,mBAAmB,EAAE,EAAE,CAAC;AACzDlG,kBAAgBmH,QAAQ,CAAC;AAEzB5D,SAAO;GACL2C;GACAuC;GACAI;GACAE,YAAYjF;GACZG;GACA+E,sBAAsB7I,WAAWmE,QAAO;GACzC,CAAC;AAEF,eAAa;GACX,MAAM2E,YAAY/E,WAAWS,QACzB,CAAArE,YAAA,QAAA;IAAA,SAEW,CACLoD,GAAGwF,EAAE,WAAW,EAChBxF,GAAGyF,GAAG,YAAY,CAACjF,WAAWS,MAAMyC,KAAK,CAC1C;IAAA,WACQvB;IAAU,EAAA,CAAAvF,YAAAa,QAAA,MAAA,EAAAa,eAAA,CAAA1B,YAAAc,WAAA,MAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAAd,YAAA,QAAA;IAAA,SAOZ,CACLoD,GAAGwF,EAAE,WAAW,EAChBxF,GAAGyF,GAAG,YAAY,CAACjF,WAAWS,MAAM0C,KAAK,CAC1C;IAAA,WACQpB;IAAU,EAAA,CAAA3F,YAAAa,QAAA,MAAA,EAAAa,eAAA,CAAA1B,YAAAe,YAAA,MAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAMtB,GACD;GAEJ,MAAM+H,OAAOhG,MAAMvB,MAAMwH,KAAKC,MAAMC,UAAU;IAC5C,MAAMC,MAAMF,KAAKE;IACjB,MAAMC,WAAWH,KAAKlG,MAAMqG;IAC5B,MAAM5G,UAAUyG,KAAKlG,MAAMD,QAAQmG,KAAKC,SAAS,GAAGA;IACpD,MAAMG,WACJ,CAACD,aACAH,KAAKK,cAAeL,KAAKlG,MAAMsG,aAAa,SAAStG,MAAMhB;AAC9DkH,SAAKC,QAAQ,GAAGA;IAEhB,MAAMK,WAAWF,WAAQpJ,YAAAa,QAAA;KAAA,SAAA;KAAA,YAMX2B,OAAmBU,KAAK,aAAa8F,MAAMxG,GAAE;KAAC,EAAA,EAAAd,eAAA,CAAA1B,YAAAgB,OAAA,MAAA,KAAA,CAAA,EAAA,CAAA,GAIxD;IAEJ,MAAMuI,kBAAkBP,KAAKQ,MAAMC,SAAS,IAAIT,KAAKlG,MAAM2G;IAC3D,MAAMvH,WACJ,CAACiH,YAAYH,KAAKU,SACb5G,MAAMZ,YAAYiB,SAASL,MAAMZ,WAClC;AAEN,WAAAlC,YAAA,OAAA;KAAA,QAEUqI,OAAOD,QAAQC,IAAI9F,QAAQ;KAAA,SAC1B;MACLa,GAAGwF,EAAE,OAAO;MACZxF,GAAGyF,GAAG1F,SAASL,MAAMqB,YAAY;MACjCf,GAAGyF,GAAG,UAAUG,KAAKU,OAAO;MAC5BtG,GAAGyF,GAAG,YAAYM,SAAS;MAC3B/F,GAAGyF,GAAG,YAAYO,SAAS;MAC3BhG,GAAGyF,GAAG,SAAS/E,QAAQO,MAAM;MAC9B;KAAA,MACG,OAAO9B;KAAS,OACf,OAAO2G;KAAK,iBACF,QAAQ3G;KAAS,QAAA;KAAA,iBAEjByG,KAAKU;KAAM,YAChBxH;KAAQ,iBACHgG,UAAU;KAAA,gBACXC,aAAa;KAAA,YACjB3F,OAAmB;AAC3B2F,mBAAa;AACbjF,WAAK,YAAY8F,MAAMzG,SAASC,GAAG;;KACpC,cACWA,OAAsB;MAChC,MAAM0E,OAAO1G,aAAagC,GAAG;AAC7B,UACE4G,aACClC,SAAStG,WAAWiJ,UAAU3C,SAAStG,WAAWkJ,WAEnD5G,MAAK,aAAa8F,MAAMxG,GAAG;;KAE9B,EAAA,CAAA,GAEG,CAAC+G,iBAAiBD,SAAS,CAAA,CAAA;KAGnC;AAIFtF,WAAQK;AAER,UAAArE,YAAA,OAAA;IAAA,OAESyD;IAAG,SACD;KACLL,GAAGwF,EAAE,WAAW;KAChBxF,GAAGyF,GAAG,cAAc,CAAC,CAACjF,WAAWS,MAAM;KACvCjB,GAAGyF,GAAG1F,SAASL,MAAMqB,YAAY;KAAA;IAClC,EAAA,CAEAwE,WAAS3I,YAAA,OAAA;IAAA,SACEoD,GAAGwF,EAAE,aAAa;IAAA,OAAOrF;IAAU,EAAA,CAC5CT,MAAMvB,MAAMuG,SAAS,IAAC9H,YAAA,OAAA;IAAA,SAEZ;KACLoD,GAAGwF,EAAE,MAAM;KACXxF,GAAGyF,GAAG1F,SAASL,MAAMqB,YAAY;KACjCf,GAAGyF,GACD,WACA/F,MAAMb,WACJ,CAAC,OAAO,SAAS,CAACiC,SAASf,SAASL,MAAMqB,YAC9C,CAAC;KACF;IAAA,OACIX;IAAI,SACFc,SAASD;IAAK,QAAA;IAAA,aAEV2C;IAAS,WACX9B;IAAO,EAAA,CAAA,GAEZ,CACF,CAACpC,MAAMtB,OAAIxB,YAAAoB,iBAAA;IAAA,OAEFuC;IAAS,QACR,CAAC,GAAGb,MAAMvB,MAAM;IAAA,WACbmC,WAAWW;IAAK,EAAA,KAAA,GAEzB,MACJyE,KACD,CAAA,CAAA,GAED,KAAI,CAAA,CAAA,CAAA;;;CAMnB,CAAC"} |