element-plus
Version:
A Component Library for Vue 3
1 lines • 17.7 kB
Source Map (JSON)
{"version":3,"file":"tabs.mjs","sources":["../../../../../../packages/components/tabs/src/tabs.tsx"],"sourcesContent":["import {\n computed,\n createVNode,\n defineComponent,\n getCurrentInstance,\n nextTick,\n provide,\n ref,\n renderSlot,\n watch,\n} from 'vue'\nimport { omit } from 'lodash-unified'\nimport {\n buildProps,\n definePropType,\n getEventCode,\n isNumber,\n isString,\n isUndefined,\n} from '@element-plus/utils'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport ElIcon from '@element-plus/components/icon'\nimport { Plus } from '@element-plus/icons-vue'\nimport { useNamespace, useOrderedChildren } from '@element-plus/hooks'\nimport { tabsRootContextKey } from './constants'\nimport TabNav from './tab-nav'\n\nimport type { ExtractPropTypes, ExtractPublicPropTypes, VNode } from 'vue'\nimport type { Awaitable } from '@element-plus/utils'\nimport type { TabNavInstance } from './tab-nav'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\nexport const tabsProps = buildProps({\n /**\n * @description type of Tab\n */\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n /**\n * @description whether Tab is closable\n */\n closable: Boolean,\n /**\n * @description whether Tab is addable\n */\n addable: Boolean,\n /**\n * @description binding value, name of the selected tab\n */\n modelValue: {\n type: [String, Number],\n },\n /**\n * @description initial value when `model-value` is not set\n */\n defaultValue: {\n type: [String, Number],\n },\n /**\n * @description whether Tab is addable and closable\n */\n editable: Boolean,\n /**\n * @description position of tabs\n */\n tabPosition: {\n type: String,\n values: ['top', 'right', 'bottom', 'left'],\n default: 'top',\n },\n /**\n * @description hook function before switching tab. If `false` is returned or a `Promise` is returned and then is rejected, switching will be prevented\n */\n beforeLeave: {\n type: definePropType<\n (newName: TabPaneName, oldName: TabPaneName) => Awaitable<void | boolean>\n >(Function),\n default: () => true,\n },\n /**\n * @description whether width of tab automatically fits its container\n */\n stretch: Boolean,\n /**\n * @description tabs tabindex\n */\n tabindex: {\n type: [String, Number],\n default: 0,\n },\n} as const)\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\nexport type TabsPropsPublic = ExtractPublicPropTypes<typeof tabsProps>\n\nconst isPaneName = (value: unknown): value is string | number =>\n isString(value) || isNumber(value)\n\nexport const tabsEmits = {\n [UPDATE_MODEL_EVENT]: (name: TabPaneName) => isPaneName(name),\n tabClick: (pane: TabsPaneContext, ev: Event) => ev instanceof Event,\n tabChange: (name: TabPaneName) => isPaneName(name),\n edit: (paneName: TabPaneName | undefined, action: 'remove' | 'add') =>\n ['remove', 'add'].includes(action),\n tabRemove: (name: TabPaneName) => isPaneName(name),\n tabAdd: () => true,\n}\nexport type TabsEmits = typeof tabsEmits\n\nexport type TabsPanes = Record<number, TabsPaneContext>\n\nconst Tabs = defineComponent({\n name: 'ElTabs',\n\n props: tabsProps,\n emits: tabsEmits,\n\n setup(props, { emit, slots, expose }) {\n const ns = useNamespace('tabs')\n\n const isVertical = computed(() =>\n ['left', 'right'].includes(props.tabPosition)\n )\n\n const {\n children: panes,\n addChild: registerPane,\n removeChild: unregisterPane,\n ChildrenSorter: PanesSorter,\n } = useOrderedChildren<TabsPaneContext>(getCurrentInstance()!, 'ElTabPane')\n\n const nav$ = ref<TabNavInstance>()\n const currentName = ref<TabPaneName>(\n (isUndefined(props.modelValue) ? props.defaultValue : props.modelValue) ??\n '0'\n )\n\n const setCurrentName = async (value?: TabPaneName, trigger = false) => {\n // should do nothing.\n if (currentName.value === value || isUndefined(value)) return\n\n try {\n let canLeave\n if (props.beforeLeave) {\n const result = props.beforeLeave(value, currentName.value)\n canLeave = result instanceof Promise ? await result : result\n } else {\n canLeave = true\n }\n\n if (canLeave !== false) {\n const isFocusInsidePane = panes.value\n .find((item) => item.paneName === currentName.value)\n ?.isFocusInsidePane()\n\n currentName.value = value\n if (trigger) {\n emit(UPDATE_MODEL_EVENT, value)\n emit('tabChange', value)\n }\n\n nav$.value?.removeFocus?.()\n if (isFocusInsidePane) {\n nav$.value?.focusActiveTab()\n }\n }\n } catch {}\n }\n\n const handleTabClick = (\n tab: TabsPaneContext,\n tabName: TabPaneName,\n event: Event\n ) => {\n if (tab.props.disabled) return\n emit('tabClick', tab, event)\n setCurrentName(tabName, true)\n }\n\n const handleTabRemove = (pane: TabsPaneContext, ev: Event) => {\n if (pane.props.disabled || isUndefined(pane.props.name)) return\n ev.stopPropagation()\n emit('edit', pane.props.name, 'remove')\n emit('tabRemove', pane.props.name)\n }\n\n const handleTabAdd = () => {\n emit('edit', undefined, 'add')\n emit('tabAdd')\n }\n\n const handleKeydown = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code))\n handleTabAdd()\n }\n\n const swapChildren = (\n vnode: VNode & {\n el: HTMLDivElement\n children: VNode<HTMLDivElement>[]\n }\n ) => {\n const actualFirstChild = vnode.el.firstChild!\n const firstChild = ['bottom', 'right'].includes(props.tabPosition)\n ? vnode.children[0].el!\n : vnode.children[1].el!\n\n if (actualFirstChild !== firstChild) {\n actualFirstChild.before(firstChild)\n }\n }\n\n watch(\n () => props.modelValue,\n (modelValue) => setCurrentName(modelValue)\n )\n\n watch(currentName, async () => {\n await nextTick()\n nav$.value?.scrollToActiveTab()\n })\n\n provide(tabsRootContextKey, {\n props,\n currentName,\n registerPane,\n unregisterPane,\n nav$,\n })\n\n expose({\n currentName,\n get tabNavRef() {\n return omit(nav$.value, ['scheduleRender'])\n },\n })\n\n return () => {\n const addSlot = slots['add-icon']\n const newButton =\n props.editable || props.addable ? (\n <div\n class={[\n ns.e('new-tab'),\n isVertical.value && ns.e('new-tab-vertical'),\n ]}\n tabindex={props.tabindex}\n onClick={handleTabAdd}\n onKeydown={handleKeydown}\n >\n {addSlot ? (\n renderSlot(slots, 'add-icon')\n ) : (\n <ElIcon class={ns.is('icon-plus')}>\n <Plus />\n </ElIcon>\n )}\n </div>\n ) : null\n\n const tabNav = () => (\n <TabNav\n ref={nav$}\n currentName={currentName.value}\n editable={props.editable}\n type={props.type}\n panes={panes.value}\n stretch={props.stretch}\n onTabClick={handleTabClick}\n onTabRemove={handleTabRemove}\n />\n )\n\n const header = (\n <div\n class={[\n ns.e('header'),\n isVertical.value && ns.e('header-vertical'),\n ns.is(props.tabPosition),\n ]}\n >\n {createVNode(PanesSorter, null, {\n default: tabNav,\n $stable: true,\n })}\n {newButton}\n </div>\n )\n\n const panels = (\n <div class={ns.e('content')}>{renderSlot(slots, 'default')}</div>\n )\n\n return (\n <div\n class={[\n ns.b(),\n ns.m(props.tabPosition),\n {\n [ns.m('card')]: props.type === 'card',\n [ns.m('border-card')]: props.type === 'border-card',\n },\n ]}\n // @ts-ignore\n onVnodeMounted={swapChildren}\n onVnodeUpdated={swapChildren}\n >\n {panels}\n {header}\n </div>\n )\n }\n },\n})\n\nexport type TabsInstance = InstanceType<typeof Tabs> & {\n currentName: TabPaneName\n tabNavRef: TabNavInstance | undefined\n}\n\nexport default Tabs\n"],"names":["tabsProps","buildProps","type","String","values","default","closable","Boolean","addable","modelValue","Number","defaultValue","editable","tabPosition","beforeLeave","definePropType","Function","stretch","tabindex","isPaneName","value","isString","isNumber","tabsEmits","UPDATE_MODEL_EVENT","name","tabClick","pane","ev","Event","tabChange","edit","paneName","action","includes","tabRemove","tabAdd","Tabs","defineComponent","props","emits","setup","emit","slots","expose","ns","useNamespace","isVertical","computed","children","panes","addChild","registerPane","removeChild","unregisterPane","ChildrenSorter","PanesSorter","useOrderedChildren","getCurrentInstance","nav$","ref","currentName","isUndefined","setCurrentName","trigger","_a","canLeave","result","Promise","isFocusInsidePane","find","item","removeFocus","focusActiveTab","handleTabClick","tab","tabName","event","disabled","handleTabRemove","stopPropagation","handleTabAdd","undefined","handleKeydown","code","getEventCode","EVENT_CODE","enter","numpadEnter","swapChildren","vnode","actualFirstChild","el","firstChild","before","watch","nextTick","scrollToActiveTab","provide","tabsRootContextKey","tabNavRef","omit","addSlot","newButton","_createVNode","e","renderSlot","ElIcon","is","Plus","tabNav","TabNav","header","createVNode","$stable","panels","b","m"],"mappings":";;;;;;;;;;;;;;;AAgCO,MAAMA,YAAYC,UAAW,CAAA;AAAA,EAIlCC,IAAM,EAAA;AAAA,IACJA,IAAMC,EAAAA,MAAAA;AAAAA,IACNC,MAAQ,EAAA,CAAC,MAAQ,EAAA,aAAA,EAAe,EAAE,CAAA;AAAA,IAClCC,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EAIAC,QAAUC,EAAAA,OAAAA;AAAAA,EAIVC,OAASD,EAAAA,OAAAA;AAAAA,EAITE,UAAY,EAAA;AAAA,IACVP,IAAAA,EAAM,CAACC,MAAAA,EAAQO,MAAM,CAAA;AAAA,GACvB;AAAA,EAIAC,YAAc,EAAA;AAAA,IACZT,IAAAA,EAAM,CAACC,MAAAA,EAAQO,MAAM,CAAA;AAAA,GACvB;AAAA,EAIAE,QAAUL,EAAAA,OAAAA;AAAAA,EAIVM,WAAa,EAAA;AAAA,IACXX,IAAMC,EAAAA,MAAAA;AAAAA,IACNC,MAAQ,EAAA,CAAC,KAAO,EAAA,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,IACzCC,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EAIAS,WAAa,EAAA;AAAA,IACXZ,IAAAA,EAAMa,eAEJC,QAAQ,CAAA;AAAA,IACVX,SAASA,MAAM,IAAA;AAAA,GACjB;AAAA,EAIAY,OAASV,EAAAA,OAAAA;AAAAA,EAITW,QAAU,EAAA;AAAA,IACRhB,IAAAA,EAAM,CAACC,MAAAA,EAAQO,MAAM,CAAA;AAAA,IACrBL,OAAS,EAAA,CAAA;AAAA,GACX;AACF,CAAU,EAAA;AAIV,MAAMc,aAAcC,CAClBC,KAAAA,KAAAA,QAAAA,CAASD,KAAK,CAAA,IAAKE,SAASF,KAAK,CAAA,CAAA;AAE5B,MAAMG,SAAY,GAAA;AAAA,EACvB,CAACC,kBAAAA,GAAsBC,CAAsBN,IAAAA,KAAAA,UAAAA,CAAWM,IAAI,CAAA;AAAA,EAC5DC,QAAUA,EAAAA,CAACC,IAAuBC,EAAAA,EAAAA,KAAcA,EAAcC,YAAAA,KAAAA;AAAAA,EAC9DC,SAAAA,EAAYL,CAAsBN,IAAAA,KAAAA,UAAAA,CAAWM,IAAI,CAAA;AAAA,EACjDM,IAAAA,EAAMA,CAACC,QAAmCC,EAAAA,MAAAA,KACxC,CAAC,QAAU,EAAA,KAAK,CAAEC,CAAAA,QAAAA,CAASD,MAAM,CAAA;AAAA,EACnCE,SAAAA,EAAYV,CAAsBN,IAAAA,KAAAA,UAAAA,CAAWM,IAAI,CAAA;AAAA,EACjDW,QAAQA,MAAM,IAAA;AAChB,EAAA;AAKA,MAAMC,OAAOC,eAAgB,CAAA;AAAA,EAC3Bb,IAAM,EAAA,QAAA;AAAA,EAENc,KAAOvC,EAAAA,SAAAA;AAAAA,EACPwC,KAAOjB,EAAAA,SAAAA;AAAAA,EAEPkB,MAAMF,KAAO,EAAA;AAAA,IAAEG,IAAAA;AAAAA,IAAMC,KAAAA;AAAAA,IAAOC,MAAAA;AAAAA,GAAU,EAAA;AAvHxC,IAAA,IAAA,EAAA,CAAA;AAwHI,IAAMC,MAAAA,EAAAA,GAAKC,aAAa,MAAM,CAAA,CAAA;AAE9B,IAAMC,MAAAA,UAAAA,GAAaC,QAAS,CAAA,MAC1B,CAAC,MAAA,EAAQ,OAAO,CAAEd,CAAAA,QAAAA,CAASK,KAAM1B,CAAAA,WAAW,CAC9C,CAAA,CAAA;AAEA,IAAM,MAAA;AAAA,MACJoC,QAAUC,EAAAA,KAAAA;AAAAA,MACVC,QAAUC,EAAAA,YAAAA;AAAAA,MACVC,WAAaC,EAAAA,cAAAA;AAAAA,MACbC,cAAgBC,EAAAA,WAAAA;AAAAA,KACdC,GAAAA,kBAAAA,CAAoCC,kBAAmB,EAAA,EAAI,WAAW,CAAA,CAAA;AAE1E,IAAA,MAAMC,OAAOC,GAAoB,EAAA,CAAA;AACjC,IAAMC,MAAAA,WAAAA,GAAcD,GACjBE,CAAAA,CAAAA,EAAAA,GAAAA,WAAAA,CAAYvB,KAAM9B,CAAAA,UAAU,CAAI8B,GAAAA,KAAAA,CAAM5B,YAAe4B,GAAAA,KAAAA,CAAM9B,UAA3DqD,KAAAA,IAAAA,GAAAA,EAAAA,GACC,GACJ,CAAA,CAAA;AAEA,IAAA,MAAMC,cAAiB,GAAA,OAAO3C,KAAqB4C,EAAAA,OAAAA,GAAU,KAAU,KAAA;AA3I3E,MAAA,IAAAC,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA6IM,MAAA,IAAIJ,WAAYzC,CAAAA,KAAAA,KAAUA,KAAS0C,IAAAA,WAAAA,CAAY1C,KAAK,CAAA;AAAG,QAAA,OAAA;AAEvD,MAAI,IAAA;AACF,QAAI8C,IAAAA,QAAAA,CAAAA;AACJ,QAAA,IAAI3B,MAAMzB,WAAa,EAAA;AACrB,UAAA,MAAMqD,MAAS5B,GAAAA,KAAAA,CAAMzB,WAAYM,CAAAA,KAAAA,EAAOyC,YAAYzC,KAAK,CAAA,CAAA;AACzD8C,UAAWC,QAAAA,GAAAA,MAAAA,YAAkBC,OAAU,GAAA,MAAMD,MAASA,GAAAA,MAAAA,CAAAA;AAAAA,SACjD,MAAA;AACLD,UAAW,QAAA,GAAA,IAAA,CAAA;AAAA,SACb;AAEA,QAAA,IAAIA,aAAa,KAAO,EAAA;AACtB,UAAA,MAAMG,iBAAoBnB,GAAAA,CAAAA,GAAAA,GAAAA,KAAM9B,CAAAA,KAAAA,CAC7BkD,IAAMC,CAAAA,CAAAA,IAAAA,KAASA,IAAKvC,CAAAA,QAAAA,KAAa6B,WAAYzC,CAAAA,KAAK,CAD3B8B,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAEtBmB,CAAAA,iBAAAA,EAAAA,CAAAA;AAEJR,UAAAA,WAAAA,CAAYzC,KAAQA,GAAAA,KAAAA,CAAAA;AACpB,UAAA,IAAI4C,OAAS,EAAA;AACXtB,YAAAA,IAAAA,CAAKlB,oBAAoBJ,KAAK,CAAA,CAAA;AAC9BsB,YAAAA,IAAAA,CAAK,aAAatB,KAAK,CAAA,CAAA;AAAA,WACzB;AAEAuC,UAAKvC,CAAAA,EAAAA,GAAAA,CAAAA,EAAAA,GAAAA,IAAAA,CAAAA,KAAAA,KAALuC,mBAAYa,WAAZb,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAAA,CAAAA;AACA,UAAA,IAAIU,iBAAmB,EAAA;AACrBV,YAAAA,CAAAA,EAAAA,GAAAA,IAAAA,CAAKvC,UAALuC,IAAYc,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,cAAAA,EAAAA,CAAAA;AAAAA,WACd;AAAA,SACF;AAAA,eACM,CAAN,EAAA;AAAA,OAAO;AAAA,KACX,CAAA;AAEA,IAAA,MAAMC,cAAiBA,GAAAA,CACrBC,GACAC,EAAAA,OAAAA,EACAC,KACG,KAAA;AACH,MAAA,IAAIF,IAAIpC,KAAMuC,CAAAA,QAAAA;AAAU,QAAA,OAAA;AACxBpC,MAAK,IAAA,CAAA,UAAA,EAAYiC,KAAKE,KAAK,CAAA,CAAA;AAC3Bd,MAAAA,cAAAA,CAAea,SAAS,IAAI,CAAA,CAAA;AAAA,KAC9B,CAAA;AAEA,IAAMG,MAAAA,eAAAA,GAAkBA,CAACpD,IAAAA,EAAuBC,EAAc,KAAA;AAC5D,MAAA,IAAID,KAAKY,KAAMuC,CAAAA,QAAAA,IAAYhB,WAAYnC,CAAAA,IAAAA,CAAKY,MAAMd,IAAI,CAAA;AAAG,QAAA,OAAA;AACzDG,MAAAA,EAAAA,CAAGoD,eAAgB,EAAA,CAAA;AACnBtC,MAAAA,IAAAA,CAAK,MAAQf,EAAAA,IAAAA,CAAKY,KAAMd,CAAAA,IAAAA,EAAM,QAAQ,CAAA,CAAA;AACtCiB,MAAK,IAAA,CAAA,WAAA,EAAaf,IAAKY,CAAAA,KAAAA,CAAMd,IAAI,CAAA,CAAA;AAAA,KACnC,CAAA;AAEA,IAAA,MAAMwD,eAAeA,MAAM;AACzBvC,MAAK,IAAA,CAAA,MAAA,EAAQwC,QAAW,KAAK,CAAA,CAAA;AAC7BxC,MAAAA,IAAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACf,CAAA;AAEA,IAAA,MAAMyC,gBAAiBN,CAAyB,KAAA,KAAA;AAC9C,MAAMO,MAAAA,IAAAA,GAAOC,aAAaR,KAAK,CAAA,CAAA;AAC/B,MAAA,IAAI,CAACS,UAAWC,CAAAA,KAAAA,EAAOD,WAAWE,WAAW,CAAA,CAAEtD,SAASkD,IAAI,CAAA;AAC1DH,QAAa,YAAA,EAAA,CAAA;AAAA,KACjB,CAAA;AAEA,IAAA,MAAMQ,eACJC,CAIG,KAAA,KAAA;AACH,MAAMC,MAAAA,gBAAAA,GAAmBD,MAAME,EAAGC,CAAAA,UAAAA,CAAAA;AAClC,MAAA,MAAMA,UAAa,GAAA,CAAC,QAAU,EAAA,OAAO,EAAE3D,QAASK,CAAAA,KAAAA,CAAM1B,WAAW,CAAA,GAC7D6E,MAAMzC,QAAS,CAAA,CAAA,CAAA,CAAG2C,EAClBF,GAAAA,KAAAA,CAAMzC,SAAS,CAAG2C,CAAAA,CAAAA,EAAAA,CAAAA;AAEtB,MAAA,IAAID,qBAAqBE,UAAY,EAAA;AACnCF,QAAAA,gBAAAA,CAAiBG,OAAOD,UAAU,CAAA,CAAA;AAAA,OACpC;AAAA,KACF,CAAA;AAEAE,IAAAA,KAAAA,CACE,MAAMxD,KAAM9B,CAAAA,UAAAA,EACXA,CAAesD,UAAAA,KAAAA,cAAAA,CAAetD,UAAU,CAC3C,CAAA,CAAA;AAEAsF,IAAAA,KAAAA,CAAMlC,aAAa,YAAY;AA5NnC,MAAAI,IAAAA,GAAAA,CAAAA;AA6NM,MAAA,MAAM+B,QAAS,EAAA,CAAA;AACfrC,MAAAA,CAAAA,GAAAA,GAAAA,IAAAA,CAAKvC,KAALuC,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAYsC,CAAAA,iBAAAA,EAAAA,CAAAA;AAAAA,KACb,CAAA,CAAA;AAEDC,IAAAA,OAAAA,CAAQC,kBAAoB,EAAA;AAAA,MAC1B5D,KAAAA;AAAAA,MACAsB,WAAAA;AAAAA,MACAT,YAAAA;AAAAA,MACAE,cAAAA;AAAAA,MACAK,IAAAA;AAAAA,KACD,CAAA,CAAA;AAEDf,IAAO,MAAA,CAAA;AAAA,MACLiB,WAAAA;AAAAA,MACA,IAAIuC,SAAY,GAAA;AACd,QAAA,OAAOC,IAAK1C,CAAAA,IAAAA,CAAKvC,KAAO,EAAA,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAAA,OAC5C;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,MAAMkF,UAAU3D,KAAM,CAAA,UAAA,CAAA,CAAA;AACtB,MAAA,MAAM4D,YACJhE,KAAM3B,CAAAA,QAAAA,IAAY2B,KAAM/B,CAAAA,OAAAA,GAAOgG,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEpB,CACL3D,EAAAA,CAAG4D,CAAE,CAAA,SAAS,CACd1D,EAAAA,UAAAA,CAAW3B,KAASyB,IAAAA,EAAAA,CAAG4D,CAAE,CAAA,kBAAkB,CAAC,CAAA;AAAA,QAC7C,YACSlE,KAAMrB,CAAAA,QAAAA;AAAAA,QAAQ,SACf+D,EAAAA,YAAAA;AAAAA,QAAY,WACVE,EAAAA,aAAAA;AAAAA,OAAa,EAEvBmB,CAAAA,OACCI,GAAAA,UAAAA,CAAW/D,OAAO,UAAU,CAAA,GAAC6D,YAAAG,MAAA,EAAA;AAAA,QAAA,OAAA,EAEd9D,EAAG+D,CAAAA,EAAAA,CAAG,WAAW,CAAA;AAAA,OAAC,EAAA;AAAA,QAAAvG,SAAAA,MAAAmG,CAAAA,YAAAK,IAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AAAA,OAAA,CAGlC,EAED,GAAA,IAAA,CAAA;AAEN,MAAMC,MAAAA,MAAAA,GAASA,MAAAN,WAAAA,CAAAO,MAAA,EAAA;AAAA,QAAA,KAENpD,EAAAA,IAAAA;AAAAA,QAAI,eACIE,WAAYzC,CAAAA,KAAAA;AAAAA,QAAK,YACpBmB,KAAM3B,CAAAA,QAAAA;AAAAA,QAAQ,QAClB2B,KAAMrC,CAAAA,IAAAA;AAAAA,QAAI,SACTgD,KAAM9B,CAAAA,KAAAA;AAAAA,QAAK,WACTmB,KAAMtB,CAAAA,OAAAA;AAAAA,QAAO,YACVyD,EAAAA,cAAAA;AAAAA,QAAc,aACbK,EAAAA,eAAAA;AAAAA,SAEhB,IAAA,CAAA,CAAA;AAED,MAAMiC,MAAAA,MAAAA,GAAMR,YAAA,KAAA,EAAA;AAAA,QAAA,SAED,CACL3D,EAAAA,CAAG4D,CAAE,CAAA,QAAQ,GACb1D,UAAW3B,CAAAA,KAAAA,IAASyB,EAAG4D,CAAAA,CAAAA,CAAE,iBAAiB,CAC1C5D,EAAAA,EAAAA,CAAG+D,EAAGrE,CAAAA,KAAAA,CAAM1B,WAAW,CAAC,CAAA;AAAA,OACzB,EAAA,CAEAoG,WAAYzD,CAAAA,WAAAA,EAAa,IAAM,EAAA;AAAA,QAC9BnD,OAASyG,EAAAA,MAAAA;AAAAA,QACTI,OAAS,EAAA,IAAA;AAAA,OACV,CACAX,EAAAA,SAAS,CAEb,CAAA,CAAA;AAED,MAAMY,MAAAA,MAAAA,GAAMX,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACE3D,EAAG4D,CAAAA,CAAAA,CAAE,SAAS,CAAA;AAAA,SAAC,CAAGC,UAAAA,CAAW/D,KAAO,EAAA,SAAS,CAAC,CAC3D,CAAA,CAAA;AAED,MAAA,OAAA6D,YAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEW,CACL3D,EAAGuE,CAAAA,CAAAA,IACHvE,EAAGwE,CAAAA,CAAAA,CAAE9E,KAAM1B,CAAAA,WAAW,CACtB,EAAA;AAAA,UACE,CAACgC,EAAGwE,CAAAA,CAAAA,CAAE,MAAM,CAAA,GAAI9E,MAAMrC,IAAS,KAAA,MAAA;AAAA,UAC/B,CAAC2C,EAAGwE,CAAAA,CAAAA,CAAE,aAAa,CAAA,GAAI9E,MAAMrC,IAAS,KAAA,aAAA;AAAA,SACvC,CAAA;AAAA,QACF,gBAEeuF,EAAAA,YAAAA;AAAAA,QAAY,gBACZA,EAAAA,YAAAA;AAAAA,OAEf0B,EAAAA,CAAAA,MACAH,EAAAA,MAAM,CAAA,CAAA,CAAA;AAAA,KAGb,CAAA;AAAA,GACF;AACF,CAAC;;;;"}