UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 27.2 kB
{"version":3,"file":"tour.vue2.mjs","sources":["../../../components/tour/tour.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Bubble } from '@/components/bubble'\r\nimport { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Masker } from '@/components/masker'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, provide, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\r\n\r\nimport {\r\n emitEvent,\r\n getStepByWord,\r\n useIcons,\r\n useId,\r\n useLocale,\r\n useNameHelper,\r\n useProps,\r\n} from '@vexip-ui/config'\r\nimport { unrefElement, useModifier, usePopper } from '@vexip-ui/hooks'\r\nimport { callIfFunc, decide, isClient, isFunction } from '@vexip-ui/utils'\r\nimport { tourProps } from './props'\r\nimport { TOUR_STATE } from './symbol'\r\n\r\nimport type { BubbleExposed } from '@/components/bubble'\r\nimport type { MaskerExposed } from '@/components/masker'\r\nimport type { TourSlots, TourStepOptions } from './symbol'\r\n\r\ndefineOptions({\r\n name: 'Tour',\r\n inheritAttrs: false,\r\n})\r\n\r\nconst _props = defineProps(tourProps)\r\nconst props = useProps('tour', _props, {\r\n locale: null,\r\n active: false,\r\n index: {\r\n static: true,\r\n default: 0,\r\n validator: value => value >= 0,\r\n },\r\n steps: {\r\n static: true,\r\n default: () => [],\r\n },\r\n type: 'default',\r\n hideMask: false,\r\n signType: 'dot',\r\n padding: 10,\r\n closable: true,\r\n permeable: false,\r\n transfer: false,\r\n slots: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits(['update:active', 'update:index'])\r\n\r\ndefineSlots<TourSlots>()\r\n\r\nconst nh = useNameHelper('tour')\r\nconst locale = useLocale('tour', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\n\r\nconst currentActive = ref(props.active)\r\nconst currentIndex = ref(props.index)\r\nconst tempSteps: Set<TourStepOptions> = reactive(new Set<any>())\r\nconst currentRect = ref<number[]>()\r\nconst sideRects = ref<(number | string)[][]>()\r\n\r\nconst masker = ref<MaskerExposed>()\r\nconst bubble = ref<BubbleExposed>()\r\nconst wrapper = computed(() => masker.value?.wrapper)\r\n\r\nuseModifier({\r\n target: wrapper,\r\n passive: false,\r\n onKeyDown: (event, modifier) => {\r\n if (!currentActive.value) return\r\n\r\n decide(\r\n [\r\n [() => modifier.left || modifier.up, prev],\r\n [() => modifier.right || modifier.down, next],\r\n [() => modifier.escape, handleClose],\r\n ],\r\n {\r\n beforeMatchAny: () => {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n },\r\n afterMatchAny: modifier.resetAll,\r\n },\r\n )\r\n },\r\n})\r\n\r\nconst allSteps = computed(() => {\r\n return Array.from(tempSteps)\r\n .concat(props.steps)\r\n .sort((prev, next) => (prev.order || 0) - (next.order || 0))\r\n})\r\nconst currentStep = computed(() => allSteps.value[currentIndex.value])\r\nconst type = computed(() => {\r\n const type = currentStep.value?.type || props.type\r\n\r\n return type === 'default' ? undefined : type\r\n})\r\nconst className = computed(() => {\r\n return [\r\n nh.b(),\r\n nh.bs('vars'),\r\n {\r\n [nh.bm('hide-mask')]: props.hideMask,\r\n [nh.bm('permeable')]: props.permeable,\r\n },\r\n ]\r\n})\r\nconst padding = computed(() => {\r\n if (Array.isArray(props.padding)) {\r\n return props.padding.length === 2\r\n ? [props.padding[0], props.padding[1], props.padding[0], props.padding[1]]\r\n : props.padding\r\n } else {\r\n return new Array<number>(4).fill(props.padding)\r\n }\r\n})\r\nconst maskId = useId()\r\n\r\nconst { reference, placement, updatePopper } = usePopper({\r\n wrapper,\r\n placement: computed(() => currentStep.value?.placement || 'bottom'),\r\n popper: computed(() => bubble.value?.$el),\r\n arrow: computed(() => bubble.value?.arrow),\r\n shift: { crossAxis: true },\r\n autoUpdate: false,\r\n})\r\n\r\nwatch(\r\n () => props.active,\r\n value => {\r\n if (value) {\r\n start()\r\n } else {\r\n currentActive.value = value\r\n }\r\n },\r\n)\r\nwatch(\r\n () => props.index,\r\n value => {\r\n currentIndex.value = Math.max(0, value)\r\n },\r\n)\r\nwatch(\r\n [currentActive, currentStep],\r\n () => {\r\n sideRects.value = undefined\r\n\r\n if (!isClient || !currentActive.value || !currentStep.value) return\r\n\r\n const target = unrefElement(callIfFunc(currentStep.value.target) as HTMLElement)\r\n\r\n if (!target) {\r\n currentRect.value = undefined\r\n return\r\n }\r\n\r\n const { top, left, width, height } = target.getBoundingClientRect()\r\n\r\n currentRect.value = [\r\n left - padding.value[3],\r\n top - padding.value[0],\r\n width + padding.value[1] + padding.value[3],\r\n height + padding.value[0] + padding.value[2],\r\n ]\r\n\r\n if (props.permeable) {\r\n const [x, y, w, h] = currentRect.value\r\n\r\n sideRects.value = [\r\n [0, 0, '100%', y],\r\n [x + w, 0, `calc(100% - ${x + w}px)`, '100%'],\r\n [0, y + h, '100%', `calc(100% - ${y + h}px)`],\r\n [0, 0, x, '100%'],\r\n ]\r\n }\r\n\r\n updatePopper()\r\n },\r\n { immediate: true, flush: 'post' },\r\n)\r\n\r\nprovide(TOUR_STATE, {\r\n increaseStep,\r\n decreaseStep,\r\n})\r\n\r\ndefineExpose({\r\n wrapper,\r\n currentActive,\r\n currentIndex,\r\n currentStep,\r\n allSteps,\r\n start,\r\n prev,\r\n next,\r\n close,\r\n})\r\n\r\nconst actions = { start, prev, next, close }\r\nconst slotParams = shallowReadonly(\r\n reactive({\r\n ...actions,\r\n step: currentStep,\r\n index: currentIndex,\r\n }),\r\n)\r\n\r\nfunction increaseStep(step: TourStepOptions) {\r\n tempSteps.add(step)\r\n}\r\n\r\nfunction decreaseStep(step: TourStepOptions) {\r\n tempSteps.delete(step)\r\n}\r\n\r\nfunction start() {\r\n if (currentActive.value) return\r\n\r\n currentActive.value = true\r\n emit('update:active', true)\r\n emitEvent(props.onToggle, true)\r\n\r\n if (currentIndex.value) {\r\n currentIndex.value = 0\r\n emit('update:index', 0)\r\n }\r\n}\r\n\r\nfunction prev() {\r\n if (!currentActive.value || currentIndex.value <= 0) return\r\n\r\n --currentIndex.value\r\n emit('update:index', currentIndex.value)\r\n emitEvent(props.onChange, currentIndex.value, currentStep.value)\r\n}\r\n\r\nfunction next(autoClose = true) {\r\n if (!currentActive.value) return\r\n\r\n if (currentIndex.value >= allSteps.value.length - 1) {\r\n if (autoClose) {\r\n close()\r\n }\r\n\r\n return\r\n }\r\n\r\n ++currentIndex.value\r\n emit('update:index', currentIndex.value)\r\n emitEvent(props.onChange, currentIndex.value, currentStep.value)\r\n}\r\n\r\nfunction close() {\r\n if (!currentActive.value) return\r\n\r\n currentActive.value = false\r\n emit('update:active', false)\r\n emitEvent(props.onToggle, false)\r\n}\r\n\r\nfunction handleClose() {\r\n if (!currentActive.value) return\r\n\r\n close()\r\n emitEvent(props.onClose)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-show=\"false\" role=\"none\" aria-hidden=\"true\">\r\n <slot></slot>\r\n </div>\r\n <Masker\r\n v-bind=\"$attrs\"\r\n ref=\"masker\"\r\n v-model:active=\"currentActive\"\r\n :inherit=\"props.inherit\"\r\n :class=\"className\"\r\n :transfer=\"transfer\"\r\n auto-remove\r\n transition-name=\"\"\r\n :disabled=\"props.hideMask\"\r\n @show=\"updatePopper\"\r\n @hide=\"currentRect = undefined\"\r\n @mask-click=\"emitEvent(props.onMaskClick, $event)\"\r\n >\r\n <template #default=\"{ show }\">\r\n <div\r\n v-if=\"currentRect\"\r\n ref=\"reference\"\r\n :class=\"nh.be('reference')\"\r\n role=\"none\"\r\n aria-hidden=\"true\"\r\n :style=\"{\r\n top: `${currentRect[1]}px`,\r\n left: `${currentRect[0]}px`,\r\n width: `${currentRect[2]}px`,\r\n height: `${currentRect[3]}px`\r\n }\"\r\n ></div>\r\n <Transition appear :name=\"nh.ns('fade')\">\r\n <Bubble\r\n v-if=\"show && currentStep\"\r\n ref=\"bubble\"\r\n inherit\r\n :class=\"[\r\n nh.be('bubble'),\r\n !currentRect && nh.bem('bubble', 'center'),\r\n type && nh.bem('bubble', 'typed'),\r\n type && nh.bem('bubble', type)\r\n ]\"\r\n :content-class=\"nh.be('step')\"\r\n :placement=\"placement\"\r\n :type=\"currentStep.type || props.type\"\r\n >\r\n <Renderer\r\n v-if=\"isFunction(currentStep.renderer)\"\r\n :renderer=\"currentStep.renderer\"\r\n :data=\"actions\"\r\n ></Renderer>\r\n <template v-else>\r\n <div :class=\"nh.be('header')\">\r\n <slot name=\"header\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\r\n <div :class=\"nh.be('title')\">\r\n <slot name=\"title\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\r\n {{ currentStep.title ?? getStepByWord(locale.stepCount, currentIndex) }}\r\n </Renderer>\r\n </slot>\r\n </div>\r\n <button\r\n v-if=\"props.closable\"\r\n type=\"button\"\r\n :class=\"nh.be('close')\"\r\n @click=\"handleClose\"\r\n >\r\n <slot name=\"close\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\r\n <Icon\r\n v-bind=\"icons.close\"\r\n :scale=\"+(icons.close.scale || 1) * 1.2\"\r\n label=\"close\"\r\n ></Icon>\r\n </Renderer>\r\n </slot>\r\n </button>\r\n </Renderer>\r\n </slot>\r\n </div>\r\n <div :class=\"nh.be('content')\">\r\n <slot name=\"body\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.body\" :data=\"slotParams\">\r\n {{ currentStep.content }}\r\n </Renderer>\r\n </slot>\r\n </div>\r\n <div :class=\"nh.be('footer')\">\r\n <slot name=\"footer\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\r\n <div :class=\"[nh.be('sign'), nh.bem('sign', props.signType)]\">\r\n <slot name=\"sign\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.sign\" :data=\"slotParams\">\r\n <template v-if=\"props.signType === 'count'\">\r\n <span>{{ currentIndex + 1 }}</span>\r\n <span :class=\"nh.be('count-sep')\">/</span>\r\n <span>{{ allSteps.length }}</span>\r\n </template>\r\n <template v-else>\r\n <span\r\n v-for=\"n in allSteps.length\"\r\n :key=\"n\"\r\n :class=\"[\r\n nh.be(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`),\r\n n - 1 === currentIndex &&\r\n nh.bem(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`, 'active')\r\n ]\"\r\n ></span>\r\n </template>\r\n </Renderer>\r\n </slot>\r\n </div>\r\n <span style=\"flex: auto\" role=\"none\"></span>\r\n <slot name=\"actions\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.actions\" :data=\"slotParams\">\r\n <Button\r\n v-if=\"currentIndex > 0\"\r\n inherit\r\n :class=\"[nh.be('action'), nh.bem('action', 'prev')]\"\r\n size=\"small\"\r\n :text=\"!!type\"\r\n @click=\"prev\"\r\n >\r\n {{ locale.prev }}\r\n </Button>\r\n <Button\r\n v-if=\"currentIndex <= allSteps.length - 1\"\r\n inherit\r\n :class=\"[nh.be('action'), nh.bem('action', 'next')]\"\r\n :type=\"type ? 'default' : 'primary'\"\r\n size=\"small\"\r\n @click=\"next()\"\r\n >\r\n {{ currentIndex === allSteps.length - 1 ? locale.done : locale.next }}\r\n </Button>\r\n </Renderer>\r\n </slot>\r\n </Renderer>\r\n </slot>\r\n </div>\r\n </template>\r\n </Bubble>\r\n </Transition>\r\n </template>\r\n <template #mask>\r\n <svg style=\"width: 100%; height: 100%\">\r\n <defs>\r\n <mask :id=\"maskId\">\r\n <rect\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n fill=\"white\"\r\n />\r\n <rect\r\n v-if=\"currentRect\"\r\n :class=\"[nh.be('hollow'), nh.bem('hollow', 'active')]\"\r\n :x=\"currentRect[0]\"\r\n :y=\"currentRect[1]\"\r\n :width=\"currentRect[2]\"\r\n :height=\"currentRect[3]\"\r\n fill=\"black\"\r\n />\r\n </mask>\r\n </defs>\r\n <rect\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n fill=\"rgba(0, 0, 0, 45%)\"\r\n :mask=\"`url(#${maskId})`\"\r\n />\r\n <g v-if=\"sideRects?.length\" fill=\"transparent\" style=\"pointer-events: auto\">\r\n <rect\r\n v-for=\"(rect, index) in sideRects\"\r\n :key=\"index\"\r\n :x=\"rect[0]\"\r\n :y=\"rect[1]\"\r\n :width=\"rect[2]\"\r\n :height=\"rect[3]\"\r\n />\r\n </g>\r\n </svg>\r\n </template>\r\n </Masker>\r\n</template>\r\n"],"names":["props","useProps","__props","value","emit","__emit","nh","useNameHelper","locale","useLocale","toRef","icons","useIcons","currentActive","ref","currentIndex","tempSteps","reactive","currentRect","sideRects","masker","bubble","wrapper","computed","_a","useModifier","event","modifier","decide","prev","next","handleClose","allSteps","currentStep","type","className","padding","maskId","useId","reference","placement","updatePopper","usePopper","watch","start","isClient","target","unrefElement","callIfFunc","top","left","width","height","x","y","w","h","provide","TOUR_STATE","increaseStep","decreaseStep","__expose","close","actions","slotParams","shallowReadonly","step","emitEvent","autoClose","_withDirectives","_createElementVNode","_hoisted_1","_renderSlot","_ctx","_createVNode","_unref","Masker","_mergeProps","$event","transfer","_cache","_withCtx","show","_createElementBlock","_normalizeClass","_normalizeStyle","_Transition","_createBlock","Bubble","isFunction","Renderer","_Fragment","_normalizeProps","_guardReactiveProps","getStepByWord","Icon","_createTextVNode","_toDisplayString","_openBlock","_renderList","n","Button","_hoisted_2","_hoisted_6","rect","index"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCM,UAAAA,IAAQC,GAAS,QADRC,IACwB;AAAA,MACrC,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW,OAASC,KAAS;AAAA,MAC/B;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,MAAM,CAAA;AAAA,MACjB;AAAA,MACA,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,OAAO,OAAO,CAAC;AAAA,IAAA,CAChB,GAEKC,IAAOC,IAIPC,IAAKC,GAAc,MAAM,GACzBC,IAASC,GAAU,QAAQC,GAAMV,GAAO,QAAQ,CAAC,GACjDW,IAAQC,GAAS,GAEjBC,IAAgBC,EAAId,EAAM,MAAM,GAChCe,IAAeD,EAAId,EAAM,KAAK,GAC9BgB,IAAkCC,GAAa,oBAAA,KAAU,GACzDC,IAAcJ,EAAc,GAC5BK,IAAYL,EAA2B,GAEvCM,IAASN,EAAmB,GAC5BO,IAASP,EAAmB,GAC5BQ,IAAUC,EAAS,MAAM;;AAAA,cAAAC,IAAAJ,EAAO,UAAP,gBAAAI,EAAc;AAAA,KAAO;AAExC,IAAAC,GAAA;AAAA,MACV,QAAQH;AAAA,MACR,SAAS;AAAA,MACT,WAAW,CAACI,GAAOC,MAAa;AAC1B,QAACd,EAAc,SAEnBe;AAAA,UACE;AAAA,YACE,CAAC,MAAMD,EAAS,QAAQA,EAAS,IAAIE,CAAI;AAAA,YACzC,CAAC,MAAMF,EAAS,SAASA,EAAS,MAAMG,CAAI;AAAA,YAC5C,CAAC,MAAMH,EAAS,QAAQI,CAAW;AAAA,UACrC;AAAA,UACA;AAAA,YACE,gBAAgB,MAAM;AACpB,cAAAL,EAAM,eAAe,GACrBA,EAAM,gBAAgB;AAAA,YACxB;AAAA,YACA,eAAeC,EAAS;AAAA,UAAA;AAAA,QAE5B;AAAA,MAAA;AAAA,IACF,CACD;AAEK,UAAAK,IAAWT,EAAS,MACjB,MAAM,KAAKP,CAAS,EACxB,OAAOhB,EAAM,KAAK,EAClB,KAAK,CAAC6B,GAAMC,OAAUD,EAAK,SAAS,MAAMC,EAAK,SAAS,EAAE,CAC9D,GACKG,IAAcV,EAAS,MAAMS,EAAS,MAAMjB,EAAa,KAAK,CAAC,GAC/DmB,IAAOX,EAAS,MAAM;;AAC1B,YAAMW,MAAOV,IAAAS,EAAY,UAAZ,gBAAAT,EAAmB,SAAQxB,EAAM;AAEvCkC,aAAAA,MAAS,YAAY,SAAYA;AAAAA,IAAA,CACzC,GACKC,KAAYZ,EAAS,MAClB;AAAA,MACLjB,EAAG,EAAE;AAAA,MACLA,EAAG,GAAG,MAAM;AAAA,MACZ;AAAA,QACE,CAACA,EAAG,GAAG,WAAW,CAAC,GAAGN,EAAM;AAAA,QAC5B,CAACM,EAAG,GAAG,WAAW,CAAC,GAAGN,EAAM;AAAA,MAAA;AAAA,IAEhC,CACD,GACKoC,IAAUb,EAAS,MACnB,MAAM,QAAQvB,EAAM,OAAO,IACtBA,EAAM,QAAQ,WAAW,IAC5B,CAACA,EAAM,QAAQ,CAAC,GAAGA,EAAM,QAAQ,CAAC,GAAGA,EAAM,QAAQ,CAAC,GAAGA,EAAM,QAAQ,CAAC,CAAC,IACvEA,EAAM,UAEH,IAAI,MAAc,CAAC,EAAE,KAAKA,EAAM,OAAO,CAEjD,GACKqC,IAASC,GAAM,GAEf,EAAE,WAAAC,IAAW,WAAAC,IAAW,cAAAC,EAAA,IAAiBC,GAAU;AAAA,MACvD,SAAApB;AAAA,MACA,WAAWC,EAAS,MAAM;;AAAA,iBAAAC,IAAAS,EAAY,UAAZ,gBAAAT,EAAmB,cAAa;AAAA,OAAQ;AAAA,MAClE,QAAQD,EAAS,MAAA;;AAAM,gBAAAC,IAAAH,EAAO,UAAP,gBAAAG,EAAc;AAAA,OAAG;AAAA,MACxC,OAAOD,EAAS,MAAA;;AAAM,gBAAAC,IAAAH,EAAO,UAAP,gBAAAG,EAAc;AAAA,OAAK;AAAA,MACzC,OAAO,EAAE,WAAW,GAAK;AAAA,MACzB,YAAY;AAAA,IAAA,CACb;AAED,IAAAmB;AAAA,MACE,MAAM3C,EAAM;AAAA,MACZ,CAASG,MAAA;AACP,QAAIA,IACIyC,EAAA,IAEN/B,EAAc,QAAQV;AAAA,MACxB;AAAA,IAEJ,GACAwC;AAAA,MACE,MAAM3C,EAAM;AAAA,MACZ,CAASG,MAAA;AACP,QAAAY,EAAa,QAAQ,KAAK,IAAI,GAAGZ,CAAK;AAAA,MAAA;AAAA,IAE1C,GACAwC;AAAA,MACE,CAAC9B,GAAeoB,CAAW;AAAA,MAC3B,MAAM;AAGJ,YAFAd,EAAU,QAAQ,QAEd,CAAC0B,MAAY,CAAChC,EAAc,SAAS,CAACoB,EAAY,MAAO;AAE7D,cAAMa,IAASC,GAAaC,GAAWf,EAAY,MAAM,MAAM,CAAgB;AAE/E,YAAI,CAACa,GAAQ;AACX,UAAA5B,EAAY,QAAQ;AACpB;AAAA,QAAA;AAGF,cAAM,EAAE,KAAA+B,GAAK,MAAAC,GAAM,OAAAC,GAAO,QAAAC,EAAO,IAAIN,EAAO,sBAAsB;AASlE,YAPA5B,EAAY,QAAQ;AAAA,UAClBgC,IAAOd,EAAQ,MAAM,CAAC;AAAA,UACtBa,IAAMb,EAAQ,MAAM,CAAC;AAAA,UACrBe,IAAQf,EAAQ,MAAM,CAAC,IAAIA,EAAQ,MAAM,CAAC;AAAA,UAC1CgB,IAAShB,EAAQ,MAAM,CAAC,IAAIA,EAAQ,MAAM,CAAC;AAAA,QAC7C,GAEIpC,EAAM,WAAW;AACnB,gBAAM,CAACqD,GAAGC,GAAGC,GAAGC,EAAC,IAAItC,EAAY;AAEjC,UAAAC,EAAU,QAAQ;AAAA,YAChB,CAAC,GAAG,GAAG,QAAQmC,CAAC;AAAA,YAChB,CAACD,IAAIE,GAAG,GAAG,eAAeF,IAAIE,CAAC,OAAO,MAAM;AAAA,YAC5C,CAAC,GAAGD,IAAIE,IAAG,QAAQ,eAAeF,IAAIE,EAAC,KAAK;AAAA,YAC5C,CAAC,GAAG,GAAGH,GAAG,MAAM;AAAA,UAClB;AAAA,QAAA;AAGW,QAAAZ,EAAA;AAAA,MACf;AAAA,MACA,EAAE,WAAW,IAAM,OAAO,OAAO;AAAA,IACnC,GAEAgB,GAAQC,IAAY;AAAA,MAClB,cAAAC;AAAA,MACA,cAAAC;AAAA,IAAA,CACD,GAEYC,GAAA;AAAA,MACX,SAAAvC;AAAA,MACA,eAAAT;AAAA,MACA,cAAAE;AAAA,MACA,aAAAkB;AAAA,MACA,UAAAD;AAAA,MACA,OAAAY;AAAA,MACA,MAAAf;AAAA,MACA,MAAAC;AAAA,MACA,OAAAgC;AAAA,IAAA,CACD;AAED,UAAMC,IAAU,EAAE,OAAAnB,GAAO,MAAAf,GAAM,MAAAC,GAAM,OAAAgC,EAAM,GACrCE,IAAaC;AAAA,MACjBhD,GAAS;AAAA,QACP,GAAG8C;AAAA,QACH,MAAM9B;AAAA,QACN,OAAOlB;AAAA,MACR,CAAA;AAAA,IACH;AAEA,aAAS4C,GAAaO,GAAuB;AAC3C,MAAAlD,EAAU,IAAIkD,CAAI;AAAA,IAAA;AAGpB,aAASN,GAAaM,GAAuB;AAC3C,MAAAlD,EAAU,OAAOkD,CAAI;AAAA,IAAA;AAGvB,aAAStB,IAAQ;AACf,MAAI/B,EAAc,UAElBA,EAAc,QAAQ,IACtBT,EAAK,iBAAiB,EAAI,GAChB+D,EAAAnE,EAAM,UAAU,EAAI,GAE1Be,EAAa,UACfA,EAAa,QAAQ,GACrBX,EAAK,gBAAgB,CAAC;AAAA,IACxB;AAGF,aAASyB,IAAO;AACd,MAAI,CAAChB,EAAc,SAASE,EAAa,SAAS,MAElD,EAAEA,EAAa,OACVX,EAAA,gBAAgBW,EAAa,KAAK,GACvCoD,EAAUnE,EAAM,UAAUe,EAAa,OAAOkB,EAAY,KAAK;AAAA,IAAA;AAGxD,aAAAH,EAAKsC,IAAY,IAAM;AAC1B,UAACvD,EAAc,OAEnB;AAAA,YAAIE,EAAa,SAASiB,EAAS,MAAM,SAAS,GAAG;AACnD,UAAIoC,KACIN,EAAA;AAGR;AAAA,QAAA;AAGF,UAAE/C,EAAa,OACVX,EAAA,gBAAgBW,EAAa,KAAK,GACvCoD,EAAUnE,EAAM,UAAUe,EAAa,OAAOkB,EAAY,KAAK;AAAA;AAAA,IAAA;AAGjE,aAAS6B,IAAQ;AACX,MAACjD,EAAc,UAEnBA,EAAc,QAAQ,IACtBT,EAAK,iBAAiB,EAAK,GACjB+D,EAAAnE,EAAM,UAAU,EAAK;AAAA,IAAA;AAGjC,aAAS+B,IAAc;AACjB,MAAClB,EAAc,UAEbiD,EAAA,GACNK,EAAUnE,EAAM,OAAO;AAAA,IAAA;;MAKvBqE,GAAAC,EAEM,OAFNC,IAEM;AAAA,QADJC,EAAaC,EAAA,QAAA,SAAA;AAAA;aADF,EAAK;AAAA,MAAA;MAGlBC,EAwLSC,EAAAC,EAAA,GAxLTC,GAwLSJ,EAvLO,QAAA;AAAA,iBACV;AAAA,QAAJ,KAAIrD;AAAA,QACI,QAAQP,EAAa;AAAA,kDAAbA,EAAa,QAAAiE;AAAA,QAC5B,SAASH,EAAK3E,CAAA,EAAC;AAAA,QACf,OAAOmC,GAAS;AAAA,QAChB,UAAU4C,EAAQ;AAAA,QACnB,eAAA;AAAA,QACA,mBAAgB;AAAA,QACf,UAAUJ,EAAK3E,CAAA,EAAC;AAAA,QAChB,QAAM2E,EAAYlC,CAAA;AAAA,QAClB,QAAIuC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAF,MAAE5D,EAAW,QAAG;AAAA,QACpB,oCAAYyD,EAASR,CAAA,EAACQ,KAAM,aAAaG,CAAM;AAAA,MAAA;QAErC,SAAOG,EAChB,CAYO,EAba,MAAAC,QAAI;AAAA,UAEhBhE,EAAW,cADnBiE,EAYO,OAAA;AAAA;qBAVD;AAAA,YAAJ,KAAI5C;AAAA,YACH,OAAK6C,EAAET,EAAErE,CAAA,EAAC,GAAE,WAAA,CAAA;AAAA,YACb,MAAK;AAAA,YACL,eAAY;AAAA,YACX,OAAK+E,GAAA;AAAA,sBAAuBnE,EAAW,MAAA,CAAA,CAAA;AAAA,uBAA6BA,EAAW,MAAA,CAAA,CAAA;AAAA,wBAA8BA,EAAW,MAAA,CAAA,CAAA;AAAA,yBAA+BA,EAAW,MAAA,CAAA,CAAA;AAAA;;UAOrKwD,EAgHaY,IAAA;AAAA,YAhHD,QAAA;AAAA,YAAQ,MAAMX,EAAErE,CAAA,EAAC,GAAE,MAAA;AAAA,UAAA;uBAC7B,MA8GS;AAAA,cA7GD4E,KAAQjD,EAAW,cAD3BsD,EA8GSZ,EAAAa,EAAA,GAAA;AAAA;yBA5GH;AAAA,gBAAJ,KAAInE;AAAA,gBACJ,SAAA;AAAA,gBACC,OAAK+D,EAAA;AAAA,kBAAiBT,EAAArE,CAAA,EAAG,GAAE,QAAA;AAAA,mBAA0BY,EAAW,SAAIyD,EAAErE,CAAA,EAAC,IAAG,UAAA,QAAA;AAAA,kBAAmC4B,EAAI,SAAIyC,EAAErE,CAAA,EAAC,IAAG,UAAA,OAAA;AAAA,kBAAkC4B,EAAA,SAAQyC,EAAArE,CAAA,EAAG,cAAc4B,EAAI,KAAA;AAAA,gBAAA;gBAM1L,iBAAeyC,EAAErE,CAAA,EAAC,GAAE,MAAA;AAAA,gBACpB,WAAWqE,EAASnC,EAAA;AAAA,gBACpB,MAAMP,EAAW,MAAC,QAAQ0C,EAAA3E,CAAA,EAAM;AAAA,cAAA;2BAEjC,MAIY;AAAA,kBAHJ2E,EAAUc,EAAA,EAACxD,EAAW,MAAC,QAAQ,UADvCsD,EAIYZ,EAAAe,CAAA,GAAA;AAAA;oBAFT,UAAUzD,EAAW,MAAC;AAAA,oBACtB,MAAM8B;AAAA,qDAEToB,EA0FWQ,GAAA,EAAA,KAAA,KAAA;AAAA,oBAzFTrB,EA4BM,OAAA;AAAA,sBA5BA,OAAKc,EAAET,EAAErE,CAAA,EAAC,GAAE,QAAA,CAAA;AAAA,oBAAA;sBAChBkE,EA0BOC,EAAA,QAAA,UAAAmB,EAAAC,EA1BqBlB,EAAUX,CAAA,CAAA,CAAA,GAAtC,MA0BO;AAAA,wBAzBLU,EAwBWC,EAAAe,CAAA,GAAA;AAAA,0BAxBA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,0BAAS,MAAM2E,EAAUX,CAAA;AAAA,wBAAA;qCACxD,MAMM;AAAA,4BANNM,EAMM,OAAA;AAAA,8BANA,OAAKc,EAAET,EAAErE,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,4BAAA;8BAChBkE,EAIOC,EAAA,QAAA,SAAAmB,EAAAC,EAJoBlB,EAAUX,CAAA,CAAA,CAAA,GAArC,MAIO;AAAA,gCAHLU,EAEWC,EAAAe,CAAA,GAAA;AAAA,kCAFA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,kCAAQ,MAAM2E,EAAUX,CAAA;AAAA,gCAAA;6CACvD,MAAwE;AAAA,wCAArE/B,EAAW,MAAC,SAAS0C,EAAAmB,EAAA,EAAcnB,EAAMnE,CAAA,EAAC,WAAWO,EAAY,KAAA,CAAA,GAAA,CAAA;AAAA,kCAAA;;;;;4BAKlE4D,EAAA3E,CAAA,EAAM,iBADdmF,EAeS,UAAA;AAAA;8BAbP,MAAK;AAAA,8BACJ,OAAKC,EAAET,EAAErE,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,8BACZ,SAAOyB;AAAA,4BAAA;8BAERyC,EAQOC,EAAA,QAAA,SAAAmB,EAAAC,EARoBlB,EAAUX,CAAA,CAAA,CAAA,GAArC,MAQO;AAAA,gCAPLU,EAMWC,EAAAe,CAAA,GAAA;AAAA,kCANA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,kCAAQ,MAAM2E,EAAUX,CAAA;AAAA,gCAAA;6CACvD,MAIQ;AAAA,oCAJRU,EAIQC,EAJRoB,EAAA,GAAAlB,GACUF,EAGFhE,CAAA,EAHQ,OAAK;AAAA,sCAClB,OAAS,EAAAgE,EAAAhE,CAAA,EAAM,MAAM,SAAK,KAAA;AAAA,sCAC3B,OAAM;AAAA;;;;;;;;;;;oBAQpB2D,EAMM,OAAA;AAAA,sBANA,OAAKc,EAAET,EAAErE,CAAA,EAAC,GAAE,SAAA,CAAA;AAAA,oBAAA;sBAChBkE,EAIOC,EAAA,QAAA,QAAAmB,EAAAC,EAJmBlB,EAAUX,CAAA,CAAA,CAAA,GAApC,MAIO;AAAA,wBAHLU,EAEWC,EAAAe,CAAA,GAAA;AAAA,0BAFA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,0BAAO,MAAM2E,EAAUX,CAAA;AAAA,wBAAA;qCACtD,MAAyB;AAAA,4BAAtBgC,EAAAC,EAAAhE,EAAA,MAAY,OAAO,GAAA,CAAA;AAAA,0BAAA;;;;;oBAI5BqC,EAoDM,OAAA;AAAA,sBApDA,OAAKc,EAAET,EAAErE,CAAA,EAAC,GAAE,QAAA,CAAA;AAAA,oBAAA;sBAChBkE,EAkDOC,EAAA,QAAA,UAAAmB,EAAAC,EAlDqBlB,EAAUX,CAAA,CAAA,CAAA,GAAtC,MAkDO;AAAA,wBAjDLU,EAgDWC,EAAAe,CAAA,GAAA;AAAA,0BAhDA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,0BAAS,MAAM2E,EAAUX,CAAA;AAAA,wBAAA;qCACxD,MAqBM;AAAA,4BArBNM,EAqBM,OAAA;AAAA,8BArBA,OAAKc,EAAA,CAAGT,EAAErE,CAAA,EAAC,GAAE,MAAA,GAAUqE,EAAErE,CAAA,EAAC,IAAG,QAASqE,EAAK3E,CAAA,EAAC,QAAQ,CAAA,CAAA;AAAA,4BAAA;8BACxDwE,EAmBOC,EAAA,QAAA,QAAAmB,EAAAC,EAnBmBlB,EAAUX,CAAA,CAAA,CAAA,GAApC,MAmBO;AAAA,gCAlBLU,EAiBWC,EAAAe,CAAA,GAAA;AAAA,kCAjBA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,kCAAO,MAAM2E,EAAUX,CAAA;AAAA,gCAAA;6CACtD,MAIW;AAAA,oCAJKW,EAAA3E,CAAA,EAAM,aAAQ,gBAA9BmF,EAIWQ,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,sCAHTrB,EAAmC,gBAA1BvD,EAAY,QAAA,CAAA,GAAA,CAAA;AAAA,sCACrBuD,EAA0C,QAAA;AAAA,wCAAnC,OAAKc,EAAET,EAAErE,CAAA,EAAC,GAAE,WAAA,CAAA;AAAA,sCAAA,GAAe,KAAC,CAAA;AAAA,sCACnCgE,EAAkC,QAAA,MAAA2B,EAAzBjE,EAAQ,MAAC,MAAM,GAAA,CAAA;AAAA,oCAAA,WAGxBkE,EAAA,EAAA,GAAAf,EAQQQ,GAPM,EAAA,KAAA,KAAAQ,GAAAnE,EAAA,MAAS,SAAdoE,YADTjB,EAQQ,QAAA;AAAA,sCANL,KAAKiB;AAAA,sCACL,OAAKhB,EAAA;AAAA,wCAAmCT,EAAArE,CAAA,EAAG,GAAW,QAAAqE,EAAA3E,CAAA,EAAM,aAAQ,QAAA,QAAA,KAAA,EAAA;AAAA,wCAA8DoG,UAAUrF,EAAY,SAAqC4D,EAAArE,CAAA,EAAG,IAAY,QAAAqE,EAAA3E,CAAA,EAAM,aAAQ,QAAA,QAAA,KAAA,IAAA,QAAA;AAAA;;;;;;;4CAUrOsE,EAA4C,QAAA;AAAA,8BAAtC,OAAA,EAAkB,MAAA,OAAA;AAAA,8BAAC,MAAK;AAAA,4BAAA;4BAC9BE,EAuBOC,EAAA,QAAA,WAAAmB,EAAAC,EAvBsBlB,EAAUX,CAAA,CAAA,CAAA,GAAvC,MAuBO;AAAA,8BAtBLU,EAqBWC,EAAAe,CAAA,GAAA;AAAA,gCArBA,UAAUf,EAAA3E,CAAA,EAAM,MAAM;AAAA,gCAAU,MAAM2E,EAAUX,CAAA;AAAA,8BAAA;2CACzD,MASS;AAAA,kCARDjD,EAAY,QAAA,UADpBwE,EASSZ,EAAA0B,EAAA,GAAA;AAAA;oCAPP,SAAA;AAAA,oCACC,UAAQ1B,EAAErE,CAAA,EAAC,GAAc,QAAA,GAAAqE,EAAArE,CAAA,EAAG,IAAG,UAAA,MAAA,CAAA,CAAA;AAAA,oCAChC,MAAK;AAAA,oCACJ,QAAQ4B,EAAI;AAAA,oCACZ,SAAOL;AAAA,kCAAA;+CAER,MAAiB;AAAA,sCAAdmE,EAAAC,EAAAtB,EAAAnE,CAAA,EAAO,IAAI,GAAA,CAAA;AAAA,oCAAA;;;kCAGRO,EAAY,SAAIiB,EAAQ,MAAC,SAAM,UADvCuD,EASSZ,EAAA0B,EAAA,GAAA;AAAA;oCAPP,SAAA;AAAA,oCACC,UAAQ1B,EAAErE,CAAA,EAAC,GAAc,QAAA,GAAAqE,EAAArE,CAAA,EAAG,IAAG,UAAA,MAAA,CAAA,CAAA;AAAA,oCAC/B,MAAM4B,EAAI,QAAA,YAAA;AAAA,oCACX,MAAK;AAAA,oCACJ,gCAAOJ,EAAI;AAAA,kCAAA;+CAEZ,MAAsE;AAAA,0CAAnEf,EAAY,UAAKiB,EAAQ,MAAC,SAAM,IAAO2C,EAAMnE,CAAA,EAAC,OAAOmE,EAAMnE,CAAA,EAAC,IAAI,GAAA,CAAA;AAAA,oCAAA;;;;;;;;;;;;;;;;;;;;;QAW5E,QACT,MAuCM;;AAAA;AAAA,aAvCN0F,KAAAf,EAuCM,OAvCNmB,IAuCM;AAAA,cAtCJhC,EAmBO,QAAA,MAAA;AAAA,gBAlBLA,EAiBO,QAAA,EAjBA,IAAIK,EAAMtC,CAAA,KAAA;AAAA,kCACfiC,EAME,QAAA;AAAA,oBALA,GAAE;AAAA,oBACF,GAAE;AAAA,oBACF,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,MAAK;AAAA,kBAAA;kBAGCpD,EAAW,cADnBiE,EAQE,QAAA;AAAA;oBANC,UAAQR,EAAErE,CAAA,EAAC,GAAc,QAAA,GAAAqE,EAAArE,CAAA,EAAG,IAAG,UAAA,QAAA,CAAA,CAAA;AAAA,oBAC/B,GAAGY,EAAW,MAAA,CAAA;AAAA,oBACd,GAAGA,EAAW,MAAA,CAAA;AAAA,oBACd,OAAOA,EAAW,MAAA,CAAA;AAAA,oBAClB,QAAQA,EAAW,MAAA,CAAA;AAAA,oBACpB,MAAK;AAAA,kBAAA;;;cAIXoD,EAOE,QAAA;AAAA,gBANA,GAAE;AAAA,gBACF,GAAE;AAAA,gBACF,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,MAAK;AAAA,gBACJ,cAAcK,EAAMtC,CAAA,CAAA;AAAA,cAAA;eAEdb,IAAAL,EAAA,UAAA,QAAAK,EAAW,UAApB0E,EAAA,GAAAf,EASI,KATJoB,IASI;AAAA,iBARFL,EAAA,EAAA,GAAAf,EAOEQ,GANwB,MAAAQ,GAAAhF,EAAA,OAAhB,CAAAqF,GAAMC,YADhBtB,EAOE,QAAA;AAAA,kBALC,KAAKsB;AAAA,kBACL,GAAGD,EAAI,CAAA;AAAA,kBACP,GAAGA,EAAI,CAAA;AAAA,kBACP,OAAOA,EAAI,CAAA;AAAA,kBACX,QAAQA,EAAI,CAAA;AAAA,gBAAA;;;;;;;;;;"}