UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 24 kB
{"version":3,"file":"popup.mjs","sources":["../../src/popup/popup.tsx"],"sourcesContent":["import { createPopper, Placement } from '@popperjs/core';\nimport isFunction from 'lodash/isFunction';\nimport isObject from 'lodash/isObject';\nimport debounce from 'lodash/debounce';\nimport isString from 'lodash/isString';\nimport {\n computed,\n defineComponent,\n inject,\n InjectionKey,\n nextTick,\n onUnmounted,\n provide,\n ref,\n Ref,\n toRefs,\n Transition,\n watch,\n} from 'vue';\nimport { useContent, useTNodeJSX } from '../hooks';\nimport { useCommonClassName, usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport { off, on, once } from '../utils/dom';\nimport setStyle from '../_common/js/utils/set-style';\nimport Container from './container';\nimport props from './props';\nimport { TdPopupProps } from './type';\n\nconst POPUP_ATTR_NAME = 'data-td-popup';\nconst POPUP_PARENT_ATTR_NAME = 'data-td-popup-parent';\n\n/**\n * @param id\n * @param upwards query upwards poppers\n */\nfunction getPopperTree(id: number | string, upwards?: boolean): Element[] {\n const list = [] as any;\n const selectors = [POPUP_PARENT_ATTR_NAME, POPUP_ATTR_NAME];\n\n if (!id) return list;\n if (upwards) {\n selectors.unshift(selectors.pop());\n }\n\n recurse(id);\n\n return list;\n\n function recurse(id: number | string) {\n const children = document.querySelectorAll(`[${selectors[0]}=\"${id}\"]`);\n children.forEach((el) => {\n list.push(el);\n const childId = el.getAttribute(selectors[1]);\n if (childId && childId !== id) {\n recurse(childId);\n }\n });\n }\n}\n\nconst parentKey = Symbol() as InjectionKey<{\n id: string;\n assertMouseLeave: (ev: MouseEvent) => void;\n}>;\n\nfunction getPopperPlacement(placement: TdPopupProps['placement']): Placement {\n return placement.replace(/-(left|top)$/, '-start').replace(/-(right|bottom)$/, '-end') as Placement;\n}\n\nfunction attachListeners(elm: Ref<Element>) {\n const offs: Array<() => void> = [];\n return {\n add<K extends keyof HTMLElementEventMap>(type: K, listener: (ev: HTMLElementEventMap[K]) => void) {\n if (!type) return;\n on(elm.value, type, listener);\n offs.push(() => {\n off(elm.value, type, listener);\n });\n },\n clean() {\n offs.forEach((handler) => handler?.());\n offs.length = 0;\n },\n };\n}\n\nexport default defineComponent({\n name: 'XPopup',\n\n props: {\n ...props,\n expandAnimation: {\n type: Boolean,\n },\n },\n setup(props, { expose }) {\n const { visible: propVisible, modelValue } = toRefs(props);\n const [visible, setVisible] = useVModel(\n propVisible,\n modelValue,\n props.defaultVisible,\n props.onVisibleChange,\n 'visible',\n );\n const renderTNodeJSX = useTNodeJSX();\n const renderContent = useContent();\n\n /** popperjs instance */\n let popper: ReturnType<typeof createPopper>;\n /** timeout id */\n let showTimeout: any;\n let hideTimeout: any;\n\n const triggerEl = ref<HTMLElement>(null);\n const overlayEl = ref<HTMLElement>(null);\n const popperEl = ref<HTMLElement>(null);\n const containerRef = ref<typeof Container>(null);\n\n const id = typeof process !== 'undefined' && process.env?.TEST ? '' : Date.now().toString(36);\n const parent = inject(parentKey, undefined);\n\n provide(parentKey, {\n id,\n assertMouseLeave: onMouseLeave,\n });\n\n const prefixCls = usePrefixClass('popup');\n const { STATUS: commonCls } = useCommonClassName();\n const delay = computed(() => {\n const delay = props.trigger !== 'hover' ? [0, 0] : [].concat(props.delay ?? [250, 150]);\n return {\n show: delay[0],\n hide: delay[1] ?? delay[0],\n };\n });\n\n const trigger = attachListeners(triggerEl);\n\n watch(\n () => [props.trigger, triggerEl.value],\n () => {\n if (!triggerEl.value) return;\n trigger.clean();\n\n trigger.add(\n (\n {\n hover: 'mouseenter',\n focus: 'focusin',\n 'context-menu': 'contextmenu',\n click: 'click',\n } as any\n )[props.trigger],\n (ev: MouseEvent) => {\n if (props.disabled) return;\n\n if (ev.type === 'contextmenu') {\n ev.preventDefault();\n }\n\n if ((ev.type === 'click' || ev.type === 'contextmenu') && visible.value) {\n hide(ev);\n return;\n }\n\n show(ev);\n },\n );\n\n trigger.add(\n (\n {\n hover: 'mouseleave',\n focus: 'focusout',\n } as any\n )[props.trigger],\n hide,\n );\n },\n );\n\n watch(\n () => [props.overlayStyle, props.overlayInnerStyle, overlayEl.value],\n () => {\n updateOverlayInnerStyle();\n updatePopper();\n },\n );\n\n watch(\n () => props.placement,\n () => {\n destroyPopper();\n updatePopper();\n },\n );\n\n watch(\n () => visible.value,\n (visible) => {\n if (visible) {\n on(document, 'mousedown', onDocumentMouseDown, true);\n if (props.trigger === 'focus') {\n once(triggerEl.value, 'keydown', (ev: KeyboardEvent) => {\n const code = typeof process !== 'undefined' && process.env?.TEST ? '27' : 'Escape';\n if (ev.code === code) {\n hide(ev);\n }\n });\n }\n return;\n }\n off(document, 'mousedown', onDocumentMouseDown, true);\n },\n );\n\n onUnmounted(() => {\n destroyPopper();\n clearAllTimeout();\n off(document, 'mousedown', onDocumentMouseDown, true);\n });\n\n expose({\n update: updatePopper,\n close: () => hide(),\n getOverlay() {\n return overlayEl.value;\n },\n });\n\n function getOverlayStyle() {\n const { overlayStyle } = props;\n\n if (!triggerEl.value || !overlayEl.value) return;\n if (isFunction(overlayStyle)) {\n return overlayStyle(triggerEl.value, overlayEl.value);\n }\n if (isObject(overlayStyle)) {\n return overlayStyle;\n }\n }\n\n function updateOverlayInnerStyle() {\n const { overlayInnerStyle } = props;\n\n if (!triggerEl.value || !overlayEl.value) return;\n if (isFunction(overlayInnerStyle)) {\n setStyle(overlayEl.value, overlayInnerStyle(triggerEl.value, overlayEl.value));\n } else if (isObject(overlayInnerStyle)) {\n setStyle(overlayEl.value, overlayInnerStyle);\n }\n }\n\n function updatePopper() {\n if (!popperEl.value || !visible.value) return;\n if (popper) {\n const rect = triggerEl.value.getBoundingClientRect();\n let parent = triggerEl.value;\n while (parent && parent !== document.body) {\n parent = parent.parentElement;\n }\n const isHidden = parent !== document.body || (rect.width === 0 && rect.height === 0);\n if (!isHidden) {\n popper.state.elements.reference = triggerEl.value;\n popper.update();\n } else {\n setVisible(false, { trigger: getTriggerType({ type: 'mouseenter' } as Event) });\n }\n return;\n }\n\n popper = createPopper(triggerEl.value, popperEl.value, {\n placement: getPopperPlacement(props.placement),\n onFirstUpdate: () => {\n nextTick(updatePopper);\n },\n ...props.popperOptions,\n });\n }\n\n function destroyPopper() {\n if (popper) {\n popper?.destroy();\n popper = null;\n }\n if (props.destroyOnClose) {\n containerRef.value?.unmountContent();\n }\n }\n\n function show(ev: Event) {\n clearAllTimeout();\n showTimeout = setTimeout(() => {\n setVisible(true, { trigger: getTriggerType(ev) });\n }, delay.value.show);\n }\n\n function hide(ev?: Event) {\n clearAllTimeout();\n hideTimeout = setTimeout(() => {\n setVisible(false, { trigger: getTriggerType(ev) });\n }, delay.value.hide);\n }\n\n function clearAllTimeout() {\n clearTimeout(showTimeout);\n clearTimeout(hideTimeout);\n }\n\n function getTriggerType(ev?: Event) {\n switch (ev?.type) {\n case 'mouseenter':\n case 'mouseleave':\n return 'trigger-element-hover';\n case 'focusin':\n return 'trigger-element-focus';\n case 'focusout':\n return 'trigger-element-blur';\n case 'click':\n return 'trigger-element-click';\n case 'context-menu':\n case 'keydown':\n return 'keydown-esc';\n case 'mousedown':\n return 'document';\n default:\n return 'trigger-element-close';\n }\n }\n\n function onDocumentMouseDown(ev: MouseEvent) {\n // click content\n if (popperEl.value.contains(ev.target as Node)) {\n return;\n }\n\n // click trigger element\n if (triggerEl.value.contains(ev.target as Node)) {\n return;\n }\n\n // ignore upwards\n const activedPopper = getPopperTree(id).find((el) => el.contains(ev.target as Node));\n if (\n activedPopper &&\n getPopperTree(activedPopper.getAttribute(POPUP_PARENT_ATTR_NAME), true).some((el) => el === popperEl.value)\n ) {\n return;\n }\n\n hide(ev);\n }\n\n function onMouseLeave(ev: MouseEvent) {\n if (props.trigger !== 'hover' || triggerEl.value.contains(ev.target as Node)) return;\n\n const isCursorOverlaps = getPopperTree(id).some((el) => {\n const rect = el.getBoundingClientRect();\n\n return ev.x > rect.x && ev.x < rect.x + rect.width && ev.y > rect.y && ev.y < rect.y + rect.height;\n });\n if (!isCursorOverlaps) {\n hide(ev);\n parent?.assertMouseLeave(ev);\n }\n }\n\n const updateScrollTop = inject('updateScrollTop', undefined);\n\n function handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight, scrollHeight } = e.target as HTMLDivElement;\n\n // 防止多次触发添加截流\n const debounceOnScrollBottom = debounce((e) => props.onScrollToBottom?.({ e }), 100);\n\n // windows 下 scrollTop 会出现小数,这里取整\n if (clientHeight + Math.floor(scrollTop) === scrollHeight) {\n // touch bottom\n debounceOnScrollBottom(e);\n }\n props.onScroll?.({ e });\n }\n watch(\n () => [visible.value, overlayEl.value],\n () => {\n if (visible.value && overlayEl.value && updateScrollTop) {\n updateScrollTop?.(overlayEl.value);\n }\n },\n );\n\n return () => {\n const content = renderTNodeJSX('content');\n const hidePopup = props.hideEmptyPopup && ['', undefined, null].includes(content);\n\n const overlay =\n visible.value || !props.destroyOnClose ? (\n <div\n {...{\n [POPUP_ATTR_NAME]: id,\n [POPUP_PARENT_ATTR_NAME]: parent?.id,\n }}\n class={[prefixCls.value, props.overlayClassName]}\n ref={(ref: HTMLElement) => (popperEl.value = ref)}\n style={[{ zIndex: props.zIndex }, getOverlayStyle(), hidePopup && { visibility: 'hidden' }]}\n vShow={visible.value}\n {...(props.trigger === 'hover' && {\n onMouseenter: () => {\n if (visible.value) {\n clearAllTimeout();\n }\n },\n onMouseleave: onMouseLeave,\n })}\n >\n <div\n class={[\n `${prefixCls.value}__content`,\n {\n [`${prefixCls.value}__content--text`]: isString(props.content),\n [`${prefixCls.value}__content--arrow`]: props.showArrow,\n [commonCls.value.disabled]: props.disabled,\n },\n props.overlayInnerClassName,\n ]}\n ref={overlayEl}\n onScroll={handleOnScroll}\n >\n {content}\n {props.showArrow && <div class={`${prefixCls.value}__arrow`} />}\n </div>\n </div>\n ) : null;\n\n return (\n <Container\n ref={(ref: any) => (containerRef.value = ref)}\n forwardRef={(ref) => (triggerEl.value = ref)}\n onContentMounted={() => {\n if (visible.value) {\n updatePopper();\n\n const timer = setTimeout(() => {\n /** compted after animation finished */\n updateOverlayInnerStyle();\n clearTimeout(timer);\n }, 60);\n }\n }}\n onResize={() => {\n if (visible.value) {\n updatePopper();\n }\n }}\n visible={visible.value}\n attach={props.attach}\n >\n {{\n content: () => (\n <Transition\n name={`${prefixCls.value}--animation${props.expandAnimation ? '-expand' : ''}`}\n appear\n onEnter={updatePopper}\n onAfterLeave={destroyPopper}\n >\n {overlay}\n </Transition>\n ),\n default: () => renderContent('default', 'triggerElement'),\n }}\n </Container>\n );\n };\n },\n});\n"],"names":["_isVNode","children","list","add","offs","name","props","expandAnimation","type","setup","visible","setVisible","id","assertMouseLeave","show","hide","watch","hover","focus","click","updateOverlayInnerStyle","updatePopper","destroyPopper","onUnmounted","clearAllTimeout","expose","update","isFunction","isObject","setStyle","parent","placement","popper","debounce","e","_withDirectives","_createVNode","_mergeProps","ref","visibility","onMouseleave","_vShow"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBkB,SAAA,OAAA,CAAA,CAAA,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,KAAA,UAAA,IAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,iBAAA,IAAA,CAAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA;AAGlB,IAAA,eAAA,GAAA,eAAA,CAAA;AACA,IAAA,sBAAA,GAAA,sBAAA,CAAA;AAMA,SAAA,aAAA,CAAA,EAAA,EAAA,OAAA,EAAA;;AAEQ,EAAA,IAAA,SAAA,GAAA,CAAA,sBAAA,EAAA,eAAA,CAAA,CAAA;AAEN,EAAA,IAAA,CAAA,EAAA,EAAA,OAAA,IAAA,CAAA;AACA,EAAA,IAAA,OAAA,EAAA;;AAEA,GAAA;;AAIO,EAAA,OAAA,IAAA,CAAA;;AAGL,IAAA,IAAA,QAAA,GAAA,QAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,MAAA,CAAA,GAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACSC,IAAAA,QAAAA,CAAAA,OAAAA,CAAAA,UAAAA,EAAAA,EAAAA;AACPC,MAAAA,IAAAA,CAAAA,IAAAA,CAAAA,EAAAA,CAAAA,CAAAA;;AAEI,MAAA,IAAA,OAAA,IAAA,OAAA,KAAA,GAAA,EAAA;;AAEJ,OAAA;AACF,KAAA,CAAA,CAAA;AACF,GAAA;AACF,CAAA;AAEA,IAAA,SAAA,GAAA,MAAA,EAAA,CAAA;AAKA,SAAA,kBAAA,CAAA,SAAA,EAAA;AACE,EAAA,OAAA,SAAA,CAAA,OAAA,CAAA,cAAA,EAAA,QAAA,CAAA,CAAA,OAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,CAAA;AACF,CAAA;AAEA,SAAA,eAAA,CAAA,GAAA,EAAA;;;AAGIC,IAAAA,GAAAA,EAAAA,SAAAA,GAAAA,CAAAA,IAAAA,EAAAA,QAAAA,EAAAA;;;;;AAKE,OAAA,CAAA,CAAA;;;AAGAC,MAAAA,IAAAA,CAAAA,OAAAA,CAAAA,UAAAA,OAAAA,EAAAA;AAA0B,QAAA,OAAA,OAAA,KAAA,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAA,EAAA,CAAA;;;AAE5B,KAAA;;AAEJ,CAAA;AAEA,aAAA,eAAA,CAAA;AACEC,EAAAA,IAAAA,EAAAA,QAAAA;AAEAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA,aAAAA,CAAAA,EAAAA,EAAAA,UAAAA,CAAAA,EAAAA,EAAAA,EAAAA;AAEEC,IAAAA,eAAAA,EAAAA;AACEC,MAAAA,IAAAA,EAAAA,OAAAA;AACF,KAAA;;AAEFC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,IAAAA,EAAAA;AAAyB,IAAA,IAAA,YAAA,CAAA;AAAA,IAAA,IAAA,MAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACvB,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,MAAA,CAAA;;;AACM,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,WAAA,EAAA,UAAA,EAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,eAAA,EAAA,SAAA,CAAA;;AAACC,MAAAA,OAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA;AAASC,MAAAA,UAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAOhB,IAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,UAAA,EAAA,CAAA;AAGI,IAAA,IAAA,MAAA,CAAA;AAEA,IAAA,IAAA,WAAA,CAAA;AACA,IAAA,IAAA,WAAA,CAAA;AAEE,IAAA,IAAA,SAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,SAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,QAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,YAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AAEN,IAAA,IAAA,EAAA,GAAA,OAAA,OAAA,KAAA,WAAA,IAAA,CAAA,YAAA,GAAA,OAAA,CAAA,GAAA,MAAA,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,IAAA,YAAA,CAAA,IAAA,GAAA,EAAA,GAAA,IAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA;;;AAIEC,MAAAA,EAAAA,EAAAA,EAAAA;AACAC,MAAAA,gBAAAA,EAAAA,YAAAA;AACF,KAAA,CAAA,CAAA;AAEM,IAAA,IAAA,SAAA,GAAA,cAAA,CAAA,OAAA,CAAA,CAAA;AACN,IAAA,IAAA,mBAAA,GAAA,kBAAA,EAAA;;AACM,IAAA,IAAA,KAAA,GAAA,QAAA,CAAA,YAAA;;AACJ,MAAA,IAAA,MAAA,GAAA,MAAA,CAAA,OAAA,KAAA,OAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA,aAAA,GAAA,MAAA,CAAA,KAAA,MAAA,IAAA,IAAA,aAAA,KAAA,KAAA,CAAA,GAAA,aAAA,GAAA,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA,CAAA;;AAEEC,QAAAA,IAAAA,EAAAA,MAAAA,CAAAA,CAAAA,CAAAA;AACAC,QAAAA,IAAAA,EAAAA,CAAAA,QAAAA,GAAAA,MAAAA,CAAAA,CAAAA,CAAAA,MAAAA,IAAAA,IAAAA,QAAAA,KAAAA,KAAAA,CAAAA,GAAAA,QAAAA,GAAAA,MAAAA,CAAAA,CAAAA,CAAAA;;AAEJ,KAAA,CAAA,CAAA;AAEM,IAAA,IAAA,OAAA,GAAA,eAAA,CAAA,SAAA,CAAA,CAAA;AAENC,IAAAA,KAAAA,CAAAA,YAAAA;;AACuC,KAAA,EAAA,YAAA;AAEnC,MAAA,IAAA,CAAA,SAAA,CAAA,KAAA,EAAA,OAAA;;;AAMMC,QAAAA,KAAAA,EAAAA,YAAAA;AACAC,QAAAA,KAAAA,EAAAA,SAAAA;AACA,QAAA,cAAA,EAAA,aAAA;AACAC,QAAAA,KAAAA,EAAAA,OAAAA;;;AAME,QAAA,IAAA,EAAA,CAAA,IAAA,KAAA,aAAA,EAAA;;AAEJ,SAAA;AAEA,QAAA,IAAA,CAAA,EAAA,CAAA,IAAA,KAAA,OAAA,IAAA,EAAA,CAAA,IAAA,KAAA,aAAA,KAAA,OAAA,CAAA,KAAA,EAAA;;AAEE,UAAA,OAAA;AACF,SAAA;;AAGF,OAAA,CAAA,CAAA;;AAMIF,QAAAA,KAAAA,EAAAA,YAAAA;AACAC,QAAAA,KAAAA,EAAAA,UAAAA;AACF,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AAIN,KAAA,CAAA,CAAA;AAGFF,IAAAA,KAAAA,CAAAA,YAAAA;AACE,MAAA,OAAA,CAAA,MAAA,CAAA,YAAA,EAAA,MAAA,CAAA,iBAAA,EAAA,SAAA,CAAA,KAAA,CAAA,CAAA;AAAmE,KAAA,EAAA,YAAA;AAEzCI,MAAAA,uBAAAA,EAAAA,CAAAA;AACXC,MAAAA,YAAAA,EAAAA,CAAAA;AACf,KAAA,CAAA,CAAA;AAGFL,IAAAA,KAAAA,CAAAA,YAAAA;;AACc,KAAA,EAAA,YAAA;AAEIM,MAAAA,aAAAA,EAAAA,CAAAA;AACDD,MAAAA,YAAAA,EAAAA,CAAAA;AACf,KAAA,CAAA,CAAA;AAGFL,IAAAA,KAAAA,CAAAA,YAAAA;;;AAGI,MAAA,IAAA,QAAA,EAAA;;AAEMV,QAAAA,IAAAA,MAAAA,CAAAA,OAAAA,KAAAA,OAAAA,EAAAA;;AACsD,YAAA,IAAA,aAAA,CAAA;;AAElD,YAAA,IAAA,EAAA,CAAA,IAAA,KAAA,IAAA,EAAA;;AAEJ,aAAA;AACF,WAAA,CAAA,CAAA;AACF,SAAA;AACA,QAAA,OAAA;AACF,OAAA;;AAEF,KAAA,CAAA,CAAA;AAGFiB,IAAAA,WAAAA,CAAAA,YAAAA;AACgBD,MAAAA,aAAAA,EAAAA,CAAAA;AACEE,MAAAA,eAAAA,EAAAA,CAAAA;;AAElB,KAAA,CAAA,CAAA;AAEOC,IAAAA,MAAAA,CAAAA;AACLC,MAAAA,MAAAA,EAAAA,YAAAA;;;AACkB,OAAA;;;AAGlB,OAAA;AACF,KAAA,CAAA,CAAA;;AAGQ,MAAA,IAAA,YAAA,GAAA,MAAA,CAAA,YAAA,CAAA;;AAGF,MAAA,IAAAC,YAAA,CAAA,YAAA,CAAA,EAAA;;AAEJ,OAAA;AACI,MAAA,IAAAC,UAAA,CAAA,YAAA,CAAA,EAAA;AACK,QAAA,OAAA,YAAA,CAAA;AACT,OAAA;AACF,KAAA;;AAGQ,MAAA,IAAA,iBAAA,GAAA,MAAA,CAAA,iBAAA,CAAA;;AAGF,MAAA,IAAAD,YAAA,CAAA,iBAAA,CAAA,EAAA;AACFE,QAAAA,QAAAA,CAAAA,SAAAA,CAAAA,KAAAA,EAAAA,iBAAAA,CAAAA,SAAAA,CAAAA,KAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AACF,OAAA,MAAA,IAAAD,UAAA,CAAA,iBAAA,CAAA,EAAA;AACWC,QAAAA,QAAAA,CAAAA,SAAAA,CAAAA,KAAAA,EAAAA,iBAAAA,CAAAA,CAAAA;AACX,OAAA;AACF,KAAA;;;AAIE,MAAA,IAAA,MAAA,EAAA;;AAEE,QAAA,IAAA,OAAA,GAAA,SAAA,CAAA,KAAA,CAAA;AACOC,QAAAA,OAAAA,OAAAA,IAAAA,OAAAA,KAAAA,QAAAA,CAAAA,IAAAA,EAAAA;;AAEP,SAAA;AACM,QAAA,IAAA,QAAA,GAAA,OAAA,KAAA,QAAA,CAAA,IAAA,IAAA,IAAA,CAAA,KAAA,KAAA,CAAA,IAAA,IAAA,CAAA,MAAA,KAAA,CAAA,CAAA;;;;AAIN,SAAA,MAAA;;;AACgDtB,cAAAA,IAAAA,EAAAA,YAAAA;;AAA+B,WAAA,CAAA,CAAA;AAC/E,SAAA;AACA,QAAA,OAAA;AACF,OAAA;;AAGEuB,QAAAA,SAAAA,EAAAA,kBAAAA,CAAAA,MAAAA,CAAAA,SAAAA,CAAAA;;;AAGA,SAAA;AAAA,OAAA,EAAA,MAAA,CAAA,aAAA,CAAA,CAAA,CAAA;AAGJ,KAAA;;AAGE,MAAA,IAAA,MAAA,EAAA;AAAY,QAAA,IAAA,OAAA,CAAA;;AAEDC,QAAAA,MAAAA,GAAAA,IAAAA,CAAAA;AACX,OAAA;;AAC0B,QAAA,IAAA,mBAAA,CAAA;AACxB,QAAA,CAAA,mBAAA,GAAA,YAAA,CAAA,KAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,cAAA,EAAA,CAAA;AACF,OAAA;AACF,KAAA;;AAGkBR,MAAAA,eAAAA,EAAAA,CAAAA;;;;AAEiC,SAAA,CAAA,CAAA;AACjD,OAAA,EAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA;AACF,KAAA;;AAGkBA,MAAAA,eAAAA,EAAAA,CAAAA;;;;AAEkC,SAAA,CAAA,CAAA;AAClD,OAAA,EAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA;AACF,KAAA;;;;AAKA,KAAA;;AAGE,MAAA,QAAA,EAAA,KAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA;AACO,QAAA,KAAA,YAAA,CAAA;AACA,QAAA,KAAA,YAAA;AACI,UAAA,OAAA,uBAAA,CAAA;AACJ,QAAA,KAAA,SAAA;AACI,UAAA,OAAA,uBAAA,CAAA;AACJ,QAAA,KAAA,UAAA;AACI,UAAA,OAAA,sBAAA,CAAA;AACJ,QAAA,KAAA,OAAA;AACI,UAAA,OAAA,uBAAA,CAAA;AACJ,QAAA,KAAA,cAAA,CAAA;AACA,QAAA,KAAA,SAAA;AACI,UAAA,OAAA,aAAA,CAAA;AACJ,QAAA,KAAA,WAAA;AACI,UAAA,OAAA,UAAA,CAAA;AAAA,QAAA;AAEA,UAAA,OAAA,uBAAA,CAAA;AAAA,OAAA;AAEb,KAAA;;;AAKI,QAAA,OAAA;AACF,OAAA;;AAIE,QAAA,OAAA;AACF,OAAA;;AAG8C,QAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA;;AAC9C,MAAA,IAAA,aAAA,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,sBAAA,CAAA,EAAA,IAAA,CAAA,CAAA,IAAA,CAAA,UAAA,EAAA,EAAA;AAEgF,QAAA,OAAA,EAAA,KAAA,QAAA,CAAA,KAAA,CAAA;AAA4B,OAAA,CAAA,EAAA;AAE1G,QAAA,OAAA;AACF,OAAA;;AAGF,KAAA;;AAGE,MAAA,IAAA,MAAA,CAAA,OAAA,KAAA,OAAA,IAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA;;AAGQ,QAAA,IAAA,IAAA,GAAA,EAAA,CAAA,qBAAA,EAAA,CAAA;AAEN,QAAA,OAAA,EAAA,CAAA,CAAA,GAAA,IAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAAA,GAAA,IAAA,CAAA,CAAA,GAAA,IAAA,CAAA,KAAA,IAAA,EAAA,CAAA,CAAA,GAAA,IAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAAA,GAAA,IAAA,CAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACF,OAAA,CAAA,CAAA;;;;AAIA,OAAA;AACF,KAAA;;;AAIuC,MAAA,IAAA,gBAAA,CAAA;AACrC,MAAA,IAAA,SAAA,GAAA,CAAA,CAAA,MAAA;;;;AAGM,MAAA,IAAA,sBAAA,GAAAS,UAAA,CAAA,UAAA,EAAA,EAAA;AAAyC3B,QAAAA,IAAAA,qBAAAA,CAAAA;AAAAA,QAAAA,OAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,gBAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAA2B4B,UAAAA,CAAAA,EAAAA,EAAAA;AAAE,SAAA,CAAA,CAAA;AAAC,OAAA,EAAA,GAAA,CAAA,CAAA;;;AAM7E,OAAA;AACA5B,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAmB4B,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AACvB,KAAA;AACAlB,IAAAA,KAAAA,CAAAA,YAAAA;;AACuC,KAAA,EAAA,YAAA;;;AAInC,OAAA;AACF,KAAA,CAAA,CAAA;AAGF,IAAA,OAAA,YAAA;;AACQ,MAAA,IAAA,OAAA,GAAA,cAAA,CAAA,SAAA,CAAA,CAAA;AACA,MAAA,IAAA,SAAA,GAAA,MAAA,CAAA,cAAA,IAAA,CAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA;AAEN,MAAA,IAAA,OAAA,GAAA,OAAA,CAAA,KAAA,IAAA,CAAA,MAAA,CAAA,cAAA,GAAAmB,cAAA,CAAAC,WAAA,CAAA,KAAA,EAAAC,UAAA,EAAA,KAAA,GAAA,EAAA,EAAA,eAAA,CAAA,KAAA,EAAA,eAAA,EAAA,EAAA,CAAA,EAAA,eAAA,CAAA,KAAA,EAAA,sBAAA,EAAA,MAAA,KAAA,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EAAA,KAAA,GAAA;;;AAQkC,UAAA,OAAA,QAAA,CAAA,KAAA,GAAA,IAAA,CAAA;AAAiBC,SAAAA;AAAAA,QAAAA,OAAAA,EAAAA,CAAAA;;AACd,SAAA,EAAA,eAAA,EAAA,EAAA,SAAA,IAAA;AAAqCC,UAAAA,UAAAA,EAAAA,QAAAA;;;;;AAK9Cf,YAAAA,eAAAA,EAAAA,CAAAA;AAClB,WAAA;;AAEFgB,QAAAA,YAAAA,EAAAA,YAAAA;AACF,OAAA,CAAA,EAAA,CAAAJ,WAAA,CAAA,KAAA,EAAA;;AAWE,QAAA,KAAA,EAAA,SAAA;;AAEU,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,IAAAA,WAAA,CAAA,KAAA,EAAA;AAGU,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAAyC,OAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAAK,KAAA,EAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,IAAA,CAAA;;;;AAQjE,SAAA;;AAAsB,UAAA,OAAA,SAAA,CAAA,KAAA,GAAA,IAAA,CAAA;AAAkBH,SAAAA;;;AAGvBjB,YAAAA,YAAAA,EAAAA,CAAAA;AAEP,YAAA,IAAA,KAAA,GAAA,UAAA,CAAA,YAAA;AAEoBD,cAAAA,uBAAAA,EAAAA,CAAAA;;;AAG5B,WAAA;;;;AAIeC,YAAAA,YAAAA,EAAAA,CAAAA;AACf,WAAA;;;AAGF,QAAA,QAAA,EAAA,MAAA,CAAA,MAAA;AAEC,OAAA,EAAA;;;AACU,YAAA,MAAA,EAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,aAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,eAAA,GAAA,SAAA,GAAA,EAAA,CAAA;;;;AAKS,WAAA,EAAA,OAAA,CAAA,OAAA,CAAA,GAAA,OAAA,GAAA;;;;;;AAKlB,QAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAS,UAAA,OAAA,aAAA,CAAA,SAAA,EAAA,gBAAA,CAAA,CAAA;AAA+C,SAAA;AAAA,OAAA,CAAA,CAAA;;AAKlE,GAAA;AACF,CAAA,CAAA;;;;"}