UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 25.3 kB
{"version":3,"file":"select.vue2.mjs","sources":["../../../../../../packages/components/select/src/select.vue"],"sourcesContent":["<template>\n <div\n ref=\"selectRef\"\n v-click-outside:[popperRef]=\"handleClickOutside\"\n :class=\"[nsSelect.b(), nsSelect.m(selectSize)]\"\n @[mouseEnterEventName]=\"states.inputHovering = true\"\n @mouseleave=\"states.inputHovering = false\"\n >\n <el-tooltip\n ref=\"tooltipRef\"\n :visible=\"dropdownMenuVisible\"\n :placement=\"placement\"\n :teleported=\"teleported\"\n :popper-class=\"[nsSelect.e('popper'), popperClass]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"popperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :effect=\"effect\"\n pure\n trigger=\"click\"\n :transition=\"`${nsSelect.namespace.value}-zoom-in-top`\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n :persistent=\"persistent\"\n :append-to=\"appendTo\"\n :show-arrow=\"showArrow\"\n :offset=\"offset\"\n @before-show=\"handleMenuEnter\"\n @hide=\"states.isBeforeHide = false\"\n >\n <template #default>\n <div\n ref=\"wrapperRef\"\n :class=\"[\n nsSelect.e('wrapper'),\n nsSelect.is('focused', isFocused),\n nsSelect.is('hovering', states.inputHovering),\n nsSelect.is('filterable', filterable),\n nsSelect.is('disabled', selectDisabled),\n ]\"\n @click.prevent=\"toggleMenu\"\n >\n <div\n v-if=\"$slots.prefix\"\n ref=\"prefixRef\"\n :class=\"nsSelect.e('prefix')\"\n >\n <slot name=\"prefix\" />\n </div>\n <div\n ref=\"selectionRef\"\n :class=\"[\n nsSelect.e('selection'),\n nsSelect.is(\n 'near',\n multiple && !$slots.prefix && !!states.selected.length\n ),\n ]\"\n >\n <slot\n v-if=\"multiple\"\n name=\"tag\"\n :data=\"states.selected\"\n :delete-tag=\"deleteTag\"\n :select-disabled=\"selectDisabled\"\n >\n <div\n v-for=\"item in showTagList\"\n :key=\"getValueKey(item)\"\n :class=\"nsSelect.e('selected-item')\"\n >\n <el-tag\n :closable=\"!selectDisabled && !item.isDisabled\"\n :size=\"collapseTagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n :style=\"tagStyle\"\n @close=\"deleteTag($event, item)\"\n >\n <span :class=\"nsSelect.e('tags-text')\">\n <slot\n name=\"label\"\n :index=\"item.index\"\n :label=\"item.currentLabel\"\n :value=\"item.value\"\n >\n {{ item.currentLabel }}\n </slot>\n </span>\n </el-tag>\n </div>\n\n <el-tooltip\n v-if=\"collapseTags && states.selected.length > maxCollapseTags\"\n ref=\"tagTooltipRef\"\n :disabled=\"dropdownMenuVisible || !collapseTagsTooltip\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n :effect=\"effect\"\n placement=\"bottom\"\n :popper-class=\"popperClass\"\n :popper-style=\"popperStyle\"\n :teleported=\"teleported\"\n :popper-options=\"popperOptions\"\n >\n <template #default>\n <div\n ref=\"collapseItemRef\"\n :class=\"nsSelect.e('selected-item')\"\n >\n <el-tag\n :closable=\"false\"\n :size=\"collapseTagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n :style=\"collapseTagStyle\"\n >\n <span :class=\"nsSelect.e('tags-text')\">\n + {{ states.selected.length - maxCollapseTags }}\n </span>\n </el-tag>\n </div>\n </template>\n <template #content>\n <div ref=\"tagMenuRef\" :class=\"nsSelect.e('selection')\">\n <div\n v-for=\"item in collapseTagList\"\n :key=\"getValueKey(item)\"\n :class=\"nsSelect.e('selected-item')\"\n >\n <el-tag\n class=\"in-tooltip\"\n :closable=\"!selectDisabled && !item.isDisabled\"\n :size=\"collapseTagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n @close=\"deleteTag($event, item)\"\n >\n <span :class=\"nsSelect.e('tags-text')\">\n <slot\n name=\"label\"\n :index=\"item.index\"\n :label=\"item.currentLabel\"\n :value=\"item.value\"\n >\n {{ item.currentLabel }}\n </slot>\n </span>\n </el-tag>\n </div>\n </div>\n </template>\n </el-tooltip>\n </slot>\n <div\n :class=\"[\n nsSelect.e('selected-item'),\n nsSelect.e('input-wrapper'),\n nsSelect.is('hidden', !filterable || selectDisabled),\n ]\"\n >\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :value=\"states.inputValue\"\n type=\"text\"\n :name=\"name\"\n :class=\"[nsSelect.e('input'), nsSelect.is(selectSize)]\"\n :disabled=\"selectDisabled\"\n :autocomplete=\"autocomplete\"\n :style=\"inputStyle\"\n :tabindex=\"tabindex\"\n role=\"combobox\"\n :readonly=\"!filterable\"\n spellcheck=\"false\"\n :aria-activedescendant=\"hoverOption?.id || ''\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"dropdownMenuVisible\"\n :aria-label=\"ariaLabel\"\n aria-autocomplete=\"none\"\n aria-haspopup=\"listbox\"\n @keydown=\"handleKeydown\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"onInput\"\n @click.stop=\"toggleMenu\"\n />\n <span\n v-if=\"filterable\"\n ref=\"calculatorRef\"\n aria-hidden=\"true\"\n :class=\"nsSelect.e('input-calculator')\"\n v-text=\"states.inputValue\"\n />\n </div>\n <div\n v-if=\"shouldShowPlaceholder\"\n :class=\"[\n nsSelect.e('selected-item'),\n nsSelect.e('placeholder'),\n nsSelect.is(\n 'transparent',\n !hasModelValue || (expanded && !states.inputValue)\n ),\n ]\"\n >\n <slot\n v-if=\"hasModelValue\"\n name=\"label\"\n :index=\"getOption(modelValue!).index\"\n :label=\"currentPlaceholder\"\n :value=\"modelValue\"\n >\n <span>{{ currentPlaceholder }}</span>\n </slot>\n <span v-else>{{ currentPlaceholder }}</span>\n </div>\n </div>\n <div ref=\"suffixRef\" :class=\"nsSelect.e('suffix')\">\n <el-icon\n v-if=\"iconComponent && !showClearBtn\"\n :class=\"[nsSelect.e('caret'), nsSelect.e('icon'), iconReverse]\"\n >\n <component :is=\"iconComponent\" />\n </el-icon>\n <el-icon\n v-if=\"showClearBtn && clearIcon\"\n :class=\"[\n nsSelect.e('caret'),\n nsSelect.e('icon'),\n nsSelect.e('clear'),\n ]\"\n @click=\"handleClearClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-if=\"validateState && validateIcon && needStatusIcon\"\n :class=\"[\n nsInput.e('icon'),\n nsInput.e('validateIcon'),\n nsInput.is('loading', validateState === 'validating'),\n ]\"\n >\n <component :is=\"validateIcon\" />\n </el-icon>\n </div>\n </div>\n </template>\n <template #content>\n <el-select-menu ref=\"menuRef\">\n <div\n v-if=\"$slots.header\"\n :class=\"nsSelect.be('dropdown', 'header')\"\n @click.stop\n >\n <slot name=\"header\" />\n </div>\n <el-scrollbar\n v-show=\"states.options.size > 0 && !loading\"\n :id=\"contentId\"\n ref=\"scrollbarRef\"\n tag=\"ul\"\n :wrap-class=\"nsSelect.be('dropdown', 'wrap')\"\n :view-class=\"nsSelect.be('dropdown', 'list')\"\n :class=\"[nsSelect.is('empty', filteredOptionsCount === 0)]\"\n role=\"listbox\"\n :aria-label=\"ariaLabel\"\n aria-orientation=\"vertical\"\n @scroll=\"popupScroll\"\n >\n <el-option\n v-if=\"showNewOption\"\n :value=\"states.inputValue\"\n :created=\"true\"\n />\n <el-options>\n <slot>\n <template v-for=\"(option, index) in options\" :key=\"index\">\n <el-option-group\n v-if=\"getOptions(option)?.length\"\n :label=\"getLabel(option)\"\n :disabled=\"getDisabled(option)\"\n >\n <el-option\n v-for=\"item in getOptions(option)\"\n :key=\"getValue(item)\"\n v-bind=\"getOptionProps(item)\"\n />\n </el-option-group>\n <el-option v-else v-bind=\"getOptionProps(option)\" />\n </template>\n </slot>\n </el-options>\n </el-scrollbar>\n <div\n v-if=\"$slots.loading && loading\"\n :class=\"nsSelect.be('dropdown', 'loading')\"\n >\n <slot name=\"loading\" />\n </div>\n <div\n v-else-if=\"loading || filteredOptionsCount === 0\"\n :class=\"nsSelect.be('dropdown', 'empty')\"\n >\n <slot name=\"empty\">\n <span>{{ emptyText }}</span>\n </slot>\n </div>\n <div\n v-if=\"$slots.footer\"\n :class=\"nsSelect.be('dropdown', 'footer')\"\n @click.stop\n >\n <slot name=\"footer\" />\n </div>\n </el-select-menu>\n </template>\n </el-tooltip>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n onBeforeUnmount,\n provide,\n reactive,\n toRefs,\n watch,\n} from 'vue'\nimport { ClickOutside } from '@element-plus/directives'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { flattedChildren, isArray, isObject } from '@element-plus/utils'\nimport { useCalcInputWidth } from '@element-plus/hooks'\nimport { useProps } from '@element-plus/components/select-v2/src/useProps'\nimport ElOption from './option.vue'\nimport ElSelectMenu from './select-dropdown.vue'\nimport { useSelect } from './useSelect'\nimport { selectKey } from './token'\nimport ElOptions from './options'\nimport { selectProps } from './select'\nimport ElOptionGroup from './option-group.vue'\n\nimport type { AppConfig, AppContext, VNode } from 'vue'\nimport type { SelectContext } from './type'\n\nconst COMPONENT_NAME = 'ElSelect'\n\ntype WarnHandler = AppConfig['warnHandler']\n\ninterface WarnHandlerRecord {\n originalWarnHandler: WarnHandler\n handler: WarnHandler\n count: number\n}\n\nconst warnHandlerMap = new WeakMap<AppContext, WarnHandlerRecord>()\n\nconst createSelectWarnHandler = (appContext: AppContext): WarnHandler => {\n return (...args) => {\n // Overrides warnings about slots not being executable outside of a render function.\n // We call slot below just to simulate data when persist is false, this warning message should be ignored\n const message = args[0]\n if (\n !message ||\n (message.includes(\n 'Slot \"default\" invoked outside of the render function'\n ) &&\n args[2]?.includes('ElTreeSelect'))\n )\n return\n const original = warnHandlerMap.get(appContext)?.originalWarnHandler\n if (original) {\n original(...args)\n return\n }\n // eslint-disable-next-line no-console\n console.warn(...args)\n }\n}\n\nconst getWarnHandlerRecord = (appContext: AppContext): WarnHandlerRecord => {\n let record = warnHandlerMap.get(appContext)\n if (!record) {\n record = {\n originalWarnHandler: appContext.config.warnHandler,\n handler: createSelectWarnHandler(appContext),\n count: 0,\n }\n warnHandlerMap.set(appContext, record)\n }\n return record\n}\nexport default defineComponent({\n name: COMPONENT_NAME,\n componentName: COMPONENT_NAME,\n components: {\n ElSelectMenu,\n ElOption,\n ElOptions,\n ElOptionGroup,\n ElTag,\n ElScrollbar,\n ElTooltip,\n ElIcon,\n },\n directives: { ClickOutside },\n props: selectProps,\n emits: [\n UPDATE_MODEL_EVENT,\n CHANGE_EVENT,\n 'remove-tag',\n 'clear',\n 'visible-change',\n 'focus',\n 'blur',\n 'popup-scroll',\n ],\n\n setup(props, { emit, slots }) {\n const instance = getCurrentInstance()!\n const warnRecord = getWarnHandlerRecord(instance.appContext)\n warnRecord.count += 1\n instance.appContext.config.warnHandler = warnRecord.handler\n const modelValue = computed(() => {\n const { modelValue: rawModelValue, multiple } = props\n const fallback = multiple ? [] : undefined\n // When it is array, we check if this is multi-select.\n // Based on the result we get\n if (isArray(rawModelValue)) {\n return multiple ? rawModelValue : fallback\n }\n\n return multiple ? fallback : rawModelValue\n })\n\n const _props = reactive({\n ...toRefs(props),\n modelValue,\n })\n\n const API = useSelect(_props, emit)\n const { calculatorRef, inputStyle } = useCalcInputWidth()\n const { getLabel, getValue, getOptions, getDisabled } = useProps(props)\n\n const getOptionProps = (option: Record<string, any>) => ({\n label: getLabel(option),\n value: getValue(option),\n disabled: getDisabled(option),\n })\n\n const flatTreeSelectData = (data: any[]) => {\n return data.reduce((acc, item) => {\n acc.push(item)\n if (item.children && item.children.length > 0) {\n acc.push(...flatTreeSelectData(item.children))\n }\n return acc\n }, [])\n }\n\n const manuallyRenderSlots = (vnodes: VNode[] | undefined) => {\n // After option rendering is completed, the useSelect internal state can collect the value of each option.\n // If the persistent value is false, option will not be rendered by default, so in this case,\n // manually render and load option data here.\n const children = flattedChildren(vnodes || []) as VNode[]\n children.forEach((item) => {\n if (\n isObject(item) &&\n // @ts-expect-error\n (item.type.name === 'ElOption' || item.type.name === 'ElTree')\n ) {\n // @ts-expect-error\n const _name = item.type.name\n if (_name === 'ElTree') {\n // tree-select component is a special case.\n // So we need to handle it separately.\n const treeData = item.props?.data || []\n const flatData = flatTreeSelectData(treeData)\n flatData.forEach((treeItem: any) => {\n treeItem.currentLabel =\n treeItem.label ||\n (isObject(treeItem.value) ? '' : treeItem.value)\n API.onOptionCreate(treeItem)\n })\n } else if (_name === 'ElOption') {\n const obj = { ...item.props } as any\n obj.currentLabel =\n obj.label || (isObject(obj.value) ? '' : obj.value)\n API.onOptionCreate(obj)\n }\n }\n })\n }\n watch(\n () => [slots.default?.(), modelValue.value],\n () => {\n // When persistent is false and the dropdown is closed, the menu is unmounted.\n // We should always re-hydrate option data from slots so labels stay in sync\n // with dynamic option list updates. Skip only when persistent is true or\n // when the dropdown is currently expanded (mounted options will manage themselves).\n if (props.persistent || API.expanded.value) {\n // If persistent is true, we don't need to manually render slots.\n return\n }\n // Reset current options snapshot before re-collecting from slots.\n API.states.options.clear()\n manuallyRenderSlots(slots.default?.())\n },\n {\n immediate: true,\n }\n )\n\n provide(\n selectKey,\n reactive({\n props: _props,\n states: API.states,\n selectRef: API.selectRef,\n optionsArray: API.optionsArray,\n setSelected: API.setSelected,\n handleOptionSelect: API.handleOptionSelect,\n onOptionCreate: API.onOptionCreate,\n onOptionDestroy: API.onOptionDestroy,\n }) satisfies SelectContext\n )\n\n const selectedLabel = computed(() => {\n if (!props.multiple) {\n return API.states.selectedLabel\n }\n return API.states.selected.map((i) => i.currentLabel as string)\n })\n\n onBeforeUnmount(() => {\n // https://github.com/element-plus/element-plus/issues/21279\n const record = warnHandlerMap.get(instance.appContext)\n if (!record) return\n record.count -= 1\n if (record.count <= 0) {\n instance.appContext.config.warnHandler = record.originalWarnHandler\n warnHandlerMap.delete(instance.appContext)\n }\n })\n\n return {\n ...API,\n modelValue,\n selectedLabel,\n calculatorRef,\n inputStyle,\n getLabel,\n getValue,\n getOptions,\n getDisabled,\n getOptionProps,\n }\n },\n})\n</script>\n"],"names":["ElOption","ElOptionGroup"],"mappings":";;;;;;;;;;;;;;;;;;;AAoWA,MAAM,cAAA,GAAiB,UAAA;AAUvB,MAAM,cAAA,uBAAqB,OAAA,EAAuC;AAElE,MAAM,uBAAA,GAA0B,CAAC,UAAA,KAAwC;AACvE,EAAA,OAAO,IAAI,IAAA,KAAS;;AAGlB,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,IAAA,IACE,CAAC,WACA,OAAA,CAAQ,QAAA;AAAA,MACP;AAAA,KACF,KAAA,CACE,EAAA,GAAA,IAAA,CAAK,CAAC,CAAA,KAAN,mBAAS,QAAA,CAAS,cAAA,CAAA,CAAA;AAEpB,MAAA;AACF,IAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,cAAA,CAAe,GAAA,CAAI,UAAU,MAA7B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgC,mBAAA;AACjD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,GAAG,IAAI,CAAA;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,EACtB,CAAA;AACF,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,UAAA,KAA8C;AAC1E,EAAA,IAAI,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS;AAAA,MACP,mBAAA,EAAqB,WAAW,MAAA,CAAO,WAAA;AAAA,MACvC,OAAA,EAAS,wBAAwB,UAAU,CAAA;AAAA,MAC3C,KAAA,EAAO;AAAA,KACT;AACA,IAAA,cAAA,CAAe,GAAA,CAAI,YAAY,MAAM,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AACA,gBAAe,eAAA,CAAgB;AAAA,EAC7B,IAAA,EAAM,cAAA;AAAA,EACN,aAAA,EAAe,cAAA;AAAA,EACf,UAAA,EAAY;AAAA,IACV,YAAA;AAAA,cACAA,MAAA;AAAA,IACA,SAAA;AAAA,mBACAC,WAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,EAAE,YAAA,EAAa;AAAA,EAC3B,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO;AAAA,IACL,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,OAAM,EAAG;AAC5B,IAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,QAAA,CAAS,UAAU,CAAA;AAC3D,IAAA,UAAA,CAAW,KAAA,IAAS,CAAA;AACpB,IAAA,QAAA,CAAS,UAAA,CAAW,MAAA,CAAO,WAAA,GAAc,UAAA,CAAW,OAAA;AACpD,IAAA,MAAM,UAAA,GAAa,SAAS,MAAM;AAChC,MAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,QAAA,EAAS,GAAI,KAAA;AAChD,MAAA,MAAM,QAAA,GAAW,QAAA,GAAW,EAAC,GAAI,MAAA;AAGjC,MAAA,IAAI,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC1B,QAAA,OAAO,WAAW,aAAA,GAAgB,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,WAAW,QAAA,GAAW,aAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,MAAM,SAAS,QAAA,CAAS;AAAA,MACtB,GAAG,OAAO,KAAK,CAAA;AAAA,MACf;AAAA,KACD,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAA;AAClC,IAAA,MAAM,EAAE,aAAA,EAAe,UAAA,EAAW,GAAI,iBAAA,EAAkB;AACxD,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,WAAA,EAAY,GAAI,SAAS,KAAK,CAAA;AAEtE,IAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,MAAiC;AAAA,MACvD,KAAA,EAAO,SAAS,MAAM,CAAA;AAAA,MACtB,KAAA,EAAO,SAAS,MAAM,CAAA;AAAA,MACtB,QAAA,EAAU,YAAY,MAAM;AAAA,KAC9B,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAAgB;AAC1C,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AAChC,QAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AACb,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,UAAA,GAAA,CAAI,IAAA,CAAK,GAAG,kBAAA,CAAmB,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,QAC/C;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACP,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAAgC;AAI3D,MAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,IAAU,EAAE,CAAA;AAC7C,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,IAAA,KAAS;;AACzB,QAAA,IACE,SAAS,IAAI,CAAA;AAAA,SAEZ,KAAK,IAAA,CAAK,IAAA,KAAS,cAAc,IAAA,CAAK,IAAA,CAAK,SAAS,QAAA,CAAA,EACrD;AAEA,UAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,IAAA;AACxB,UAAA,IAAI,UAAU,QAAA,EAAU;AAGtB,YAAA,MAAM,QAAA,GAAA,CAAA,CAAW,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAQ,EAAC;AACtC,YAAA,MAAM,QAAA,GAAW,mBAAmB,QAAQ,CAAA;AAC5C,YAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,QAAA,KAAkB;AAClC,cAAA,QAAA,CAAS,YAAA,GACP,SAAS,KAAA,KACR,QAAA,CAAS,SAAS,KAAK,CAAA,GAAI,KAAK,QAAA,CAAS,KAAA,CAAA;AAC5C,cAAA,GAAA,CAAI,eAAe,QAAQ,CAAA;AAAA,YAC7B,CAAC,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,UAAU,UAAA,EAAY;AAC/B,YAAA,MAAM,GAAA,GAAM,EAAE,GAAG,IAAA,CAAK,KAAA,EAAM;AAC5B,YAAA,GAAA,CAAI,YAAA,GACF,IAAI,KAAA,KAAU,QAAA,CAAS,IAAI,KAAK,CAAA,GAAI,KAAK,GAAA,CAAI,KAAA,CAAA;AAC/C,YAAA,GAAA,CAAI,eAAe,GAAG,CAAA;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AACA,IAAA,KAAA;AAAA,MACE,MAAG;;AAAG,QAAA,OAAA,CAAA,CAAC,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,EAAmB,UAAA,CAAW,KAAK,CAAA;AAAA,MAAA,CAAA;AAAA,MAC1C,MAAM;;AAKJ,QAAA,IAAI,KAAA,CAAM,UAAA,IAAc,GAAA,CAAI,QAAA,CAAS,KAAA,EAAO;AAE1C,UAAA;AAAA,QACF;AAEA,QAAA,GAAA,CAAI,MAAA,CAAO,QAAQ,KAAA,EAAM;AACzB,QAAA,mBAAA,CAAA,CAAoB,EAAA,GAAA,KAAA,CAAM,YAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAiB,CAAA;AAAA,MACvC,CAAA;AAAA,MACA;AAAA,QACE,SAAA,EAAW;AAAA;AACb,KACF;AAEA,IAAA,OAAA;AAAA,MACE,SAAA;AAAA,MACA,QAAA,CAAS;AAAA,QACP,KAAA,EAAO,MAAA;AAAA,QACP,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,WAAW,GAAA,CAAI,SAAA;AAAA,QACf,cAAc,GAAA,CAAI,YAAA;AAAA,QAClB,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,oBAAoB,GAAA,CAAI,kBAAA;AAAA,QACxB,gBAAgB,GAAA,CAAI,cAAA;AAAA,QACpB,iBAAiB,GAAA,CAAI;AAAA,OACtB;AAAA,KACH;AAEA,IAAA,MAAM,aAAA,GAAgB,SAAS,MAAM;AACnC,MAAA,IAAI,CAAC,MAAM,QAAA,EAAU;AACnB,QAAA,OAAO,IAAI,MAAA,CAAO,aAAA;AAAA,MACpB;AACA,MAAA,OAAO,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,YAAsB,CAAA;AAAA,IAChE,CAAC,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AAEpB,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,QAAA,CAAS,UAAU,CAAA;AACrD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAA,CAAO,KAAA,IAAS,CAAA;AAChB,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,QAAA,CAAS,UAAA,CAAW,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,mBAAA;AAChD,QAAA,cAAA,CAAe,MAAA,CAAO,SAAS,UAAU,CAAA;AAAA,MAC3C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,UAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAC,CAAA;;;;"}