hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 29.2 kB
Source Map (JSON)
{"version":3,"file":"select.mjs","sources":["../../../../../../packages/components/select/src/select.vue"],"sourcesContent":["<template>\n <div\n ref=\"selectWrapper\"\n v-click-outside:[popperPaneRef]=\"handleClose\"\n :class=\"[\n namespace + '-input-select',\n selectSize,\n block ? 'block' : ''\n ]\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n @click.stop=\"toggleMenu\"\n >\n <hl-tooltip\n ref=\"tooltipRef\"\n :visible=\"dropMenuVisible\"\n :placement=\"placement\"\n :teleported=\"compatTeleported\"\n :offset=\"popperOffset\"\n :popper-class=\"`${namespace}-select-popper ${popperClass}`\"\n :popper-options=\"popperOptions\"\n :fallback-placements=\"['bottom-start', 'top-start', 'right', 'left']\"\n :effect=\"effect\"\n trigger=\"click\"\n transition=\"dropdown\"\n :persistent=\"persistent\"\n :show-arrow=\"false\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n @show=\"handleMenuEnter\"\n >\n <template #default>\n <div\n class=\"select-trigger\"\n @mouseenter=\"inputHovering = true\"\n @mouseleave=\"inputHovering = false\"\n >\n <hl-input\n :id=\"id\"\n ref=\"reference\"\n v-model=\"selectedLabel\"\n native-type=\"text\"\n :placeholder=\"\n typeof currentPlaceholder === 'function'\n ? currentPlaceholder()\n : currentPlaceholder\n \"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :size=\"selectSize\"\n :fill=\"selectFill\"\n :thin=\"thin\"\n :round=\"round\"\n :disabled=\"selectDisabled\"\n :readonly=\"readonly\"\n :validate-event=\"false\"\n :label=\"ariaLabel\"\n aria-autocomplete=\"none\"\n aria-haspopup=\"listbox\"\n :class=\"{\n 'is-focus': visible,\n 'is-tags': selected.length,\n 'is-remote': !showIcon,\n }\"\n :tabindex=\"(multiple && filterable) ? '-1' : null\"\n role=\"combobox\"\n :aria-activedescendant=\"hoverOption?.id || ''\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"dropMenuVisible\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @input=\"debouncedOnInputChange\"\n @paste=\"debouncedOnInputChange\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @keydown.down.stop.prevent=\"navigateOptions('next')\"\n @keydown.up.stop.prevent=\"navigateOptions('prev')\"\n @keydown.enter.stop.prevent=\"selectOption\"\n @keydown.esc=\"handleKeydownEscape\"\n @keydown.tab=\"visible = false\"\n >\n <template v-if=\"multiple\" #tags>\n <div\n v-show=\"selected.length\"\n ref=\"tags\"\n tabindex=\"-1\"\n :class=\"['input-tags', selectDisabled ? 'is-disabled' : '']\"\n @click=\"focus\"\n >\n <template v-if=\"collapseTags && selected.length\">\n <hl-tag\n v-for=\"item in showTagList\"\n :key=\"getValueKey(item)\"\n :closable=\"!selectDisabled && !item.isDisabled\"\n :active=\"item.hitState\"\n disable-transitions\n :size=\"selectSize\"\n :type=\"tagType\"\n @close=\"deleteTag($event, item)\"\n >\n {{ item.currentLabel }}\n </hl-tag>\n <hl-tag\n v-if=\"selected.length > maxCollapseTags\"\n :closable=\"false\"\n disable-transitions\n :size=\"selectSize\"\n :type=\"tagType\"\n >\n <hl-tooltip\n v-if=\"collapseTagsTooltip\"\n ref=\"tagTooltipRef\"\n :disabled=\"dropMenuVisible\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n :effect=\"effect\"\n placement=\"bottom\"\n :teleported=\"false\"\n :popper-class=\"`collapse-tags-popper`\"\n >\n <template #default>\n + {{ selected.length - maxCollapseTags }}\n </template>\n <template #content>\n <div class=\"collapse-tags\">\n <div\n v-for=\"item in collapseTagList\"\n :key=\"getValueKey(item)\"\n class=\"collapse-tag\"\n >\n <hl-tag\n :key=\"getValueKey(item)\"\n class=\"in-tooltip\"\n :closable=\"!selectDisabled && !item.isDisabled\"\n :size=\"selectSize\"\n :hit=\"item.hitState\"\n :type=\"tagType\"\n disable-transitions\n @close=\"handleDeleteTooltipTag($event, item)\"\n >\n {{ item.currentLabel }}\n </hl-tag>\n </div>\n </div>\n </template>\n </hl-tooltip>\n <template v-else>\n + {{ selected.length - maxCollapseTags }}\n </template>\n </hl-tag>\n </template>\n\n <template v-if=\"!collapseTags\">\n <slot name=\"tag\" :items=\"selected\">\n <hl-tag\n v-for=\"item in selected\"\n :key=\"getValueKey(item)\"\n :closable=\"!selectDisabled && !item.isDisabled\"\n :active=\"item.hitState\"\n disable-transitions\n :size=\"selectSize\"\n :type=\"tagType\"\n @close=\"deleteTag($event, item)\"\n >\n {{ item.currentLabel }}\n </hl-tag>\n </slot>\n </template>\n\n <input\n v-if=\"filterable\"\n ref=\"input\"\n v-model=\"query\"\n type=\"text\"\n :class=\"[\n 'select-input',\n selectSize ? `is-${ selectSize }` : '',\n selectDisabled ? 'is-disabled' : ''\n ]\"\n :aria-label=\"ariaLabel\"\n :disabled=\"selectDisabled\"\n :autocomplete=\"autocomplete\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keyup=\"managePlaceholder\"\n @keydown=\"resetInputState\"\n @keydown.down.prevent=\"navigateOptions('next')\"\n @keydown.up.prevent=\"navigateOptions('prev')\"\n @keydown.esc=\"handleKeydownEscape\"\n @keydown.enter.stop.prevent=\"selectOption\"\n @keydown.delete=\"deletePrevTag\"\n @keydown.tab=\"visible = false\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @input=\"debouncedQueryChange\"\n >\n </div>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <div>\n <slot name=\"prefix\"></slot>\n </div>\n </template>\n <template #suffix>\n <slot name=\"suffix\" :className=\"`${iconClass} ${!showClose && showIcon ? 'visible' : ''}`\">\n <hl-icon :class=\"[iconClass, !showClose && showIcon ? 'visible' : '']\">\n <system-select-arrow />\n </hl-icon>\n </slot>\n <slot name=\"clear\">\n <hl-icon :class=\"['select-close', showClose && 'visible']\" @click=\"handleClearClick\">\n <system-close />\n </hl-icon>\n </slot>\n </template>\n </hl-input>\n </div>\n </template>\n <template #content>\n <hl-select-menu>\n <template v-if=\"$slots.header\" #header>\n <slot name=\"header\"></slot>\n </template>\n <hl-scrollbar\n v-show=\"options.size > 0 && !loading\"\n :id=\"contentId\"\n ref=\"scrollbar\"\n tag=\"ul\"\n wrap-class=\"select-dropdown-wrap\"\n view-class=\"select-dropdown-list\"\n :class=\"{ 'is-empty': !allowCreate && Boolean(query) && filteredOptionsCount === 0 }\"\n role=\"listbox\"\n :aria-label=\"ariaLabel\"\n aria-orientation=\"vertical\"\n @at-end=\"$emit('at-end')\"\n >\n <hl-option\n v-if=\"showNewOption\"\n :value=\"query\"\n :created=\"true\"\n />\n <hl-options @update-options=\"onOptionsRendered\">\n <slot></slot>\n </hl-options>\n </hl-scrollbar>\n <template v-if=\"emptyText && (!allowCreate || loading || (allowCreate && options.size === 0 ))\">\n <slot v-if=\"$slots.empty\" name=\"empty\"></slot>\n <p v-else class=\"select-dropdown-empty\">\n {{ emptyText }}\n </p>\n </template>\n <template v-if=\"$slots.footer\" #footer>\n <slot name=\"footer\"></slot>\n </template>\n </hl-select-menu>\n </template>\n </hl-tooltip>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n toRefs,\n defineComponent,\n onMounted,\n nextTick,\n reactive,\n provide,\n computed,\n} from 'vue'\nimport HlInput from '@hongluan-ui/components/input'\nimport { placements } from '@popperjs/core'\nimport { useResizeObserver } from '@vueuse/core'\nimport HlTag from '@hongluan-ui/components/tag'\nimport HlTooltip, { useTooltipContentProps } from '@hongluan-ui/components/tooltip'\nimport HlScrollbar from '@hongluan-ui/components/scrollbar'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemSelectArrow, SystemClose } from '@hongluan-ui/components/system-icon'\nimport { useDeprecateAppendToBody } from '@hongluan-ui/components/popper'\nimport { ClickOutside } from '@hongluan-ui/directives'\nimport { isValidComponentSize } from '@hongluan-ui/utils'\nimport { useEmptyValuesProps, useId, useLocale, useNamespace, useAriaProps } from '@hongluan-ui/hooks'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@hongluan-ui/constants'\nimport { useSelect, useSelectStates } from './useSelect'\nimport { selectKey } from './token'\nimport HlOption from './option.vue'\nimport HlOptions from './options'\nimport HlSelectMenu from './select-dropdown.vue'\n\nimport type { PropType } from 'vue'\nimport type { ComponentSize } from '@hongluan-ui/constants'\nimport type { Options } from '@popperjs/core'\nimport type { SelectContext } from './token'\n\nexport default defineComponent({\n name: 'Select',\n componentName: 'Select',\n components: {\n HlInput,\n HlSelectMenu,\n HlOption,\n HlOptions,\n HlTag,\n HlScrollbar,\n HlTooltip,\n HlIcon,\n SystemSelectArrow,\n SystemClose,\n },\n directives: { ClickOutside },\n props: {\n /**\n * @description the name attribute of select input\n */\n name: String,\n /**\n * @description native input id\n */\n id: String,\n /**\n * @description binding value\n */\n modelValue: {\n type: [Array, String, Number, Boolean, Object],\n default: undefined,\n },\n /**\n * @description the autocomplete attribute of select input\n */\n autocomplete: {\n type: String,\n default: 'off',\n },\n /**\n * @description for non-filterable Select, this prop decides if the option menu pops up when the input is focused\n */\n automaticDropdown: Boolean,\n /**\n * @description size of Input\n */\n size: {\n type: String as PropType<ComponentSize>,\n validator: isValidComponentSize,\n },\n /**\n * @description tooltip theme, built-in theme: `dark` / `light`\n */\n effect: {\n type: String as PropType<'light' | 'dark' | string>,\n default: '',\n },\n /**\n * @description whether Select is disabled\n */\n disabled: Boolean,\n /**\n * @description whether select can be cleared\n */\n clearable: Boolean,\n /**\n * @description whether Select is filterable\n */\n filterable: Boolean,\n /**\n * @description whether creating new items is allowed. To use this, `filterable` must be true\n */\n allowCreate: Boolean,\n block: Boolean,\n /**\n * @description whether Select is loading data from server\n */\n loading: Boolean,\n /**\n * @description custom class name for Select's dropdown\n */\n popperClass: {\n type: String,\n default: '',\n },\n /**\n * @description [popper.js](https://popper.js.org/docs/v2/) parameters\n */\n popperOptions: {\n type: Object as PropType<Partial<Options>>,\n default: () => ({} as Partial<Options>),\n },\n /**\n * @description whether options are loaded from server\n */\n remote: Boolean,\n /**\n * @description displayed text while loading data from server, default is 'Loading'\n */\n loadingText: String,\n /**\n * @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data'\n */\n noMatchText: String,\n /**\n * @description displayed text when there is no options, you can also use slot `empty`, default is 'No data'\n */\n noDataText: String,\n /**\n * @description custom remote search method\n */\n remoteMethod: Function,\n /**\n * @description custom filter method\n */\n filterMethod: Function,\n /**\n * @description whether multiple-select is activated\n */\n multiple: Boolean,\n /**\n * @description maximum number of options user can select when `multiple` is `true`. No limit when set to 0\n */\n multipleLimit: {\n type: Number,\n default: 0,\n },\n /**\n * @description placeholder, default is 'Select'\n */\n placeholder: {\n type: String,\n },\n /**\n * @description select first matching option on enter key. Use with `filterable` or `remote`\n */\n defaultFirstOption: Boolean,\n /**\n * @description when `multiple` and `filter` is true, whether to reserve current keyword after selecting an option\n */\n reserveKeyword: {\n type: Boolean,\n default: true,\n },\n /**\n * @description unique identity key name for value, required when value is an object\n */\n valueKey: {\n type: String,\n default: 'value',\n },\n /**\n * @description whether to collapse tags to a text when multiple selecting\n */\n collapseTags: Boolean,\n /**\n * @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true\n */\n collapseTagsTooltip: Boolean,\n /**\n * @description the max tags number to be shown. To use this, `collapse-tags` must be true\n */\n maxCollapseTags: {\n type: Number,\n default: 1,\n },\n popperAppendToBody: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description whether select dropdown is teleported to the body\n */\n teleported: useTooltipContentProps.teleported,\n /**\n * @description when select dropdown is inactive and `persistent` is `false`, select dropdown will be destroyed\n */\n persistent: {\n type: Boolean,\n default: true,\n },\n fill: Boolean,\n thin: Boolean,\n round: Boolean,\n /**\n * @description tag type\n */\n tagType: {\n type: String,\n default: '',\n },\n popperOffset: {\n type: Number,\n default: 4,\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n /**\n * @description in remote search method show suffix icon\n */\n remoteShowSuffix: Boolean,\n /**\n * @deprecated will be removed in version 2.4.0, please use override style scheme\n */\n suffixTransition: {\n type: Boolean,\n default: true,\n },\n /**\n * @description position of dropdown\n */\n placement: {\n type: String,\n values: placements,\n default: 'bottom-start',\n },\n ...useAriaProps(['ariaLabel']),\n ...useEmptyValuesProps,\n },\n emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'remove-tag', 'clear', 'visible-change', 'focus', 'blur'],\n\n setup(props, ctx) {\n const { t } = useLocale()\n const { namespace } = useNamespace()\n const states = useSelectStates(props)\n const contentId = useId()\n\n const {\n optionList,\n optionsArray,\n hoverOption,\n selectSize,\n readonly,\n handleResize,\n debouncedOnInputChange,\n debouncedQueryChange,\n deletePrevTag,\n deleteTag,\n deleteSelected,\n handleOptionSelect,\n scrollToOption,\n setSelected,\n // resetInputHeight,\n managePlaceholder,\n showClose,\n selectDisabled,\n selectFill,\n iconClass,\n showIcon,\n showNewOption,\n emptyText,\n toggleLastOptionHitState,\n resetInputState,\n handleComposition,\n onOptionCreate,\n onOptionDestroy,\n handleMenuEnter,\n handleFocus,\n blur,\n focus,\n handleBlur,\n handleClearClick,\n handleClose,\n handleKeydownEscape,\n toggleMenu,\n selectOption,\n getValueKey,\n navigateOptions,\n handleDeleteTooltipTag,\n dropMenuVisible,\n queryChange,\n groupQueryChange,\n reference,\n input,\n tooltipRef,\n tagTooltipRef,\n tags,\n selectWrapper,\n scrollbar,\n handleMouseEnter,\n handleMouseLeave,\n showTagList,\n collapseTagList,\n } = useSelect(props, states, ctx)\n\n const {\n // inputWidth,\n selected,\n // inputLength,\n filteredOptionsCount,\n visible,\n selectedLabel,\n hoverIndex,\n query,\n inputHovering,\n currentPlaceholder,\n menuVisibleOnFocus,\n isOnComposition,\n options,\n cachedOptions,\n optionsCount,\n // prefixWidth,\n // tagInMultiLine,\n } = toRefs(states)\n\n provide(selectKey, reactive({\n props,\n options,\n optionsArray,\n cachedOptions,\n optionsCount,\n filteredOptionsCount,\n hoverIndex,\n handleOptionSelect,\n onOptionCreate,\n onOptionDestroy,\n selectWrapper,\n selected,\n setSelected,\n queryChange,\n groupQueryChange,\n }) as unknown as SelectContext)\n\n onMounted(() => {\n states.cachedPlaceHolder = currentPlaceholder.value = props.placeholder || (() => t('hl.select.placeholder'))\n\n if (props.multiple && Array.isArray(props.modelValue) && props.modelValue.length > 0) {\n currentPlaceholder.value = ''\n }\n useResizeObserver(selectWrapper, handleResize)\n\n if (reference.value?.$el) {\n // const sizeMap = {\n // md: 36,\n // sm: 32,\n // xs: 28,\n // }\n // const input = reference.value.input\n // states.initialInputHeight = input.getBoundingClientRect().height || sizeMap[selectSize.value]\n }\n if (props.remote && props.multiple) {\n // resetInputHeight()\n }\n nextTick(() => {\n if (reference.value?.$el) {\n // inputWidth.value = reference.value.$el.getBoundingClientRect().width\n }\n if (ctx.slots.prefix) {\n // const inputChildNodes = reference.value.$el.childNodes\n // const input = [].filter.call(inputChildNodes, item => item.tagName === 'INPUT')[0]\n // const prefix = reference.value.$el.querySelector('.input-affixe.prefix div')\n // const maxWidth = props.size === 'lg' ? 40 : 35\n // prefixWidth.value = Math.max(prefix.getBoundingClientRect().width + 5, maxWidth)\n // if (states.prefixWidth) {\n // input.style.paddingLeft = `${Math.max(states.prefixWidth, maxWidth)}px`\n // }\n }\n })\n setSelected()\n })\n\n if (props.multiple && !Array.isArray(props.modelValue)) {\n ctx.emit(UPDATE_MODEL_EVENT, [])\n }\n if (!props.multiple && Array.isArray(props.modelValue)) {\n ctx.emit(UPDATE_MODEL_EVENT, '')\n }\n\n const popperPaneRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n })\n\n const { compatTeleported } = useDeprecateAppendToBody(\n 'Select',\n 'popperAppendToBody',\n )\n\n const onOptionsRendered = (v: string[]) => {\n optionList.value = v\n }\n\n return {\n namespace,\n onOptionsRendered,\n // tagInMultiLine,\n // prefixWidth,\n compatTeleported,\n selectSize,\n readonly,\n handleResize,\n debouncedOnInputChange,\n debouncedQueryChange,\n deletePrevTag,\n deleteTag,\n handleDeleteTooltipTag,\n deleteSelected,\n handleOptionSelect,\n scrollToOption,\n // inputWidth,\n selected,\n // inputLength,\n filteredOptionsCount,\n visible,\n selectedLabel,\n hoverIndex,\n query,\n inputHovering,\n currentPlaceholder,\n menuVisibleOnFocus,\n isOnComposition,\n options,\n // resetInputHeight,\n managePlaceholder,\n showClose,\n selectDisabled,\n selectFill,\n iconClass,\n showIcon,\n showNewOption,\n emptyText,\n toggleLastOptionHitState,\n resetInputState,\n handleComposition,\n handleMenuEnter,\n handleFocus,\n handleKeydownEscape,\n blur,\n handleBlur,\n handleClearClick,\n handleClose,\n toggleMenu,\n selectOption,\n getValueKey,\n navigateOptions,\n dropMenuVisible,\n focus,\n reference,\n input,\n tooltipRef,\n popperPaneRef,\n tags,\n selectWrapper,\n scrollbar,\n handleMouseEnter,\n handleMouseLeave,\n showTagList,\n collapseTagList,\n tagTooltipRef,\n contentId,\n hoverOption,\n }\n },\n})\n</script>\n"],"names":["_createElementVNode","_createVNode","_withKeys","_openBlock","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuSA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,YAAY,EAAE;AAAa,EAC3B,OAAO;AAAA,IAIL,MAAM;AAAA,IAIN,IAAI;AAAA,IAIJ,YAAY;AAAA,MACV,MAAM,CAAC,OAAO,QAAQ,QAAQ,SAAS,MAAM;AAAA,MAC7C,SAAS;AAAA;AACX,IAIA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,mBAAmB;AAAA,IAInB,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA;AACb,IAIA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,UAAU;AAAA,IAIV,WAAW;AAAA,IAIX,YAAY;AAAA,IAIZ,aAAa;AAAA,IACb,OAAO;AAAA,IAIP,SAAS;AAAA,IAIT,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAQ;AACnB,IAIA,QAAQ;AAAA,IAIR,aAAa;AAAA,IAIb,aAAa;AAAA,IAIb,YAAY;AAAA,IAIZ,cAAc;AAAA,IAId,cAAc;AAAA,IAId,UAAU;AAAA,IAIV,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,aAAa;AAAA,MACX,MAAM;AAAA;AACR,IAIA,oBAAoB;AAAA,IAIpB,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,cAAc;AAAA,IAId,qBAAqB;AAAA,IAIrB,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,YAAY,uBAAuB;AAAA,IAInC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IAIP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,kBAAkB;AAAA,IAIlB,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IAIA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA;AACX,OACG,aAAa,CAAC,WAAW,CAAC;AAAA,OAC1B;AAAA;AACL,EACA,OAAO,CAAC,oBAAoB,cAAc,cAAc,SAAS,kBAAkB,SAAS,MAAM;AAAA,EAElG,MAAM,OAAO,KAAK;AAChB,UAAM,EAAE,MAAM;AACd,UAAM,EAAE,cAAc;AACtB,UAAM,SAAS,gBAAgB,KAAK;AACpC,UAAM,YAAY;AAElB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU,OAAO,QAAQ,GAAG;AAEhC,UAAM;AAAA,MAEJ;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QAGE,OAAO,MAAM;AAEjB,YAAQ,WAAW,SAAS;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,KACD,CAA6B;AAE9B,cAAU,MAAM;AACd,aAAO;AAEP,yFAAmF;AACjF;AAA2B;AAE7B;AAEA;AAA0B,MAQ1B;AACA;AAAoC,MAEpC;AACA;AACE;AAA0B,QAE1B;AACA,YAAI,IAAI;AAAc;AAStB;AAEF;AAAY;AAGd;AACE;AAA+B,IACjC;AACA,SAAK,MAAM,kBAAkB;AAC3B;AAA+B,IACjC;AAEA,UAAM,yBAAyB;AAC7B;AAAoC,IACtC;AAEA,UAAM,EAAE;AAKR;AACE;AAAmB,IACrB;AAEA;AAAO,MACL;AAAA,MACA;AAAA;AAGA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ;;;;;;;;;;;;;;AA9eQ;AAhQA;AAEE;AAAmB;AAA0B;AAAuB;;AAK7D;AACA;AACU;IAEvB;AAoPa,WAnPP;AAAA;AACM,gBACE;AAAA,MACX;AAAY,MACZ;AAAQ,MACR,gBAAY;AAAgC,MAC5C;AAAgB,MAChB;AAAqB,MACrB;AAAQ,MACT;AAAQ,MACR;AAAW,MACV,YAAY;AAAA,MACZ;AAAY,MACZ;AAAyB,MACzB;AAAkB,MAClB;AAAM;MAEI,kBACT;AAyLM;AAAA;AAxLE,uBACK;AAAe;AACA;UAE1BA;AAmLW,YAlLR;AAAI,YACL;AAAI,wBACK;AAAA;AAAa,YACtBC;AAAY;AACmH;AAKxH,0BACQ;AAAA;AACR;AACA;AACA;AACC;AACG;AACA;AACM;AACT;AACU,6BACJ;AAAA;AACR;AAA8B,yBAAkC;AAAS;AAAoC;;AAKjF;AAC7B;AACkC,6BACvB;AAAA;AACA;AACR,oBACD;AAAA;AACC;AACA;AACW;AACC;AACH,uBACT;AAAA;AAAmC;AACF,uCACZ;AAAY;AACR;AACZ;;;AAiIZ,yBAAA;AAAA,gBAJcC,UAAS,wCAAgC;AAAQ;AAI/D;AADK;AAFyC;oCACjD;AAAuB;AAAA;;;;;AAOpB;AADK;AAFiC;AAAwB;;AACjD;AAAA;;;;;;;;;AAlIK;AAmHnB;AAAA;AAhHA,kBACJ;AAAS;AAC4B,kBACpC;AAAO;;AA8DG;0CA3DT,aAWS;AAAA,6BATD;AAAgB;AACc,wBACnC,aAAa;AAAA;AACd,wBACC;AAAM;AACA,4DACW;AAAY;;AAEP;AAAH;;;;;AAgDb;;AA5CI;AACX;AACO,sBACN;AAAM;;AAqCM,wBAlCL;AAkCK;;AAjCP;AACO;AACW,0BACrB;AAAQ;AACC;AACG,0CACE;AAAA;;AAGX;AAAoC;4CAGtC;AAmBM;AAnBoB;;AAkBlB;AAfkB;AAChB;gDAEN;AAWS,yCAVDC;AAAgB,oCACtB;AAAM,oCACL;AAAmC;AAC7B;AACI;AACJ;AACP;AAC2C;;AAEpB;AAAH;;;;;;;;;AAQnB;AAD6B;;;;;;AAmBnC;2BAbkB;AAAA;AAalB;;AADI;AATe,kCACb;AAA2B;AACtB;AACd,wBACC;AAAM;AACA,4DACW;AAAY;;AAEP;AAAH;;;;;;AAgCzB;yBAzBK;AAAA;AACU;AACT,oBACJ;AAAK;sBAA4D;AAA8B,sBAA8B;AAAc;;AAK/H;AACF;AACI,6BACP;AAAA;AACD;AACC;AACA,sBAAE;AAAA;AAC4B;AACF;AACH;AACQ;AACX;AACT;;AACF;AACC,qCACH;AAAA;AACT;;AAvBM;;;AAxFO;;;;oBAmHK;AAAA;AAGxB;AAAA,kBADJ;AAA2B;;;;;;;AAsDlB;AAAA;AAVA;AAAA;AAnBR;AACD;AACA;AACO,2BACA;AAAA;AACiE,cAC5E;AAAK,cACJ;AAAY,cACb;AAAiB,cAChB;AAAa;;AAMZ;AAAA;;AAFQ;AACE;;AAEkC;AAC/B;AAAA;;;;;;;AAlBqB;;AA0B3B;AADL;gBAFM,OAAM;AAAA,+CACF;AAAA;;;;;;AA5BgB;AACH;AAAA;;UA8Bb,YAAO;kBAAS;AAAA,wBAC9B,MAA2B;AAAA,cAA3BC,WAA2B;AAAA;;;;;;;;AA1PJ;;;;;;;;;;;;"}