{"version":3,"file":"chat-sender.mjs","sources":["../../src/chat/chat-sender.tsx"],"sourcesContent":["import { defineComponent, ref, computed, toRefs, reactive } from 'vue';\nimport { SendFilledIcon, FileAttachmentIcon, ImageIcon } from 'tdesign-icons-vue-next';\nimport { Button, Textarea, Tooltip } from 'tdesign-vue-next';\nimport props from './chat-sender-props';\nimport useVModel from '../hooks/useVModel';\nimport { usePrefixClass, useConfig } from '../hooks/useConfig';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\n\nimport type { TdChatSenderProps, UploadActionType, UploadActionConfig } from './type';\n\nexport default defineComponent({\n  name: 'TChatSender',\n  props,\n  emits: ['send', 'stop', 'update:modelValue', 'blur', 'focus', 'fileSelect'], // declare the custom events here\n  setup(props, { emit }) {\n    let shiftDownFlag = false;\n    let isComposition = false;\n    const senderTextarea = ref(null);\n    const { globalConfig } = useConfig('chat');\n    const { uploadImageText, uploadAttachmentText } = globalConfig.value;\n    const COMPONENT_NAME = usePrefixClass('chat');\n\n    const { value, modelValue } = toRefs(props);\n    const [textValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n    const focusFlag = ref(false);\n    const loading = ref(false);\n    const showStopBtn = computed(() => props.stopDisabled && loading.value);\n    const disabled = computed(() => props.disabled || false);\n    const uploadImageRef = ref(null);\n    const uploadFileRef = ref(null);\n    const renderTNodeJSX = useTNodeJSX();\n    const renderContent = useContent();\n    // 点击了发送按钮\n    const sendClick = (e: MouseEvent | KeyboardEvent) => {\n      if (textValue.value && !disabled.value) {\n        emit('send', textValue.value, { e });\n        loading.value = true;\n        textValue.value = '';\n      }\n    };\n    // 点击了停止按钮\n    const handleStop = (e: MouseEvent) => {\n      loading.value = false;\n      emit('stop', textValue.value, {\n        e,\n      });\n    };\n    const keydownFn = (value: string, context: { e: KeyboardEvent }) => {\n      const {\n        e: { key },\n      } = context;\n      if (key === 'Shift') {\n        shiftDownFlag = true;\n      }\n      if (key === 'Enter' && !shiftDownFlag && !isComposition) {\n        context.e.cancelBubble = true;\n        context.e.preventDefault();\n        context.e.stopPropagation();\n        sendClick(context.e);\n      }\n    };\n    const focusFn = (value: string, context: { e: FocusEvent }) => {\n      focusFlag.value = true;\n      emit('focus', value, context);\n    };\n\n    const blurFn = (value: string, context: { e: FocusEvent }) => {\n      focusFlag.value = false;\n      emit('blur', value, context);\n    };\n\n    const keyupFn = (value: string, context: { e: KeyboardEvent }) => {\n      const {\n        e: { key },\n      } = context;\n      if (key === 'Shift') {\n        shiftDownFlag = false;\n      }\n    };\n\n    const textChange = (value: string, context: { e: InputEvent }) => {\n      setInnerValue(value, context);\n    };\n    // 当用户通过输入法开始输入组合文字（如中文拼音输入）时触发\n    const compositionstartFn = () => {\n      isComposition = true;\n    };\n    // 当用户通过输入法完成组合文字的选择（如从候选词中选择中文）时触发\n    const compositionendFn = () => {\n      isComposition = false;\n    };\n    const actionsDefault = reactive<UploadActionConfig[]>([\n      {\n        name: 'uploadImage',\n        uploadProps: {\n          multiple: true,\n          accept: 'image/*',\n        },\n        action: ({ files, name }) => {\n          emit('fileSelect', { files, name });\n        },\n      },\n      {\n        name: 'uploadAttachment',\n        action: ({ files, name }) => {\n          emit('fileSelect', { files, name });\n        },\n      },\n    ]);\n    // 默认suffixIcon\n    const getDefaultSuffixIcon = (actions = actionsDefault) => {\n      // 获取默认action处理函数\n      const getDefaultAction = (name: UploadActionType) => {\n        const defaultAction = actionsDefault.find((item) => item.name === name)?.action;\n        return defaultAction || (({ files, name }) => emit('fileSelect', { files, name }));\n      };\n\n      const uploadAttachment = actions.find((item) => item.name === 'uploadAttachment');\n      const uploadAttachmentButton = uploadAttachment ? (\n        <>\n          <input\n            {...uploadAttachment.uploadProps}\n            ref={uploadFileRef}\n            type=\"file\"\n            onChange={(e: InputEvent) => {\n              const files = Array.from((e.target as HTMLInputElement).files || []);\n              if (!files.length) {\n                return;\n              }\n              const action = uploadAttachment.action || getDefaultAction('uploadAttachment');\n              action({ files, name: uploadAttachment.name });\n              (e.target as HTMLInputElement).value = '';\n            }}\n            hidden\n          />\n          <Tooltip content={uploadAttachmentText}>\n            <Button\n              theme=\"default\"\n              onClick={() => uploadFileRef.value?.click()}\n              shape=\"circle\"\n              variant=\"text\"\n              class={[`${COMPONENT_NAME.value}-sender__upload`]}\n            >\n              <FileAttachmentIcon />\n            </Button>\n          </Tooltip>\n        </>\n      ) : null;\n\n      const uploadImage = actions.find((item) => item.name === 'uploadImage');\n      const renderUploadImageButton = uploadImage ? (\n        <>\n          <input\n            {...uploadImage.uploadProps}\n            ref={uploadImageRef}\n            type=\"file\"\n            onChange={(e: InputEvent) => {\n              const files = Array.from((e.target as HTMLInputElement).files || []);\n              if (!files.length) {\n                return;\n              }\n              const action = uploadImage.action || getDefaultAction('uploadImage');\n              action({ files, name: uploadImage.name });\n              (e.target as HTMLInputElement).value = '';\n            }}\n            hidden\n          />\n          <Tooltip content={uploadImageText}>\n            <Button\n              theme=\"default\"\n              onClick={() => uploadImageRef.value?.click()}\n              shape=\"circle\"\n              variant=\"text\"\n              class={[`${COMPONENT_NAME.value}-sender__upload`]}\n            >\n              <ImageIcon />\n            </Button>\n          </Tooltip>\n        </>\n      ) : null;\n      const buttonComponents = {\n        uploadAttachment: uploadAttachmentButton,\n        uploadImage: renderUploadImageButton,\n      };\n\n      return (\n        <>\n          {actions\n            .filter(\n              (item): item is { name: UploadActionType; action: () => void } =>\n                item.name === 'uploadAttachment' || item.name === 'uploadImage',\n            )\n            .map((item) => buttonComponents[item.name])}\n          <Button\n            theme=\"default\"\n            size=\"small\"\n            variant=\"text\"\n            class={[\n              `${COMPONENT_NAME.value}-sender__button__default`,\n              textValue.value ? '' : `${COMPONENT_NAME.value}-sender__button--disabled`,\n            ]}\n            disabled={disabled.value || showStopBtn.value || !textValue.value}\n          >\n            <SendFilledIcon />\n          </Button>\n        </>\n      );\n      // }\n    };\n    const renderSuffixIcon = () => {\n      const suffix = renderTNodeJSX('suffix', { params: { renderPresets: getDefaultSuffixIcon } });\n\n      return suffix ? suffix : getDefaultSuffixIcon();\n    };\n    return () => (\n      <div class={`${COMPONENT_NAME.value}-sender`}>\n        <div class={`${COMPONENT_NAME.value}-sender__header`}>{renderContent('default', 'header')}</div>\n        <div\n          class={[\n            `${COMPONENT_NAME.value}-sender__textarea`,\n            focusFlag.value ? `${COMPONENT_NAME.value}-sender__textarea--focus` : '',\n          ]}\n        >\n          <div class={`${COMPONENT_NAME.value}-sender__inner-header`}>{renderContent('default', 'inner-header')}</div>\n          <Textarea\n            ref={senderTextarea}\n            value={textValue.value}\n            onChange={textChange}\n            disabled={disabled.value || showStopBtn.value}\n            {...{\n              autosize: (props.textareaProps as TdChatSenderProps['textareaProps'])?.autosize || {\n                minRows: 2,\n                maxRows: 5,\n              },\n              ...(props.textareaProps as TdChatSenderProps['textareaProps']),\n            }}\n            onKeydown={keydownFn}\n            onKeyup={keyupFn}\n            onFocus={focusFn}\n            onBlur={blurFn}\n            onCompositionstart={compositionstartFn}\n            onCompositionend={compositionendFn}\n          />\n          <div class={`${COMPONENT_NAME.value}-sender__footer`}>\n            <div class={`${COMPONENT_NAME.value}-sender__mode`}>{renderContent('default', 'prefix')}</div>\n            <div class={`${COMPONENT_NAME.value}-sender__button`}>\n              {/* 发送按钮 */}\n              {!showStopBtn.value && (\n                <div class={`${COMPONENT_NAME.value}-sender__button__sendbtn`} onClick={sendClick}>\n                  {renderSuffixIcon()}\n                </div>\n              )}\n              {/* 停止按钮 */}\n              {showStopBtn.value && (\n                <div class={`${COMPONENT_NAME.value}-sender__button__stopbtn`}>\n                  <Button variant=\"text\" class={`${COMPONENT_NAME.value}-sender__button__default`} onClick={handleStop}>\n                    <div class={`${COMPONENT_NAME.value}-sender__button__stopicon`} />\n                  </Button>\n                </div>\n              )}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  },\n});\n"],"names":["defineComponent","name","props","emits","setup","emit","_ref","shiftDownFlag","isComposition","senderTextarea","ref","_useConfig","useConfig","globalConfig","_globalConfig$value","value","uploadImageText","uploadAttachmentText","COMPONENT_NAME","usePrefixClass","_toRefs","toRefs","modelValue","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","textValue","setInnerValue","focusFlag","loading","showStopBtn","computed","stopDisabled","disabled","uploadImageRef","uploadFileRef","renderTNodeJSX","useTNodeJSX","renderContent","useContent","sendClick","e","handleStop","keydownFn","context","key","cancelBubble","preventDefault","stopPropagation","focusFn","blurFn","keyupFn","textChange","compositionstartFn","compositionendFn","actionsDefault","reactive","uploadProps","multiple","accept","action","_ref2","files","_ref3","getDefaultSuffixIcon","actions","arguments","length","undefined","getDefaultAction","_actionsDefault$find","defaultAction","find","item","_ref4","uploadAttachment","uploadAttachmentButton","_createVNode","_Fragment","_mergeProps","Array","from","target","_default","Button","onClick","_uploadFileRef$value","click","concat","FileAttachmentIcon","uploadImage","renderUploadImageButton","_uploadImageRef$value","ImageIcon","buttonComponents","filter","map","SendFilledIcon","renderSuffixIcon","suffix","params","renderPresets","_props2$textareaProps","Textarea","_objectSpread","autosize","textareaProps","minRows","maxRows"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,kBAAeA,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,aAAA;AACNC,EAAAA,KAAA,EAAAA,KAAA;AACAC,EAAAA,OAAO,CAAC,MAAA,EAAQ,QAAQ,mBAAqB,EAAA,MAAA,EAAQ,SAAS,YAAY,CAAA;AAC1EC,EAAAA,KAAMF,WAANE,KAAMF,CAAAA,MAAAA,EAAAA,IAAAA,EAAiB;AAAA,IAAA,IAARG,IAAA,GAAAC,IAAA,CAAAD,IAAA,CAAA;IACb,IAAIE,aAAgB,GAAA,KAAA,CAAA;IACpB,IAAIC,aAAgB,GAAA,KAAA,CAAA;AACd,IAAA,IAAAC,cAAA,GAAiBC,IAAI,IAAI,CAAA,CAAA;AAC/B,IAAA,IAAAC,UAAA,GAAyBC,SAAA,CAAU,MAAM,CAAA;MAAjCC,YAAA,GAAAF,UAAA,CAAAE,YAAA,CAAA;AACR,IAAA,IAAAC,mBAAA,GAAkDD,YAAa,CAAAE,KAAA;MAAvDC,eAAA,GAAAF,mBAAA,CAAAE,eAAA;MAAiBC,oBAAqB,GAAAH,mBAAA,CAArBG,oBAAqB,CAAA;AACxC,IAAA,IAAAC,cAAA,GAAiBC,eAAe,MAAM,CAAA,CAAA;AAE5C,IAAA,IAAAC,OAAA,GAA8BC,OAAOnB,MAAK,CAAA;MAAlCa,KAAA,GAAAK,OAAA,CAAAL,KAAA;MAAOO,UAAW,GAAAF,OAAA,CAAXE,UAAW,CAAA;AACpB,IAAA,IAAAC,UAAA,GAA6BC,SAAA,CAAUT,OAAOO,UAAYpB,EAAAA,MAAAA,CAAMuB,YAAcvB,EAAAA,MAAAA,CAAMwB,QAAQ,CAAA;MAAAC,WAAA,GAAAC,cAAA,CAAAL,UAAA,EAAA,CAAA,CAAA;AAA3FM,MAAAA,SAAW,GAAAF,WAAA,CAAA,CAAA,CAAA;AAAAG,MAAAA,aAAa,GAAAH,WAAA,CAAA,CAAA,CAAA,CAAA;AAEzB,IAAA,IAAAI,SAAA,GAAYrB,IAAI,KAAK,CAAA,CAAA;AACrB,IAAA,IAAAsB,OAAA,GAAUtB,IAAI,KAAK,CAAA,CAAA;IACzB,IAAMuB,cAAcC,QAAS,CAAA,YAAA;AAAA,MAAA,OAAMhC,MAAM,CAAAiC,YAAA,IAAgBH,QAAQjB,KAAK,CAAA;KAAA,CAAA,CAAA;IACtE,IAAMqB,QAAW,GAAAF,QAAA,CAAS,YAAA;AAAA,MAAA,OAAMhC,MAAAA,CAAMkC,YAAY,KAAK,CAAA;KAAA,CAAA,CAAA;AACjD,IAAA,IAAAC,cAAA,GAAiB3B,IAAI,IAAI,CAAA,CAAA;AACzB,IAAA,IAAA4B,aAAA,GAAgB5B,IAAI,IAAI,CAAA,CAAA;AAC9B,IAAA,IAAM6B,iBAAiBC,WAAY,EAAA,CAAA;AACnC,IAAA,IAAMC,gBAAgBC,UAAW,EAAA,CAAA;AAE3B,IAAA,IAAAC,SAAA,GAAY,SAAZA,SAAAA,CAAaC,CAAkC,EAAA;MACnD,IAAIf,SAAU,CAAAd,KAAA,IAAS,CAACqB,QAAA,CAASrB,KAAO,EAAA;AACtCV,QAAAA,IAAA,CAAK,MAAQ,EAAAwB,SAAA,CAAUd,KAAO,EAAA;AAAE6B,UAAAA,GAAAA,CAAAA;AAAE,SAAC,CAAA,CAAA;QACnCZ,OAAA,CAAQjB,KAAQ,GAAA,IAAA,CAAA;QAChBc,SAAA,CAAUd,KAAQ,GAAA,EAAA,CAAA;AACpB,OAAA;KACF,CAAA;AAEM,IAAA,IAAA8B,UAAA,GAAa,SAAbA,UAAAA,CAAcD,CAAkB,EAAA;MACpCZ,OAAA,CAAQjB,KAAQ,GAAA,KAAA,CAAA;AACXV,MAAAA,IAAA,CAAA,MAAA,EAAQwB,UAAUd,KAAO,EAAA;AAC5B6B,QAAAA,CAAA,EAAAA,CAAAA;AACF,OAAC,CAAA,CAAA;KACH,CAAA;IACM,IAAAE,SAAA,GAAY,SAAZA,SAAAA,CAAa/B,MAAAA,EAAegC,OAAkC,EAAA;AAC5D,MAAA,IACCC,GAAI,GACPD,OAAA,CADFH,CAAA,CAAKI,GAAI,CAAA;MAEX,IAAIA,QAAQ,OAAS,EAAA;AACHzC,QAAAA,aAAA,GAAA,IAAA,CAAA;AAClB,OAAA;MACA,IAAIyC,GAAQ,KAAA,OAAA,IAAW,CAACzC,aAAA,IAAiB,CAACC,aAAe,EAAA;AACvDuC,QAAAA,OAAA,CAAQH,EAAEK,YAAe,GAAA,IAAA,CAAA;AACzBF,QAAAA,OAAA,CAAQH,EAAEM,cAAe,EAAA,CAAA;AACzBH,QAAAA,OAAA,CAAQH,EAAEO,eAAgB,EAAA,CAAA;AAC1BR,QAAAA,SAAA,CAAUI,QAAQH,CAAC,CAAA,CAAA;AACrB,OAAA;KACF,CAAA;IACM,IAAAQ,OAAA,GAAU,SAAVA,OAAAA,CAAWrC,MAAAA,EAAegC,OAA+B,EAAA;MAC7DhB,SAAA,CAAUhB,KAAQ,GAAA,IAAA,CAAA;AACbV,MAAAA,IAAA,CAAA,OAAA,EAASU,QAAOgC,OAAO,CAAA,CAAA;KAC9B,CAAA;IAEM,IAAAM,MAAA,GAAS,SAATA,MAAAA,CAAUtC,MAAAA,EAAegC,OAA+B,EAAA;MAC5DhB,SAAA,CAAUhB,KAAQ,GAAA,KAAA,CAAA;AACbV,MAAAA,IAAA,CAAA,MAAA,EAAQU,QAAOgC,OAAO,CAAA,CAAA;KAC7B,CAAA;IAEM,IAAAO,OAAA,GAAU,SAAVA,OAAAA,CAAWvC,MAAAA,EAAegC,OAAkC,EAAA;AAC1D,MAAA,IACCC,GAAI,GACPD,OAAA,CADFH,CAAA,CAAKI,GAAI,CAAA;MAEX,IAAIA,QAAQ,OAAS,EAAA;AACHzC,QAAAA,aAAA,GAAA,KAAA,CAAA;AAClB,OAAA;KACF,CAAA;IAEM,IAAAgD,UAAA,GAAa,SAAbA,UAAAA,CAAcxC,MAAAA,EAAegC,OAA+B,EAAA;AAChEjB,MAAAA,aAAA,CAAcf,QAAOgC,OAAO,CAAA,CAAA;KAC9B,CAAA;AAEA,IAAA,IAAMS,qBAAqB,SAArBA,qBAA2B;AACfhD,MAAAA,aAAA,GAAA,IAAA,CAAA;KAClB,CAAA;AAEA,IAAA,IAAMiD,mBAAmB,SAAnBA,mBAAyB;AACbjD,MAAAA,aAAA,GAAA,KAAA,CAAA;KAClB,CAAA;AACA,IAAA,IAAMkD,iBAAiBC,QAA+B,CAAA,CACpD;AACE1D,MAAAA,IAAM,EAAA,aAAA;AACN2D,MAAAA,WAAa,EAAA;AACXC,QAAAA,QAAU,EAAA,IAAA;AACVC,QAAAA,MAAQ,EAAA,SAAA;OACV;AACAC,MAAAA,MAAQ,EAAA,SAARA,MAAQA,CAAAC,KAAA,EAAqB;AAAA,QAAA,IAAlBC,KAAA,GAAAD,KAAA,CAAAC,KAAA;UAAOhE,aAAAA;QAChBI,IAAA,CAAK,YAAc,EAAA;AAAE4D,UAAAA,KAAO,EAAPA,KAAO;AAAAhE,UAAAA,IAAA,EAAAA,IAAAA;AAAK,SAAC,CAAA,CAAA;AACpC,OAAA;AACF,KAAA,EACA;AACEA,MAAAA,IAAM,EAAA,kBAAA;AACN8D,MAAAA,MAAQ,EAAA,SAARA,MAAQA,CAAAG,KAAA,EAAqB;AAAA,QAAA,IAAlBD,KAAA,GAAAC,KAAA,CAAAD,KAAA;UAAOhE,aAAAA;QAChBI,IAAA,CAAK,YAAc,EAAA;AAAE4D,UAAAA,KAAO,EAAPA,KAAO;AAAAhE,UAAAA,IAAA,EAAAA,IAAAA;AAAK,SAAC,CAAA,CAAA;AACpC,OAAA;AACF,KAAA,CACD,CAAA,CAAA;AAEK,IAAA,IAAAkE,oBAAA,GAAuB,SAAvBA,oBAAAA,GAAqD;AAAA,MAAA,IAA7BC,OAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAUX,cAAmB,CAAA;AAEnD,MAAA,IAAAc,gBAAA,GAAmB,SAAnBA,gBAAAA,CAAoBvE,IAA2B,EAAA;AAAA,QAAA,IAAAwE,oBAAA,CAAA;QAC7C,IAAAC,aAAA,IAAAD,oBAAA,GAAgBf,eAAeiB,IAAK,CAAA,UAACC;iBAASA,IAAK,CAAA3E,IAAA,KAASA,IAAI,CAAA;AAAA,SAAA,CAAG,MAAAwE,IAAAA,IAAAA,oBAAA,KAAnDA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAmDV,MAAA,CAAA;QACzE,OAAOW,aAAkB,IAAA,UAAAG,KAAA,EAAA;AAAA,UAAA,IAAGZ,KAAA,GAAAY,KAAA,CAAAZ,KAAA;YAAOhE,KAAAA,GAAAA,KAAAA,CAAAA,IAAAA,CAAAA;UAAAA,OAAWI,IAAA,CAAK,YAAc,EAAA;AAAE4D,YAAAA,KAAO,EAAPA,KAAO;AAAAhE,YAAAA,IAAA,EAAAA,KAAAA;AAAK,WAAC,CAAA,CAAA;SAAA,CAAA;OAClF,CAAA;AAEA,MAAA,IAAM6E,mBAAmBV,OAAQ,CAAAO,IAAA,CAAK,UAACC,IAAS,EAAA;AAAA,QAAA,OAAAA,IAAA,CAAK3E,SAAS,kBAAkB,CAAA;OAAA,CAAA,CAAA;AAChF,MAAA,IAAM8E,yBAAyBD,gBAC7B,GAAAE,WAAA,CAAAC,QAAA,EAAAD,IAAAA,EAAAA,CAAAA,WAAA,CAAAE,OAAAA,EAAAA,UAAA,CAEQJ,gBAAA,CAAiBlB,WACrB,EAAA;AAAA,QAAA,KAAA,EAAKtB;;kBAEK,EAAA,SAAAZ,QAACkB,CAAAA,CAAkB,EAAA;AAC3B,UAAA,IAAMqB,QAAQkB,KAAM,CAAAC,IAAA,CAAMxC,EAAEyC,MAA4B,CAAApB,KAAA,IAAS,EAAE,CAAA,CAAA;AAC/D,UAAA,IAAA,CAACA,MAAMK,MAAQ,EAAA;AACjB,YAAA,OAAA;AACF,WAAA;UACA,IAAMP,MAAS,GAAAe,gBAAA,CAAiBf,MAAU,IAAAS,gBAAA,CAAiB,kBAAkB,CAAA,CAAA;AAC7ET,UAAAA,MAAA,CAAO;AAAEE,YAAAA,KAAA,EAAAA,KAAA;YAAOhE,IAAM,EAAA6E,gBAAA,CAAiB7E,IAAAA;AAAK,WAAC,CAAA,CAAA;AAC5C2C,UAAAA,CAAA,CAAEyC,OAA4BtE,KAAQ,GAAA,EAAA,CAAA;;;;iBAIzBE,EAAAA,oBAAAA;AAAA,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAAqE,QAAA,GAAA;UAAA,OAAAN,CAAAA,WAAA,CAAAO,MAAA,EAAA;AAAA,YAAA,OAAA,EAAA,SAAA;AAAA,YAAA,SAAA,EAGL,SAAAC,OAAA,GAAA;AAAA,cAAA,IAAAC,oBAAA,CAAA;AAAA,cAAA,OAAA,CAAAA,oBAAA,GAAMnD,aAAc,CAAAvB,KAAA,MAAA,IAAA,IAAA0E,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,oBAAA,CAAqBC,KAAM,EAAA,CAAA;AAAA,aAAA;AAAA,YAAA,OAAA,EAAA,QAAA;AAAA,YAAA,SAAA,EAAA,MAAA;AAAA,YAAA,OAAA,EAGnC,CAAAC,EAAAA,CAAAA,MAAA,CAAIzE,cAAA,CAAeH,KAAsB,EAAA,iBAAA,CAAA,CAAA;AAAA,WAAA,EAAA;AAAA,YAAA,SAAA,EAAA,SAAAuE,QAAA,GAAA;cAAA,OAAAN,CAAAA,WAAA,CAAAY,kBAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA,CAAA,GAMpD,IAAA,CAAA;AAEJ,MAAA,IAAMC,cAAczB,OAAQ,CAAAO,IAAA,CAAK,UAACC,IAAS,EAAA;AAAA,QAAA,OAAAA,IAAA,CAAK3E,SAAS,aAAa,CAAA;OAAA,CAAA,CAAA;AACtE,MAAA,IAAM6F,0BAA0BD,WAC9B,GAAAb,WAAA,CAAAC,QAAA,EAAAD,IAAAA,EAAAA,CAAAA,WAAA,CAAAE,OAAAA,EAAAA,UAAA,CAEQW,WAAA,CAAYjC,WAChB,EAAA;AAAA,QAAA,KAAA,EAAKvB;;kBAEK,EAAA,SAAAX,QAACkB,CAAAA,CAAkB,EAAA;AAC3B,UAAA,IAAMqB,QAAQkB,KAAM,CAAAC,IAAA,CAAMxC,EAAEyC,MAA4B,CAAApB,KAAA,IAAS,EAAE,CAAA,CAAA;AAC/D,UAAA,IAAA,CAACA,MAAMK,MAAQ,EAAA;AACjB,YAAA,OAAA;AACF,WAAA;UACA,IAAMP,MAAS,GAAA8B,WAAA,CAAY9B,MAAU,IAAAS,gBAAA,CAAiB,aAAa,CAAA,CAAA;AACnET,UAAAA,MAAA,CAAO;AAAEE,YAAAA,KAAA,EAAAA,KAAA;YAAOhE,IAAM,EAAA4F,WAAA,CAAY5F,IAAAA;AAAK,WAAC,CAAA,CAAA;AACvC2C,UAAAA,CAAA,CAAEyC,OAA4BtE,KAAQ,GAAA,EAAA,CAAA;;;;iBAIzBC,EAAAA,eAAAA;AAAA,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAAsE,QAAA,GAAA;UAAA,OAAAN,CAAAA,WAAA,CAAAO,MAAA,EAAA;AAAA,YAAA,OAAA,EAAA,SAAA;AAAA,YAAA,SAAA,EAGL,SAAAC,OAAA,GAAA;AAAA,cAAA,IAAAO,qBAAA,CAAA;AAAA,cAAA,OAAA,CAAAA,qBAAA,GAAM1D,cAAe,CAAAtB,KAAA,MAAA,IAAA,IAAAgF,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAfA,qBAAA,CAAsBL,KAAM,EAAA,CAAA;AAAA,aAAA;AAAA,YAAA,OAAA,EAAA,QAAA;AAAA,YAAA,SAAA,EAAA,MAAA;AAAA,YAAA,OAAA,EAGpC,CAAAC,EAAAA,CAAAA,MAAA,CAAIzE,cAAA,CAAeH,KAAsB,EAAA,iBAAA,CAAA,CAAA;AAAA,WAAA,EAAA;AAAA,YAAA,SAAA,EAAA,SAAAuE,QAAA,GAAA;cAAA,OAAAN,CAAAA,WAAA,CAAAgB,SAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA,CAAA,GAMpD,IAAA,CAAA;AACJ,MAAA,IAAMC,gBAAmB,GAAA;AACvBnB,QAAAA,gBAAkB,EAAAC,sBAAA;AAClBc,QAAAA,WAAa,EAAAC,uBAAAA;OACf,CAAA;MAGE,OAAAd,WAAA,CAAAC,QAAA,EAAA,IAAA,EAAA,CACGb,OACE,CAAA8B,MAAA,CACC,UAACtB,IACC,EAAA;QAAA,OAAAA,IAAA,CAAK3E,IAAS,KAAA,kBAAA,IAAsB2E,KAAK3E,IAAS,KAAA,aAAA,CAAA;AAAA,OACtD,EACCkG,GAAI,CAAA,UAACvB,IAAS,EAAA;AAAA,QAAA,OAAAqB,gBAAA,CAAiBrB,KAAK3E,IAAK,CAAA,CAAA;OAAA,CAAA,EAAA+E,WAAA,CAAAO,MAAA,EAAA;AAAA,QAAA,OAAA,EAAA,SAAA;AAAA,QAAA,MAAA,EAAA,OAAA;AAAA,QAAA,SAAA,EAAA,MAAA;AAAA,QAAA,OAAA,EAKnC,IAAAI,MAAA,CACFzE,cAAe,CAAAH,KAAA,+BAClBc,SAAU,CAAAd,KAAA,GAAQ,EAAK,MAAA4E,MAAA,CAAGzE,cAAe,CAAAH,KAAA,8BAAA,CAE3C;QAAA,UAAUqB,EAAAA,QAAS,CAAArB,KAAA,IAASkB,WAAY,CAAAlB,KAAA,IAAS,CAACc,SAAA,CAAUd,KAAAA;AAE5D,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAAuE,QAAA,GAAA;UAAA,OAAAN,CAAAA,WAAA,CAAAoB,cAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA,CAAA,CAAA;KAKR,CAAA;AACA,IAAA,IAAMC,mBAAmB,SAAnBA,mBAAyB;AACvB,MAAA,IAAAC,MAAA,GAAS/D,eAAe,QAAU,EAAA;AAAEgE,QAAAA,QAAQ;AAAEC,UAAAA,aAAA,EAAerC,oBAAAA;AAAqB,SAAA;AAAE,OAAC,CAAA,CAAA;AAEpF,MAAA,OAAAmC,MAAA,GAASA,SAASnC,oBAAqB,EAAA,CAAA;KAChD,CAAA;IACA,OAAO,YAAA;AAAA,MAAA,IAAAsC,qBAAA,CAAA;AAAA,MAAA,OAAAzB,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CACUzE,cAAe,CAAAH,KAAA,EAAA,SAAA,CAAA;AAAA,OAAA,EAAA,CAAAiE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CACbzE,cAAA,CAAeH;UAAyB0B,aAAc,CAAA,SAAA,EAAW,QAAQ,CAAA,IAAAuC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAE/E,IAAAW,MAAA,CACFzE,cAAe,CAAAH,KAAA,EAClBgB,mBAAAA,CAAAA,EAAAA,SAAU,CAAAhB,KAAA,MAAA4E,MAAA,CAAWzE,cAAA,CAAeH,KAAkC,gCAAA,EAAA,CAAA;AACxE,OAAA,EAAA,CAAAiE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CAEezE,cAAA,CAAeH;OAA+B0B,EAAAA,CAAAA,aAAc,CAAA,SAAA,EAAW,cAAc,CAAA,CAAA,CAAA,EAAAuC,WAAA,CAAA0B,QAAA,EAAAxB,UAAA,CAAA;AAAA,QAAA,KAAA,EAE7FzE,cAAA;QAAA,OACEoB,EAAAA,SAAA,CAAUd,KACjB;AAAA,QAAA,UAAA,EAAUwC,UACV;AAAA,QAAA,UAAA,EAAUnB,QAAS,CAAArB,KAAA,IAASkB,YAAYlB,KAAAA;AACpC,OAAA,EAAA4F,aAAA,CAAA;AACFC,QAAAA,QAAA,EAAW1G,CAAAA,CAAAA,qBAAAA,GAAAA,MAAM,CAAA2G,aAAA,MAAA,IAAA,IAAAJ,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANvG,qBAAAA,CAA4D0G,QAAY,KAAA;AACjFE,UAAAA,OAAS,EAAA,CAAA;AACTC,UAAAA,OAAS,EAAA,CAAA;AACX,SAAA;OACI7G,EAAAA,MAAM,CAAA2G,aAAA,CAAA,EAAA;AAAA,QAAA,WAAA,EAED/D,SACX;AAAA,QAAA,SAAA,EAASQ,OACT;AAAA,QAAA,SAAA,EAASF,OACT;AAAA,QAAA,QAAA,EAAQC,MACR;AAAA,QAAA,oBAAA,EAAoBG,kBACpB;QAAA,kBAAkBC,EAAAA,gBAAAA;AACpB,OAAA,CAAA,EAAA,IAAA,CAAA,EAAAuB,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CACezE,cAAe,CAAAH,KAAA,EAAA,iBAAA,CAAA;AAAA,OAAA,EAAA,CAAAiE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CACbzE,cAAA,CAAeH;UAAuB0B,aAAc,CAAA,SAAA,EAAW,QAAQ,CAAA,IAAAuC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CACvEzE,cAAe,CAAAH,KAAA,EAAA,iBAAA,CAAA;AAAA,OAAA,EAAA,CAE3B,CAACkB,WAAA,CAAYlB,KACZ,IAAAiE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CAAezE,cAAA,CAAeH,KAAiC,EAAA,0BAAA,CAAA;QAAA,SAAS4B,EAAAA,SAAAA;OACrE0D,EAAAA,CAAAA,gBAAA,IADF,EAKFpE,WAAA,CAAYlB,KACX,IAAAiE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CAAezE,cAAA,CAAeH,KAC5B,EAAA,0BAAA,CAAA;OAAAiE,EAAAA,CAAAA,WAAA,CAAAO,MAAA,EAAA;AAAA,QAAA,SAAA,EAAA,MAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAI,MAAA,CAAiCzE,cAAA,CAAeH,KAAiC,EAAA,0BAAA,CAAA;QAAA,SAAS8B,EAAAA,UAAAA;AACxF,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAAyC,QAAA,GAAA;AAAA,UAAA,OAAA,CAAAN,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAAW,MAAA,CAAezE,cAAA,CAAeH,KAAkC,EAAA,2BAAA,CAAA;AAAA,WAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,SAAA;OAFnE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;KAvCV,CAAA;AAkDL,GAAA;AACF,CAAC,CAAA;;;;"}