{"version":3,"file":"dialog.mjs","sources":["../../src/dialog/dialog.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  Transition,\n  watch,\n  getCurrentInstance,\n  Teleport,\n} from 'vue';\n\nimport { DialogCloseContext } from './type';\nimport props from './props';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { useAction, useSameTarget } from './hooks';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport useDestroyOnClose from '../hooks/useDestroyOnClose';\nimport { stack } from './stack';\nimport { getScrollbarWidth } from '../_common/js/utils/getScrollbarWidth';\n\nimport type { TdDialogProps } from './type';\nimport useTeleport from '../hooks/useTeleport';\n\nfunction GetCSSValue(v: string | number) {\n  return Number.isNaN(Number(v)) ? v : `${Number(v)}px`;\n}\n\nlet mousePosition: { x: number; y: number } | null;\nconst getClickPosition = (e: MouseEvent) => {\n  mousePosition = {\n    x: e.clientX,\n    y: e.clientY,\n  };\n  setTimeout(() => {\n    mousePosition = null;\n  }, 100);\n};\n\nif (typeof window !== 'undefined' && window.document && window.document.documentElement) {\n  document.documentElement.addEventListener('click', getClickPosition, true);\n}\n\nfunction InitDragEvent(dragBox: HTMLElement) {\n  const target = dragBox;\n  const windowInnerWidth = window.innerWidth || document.documentElement.clientWidth;\n  const windowInnerHeight = window.innerHeight || document.documentElement.clientHeight;\n  target.addEventListener('mousedown', (targetEvent: MouseEvent) => {\n    // 算出鼠标相对元素的位置\n    const disX = targetEvent.clientX - target.offsetLeft;\n    const disY = targetEvent.clientY - target.offsetTop;\n    const dialogW = target.offsetWidth;\n    const dialogH = target.offsetHeight;\n    // 如果弹出框超出屏幕范围 不能进行拖拽\n    if (dialogW > windowInnerWidth || dialogH > windowInnerHeight) return;\n    function mouseMoverHandler(documentEvent: MouseEvent) {\n      // 用鼠标的位置减去鼠标相对元素的位置，得到元素的位置\n      let left = documentEvent.clientX - disX;\n      let top = documentEvent.clientY - disY;\n      // 临界判断\n      // 拖拽上左边界限制\n      if (left < 0) left = 0;\n      if (top < 0) top = 0;\n      if (windowInnerWidth - target.offsetWidth - left < 0) left = windowInnerWidth - target.offsetWidth;\n      if (windowInnerHeight - target.offsetHeight - top < 0) top = windowInnerHeight - target.offsetHeight;\n      target.style.position = 'absolute';\n      target.style.left = `${left}px`;\n      target.style.top = `${top}px`;\n    }\n    function mouseUpHandler() {\n      // 鼠标弹起来的时候不再移动\n      document.removeEventListener('mousemove', mouseMoverHandler);\n      // 预防鼠标弹起来后还会循环（即预防鼠标放上去的时候还会移动）\n      document.removeEventListener('mouseup', mouseUpHandler);\n    }\n    // 元素按下时注册document鼠标监听事件\n    document.addEventListener('mousemove', mouseMoverHandler);\n    // 鼠标弹起来移除document鼠标监听事件\n    document.addEventListener('mouseup', mouseUpHandler);\n    // 拖拽结束移除鼠标监听事件，解决文字拖拽结束事件未解绑问题\n    document.addEventListener('dragend', mouseUpHandler);\n  });\n}\n\nlet key = 1;\n\nexport default defineComponent({\n  name: 'XDialog',\n  // 注册v-draggable指令,传入true时候初始化拖拽事件\n  directives: {\n    draggable(el, binding) {\n      // el 指令绑定的元素\n      if (el && binding && binding.value) {\n        InitDragEvent(el);\n      }\n    },\n  },\n  inheritAttrs: false,\n  props,\n  emits: ['update:visible'],\n  setup(props, context) {\n    const COMPONENT_NAME = usePrefixClass('dialog');\n    const classPrefix = usePrefixClass();\n    const renderContent = useContent();\n    const renderTNodeJSX = useTNodeJSX();\n    const dialogEle = ref<HTMLElement | null>(null);\n    const { globalConfig } = useConfig('dialog');\n\n    const confirmBtnAction = (e: MouseEvent) => {\n      props.onConfirm?.({ e });\n    };\n    const cancelBtnAction = (e: MouseEvent) => {\n      props.onCancel?.({ e });\n      emitCloseEvent({ e, trigger: 'cancel' });\n    };\n    const { getConfirmBtn, getCancelBtn } = useAction({ confirmBtnAction, cancelBtnAction });\n    // teleport容器\n    const teleportElement = useTeleport(() => props.attach);\n    useDestroyOnClose();\n    const timer = ref();\n    const styleEl = ref();\n    // 是否模态形式的对话框\n    const isModal = computed(() => props.mode === 'modal');\n    // 是否非模态对话框\n    const isModeLess = computed(() => props.mode === 'modeless');\n    // 是否普通对话框，没有脱离文档流的对话框\n    const isNormal = computed(() => props.mode === 'normal');\n    // 是否全屏对话框\n    const isFullScreen = computed(() => props.mode === 'full-screen');\n    const maskClass = computed(() => [\n      `${COMPONENT_NAME.value}__mask`,\n      !props.showOverlay && `${classPrefix.value}-is-hidden`,\n    ]);\n    const positionClass = computed(() => {\n      if (isNormal.value) return [];\n      if (isFullScreen.value) return [`${COMPONENT_NAME.value}__position_fullscreen`];\n\n      return [\n        `${COMPONENT_NAME.value}__position`,\n        !!props.top && `${COMPONENT_NAME.value}--top`,\n        `${props.placement && !props.top ? `${COMPONENT_NAME.value}--${props.placement}` : ''}`,\n      ];\n    });\n    const wrapClass = computed(() => [!isNormal.value && `${COMPONENT_NAME.value}__wrap`]);\n    const positionStyle = computed(() => {\n      if (isFullScreen.value) return {}; // 全屏模式，top属性不生效\n\n      // 此处获取定位方式 top 优先级较高 存在时 默认使用top定位\n      const { top } = props;\n      let topStyle = {};\n      if (top !== undefined) {\n        const topValue = GetCSSValue(top);\n        topStyle = { paddingTop: topValue };\n      }\n      return topStyle;\n    });\n    const dialogClass = computed(() => {\n      const dialogClass = [\n        `${COMPONENT_NAME.value}`,\n        `${COMPONENT_NAME.value}__modal-${props.theme}`,\n        isModeLess.value && props.draggable && `${COMPONENT_NAME.value}--draggable`,\n      ];\n\n      if (isFullScreen.value) {\n        dialogClass.push(`${COMPONENT_NAME.value}__fullscreen`);\n      } else {\n        dialogClass.push(...[`${COMPONENT_NAME.value}--default`, `${COMPONENT_NAME.value}--${props.placement}`]);\n      }\n      return dialogClass;\n    });\n    const dialogStyle = computed(() => {\n      return !isFullScreen.value ? { width: GetCSSValue(props.width) } : {}; // width全屏模式不生效\n    });\n\n    watch(\n      () => props.visible,\n      (value) => {\n        if (value) {\n          if ((isModal.value && !props.showInAttachedElement) || isFullScreen.value) {\n            if (props.preventScrollThrough) {\n              document.head.appendChild(styleEl.value);\n            }\n\n            nextTick(() => {\n              if (mousePosition && dialogEle.value) {\n                dialogEle.value.style.transformOrigin = `${mousePosition.x - dialogEle.value.offsetLeft}px ${\n                  mousePosition.y - dialogEle.value.offsetTop\n                }px`;\n              }\n            });\n          }\n          // 清除鼠标焦点 避免entry事件多次触发（按钮弹出弹窗 不移除焦点 立即按Entry按键 会造成弹窗关闭再弹出）\n          (document.activeElement as HTMLElement)?.blur();\n        } else {\n          clearStyleFunc();\n        }\n        storeUid(value);\n        addKeyboardEvent(value);\n      },\n    );\n\n    function destroySelf() {\n      styleEl.value.parentNode?.removeChild?.(styleEl.value);\n    }\n\n    function clearStyleFunc() {\n      clearTimeout(timer.value);\n      timer.value = setTimeout(() => {\n        destroySelf();\n      }, 150);\n    }\n\n    const instance = getCurrentInstance();\n    const storeUid = (flag: boolean) => {\n      if (flag) {\n        stack.push(instance.uid);\n      } else {\n        stack.pop();\n      }\n    };\n\n    const addKeyboardEvent = (status: boolean) => {\n      if (status) {\n        document.addEventListener('keydown', keyboardEvent);\n        props.confirmOnEnter && document.addEventListener('keydown', keyboardEnterEvent);\n      } else {\n        document.removeEventListener('keydown', keyboardEvent);\n        props.confirmOnEnter && document.removeEventListener('keydown', keyboardEnterEvent);\n      }\n    };\n    // 回车出发确认事件\n    const keyboardEnterEvent = (e: KeyboardEvent) => {\n      const eventSrc = e.target as HTMLElement;\n      if (eventSrc.tagName.toLowerCase() === 'input') return; // 若是input触发 则不执行\n      const { code } = e;\n      if ((code === 'Enter' || code === 'NumpadEnter') && stack.top === instance.uid) {\n        props.onConfirm?.({ e });\n      }\n    };\n    const keyboardEvent = (e: KeyboardEvent) => {\n      if (e.code === 'Escape' && stack.top === instance.uid) {\n        props.onEscKeydown?.({ e });\n        // 根据closeOnEscKeydown判断按下ESC时是否触发close事件\n        if (props.closeOnEscKeydown ?? globalConfig.value.closeOnEscKeydown) {\n          emitCloseEvent({ e, trigger: 'esc' });\n        }\n      }\n    };\n    const overlayAction = (e: MouseEvent) => {\n      if (props.showOverlay && (props.closeOnOverlayClick ?? globalConfig.value.closeOnOverlayClick)) {\n        props.onOverlayClick?.({ e });\n        emitCloseEvent({ e, trigger: 'overlay' });\n      }\n    };\n    const { onClick, onMousedown, onMouseup } = useSameTarget(overlayAction);\n    const closeBtnAction = (e: MouseEvent) => {\n      props.onCloseBtnClick?.({ e });\n      emitCloseEvent({\n        trigger: 'close-btn',\n        e,\n      });\n    };\n\n    // 打开弹窗动画结束时事件\n    const afterEnter = () => {\n      props.onOpened?.();\n    };\n    // 关闭弹窗动画结束时事件\n    const afterLeave = () => {\n      if (isModeLess.value && props.draggable && dialogEle.value) {\n        // 关闭弹窗 清空拖拽设置的相关css\n        dialogEle.value.style.position = 'relative';\n        dialogEle.value.style.left = 'unset';\n        dialogEle.value.style.top = 'unset';\n      }\n      props.onClosed?.();\n    };\n\n    const emitCloseEvent = (ctx: DialogCloseContext) => {\n      props.onClose?.(ctx);\n      // 默认关闭弹窗\n      context.emit('update:visible', false);\n    };\n\n    // Vue在引入阶段对事件的处理还做了哪些初始化操作。Vue在实例上用一个_events属性存贮管理事件的派发和更新，\n    // 暴露出$on, $once, $off, $emit方法给外部管理事件和派发执行事件\n    // 所以通过判断_events某个事件下监听函数数组是否超过一个，可以判断出组件是否监听了当前事件\n    const hasEventOn = (name: string) => {\n      // _events 因没有被暴露在vue实例接口中，只能把这个规则注释掉\n      // eslint-disable-next-line dot-notation\n      const eventFuncs = this['_events']?.[name];\n      return !!eventFuncs?.length;\n    };\n    const getIcon = () => {\n      const icon = {\n        info: <icon-ri-information-fill class={`${classPrefix.value}-is-info`} />,\n        warning: <icon-ri-error-warning-fill class={`${classPrefix.value}-is-warning`} />,\n        danger: <icon-ri-error-warning-fill class={`${classPrefix.value}-is-error`} />,\n        success: <icon-ri-checkbox-circle-fill class={`${classPrefix.value}-is-success`} />,\n      };\n      return icon[props.theme];\n    };\n    const renderDialog = () => {\n      // header 值为 true 显示空白头部\n      const defaultHeader = <h5 class=\"title\"></h5>;\n      const defaultCloseBtn = <icon-ri-close-line />;\n      const body = renderContent('default', 'body');\n      const defaultFooter = (\n        <div>\n          {getCancelBtn({\n            cancelBtn: props.cancelBtn as TdDialogProps['cancelBtn'],\n            globalCancel: globalConfig.value.cancel,\n            className: `${COMPONENT_NAME.value}__cancel`,\n          })}\n          {getConfirmBtn({\n            theme: props.theme,\n            confirmBtn: props.confirmBtn as TdDialogProps['confirmBtn'],\n            globalConfirm: globalConfig.value.confirm,\n            globalConfirmBtnTheme: globalConfig.value.confirmBtnTheme,\n            className: `${COMPONENT_NAME.value}__confirm`,\n          })}\n        </div>\n      );\n      const headerClassName = isFullScreen.value\n        ? [`${COMPONENT_NAME.value}__header`, `${COMPONENT_NAME.value}__header--fullscreen`]\n        : `${COMPONENT_NAME.value}__header`;\n\n      const closeClassName = isFullScreen.value\n        ? [`${COMPONENT_NAME.value}__close`, `${COMPONENT_NAME.value}__close--fullscreen`]\n        : `${COMPONENT_NAME.value}__close`;\n\n      const bodyClassName =\n        props.theme === 'default' ? [`${COMPONENT_NAME.value}__body`] : [`${COMPONENT_NAME.value}__body__icon`];\n\n      const footerContent = renderTNodeJSX('footer', defaultFooter);\n\n      if (isFullScreen.value && footerContent) {\n        bodyClassName.push(`${COMPONENT_NAME.value}__body--fullscreen`);\n      } else if (isFullScreen.value) {\n        bodyClassName.push(`${COMPONENT_NAME.value}__body--fullscreen--without-footer`);\n      }\n\n      const footerClassName = isFullScreen.value\n        ? [`${COMPONENT_NAME.value}__footer`, `${COMPONENT_NAME.value}__footer--fullscreen`]\n        : `${COMPONENT_NAME.value}__footer`;\n\n      const onStopDown = (e: MouseEvent) => {\n        if (isModeLess.value && props.draggable) e.stopPropagation();\n      };\n\n      return (\n        // /* 非模态形态下draggable为true才允许拖拽 */\n        <div class={wrapClass.value}>\n          <div\n            class={positionClass.value}\n            style={positionStyle.value}\n            onClick={onClick}\n            onMousedown={onMousedown}\n            onMouseup={onMouseup}\n          >\n            <div\n              key=\"dialog\"\n              class={dialogClass.value}\n              style={dialogStyle.value}\n              v-draggable={isModeLess.value && props.draggable}\n              ref={dialogEle}\n            >\n              <div class={headerClassName} onMousedown={onStopDown}>\n                <div class={`${COMPONENT_NAME.value}__header-content`}>\n                  {getIcon()}\n                  {renderTNodeJSX('header', defaultHeader)}\n                </div>\n\n                {props.closeBtn ? (\n                  <span class={closeClassName} onClick={closeBtnAction}>\n                    {renderTNodeJSX('closeBtn', defaultCloseBtn)}\n                  </span>\n                ) : null}\n              </div>\n              <div class={bodyClassName} onMousedown={onStopDown}>\n                {body}\n              </div>\n              {footerContent && (\n                <div class={footerClassName} onMousedown={onStopDown}>\n                  {footerContent}\n                </div>\n              )}\n            </div>\n          </div>\n        </div>\n      );\n    };\n\n    onMounted(() => {\n      const hasScrollBar = document.documentElement.scrollHeight > document.documentElement.clientHeight;\n      const scrollWidth = hasScrollBar ? getScrollbarWidth() : 0;\n      styleEl.value = document.createElement('style');\n      styleEl.value.dataset.id = `td_dialog_${+new Date()}_${(key += 1)}`;\n      styleEl.value.innerHTML = `\n        html body {\n          overflow-y: hidden;\n          width: calc(100% - ${scrollWidth}px);\n        }\n      `;\n    });\n\n    onBeforeUnmount(() => {\n      addKeyboardEvent(false);\n      destroySelf();\n    });\n\n    return {\n      COMPONENT_NAME,\n      isModal,\n      isModeLess,\n      isFullScreen,\n      maskClass,\n      dialogClass,\n      dialogStyle,\n      dialogEle,\n      afterEnter,\n      afterLeave,\n      hasEventOn,\n      renderDialog,\n      teleportElement,\n    };\n  },\n  render() {\n    const { COMPONENT_NAME } = this;\n    const maskView = (this.isModal || this.isFullScreen) && <div key=\"mask\" class={this.maskClass}></div>;\n    const dialogView = this.renderDialog();\n    const view = [maskView, dialogView];\n    const ctxStyle = { zIndex: this.zIndex };\n    // dialog__ctx--fixed 绝对定位\n    // dialog__ctx--absolute 挂载在attach元素上 相对定位\n    // __ctx--modeless modeless 点击穿透\n    const ctxClass = [\n      `${COMPONENT_NAME}__ctx`,\n      {\n        [`${COMPONENT_NAME}__ctx--fixed`]: this.isModal || this.isFullScreen,\n        [`${COMPONENT_NAME}__ctx--absolute`]: this.isModal && this.showInAttachedElement,\n        [`${COMPONENT_NAME}__ctx--modeless`]: this.isModeLess,\n      },\n    ];\n    return (\n      <Teleport disabled={!this.attach || !this.teleportElement} to={this.teleportElement}>\n        <Transition\n          duration={300}\n          name={`${COMPONENT_NAME}-zoom__vue`}\n          onAfterEnter={this.afterEnter}\n          onAfterLeave={this.afterLeave}\n        >\n          {(!this.destroyOnClose || this.visible) && (\n            <div v-show={this.visible} class={ctxClass} style={ctxStyle} {...this.$attrs}>\n              {view}\n            </div>\n          )}\n        </Transition>\n      </Teleport>\n    );\n  },\n});\n"],"names":["mousePosition","setTimeout","target","document","name","directives","draggable","inheritAttrs","props","setup","e","emitCloseEvent","trigger","confirmBtnAction","cancelBtnAction","useDestroyOnClose","topStyle","paddingTop","dialogClass","width","watch","nextTick","dialogEle","clearStyleFunc","clearTimeout","timer","destroySelf","stack","context","_createVNode","_resolveComponent","globalCancel","className","globalConfirm","globalConfirmBtnTheme","onMounted","onBeforeUnmount","COMPONENT_NAME","isModal","isModeLess","isFullScreen","maskClass","dialogStyle","afterEnter","afterLeave","hasEventOn","renderDialog","teleportElement","_withDirectives","_mergeProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAA,WAAA,CAAA,CAAA,EAAA;AACS,EAAA,OAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACT,CAAA;AAEA,IAAA,aAAA,CAAA;AACA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,CAAA,EAAA;AACkBA,EAAAA,aAAAA,GAAAA;;;;AAIhBC,EAAAA,UAAAA,CAAAA,YAAAA;AACkBD,IAAAA,aAAAA,GAAAA,IAAAA,CAAAA;;AAEpB,CAAA,CAAA;AAEA,IAAA,OAAA,MAAA,KAAA,WAAA,IAAA,MAAA,CAAA,QAAA,IAAA,MAAA,CAAA,QAAA,CAAA,eAAA,EAAA;;AAEA,CAAA;AAEA,SAAA,aAAA,CAAA,OAAA,EAAA;;;;AAISE,EAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,WAAAA,EAAAA,UAAAA,WAAAA,EAAAA;;;AAIL,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,WAAA,CAAA;AACA,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,YAAA,CAAA;AAEI,IAAA,IAAA,OAAA,GAAA,gBAAA,IAAA,OAAA,GAAA,iBAAA,EAAA,OAAA;;AAGE,MAAA,IAAA,IAAA,GAAA,aAAA,CAAA,OAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,GAAA,GAAA,aAAA,CAAA,OAAA,GAAA,IAAA,CAAA;AAGJ,MAAA,IAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,CAAA,CAAA;AACA,MAAA,IAAA,GAAA,GAAA,CAAA,EAAA,GAAA,GAAA,CAAA,CAAA;AACI,MAAA,IAAA,gBAAA,GAAA,MAAA,CAAA,WAAA,GAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,gBAAA,GAAA,MAAA,CAAA,WAAA,CAAA;AACA,MAAA,IAAA,iBAAA,GAAA,MAAA,CAAA,YAAA,GAAA,GAAA,GAAA,CAAA,EAAA,GAAA,GAAA,iBAAA,GAAA,MAAA,CAAA,YAAA,CAAA;AACJA,MAAAA,MAAAA,CAAAA,KAAAA,CAAAA,QAAAA,GAAAA,UAAAA,CAAAA;;;AAGF,KAAA;;AAGWC,MAAAA,QAAAA,CAAAA,mBAAAA,CAAAA,WAAAA,EAAAA,iBAAAA,CAAAA,CAAAA;AAEAA,MAAAA,QAAAA,CAAAA,mBAAAA,CAAAA,SAAAA,EAAAA,cAAAA,CAAAA,CAAAA;AACX,KAAA;AAESA,IAAAA,QAAAA,CAAAA,gBAAAA,CAAAA,WAAAA,EAAAA,iBAAAA,CAAAA,CAAAA;AAEAA,IAAAA,QAAAA,CAAAA,gBAAAA,CAAAA,SAAAA,EAAAA,cAAAA,CAAAA,CAAAA;AAEAA,IAAAA,QAAAA,CAAAA,gBAAAA,CAAAA,SAAAA,EAAAA,cAAAA,CAAAA,CAAAA;AACX,GAAA,CAAA,CAAA;AACF,CAAA;AAEA,IAAA,GAAA,GAAA,CAAA,CAAA;AAEA,cAAA,eAAA,CAAA;AACEC,EAAAA,IAAAA,EAAAA,SAAAA;AAEAC,EAAAA,UAAAA,EAAAA;AACEC,IAAAA,SAAAA,EAAAA,SAAAA,SAAAA,CAAAA,EAAAA,EAAAA,OAAAA,EAAAA;AAEM,MAAA,IAAA,EAAA,IAAA,OAAA,IAAA,OAAA,CAAA,KAAA,EAAA;;AAEJ,OAAA;AACF,KAAA;;AAEFC,EAAAA,YAAAA,EAAAA,KAAAA;AACAC,EAAAA,KAAAA,EAAAA,KAAAA;;AAEAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,OAAAA,EAAAA;AAAsB,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA;AACd,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,QAAA,CAAA,CAAA;AACN,IAAA,IAAA,WAAA,GAAA,cAAA,EAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,UAAA,EAAA,CAAA;AACA,IAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AACM,IAAA,IAAA,SAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACN,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,QAAA,CAAA;;AAEM,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,CAAA,EAAA;AAAsC,MAAA,IAAA,iBAAA,CAAA;AAC1CD,MAAAA,CAAAA,iBAAAA,GAAAA,MAAAA,CAAAA,SAAAA,MAAAA,IAAAA,IAAAA,iBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,iBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAoBE,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;;AAElB,IAAA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,CAAA,EAAA;AAAqC,MAAA,IAAA,gBAAA,CAAA;AACzCF,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAmBE,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AACrBC,MAAAA,cAAAA,CAAAA;AAAiBD,QAAAA,CAAAA,EAAAA,CAAAA;AAAGE,QAAAA,OAAAA,EAAAA,QAAAA;AAAkB,OAAA,CAAA,CAAA;;;AAEYC,QAAAA,gBAAAA,EAAAA,gBAAAA;AAAkBC,QAAAA,eAAAA,EAAAA,eAAAA;AAAgB,OAAA,CAAA;;;;;;AAGpEC,IAAAA,iBAAAA,EAAAA,CAAAA;AAClB,IAAA,IAAA,KAAA,GAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,OAAA,GAAA,GAAA,EAAA,CAAA;;AAEyB,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,OAAA,CAAA;;;AAEG,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,UAAA,CAAA;;;AAEF,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,QAAA,CAAA;;;AAEI,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,aAAA,CAAA;;;AACH,MAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,IAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,CAAA,CAAA;;AAIrB,IAAA,IAAA,aAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,IAAA,QAAA,CAAA,KAAA,EAAA,OAAA,EAAA,CAAA;;;AAQF,KAAA,CAAA,CAAA;;AAC2B,MAAA,OAAA,CAAA,CAAA,QAAA,CAAA,KAAA,IAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA,CAAA,CAAA;;AACrB,IAAA,IAAA,aAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,IAAA,YAAA,CAAA,KAAA,EAAA,OAAA,EAAA,CAAA;AAGM,MAAA,IAAA,GAAA,GAAA,MAAA,CAAA,GAAA,CAAA;;AAEN,MAAA,IAAA,GAAA,KAAA,KAAA,CAAA,EAAA;AACQ,QAAA,IAAA,QAAA,GAAA,WAAA,CAAA,GAAA,CAAA,CAAA;AACKC,QAAAA,QAAAA,GAAAA;AAAEC,UAAAA,UAAAA,EAAAA,QAAAA;;AACf,OAAA;AACO,MAAA,OAAA,QAAA,CAAA;AACT,KAAA,CAAA,CAAA;AACM,IAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;AACJ,MAAA,IAAA,YAAA,GAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,CAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,UAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,UAAA,CAAA,KAAA,IAAA,MAAA,CAAA,SAAA,IAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,aAAA,CAAA,CAAA,CAAA;;;AAQA,OAAA,MAAA;;AAEA,OAAA;AACOC,MAAAA,OAAAA,YAAAA,CAAAA;AACT,KAAA,CAAA,CAAA;AACM,IAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;AACG,MAAA,OAAA,CAAA,YAAA,CAAA,KAAA,GAAA;AAAwBC,QAAAA,KAAAA,EAAAA,WAAAA,CAAAA,MAAAA,CAAAA,KAAAA,CAAAA;;AACjC,KAAA,CAAA,CAAA;AAEAC,IAAAA,KAAAA,CAAAA,YAAAA;;;AAGI,MAAA,IAAA,KAAA,EAAA;AAAW,QAAA,IAAA,qBAAA,CAAA;AACT,QAAA,IAAA,OAAA,CAAA,KAAA,IAAA,CAAA,MAAA,CAAA,qBAAA,IAAA,YAAA,CAAA,KAAA,EAAA;;;AAGE,WAAA;AAEAC,UAAAA,QAAAA,CAAAA,YAAAA;AACM,YAAA,IAAA,aAAA,IAAA,SAAA,CAAA,KAAA,EAAA;AACFC,cAAAA,SAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,eAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,aAAAA,CAAAA,CAAAA,GAAAA,SAAAA,CAAAA,KAAAA,CAAAA,UAAAA,EAAAA,KAAAA,CAAAA,CAAAA,MAAAA,CAAAA,aAAAA,CAAAA,CAAAA,GAAAA,SAAAA,CAAAA,KAAAA,CAAAA,SAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAGF,aAAA;AACF,WAAA,CAAA,CAAA;AACF,SAAA;AAEC,QAAA,CAAA,qBAAA,GAAA,QAAA,CAAA,aAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,EAAA,CAAA;AACH,OAAA,MAAA;AACiBC,QAAAA,cAAAA,EAAAA,CAAAA;AACjB,OAAA;;;AAGF,KAAA,CAAA,CAAA;;;;AAKF,KAAA;;AAGEC,MAAAA,YAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACMC,MAAAA,KAAAA,CAAAA,KAAAA,GAAAA,UAAAA,CAAAA,YAAAA;AACQC,QAAAA,WAAAA,EAAAA,CAAAA;;AAEhB,KAAA;AAEA,IAAA,IAAA,QAAA,GAAA,kBAAA,EAAA,CAAA;AACM,IAAA,IAAA,QAAA,GAAA,SAAA,QAAA,CAAA,IAAA,EAAA;AACJ,MAAA,IAAA,IAAA,EAAA;AACQC,QAAAA,KAAAA,CAAAA,IAAAA,CAAAA,QAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AACR,OAAA,MAAA;;AAEA,OAAA;;AAGI,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,MAAA,EAAA;AACJ,MAAA,IAAA,MAAA,EAAA;AACWxB,QAAAA,QAAAA,CAAAA,gBAAAA,CAAAA,SAAAA,EAAAA,aAAAA,CAAAA,CAAAA;;AAEX,OAAA,MAAA;AACWA,QAAAA,QAAAA,CAAAA,mBAAAA,CAAAA,SAAAA,EAAAA,aAAAA,CAAAA,CAAAA;;AAEX,OAAA;;AAGI,IAAA,IAAA,kBAAA,GAAA,SAAA,kBAAA,CAAA,CAAA,EAAA;AACJ,MAAA,IAAA,QAAA,GAAA,CAAA,CAAA,MAAA,CAAA;;AAEM,MAAA,IAAA,IAAA,GAAA,CAAA,CAAA,IAAA,CAAA;AACN,MAAA,IAAA,CAAA,IAAA,KAAA,OAAA,IAAA,IAAA,KAAA,aAAA,KAAA,KAAA,CAAA,GAAA,KAAA,QAAA,CAAA,GAAA,EAAA;AAAgF,QAAA,IAAA,kBAAA,CAAA;AAC9EK,QAAAA,CAAAA,kBAAAA,GAAAA,MAAAA,CAAAA,SAAAA,MAAAA,IAAAA,IAAAA,kBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAoBE,UAAAA,CAAAA,EAAAA,CAAAA;AAAE,SAAA,CAAA,CAAA;AACxB,OAAA;;AAEI,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,CAAA,EAAA;AACJ,MAAA,IAAA,CAAA,CAAA,IAAA,KAAA,QAAA,IAAA,KAAA,CAAA,GAAA,KAAA,QAAA,CAAA,GAAA,EAAA;;AACEF,QAAAA,CAAAA,oBAAAA,GAAAA,MAAAA,CAAAA,YAAAA,MAAAA,IAAAA,IAAAA,oBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAuBE,UAAAA,CAAAA,EAAAA,CAAAA;AAAE,SAAA,CAAA,CAAA;AAEzB,QAAA,IAAA,CAAA,qBAAA,GAAA,MAAA,CAAA,iBAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,qBAAA,GAAA,YAAA,CAAA,KAAA,CAAA,iBAAA,EAAA;AACEC,UAAAA,cAAAA,CAAAA;AAAiBD,YAAAA,CAAAA,EAAAA,CAAAA;AAAGE,YAAAA,OAAAA,EAAAA,KAAAA;AAAe,WAAA,CAAA,CAAA;AACrC,SAAA;AACF,OAAA;;AAEI,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,CAAA,EAAA;AAAmC,MAAA,IAAA,qBAAA,CAAA;;AACyD,QAAA,IAAA,qBAAA,CAAA;AAC9FJ,QAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,cAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAyBE,UAAAA,CAAAA,EAAAA,CAAAA;AAAE,SAAA,CAAA,CAAA;AAC3BC,QAAAA,cAAAA,CAAAA;AAAiBD,UAAAA,CAAAA,EAAAA,CAAAA;AAAGE,UAAAA,OAAAA,EAAAA,SAAAA;AAAmB,SAAA,CAAA,CAAA;AACzC,OAAA;;AAEF,IAAA,IAAA,cAAA,GAAA,aAAA,CAAA,aAAA,CAAA;;;;AACM,IAAA,IAAA,cAAA,GAAA,SAAA,cAAA,CAAA,CAAA,EAAA;AAAoC,MAAA,IAAA,qBAAA,CAAA;AACxCJ,MAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,eAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAA0BE,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AACbC,MAAAA,cAAAA,CAAAA;AACbC,QAAAA,OAAAA,EAAAA,WAAAA;AACAF,QAAAA,CAAAA,EAAAA,CAAAA;AACF,OAAA,CAAA,CAAA;;AAIF,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,GAAA;AAAyB,MAAA,IAAA,gBAAA,CAAA;AACvBF,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;;AAGF,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,GAAA;AAAyB,MAAA,IAAA,gBAAA,CAAA;;AAGXc,QAAAA,SAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,QAAAA,GAAAA,UAAAA,CAAAA;AACAA,QAAAA,SAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,IAAAA,GAAAA,OAAAA,CAAAA;AACAA,QAAAA,SAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,GAAAA,GAAAA,OAAAA,CAAAA;AACZ,OAAA;AACAd,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;;AAGI,IAAA,IAAA,cAAA,GAAA,SAAA,cAAA,CAAA,GAAA,EAAA;AAA8C,MAAA,IAAA,eAAA,CAAA;AAClDA,MAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,CAAAA;AAEQoB,MAAAA,OAAAA,CAAAA,IAAAA,CAAAA,gBAAAA,EAAAA,KAAAA,CAAAA,CAAAA;;AAMJ,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,IAAA,EAAA;AAA+B,MAAA,IAAA,aAAA,CAAA;AAG7B,MAAA,IAAA,UAAA,GAAA,CAAA,aAAA,GAAA,KAAA,CAAA,SAAA,CAAA,MAAA,IAAA,IAAA,aAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,IAAA,CAAA,CAAA;;;AAGR,IAAA,IAAA,OAAA,GAAA,SAAA,OAAA,GAAA;AACE,MAAA,IAAA,IAAA,GAAA;;;;;;;;;;;;AAImF,SAAA,EAAA,IAAA,CAAA;;AAEnF,MAAA,OAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA;;AAEF,IAAA,IAAA,YAAA,GAAA,SAAA,YAAA,GAAA;;;;AAGQ,MAAA,IAAA,eAAA,GAAAC,WAAA,CAAAC,uBAAsC,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACtC,MAAA,IAAA,IAAA,GAAA,aAAA,CAAA,SAAA,EAAA,MAAA,CAAA,CAAA;AACN,MAAA,IAAA,aAAA,GAAAD,WAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA;;AAIME,QAAAA,YAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AACAC,QAAAA,SAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,KAAAA,EAAAA,UAAAA,CAAAA;;;;AAKAC,QAAAA,aAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,OAAAA;AACAC,QAAAA,qBAAAA,EAAAA,YAAAA,CAAAA,KAAAA,CAAAA,eAAAA;AACAF,QAAAA,SAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,KAAAA,EAAAA,WAAAA,CAAAA;AACF,OAAA,CAAA,CAAA,CAAA,CAAA;;;;AAcE,MAAA,IAAA,aAAA,GAAA,cAAA,CAAA,QAAA,EAAA,aAAA,CAAA,CAAA;AAEF,MAAA,IAAA,YAAA,CAAA,KAAA,IAAA,aAAA,EAAA;;AAEJ,OAAA,MAAA,IAAA,YAAA,CAAA,KAAA,EAAA;;AAEA,OAAA;;AAMM,MAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,CAAA,EAAA;AACA,QAAA,IAAA,UAAA,CAAA,KAAA,IAAA,MAAA,CAAA,SAAA,EAAA,CAAA,CAAA,eAAA,EAAA,CAAA;;AAGN,MAAA,OAAAH,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,SAAA,CAAA,KAAA;;;;AAMM,QAAA,SAAA,EAAA,OAAA;;;;AAEW,QAAA,KAAA,EAAA,QAAA;;;;AAOJ,OAAA,EAAA,CAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,eAAA;;AAEqC,OAAA,EAAA,CAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,kBAAA,CAAA;AACV,OAAA,EAAA,CAAA,OAAA,EAAA,EAAA,cAAA,CAAA,QAAA,EAAA,aAAA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,QAAA,GAAAA,WAAA,CAAA,MAAA,EAAA;AAKvB,QAAA,OAAA,EAAA,cAAA;;;AAIH,QAAA,OAAA,EAAA,aAAA;;AAEkC,OAAA,EAAA,CAAA,IAAA,CAAA,CAAA,EAAA,aAAA,IAAAA,WAAA,CAAA,KAAA,EAAA;AAGvC,QAAA,OAAA,EAAA,eAAA;;;;AAWXM,IAAAA,SAAAA,CAAAA,YAAAA;AACE,MAAA,IAAA,YAAA,GAAA,QAAA,CAAA,eAAA,CAAA,YAAA,GAAA,QAAA,CAAA,eAAA,CAAA,YAAA,CAAA;;;;;AAUF,KAAA,CAAA,CAAA;AAEAC,IAAAA,eAAAA,CAAAA,YAAAA;;AAEcV,MAAAA,WAAAA,EAAAA,CAAAA;AACd,KAAA,CAAA,CAAA;;AAGEW,MAAAA,cAAAA,EAAAA,cAAAA;AACAC,MAAAA,OAAAA,EAAAA,OAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,YAAAA,EAAAA,YAAAA;AACAC,MAAAA,SAAAA,EAAAA,SAAAA;AACAvB,MAAAA,WAAAA,EAAAA,WAAAA;AACAwB,MAAAA,WAAAA,EAAAA,WAAAA;AACApB,MAAAA,SAAAA,EAAAA,SAAAA;AACAqB,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,YAAAA,EAAAA,YAAAA;AACAC,MAAAA,eAAAA,EAAAA,eAAAA;;;;AAGK,IAAA,IAAA,IAAA;;AACD,IAAA,IAAA,cAAA,GAAA,IAAA,CAAA,cAAA,CAAA;;AACiC,MAAA,KAAA,EAAA,MAAA;AAA0B,MAAA,OAAA,EAAA,IAAA,CAAA,SAAA;;AAC3D,IAAA,IAAA,UAAA,GAAA,IAAA,CAAA,YAAA,EAAA,CAAA;AACA,IAAA,IAAA,IAAA,GAAA,CAAA,QAAA,EAAA,UAAA,CAAA,CAAA;AACN,IAAA,IAAA,QAAA,GAAA;;;;;;AAa6D,MAAA,IAAA,EAAA,IAAA,CAAA,eAAA;AACzD,KAAA,EAAA;AAAA,MAAA,SAAA,EAAA,SAAA,QAAA,GAAA;;AAAA,UAAA,UAAA,EAAA,GAAA;;;AAIE,UAAA,cAAA,EAAA,MAAA,CAAA,UAAA;AAEE,SAAA,EAAA;AAAA,UAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,YAAA,OAAA,CAAA,CAAA,CAAA,MAAA,CAAA,cAAA,IAAA,MAAA,CAAA,OAAA,KAAAC,cAAA,CAAAnB,WAAA,CAAA,KAAA,EAAAoB,UAAA,CAAA;;;;AACC,WAAA;AAAA,SAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAOX,GAAA;AACF,CAAA,CAAA;;;;"}