{"version":3,"file":"chat-input.mjs","sources":["../../src/chat/chat-input.tsx"],"sourcesContent":["import { defineComponent, toRefs, computed } from 'vue';\nimport { Button, Textarea } from 'tdesign-vue-next';\nimport { RectangleIcon, SendIcon, StopCircleIcon } from 'tdesign-icons-vue-next';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useConfig';\nimport props from './props';\nimport useVModel from '../hooks/useVModel';\n\nexport default defineComponent({\n  name: 'TChatInput',\n  components: {\n    RectangleIcon,\n    SendIcon,\n  },\n  props: {\n    modelValue: {\n      type: String,\n      default: '',\n    },\n    value: {\n      type: String,\n      default: '',\n    },\n    defaultValue: {\n      type: String,\n      default: '',\n    },\n    placeholder: {\n      type: String,\n      default: undefined,\n    },\n    stopDisabled: {\n      type: Boolean,\n      default: false,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    // 是否自动聚焦\n    autofocus: {\n      type: Boolean,\n      default: false,\n    },\n    autosize: props.autosize,\n    onSend: props.onSend,\n    onStop: props.onStop,\n    onChange: props.onChange,\n    onBlur: props.onBlur,\n    onFocus: props.onFocus,\n  },\n  emits: ['send', 'stop', 'update:modelValue', 'blur', 'focus'], // declare the custom events here\n  setup(props, { slots, emit }) {\n    const COMPONENT_NAME = usePrefixClass('chat');\n    const { globalConfig } = useConfig('chat');\n    const { stopBtnText, placeholder } = globalConfig.value;\n    const { value, modelValue } = toRefs(props);\n    const [textValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n    // 按钮禁用，\n    const disabled = computed(() => props.stopDisabled);\n    // textarea禁用，\n    const textareaDisabled = computed(() => props.disabled);\n    // 输入框是否自动聚焦\n    const autofocus = computed(() => props.autofocus);\n    // 输入框高度\n    const autosize = computed(() => props.autosize);\n    // 输入框默认文案\n    const placeholderText = computed(() => props.placeholder ?? placeholder);\n\n    let shiftDownFlag = false;\n    let isComposition = false;\n    const renderTNodeJSX = useTNodeJSX();\n    const suffixIcon = renderTNodeJSX('suffixIcon') || slots.suffixIcon;\n    const sendClick = (e: MouseEvent | KeyboardEvent) => {\n      if (textValue.value && !disabled.value) {\n        emit('send', textValue.value, { e });\n        setInnerValue('', { e });\n      }\n    };\n\n    const handleStop = (e: MouseEvent) => {\n      emit('stop', textValue.value, {\n        e,\n      });\n    };\n\n    const textChange = (value: string, context: { e: InputEvent }) => {\n      setInnerValue(value, context);\n    };\n    const blurFn = (value: string, context: { e: FocusEvent }) => {\n      emit('blur', value, context);\n    };\n    const focusFn = (value: string, context: { e: FocusEvent }) => {\n      emit('focus', value, context);\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\n    const keyupFn = (value: any, context: any) => {\n      const {\n        e: { key },\n      } = context;\n      if (key === 'Shift') {\n        shiftDownFlag = false;\n      }\n    };\n\n    const compositionstartFn = () => {\n      isComposition = true;\n    };\n\n    const compositionendFn = () => {\n      isComposition = false;\n    };\n    // 默认suffixIcon\n    const getDefaultSuffixIcon = () => {\n      return (\n        <Button\n          theme=\"default\"\n          size=\"small\"\n          variant=\"text\"\n          class={[\n            `${COMPONENT_NAME.value}__footer__textarea__icon__default`,\n            textValue.value ? `${COMPONENT_NAME.value}__footer__textarea__icon--focus` : '',\n          ]}\n          disabled={disabled.value || !textValue.value || textareaDisabled.value}\n        >\n          <SendIcon />\n        </Button>\n      );\n    };\n    const renderSuffixIcon = () => {\n      return suffixIcon ? suffixIcon : getDefaultSuffixIcon();\n    };\n    return () => (\n      <div class={`${COMPONENT_NAME.value}__footer__content`}>\n        {/* textAreaBox */}\n        <div class={`${COMPONENT_NAME.value}__footer__textarea`}>\n          <Textarea\n            value={textValue.value}\n            class=\"noscrollbar\"\n            placeholder={placeholderText.value}\n            disabled={textareaDisabled.value}\n            autofocus={autofocus.value}\n            autosize={autosize.value}\n            onChange={textChange}\n            onBlur={blurFn}\n            onFocus={focusFn}\n            onKeydown={keydownFn}\n            onKeyup={keyupFn}\n            onCompositionstart={compositionstartFn}\n            onCompositionend={compositionendFn}\n          />\n          <div class={`${COMPONENT_NAME.value}__footer__textarea__icon`} onClick={sendClick}>\n            {renderSuffixIcon()}\n          </div>\n        </div>\n        {disabled.value && !textareaDisabled.value && (\n          <div class={`${COMPONENT_NAME.value}__footer__stopbtn`}>\n            <Button variant=\"outline\" onClick={handleStop}>\n              <StopCircleIcon slot=\"icon\" />\n              {stopBtnText}\n            </Button>\n          </div>\n        )}\n      </div>\n    );\n  },\n});\n"],"names":["defineComponent","name","components","RectangleIcon","SendIcon","props","modelValue","type","String","value","defaultValue","placeholder","stopDisabled","Boolean","disabled","autofocus","autosize","onSend","onStop","onChange","onBlur","onFocus","emits","setup","slots","_ref","emit","COMPONENT_NAME","usePrefixClass","_useConfig","useConfig","globalConfig","_globalConfig$value","stopBtnText","_toRefs","toRefs","_useVModel","useVModel","_useVModel2","_slicedToArray","textValue","setInnerValue","computed","textareaDisabled","placeholderText","_props2$placeholder","shiftDownFlag","isComposition","renderTNodeJSX","useTNodeJSX","suffixIcon","sendClick","e","handleStop","textChange","context","blurFn","focusFn","keydownFn","key","cancelBubble","preventDefault","stopPropagation","keyupFn","compositionstartFn","compositionendFn","getDefaultSuffixIcon","_createVNode","Button","concat","_default","renderSuffixIcon","Textarea","StopCircleIcon"],"mappings":"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"}