{"version":3,"file":"chat-item.mjs","sources":["../../../pro-components/chat/chat-item/chat-item.tsx"],"sourcesContent":["import { defineComponent, computed, provide, Fragment } from 'vue';\nimport { useConfig } from 'tdesign-vue-next/es/config-provider/hooks';\n\nimport { usePrefixClass, useTNodeJSX } from '@tdesign/shared-hooks';\n\nimport props from './chat-item-props';\nimport { isString, isObject } from 'lodash-es';\nimport { Skeleton } from 'tdesign-vue-next';\nimport Text from '../chat-content/chat-content';\nimport { CheckCircleIcon } from 'tdesign-icons-vue-next';\nimport ChatLoading from '../chat-loading';\nimport ChatReasoning from '../chat-reasoning/chat-reasoning';\n\nexport default defineComponent({\n  name: 'TChatItem',\n  props: {\n    ...props,\n    reasoningLoading: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [],\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('chat');\n    const { globalConfig } = useConfig('chat');\n    const renderTNodeJSX = useTNodeJSX();\n    const role = computed(() => renderTNodeJSX('role'));\n    const variant = computed(() => renderTNodeJSX('variant'));\n    // content为default时给子组件注入,模型切换时不注入数据，否则variant样式混乱\n    provide('role', role);\n    return () => {\n      // 因为外层的role不能拿到实时更新的值，但是又要给子组件注入，所以这里单独另存了个变量\n      const roleValue = renderTNodeJSX('role');\n      // props和同名slot同时存在优先取slot的值\n      const name = renderTNodeJSX('name', { slotFirst: true }) || props.name;\n      const datetime = renderTNodeJSX('datetime', { slotFirst: true }) || props.datetime;\n      const avatar = renderTNodeJSX('avatar', { slotFirst: true }) || props.avatar;\n      const showNameDatetime = computed(() => name || datetime);\n      const content = renderTNodeJSX('content', { slotFirst: true }) || props.content;\n      // showNameDatetime存在时，contentClasses有个padding-top\n      const contentClasses = computed(() => {\n        return showNameDatetime.value\n          ? [`${COMPONENT_NAME.value}__content`]\n          : [`${COMPONENT_NAME.value}__content`, `${COMPONENT_NAME.value}__content--base`];\n      });\n      const avatarDom = avatar ? (\n        <div class={`${COMPONENT_NAME.value}__avatar`}>\n          <div class={`${COMPONENT_NAME.value}__avatar__box`}>\n            {isString(avatar) ? <img src={avatar} alt=\"\" class={`${COMPONENT_NAME.value}__avatar-image`} /> : avatar}\n          </div>\n        </div>\n      ) : null;\n      const nameDatetimeDom = showNameDatetime.value && (\n        <div class={`${COMPONENT_NAME.value}__base`}>\n          {name && <span class={`${COMPONENT_NAME.value}__name`}>{name}</span>}\n          {datetime && <span class={`${COMPONENT_NAME.value}__time`}>{datetime}</span>}\n        </div>\n      );\n      const textLoading = props.textLoading;\n      const reasoningLoading = props.reasoningLoading;\n      // 内置操作按钮，assistantActions和插槽判断 t-chat注入的属性获取不到默认为false\n      const showActions = computed(() => renderTNodeJSX('actionbar') || renderTNodeJSX('actions'));\n      const renderHeader = () => {\n        const { loadingText, loadingEndText } = globalConfig.value;\n        if (reasoningLoading) {\n          return <ChatLoading text={loadingText} />;\n        }\n        return (\n          <div style=\"display:flex;align-items:center\">\n            <CheckCircleIcon\n              style={{\n                color: 'var(--td-success-color-5)',\n                fontSize: '20px',\n                marginRight: '8px',\n              }}\n            />\n            <span>{loadingEndText}</span>\n          </div>\n        );\n      };\n      const contentDom = (\n        <Fragment>\n          {role.value !== 'model-change' && avatarDom}\n          <div class={contentClasses.value}>\n            {role.value !== 'model-change' && nameDatetimeDom}\n            {textLoading &&\n              (props.animation === 'skeleton' ? (\n                <Skeleton loading={textLoading} animation={'gradient'}></Skeleton>\n              ) : (\n                <ChatLoading animation={props.animation}></ChatLoading>\n              ))}\n            {!textLoading && (\n              <div class={`${COMPONENT_NAME.value}__detail`}>\n                {isObject(props.reasoning) && role.value === 'assistant' && (\n                  <ChatReasoning\n                    expandIconPlacement={(props.reasoning as Record<string, any>).expandIconPlacement}\n                    onExpandChange={(props.reasoning as Record<string, any>).onExpandChange}\n                    collapse-panel-props={{\n                      ...(props.reasoning as Record<string, any>).collapsePanelProps,\n                    }}\n                  ></ChatReasoning>\n                )}\n                {/* 适配t-chat传入data */}\n                {isString(props.reasoning) && role.value === 'assistant' && (\n                  <ChatReasoning\n                    expandIconPlacement={'right'}\n                    collapse-panel-props={{\n                      header: renderHeader(),\n                      content: (\n                        <Text\n                          content={{ type: 'text', data: props.reasoning as unknown as string }}\n                          role={role.value}\n                        />\n                      ),\n                    }}\n                  ></ChatReasoning>\n                )}\n                {isString(content) ? <Text content={content} role={role.value} status={props.status} /> : content}\n              </div>\n            )}\n            {role.value === 'assistant' && showActions.value && (\n              <div class={`${COMPONENT_NAME.value}__actions-margin`}>\n                {renderTNodeJSX('actionbar') || renderTNodeJSX('actions')}\n              </div>\n            )}\n          </div>\n        </Fragment>\n      );\n      return (\n        <div\n          class={`${COMPONENT_NAME.value}__inner ${roleValue} ${COMPONENT_NAME.value}__text--variant--${variant.value}`}\n        >\n          {contentDom}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","props","_objectSpread","reasoningLoading","type","Boolean","emits","setup","COMPONENT_NAME","usePrefixClass","_useConfig","useConfig","globalConfig","renderTNodeJSX","useTNodeJSX","role","computed","variant","provide","roleValue","slotFirst","datetime","avatar","showNameDatetime","content","contentClasses","value","concat","avatarDom","_createVNode","isString","nameDatetimeDom","textLoading","showActions","renderHeader","_globalConfig$value","loadingText","loadingEndText","ChatLoading","CheckCircleIcon","color","fontSize","marginRight","contentDom","animation","Skeleton","isObject","reasoning","ChatReasoning","expandIconPlacement","onExpandChange","collapsePanelProps","header","Text","data","status"],"mappings":"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"}