{"version":3,"file":"chat-item.mjs","sources":["../../src/chat/chat-item.tsx"],"sourcesContent":["import { defineComponent, computed, provide } from 'vue';\nimport { usePrefixClass, useConfig } from '../hooks/useConfig';\nimport props from './chat-item-props';\nimport { isString, isObject } from 'lodash-es';\nimport { Skeleton } from 'tdesign-vue-next';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport Text from './chat-content';\nimport { CheckCircleIcon } from 'tdesign-icons-vue-next';\nimport ChatLoading from './chat-loading';\nimport ChatReasoning from './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: ['operation'],\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('chat');\n    const { globalConfig } = useConfig('chat');\n    const { loadingText, loadingEndText } = globalConfig.value;\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('actions'));\n      const renderHeader = () => {\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        <>\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 loading={textLoading} animation={props.animation}></ChatLoading>\n              ))}\n            {!textLoading && (\n              <div class={`${COMPONENT_NAME.value}__detail`}>\n                {isObject(props.reasoning) && role.value === 'assistant' && (\n                  <ChatReasoning\n                    role={role.value}\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                    role={role.value}\n                    expandIconPlacement={'right'}\n                    collapse-panel-props={{\n                      header: renderHeader(),\n                      content: <Text isNormalText={false} content={props.reasoning} role={role.value} />,\n                    }}\n                  ></ChatReasoning>\n                )}\n                {isString(content) ? <Text isNormalText={false} content={content} role={role.value} /> : content}\n              </div>\n            )}\n            {role.value === 'assistant' && showActions.value && (\n              <div class={`${COMPONENT_NAME.value}__actions-margin`}>{renderTNodeJSX('actions')}</div>\n            )}\n          </div>\n        </>\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","_globalConfig$value","value","loadingText","loadingEndText","renderTNodeJSX","useTNodeJSX","role","computed","variant","provide","roleValue","slotFirst","datetime","avatar","showNameDatetime","content","contentClasses","concat","avatarDom","_createVNode","isString","nameDatetimeDom","textLoading","showActions","renderHeader","ChatLoading","CheckCircleIcon","color","fontSize","marginRight","contentDom","_Fragment","animation","Skeleton","isObject","reasoning","ChatReasoning","expandIconPlacement","onExpandChange","collapsePanelProps","header","Text"],"mappings":"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"}