@yh-ui/components 0.1.10 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.cjs +55 -0
  2. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.d.ts +1 -0
  3. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.mjs +39 -0
  4. package/dist/ai-action-group/__tests__/ai-action-group.test.cjs +149 -0
  5. package/dist/ai-action-group/__tests__/ai-action-group.test.d.ts +1 -0
  6. package/dist/ai-action-group/__tests__/ai-action-group.test.mjs +104 -0
  7. package/dist/ai-action-group/index.cjs +26 -0
  8. package/dist/ai-action-group/index.d.ts +3 -0
  9. package/dist/ai-action-group/index.mjs +5 -0
  10. package/dist/ai-action-group/src/ai-action-group.cjs +50 -0
  11. package/dist/ai-action-group/src/ai-action-group.css +517 -0
  12. package/dist/ai-action-group/src/ai-action-group.d.ts +55 -0
  13. package/dist/ai-action-group/src/ai-action-group.d.vue.ts +40 -0
  14. package/dist/ai-action-group/src/ai-action-group.mjs +44 -0
  15. package/dist/ai-action-group/src/ai-action-group.vue +602 -0
  16. package/dist/ai-action-group/src/ai-action-group.vue.d.ts +40 -0
  17. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.cjs +61 -0
  18. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.d.ts +1 -0
  19. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.mjs +65 -0
  20. package/dist/ai-agent-card/__tests__/ai-agent-card.test.cjs +70 -0
  21. package/dist/ai-agent-card/__tests__/ai-agent-card.test.d.ts +1 -0
  22. package/dist/ai-agent-card/__tests__/ai-agent-card.test.mjs +64 -0
  23. package/dist/ai-agent-card/index.cjs +26 -0
  24. package/dist/ai-agent-card/index.d.ts +3 -0
  25. package/dist/ai-agent-card/index.mjs +5 -0
  26. package/dist/ai-agent-card/src/ai-agent-card.cjs +74 -0
  27. package/dist/ai-agent-card/src/ai-agent-card.css +859 -0
  28. package/dist/ai-agent-card/src/ai-agent-card.d.ts +122 -0
  29. package/dist/ai-agent-card/src/ai-agent-card.d.vue.ts +62 -0
  30. package/dist/ai-agent-card/src/ai-agent-card.mjs +68 -0
  31. package/dist/ai-agent-card/src/ai-agent-card.vue +1029 -0
  32. package/dist/ai-agent-card/src/ai-agent-card.vue.d.ts +62 -0
  33. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.cjs +73 -0
  34. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.d.ts +1 -0
  35. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.mjs +68 -0
  36. package/dist/ai-artifacts/__tests__/ai-artifacts.test.cjs +128 -0
  37. package/dist/ai-artifacts/__tests__/ai-artifacts.test.d.ts +1 -0
  38. package/dist/ai-artifacts/__tests__/ai-artifacts.test.mjs +109 -0
  39. package/dist/ai-artifacts/index.cjs +26 -0
  40. package/dist/ai-artifacts/index.d.ts +3 -0
  41. package/dist/ai-artifacts/index.mjs +5 -0
  42. package/dist/ai-artifacts/src/ai-artifacts.cjs +55 -0
  43. package/dist/ai-artifacts/src/ai-artifacts.css +633 -0
  44. package/dist/ai-artifacts/src/ai-artifacts.d.ts +93 -0
  45. package/dist/ai-artifacts/src/ai-artifacts.d.vue.ts +50 -0
  46. package/dist/ai-artifacts/src/ai-artifacts.mjs +49 -0
  47. package/dist/ai-artifacts/src/ai-artifacts.vue +831 -0
  48. package/dist/ai-artifacts/src/ai-artifacts.vue.d.ts +50 -0
  49. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.cjs +87 -0
  50. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.d.ts +1 -0
  51. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.mjs +58 -0
  52. package/dist/ai-bubble/__tests__/ai-bubble.test.cjs +227 -0
  53. package/dist/ai-bubble/__tests__/ai-bubble.test.d.ts +1 -0
  54. package/dist/ai-bubble/__tests__/ai-bubble.test.mjs +123 -0
  55. package/dist/ai-bubble/index.cjs +26 -0
  56. package/dist/ai-bubble/index.d.ts +3 -0
  57. package/dist/ai-bubble/index.mjs +5 -0
  58. package/dist/ai-bubble/src/ai-bubble.cjs +86 -0
  59. package/dist/ai-bubble/src/ai-bubble.css +932 -0
  60. package/dist/ai-bubble/src/ai-bubble.d.ts +126 -0
  61. package/dist/ai-bubble/src/ai-bubble.d.vue.ts +110 -0
  62. package/dist/ai-bubble/src/ai-bubble.mjs +80 -0
  63. package/dist/ai-bubble/src/ai-bubble.vue +1300 -0
  64. package/dist/ai-bubble/src/ai-bubble.vue.d.ts +110 -0
  65. package/dist/ai-chat/__tests__/ai-chat.ssr.test.cjs +82 -0
  66. package/dist/ai-chat/__tests__/ai-chat.ssr.test.d.ts +1 -0
  67. package/dist/ai-chat/__tests__/ai-chat.ssr.test.mjs +69 -0
  68. package/dist/ai-chat/__tests__/ai-chat.test.cjs +169 -0
  69. package/dist/ai-chat/__tests__/ai-chat.test.d.ts +1 -0
  70. package/dist/ai-chat/__tests__/ai-chat.test.mjs +121 -0
  71. package/dist/ai-chat/index.cjs +26 -0
  72. package/dist/ai-chat/index.d.ts +3 -0
  73. package/dist/ai-chat/index.mjs +5 -0
  74. package/dist/ai-chat/src/ai-chat.cjs +41 -0
  75. package/dist/ai-chat/src/ai-chat.css +503 -0
  76. package/dist/ai-chat/src/ai-chat.d.ts +57 -0
  77. package/dist/ai-chat/src/ai-chat.d.vue.ts +43 -0
  78. package/dist/ai-chat/src/ai-chat.mjs +35 -0
  79. package/dist/ai-chat/src/ai-chat.vue +606 -0
  80. package/dist/ai-chat/src/ai-chat.vue.d.ts +43 -0
  81. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.cjs +66 -0
  82. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.d.ts +1 -0
  83. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.mjs +48 -0
  84. package/dist/ai-code-block/__tests__/ai-code-block.test.cjs +174 -0
  85. package/dist/ai-code-block/__tests__/ai-code-block.test.d.ts +1 -0
  86. package/dist/ai-code-block/__tests__/ai-code-block.test.mjs +108 -0
  87. package/dist/ai-code-block/index.cjs +26 -0
  88. package/dist/ai-code-block/index.d.ts +3 -0
  89. package/dist/ai-code-block/index.mjs +5 -0
  90. package/dist/ai-code-block/src/ai-code-block.cjs +79 -0
  91. package/dist/ai-code-block/src/ai-code-block.css +589 -0
  92. package/dist/ai-code-block/src/ai-code-block.d.ts +76 -0
  93. package/dist/ai-code-block/src/ai-code-block.d.vue.ts +63 -0
  94. package/dist/ai-code-block/src/ai-code-block.mjs +73 -0
  95. package/dist/ai-code-block/src/ai-code-block.vue +706 -0
  96. package/dist/ai-code-block/src/ai-code-block.vue.d.ts +63 -0
  97. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.cjs +50 -0
  98. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.d.ts +1 -0
  99. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.mjs +42 -0
  100. package/dist/ai-conversations/__tests__/ai-conversations.test.cjs +67 -0
  101. package/dist/ai-conversations/__tests__/ai-conversations.test.d.ts +1 -0
  102. package/dist/ai-conversations/__tests__/ai-conversations.test.mjs +51 -0
  103. package/dist/ai-conversations/index.cjs +26 -0
  104. package/dist/ai-conversations/index.d.ts +3 -0
  105. package/dist/ai-conversations/index.mjs +5 -0
  106. package/dist/ai-conversations/src/ai-conversations.cjs +69 -0
  107. package/dist/ai-conversations/src/ai-conversations.css +679 -0
  108. package/dist/ai-conversations/src/ai-conversations.d.ts +67 -0
  109. package/dist/ai-conversations/src/ai-conversations.d.vue.ts +52 -0
  110. package/dist/ai-conversations/src/ai-conversations.mjs +63 -0
  111. package/dist/ai-conversations/src/ai-conversations.vue +949 -0
  112. package/dist/ai-conversations/src/ai-conversations.vue.d.ts +52 -0
  113. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.cjs +62 -0
  114. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.d.ts +1 -0
  115. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.mjs +50 -0
  116. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.cjs +315 -0
  117. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.d.ts +1 -0
  118. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.mjs +226 -0
  119. package/dist/ai-editor-sender/index.cjs +26 -0
  120. package/dist/ai-editor-sender/index.d.ts +3 -0
  121. package/dist/ai-editor-sender/index.mjs +5 -0
  122. package/dist/ai-editor-sender/src/ai-editor-sender.cjs +66 -0
  123. package/dist/ai-editor-sender/src/ai-editor-sender.css +566 -0
  124. package/dist/ai-editor-sender/src/ai-editor-sender.d.ts +70 -0
  125. package/dist/ai-editor-sender/src/ai-editor-sender.d.vue.ts +70 -0
  126. package/dist/ai-editor-sender/src/ai-editor-sender.mjs +60 -0
  127. package/dist/ai-editor-sender/src/ai-editor-sender.vue +713 -0
  128. package/dist/ai-editor-sender/src/ai-editor-sender.vue.d.ts +70 -0
  129. package/dist/ai-mention/__tests__/ai-mention.ssr.test.cjs +38 -0
  130. package/dist/ai-mention/__tests__/ai-mention.ssr.test.d.ts +1 -0
  131. package/dist/ai-mention/__tests__/ai-mention.ssr.test.mjs +37 -0
  132. package/dist/ai-mention/__tests__/ai-mention.test.cjs +113 -0
  133. package/dist/ai-mention/__tests__/ai-mention.test.d.ts +1 -0
  134. package/dist/ai-mention/__tests__/ai-mention.test.mjs +84 -0
  135. package/dist/ai-mention/index.cjs +26 -0
  136. package/dist/ai-mention/index.d.ts +29 -0
  137. package/dist/ai-mention/index.mjs +5 -0
  138. package/dist/ai-mention/src/ai-mention.cjs +95 -0
  139. package/dist/ai-mention/src/ai-mention.css +545 -0
  140. package/dist/ai-mention/src/ai-mention.d.ts +99 -0
  141. package/dist/ai-mention/src/ai-mention.d.vue.ts +68 -0
  142. package/dist/ai-mention/src/ai-mention.mjs +89 -0
  143. package/dist/ai-mention/src/ai-mention.vue +650 -0
  144. package/dist/ai-mention/src/ai-mention.vue.d.ts +68 -0
  145. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.cjs +49 -0
  146. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.d.ts +1 -0
  147. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.mjs +41 -0
  148. package/dist/ai-prompts/__tests__/ai-prompts.test.cjs +54 -0
  149. package/dist/ai-prompts/__tests__/ai-prompts.test.d.ts +1 -0
  150. package/dist/ai-prompts/__tests__/ai-prompts.test.mjs +38 -0
  151. package/dist/ai-prompts/index.cjs +26 -0
  152. package/dist/ai-prompts/index.d.ts +3 -0
  153. package/dist/ai-prompts/index.mjs +5 -0
  154. package/dist/ai-prompts/src/ai-prompts.cjs +42 -0
  155. package/dist/ai-prompts/src/ai-prompts.css +572 -0
  156. package/dist/ai-prompts/src/ai-prompts.d.ts +45 -0
  157. package/dist/ai-prompts/src/ai-prompts.d.vue.ts +44 -0
  158. package/dist/ai-prompts/src/ai-prompts.mjs +36 -0
  159. package/dist/ai-prompts/src/ai-prompts.vue +646 -0
  160. package/dist/ai-prompts/src/ai-prompts.vue.d.ts +44 -0
  161. package/dist/ai-provider/__tests__/ai-provider.ssr.test.cjs +33 -0
  162. package/dist/ai-provider/__tests__/ai-provider.ssr.test.d.ts +1 -0
  163. package/dist/ai-provider/__tests__/ai-provider.ssr.test.mjs +34 -0
  164. package/dist/ai-provider/__tests__/ai-provider.test.cjs +38 -0
  165. package/dist/ai-provider/__tests__/ai-provider.test.d.ts +1 -0
  166. package/dist/ai-provider/__tests__/ai-provider.test.mjs +33 -0
  167. package/dist/ai-provider/index.cjs +38 -0
  168. package/dist/ai-provider/index.d.ts +4 -0
  169. package/dist/ai-provider/index.mjs +6 -0
  170. package/dist/ai-provider/src/ai-provider.cjs +7 -0
  171. package/dist/ai-provider/src/ai-provider.d.ts +88 -0
  172. package/dist/ai-provider/src/ai-provider.d.vue.ts +48 -0
  173. package/dist/ai-provider/src/ai-provider.mjs +1 -0
  174. package/dist/ai-provider/src/ai-provider.vue +24 -0
  175. package/dist/ai-provider/src/ai-provider.vue.d.ts +48 -0
  176. package/dist/ai-provider/src/use-ai-provider.cjs +11 -0
  177. package/dist/ai-provider/src/use-ai-provider.d.ts +10 -0
  178. package/dist/ai-provider/src/use-ai-provider.mjs +5 -0
  179. package/dist/ai-sender/__tests__/ai-sender.ssr.test.cjs +46 -0
  180. package/dist/ai-sender/__tests__/ai-sender.ssr.test.d.ts +1 -0
  181. package/dist/ai-sender/__tests__/ai-sender.ssr.test.mjs +37 -0
  182. package/dist/ai-sender/__tests__/ai-sender.test.cjs +395 -0
  183. package/dist/ai-sender/__tests__/ai-sender.test.d.ts +1 -0
  184. package/dist/ai-sender/__tests__/ai-sender.test.mjs +255 -0
  185. package/dist/ai-sender/index.cjs +26 -0
  186. package/dist/ai-sender/index.d.ts +3 -0
  187. package/dist/ai-sender/index.mjs +5 -0
  188. package/dist/ai-sender/src/ai-sender.cjs +98 -0
  189. package/dist/ai-sender/src/ai-sender.css +754 -0
  190. package/dist/ai-sender/src/ai-sender.d.ts +147 -0
  191. package/dist/ai-sender/src/ai-sender.d.vue.ts +74 -0
  192. package/dist/ai-sender/src/ai-sender.mjs +92 -0
  193. package/dist/ai-sender/src/ai-sender.vue +1039 -0
  194. package/dist/ai-sender/src/ai-sender.vue.d.ts +74 -0
  195. package/dist/ai-sources/__tests__/ai-sources.ssr.test.cjs +72 -0
  196. package/dist/ai-sources/__tests__/ai-sources.ssr.test.d.ts +1 -0
  197. package/dist/ai-sources/__tests__/ai-sources.ssr.test.mjs +82 -0
  198. package/dist/ai-sources/__tests__/ai-sources.test.cjs +93 -0
  199. package/dist/ai-sources/__tests__/ai-sources.test.d.ts +1 -0
  200. package/dist/ai-sources/__tests__/ai-sources.test.mjs +89 -0
  201. package/dist/ai-sources/index.cjs +26 -0
  202. package/dist/ai-sources/index.d.ts +3 -0
  203. package/dist/ai-sources/index.mjs +5 -0
  204. package/dist/ai-sources/src/ai-sources.cjs +59 -0
  205. package/dist/ai-sources/src/ai-sources.css +830 -0
  206. package/dist/ai-sources/src/ai-sources.d.ts +79 -0
  207. package/dist/ai-sources/src/ai-sources.d.vue.ts +45 -0
  208. package/dist/ai-sources/src/ai-sources.mjs +53 -0
  209. package/dist/ai-sources/src/ai-sources.vue +1093 -0
  210. package/dist/ai-sources/src/ai-sources.vue.d.ts +45 -0
  211. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.cjs +56 -0
  212. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.d.ts +1 -0
  213. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.mjs +42 -0
  214. package/dist/ai-thinking/__tests__/ai-thinking.test.cjs +151 -0
  215. package/dist/ai-thinking/__tests__/ai-thinking.test.d.ts +1 -0
  216. package/dist/ai-thinking/__tests__/ai-thinking.test.mjs +96 -0
  217. package/dist/ai-thinking/index.cjs +26 -0
  218. package/dist/ai-thinking/index.d.ts +3 -0
  219. package/dist/ai-thinking/index.mjs +5 -0
  220. package/dist/ai-thinking/src/ai-thinking.cjs +44 -0
  221. package/dist/ai-thinking/src/ai-thinking.css +543 -0
  222. package/dist/ai-thinking/src/ai-thinking.d.ts +42 -0
  223. package/dist/ai-thinking/src/ai-thinking.d.vue.ts +33 -0
  224. package/dist/ai-thinking/src/ai-thinking.mjs +38 -0
  225. package/dist/ai-thinking/src/ai-thinking.vue +631 -0
  226. package/dist/ai-thinking/src/ai-thinking.vue.d.ts +33 -0
  227. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.cjs +83 -0
  228. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.d.ts +1 -0
  229. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.mjs +52 -0
  230. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.cjs +204 -0
  231. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.d.ts +1 -0
  232. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.mjs +134 -0
  233. package/dist/ai-thought-chain/index.cjs +26 -0
  234. package/dist/ai-thought-chain/index.d.ts +3 -0
  235. package/dist/ai-thought-chain/index.mjs +5 -0
  236. package/dist/ai-thought-chain/src/ai-thought-chain.cjs +68 -0
  237. package/dist/ai-thought-chain/src/ai-thought-chain.css +668 -0
  238. package/dist/ai-thought-chain/src/ai-thought-chain.d.ts +82 -0
  239. package/dist/ai-thought-chain/src/ai-thought-chain.d.vue.ts +83 -0
  240. package/dist/ai-thought-chain/src/ai-thought-chain.mjs +62 -0
  241. package/dist/ai-thought-chain/src/ai-thought-chain.vue +813 -0
  242. package/dist/ai-thought-chain/src/ai-thought-chain.vue.d.ts +83 -0
  243. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.cjs +32 -0
  244. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.d.ts +1 -0
  245. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.mjs +25 -0
  246. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.cjs +130 -0
  247. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.d.ts +1 -0
  248. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.mjs +103 -0
  249. package/dist/ai-voice-trigger/index.cjs +26 -0
  250. package/dist/ai-voice-trigger/index.d.ts +3 -0
  251. package/dist/ai-voice-trigger/index.mjs +5 -0
  252. package/dist/ai-voice-trigger/src/ai-voice-trigger.cjs +67 -0
  253. package/dist/ai-voice-trigger/src/ai-voice-trigger.css +702 -0
  254. package/dist/ai-voice-trigger/src/ai-voice-trigger.d.ts +69 -0
  255. package/dist/ai-voice-trigger/src/ai-voice-trigger.d.vue.ts +49 -0
  256. package/dist/ai-voice-trigger/src/ai-voice-trigger.mjs +61 -0
  257. package/dist/ai-voice-trigger/src/ai-voice-trigger.vue +859 -0
  258. package/dist/ai-voice-trigger/src/ai-voice-trigger.vue.d.ts +49 -0
  259. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.cjs +57 -0
  260. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.d.ts +1 -0
  261. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.mjs +39 -0
  262. package/dist/ai-welcome/__tests__/ai-welcome.test.cjs +169 -0
  263. package/dist/ai-welcome/__tests__/ai-welcome.test.d.ts +1 -0
  264. package/dist/ai-welcome/__tests__/ai-welcome.test.mjs +113 -0
  265. package/dist/ai-welcome/index.cjs +26 -0
  266. package/dist/ai-welcome/index.d.ts +3 -0
  267. package/dist/ai-welcome/index.mjs +5 -0
  268. package/dist/ai-welcome/src/ai-welcome.cjs +56 -0
  269. package/dist/ai-welcome/src/ai-welcome.css +591 -0
  270. package/dist/ai-welcome/src/ai-welcome.d.ts +59 -0
  271. package/dist/ai-welcome/src/ai-welcome.d.vue.ts +51 -0
  272. package/dist/ai-welcome/src/ai-welcome.mjs +50 -0
  273. package/dist/ai-welcome/src/ai-welcome.vue +655 -0
  274. package/dist/ai-welcome/src/ai-welcome.vue.d.ts +51 -0
  275. package/dist/alert/src/alert.d.vue.ts +6 -6
  276. package/dist/alert/src/alert.vue.d.ts +6 -6
  277. package/dist/autocomplete/src/autocomplete.d.vue.ts +4 -4
  278. package/dist/autocomplete/src/autocomplete.vue.d.ts +4 -4
  279. package/dist/avatar/index.d.ts +39 -1
  280. package/dist/back-top/src/back-top.d.vue.ts +1 -1
  281. package/dist/back-top/src/back-top.vue.d.ts +1 -1
  282. package/dist/button/index.d.ts +3 -3
  283. package/dist/button/src/button.css +3 -3
  284. package/dist/button/src/button.d.vue.ts +1 -1
  285. package/dist/button/src/button.vue +3 -3
  286. package/dist/button/src/button.vue.d.ts +1 -1
  287. package/dist/calendar/src/calendar.d.vue.ts +3 -3
  288. package/dist/calendar/src/calendar.vue.d.ts +3 -3
  289. package/dist/cascader/src/cascader-panel.d.vue.ts +2 -2
  290. package/dist/cascader/src/cascader-panel.vue.d.ts +2 -2
  291. package/dist/checkbox/index.d.ts +3 -3
  292. package/dist/checkbox/src/checkbox-group.d.vue.ts +1 -1
  293. package/dist/checkbox/src/checkbox-group.vue +13 -1
  294. package/dist/checkbox/src/checkbox-group.vue.d.ts +1 -1
  295. package/dist/checkbox/src/checkbox.d.ts +12 -0
  296. package/dist/col/src/col.d.vue.ts +4 -4
  297. package/dist/col/src/col.vue.d.ts +4 -4
  298. package/dist/color-picker/src/color-picker.d.vue.ts +1 -1
  299. package/dist/color-picker/src/color-picker.vue.d.ts +1 -1
  300. package/dist/component.d.ts +63 -0
  301. package/dist/date-picker/src/date-picker.d.vue.ts +6 -6
  302. package/dist/date-picker/src/date-picker.vue.d.ts +6 -6
  303. package/dist/descriptions/src/description-item.d.vue.ts +1 -1
  304. package/dist/descriptions/src/description-item.vue.d.ts +1 -1
  305. package/dist/dialog/src/dialog.d.vue.ts +12 -12
  306. package/dist/dialog/src/dialog.vue.d.ts +12 -12
  307. package/dist/drawer/index.d.ts +42 -1
  308. package/dist/drawer/src/drawer.d.vue.ts +6 -6
  309. package/dist/drawer/src/drawer.vue.d.ts +6 -6
  310. package/dist/dropdown/src/dropdown-item.d.vue.ts +1 -1
  311. package/dist/dropdown/src/dropdown-item.vue.d.ts +1 -1
  312. package/dist/dropdown/src/dropdown.d.vue.ts +8 -8
  313. package/dist/dropdown/src/dropdown.vue.d.ts +8 -8
  314. package/dist/form/__tests__/form-schema.test.cjs +477 -24
  315. package/dist/form/__tests__/form-schema.test.mjs +277 -57
  316. package/dist/form/index.cjs +12 -0
  317. package/dist/form/index.d.ts +1 -2
  318. package/dist/form/index.mjs +1 -0
  319. package/dist/form/src/form-item.d.vue.ts +2 -1
  320. package/dist/form/src/form-item.vue +3 -1
  321. package/dist/form/src/form-item.vue.d.ts +2 -1
  322. package/dist/form/src/form-schema.cjs +2 -1
  323. package/dist/form/src/form-schema.d.ts +124 -19
  324. package/dist/form/src/form-schema.d.vue.ts +69 -19
  325. package/dist/form/src/form-schema.mjs +2 -1
  326. package/dist/form/src/form-schema.vue +522 -160
  327. package/dist/form/src/form-schema.vue.d.ts +69 -19
  328. package/dist/form/src/form.cjs +7 -0
  329. package/dist/form/src/form.d.ts +20 -0
  330. package/dist/form/src/form.d.vue.ts +10 -1
  331. package/dist/form/src/form.mjs +7 -0
  332. package/dist/form/src/form.vue +22 -10
  333. package/dist/form/src/form.vue.d.ts +10 -1
  334. package/dist/grid/src/grid.d.vue.ts +1 -1
  335. package/dist/grid/src/grid.vue.d.ts +1 -1
  336. package/dist/icon/src/icons/index.cjs +127 -2
  337. package/dist/icon/src/icons/index.d.ts +25 -0
  338. package/dist/icon/src/icons/index.mjs +151 -1
  339. package/dist/image/index.d.ts +356 -2
  340. package/dist/image/src/image-viewer.d.vue.ts +3 -3
  341. package/dist/image/src/image-viewer.vue.d.ts +3 -3
  342. package/dist/image/src/image.d.vue.ts +4 -4
  343. package/dist/image/src/image.vue.d.ts +4 -4
  344. package/dist/index.cjs +205 -1
  345. package/dist/index.d.ts +17 -0
  346. package/dist/index.mjs +52 -1
  347. package/dist/infinite-scroll/src/infinite-scroll.d.vue.ts +1 -1
  348. package/dist/infinite-scroll/src/infinite-scroll.vue.d.ts +1 -1
  349. package/dist/input/index.d.ts +21 -21
  350. package/dist/input/src/input.d.vue.ts +7 -7
  351. package/dist/input/src/input.vue.d.ts +7 -7
  352. package/dist/input-number/index.d.ts +3 -3
  353. package/dist/input-number/src/input-number.d.vue.ts +1 -1
  354. package/dist/input-number/src/input-number.vue.d.ts +1 -1
  355. package/dist/input-tag/src/input-tag.d.vue.ts +3 -3
  356. package/dist/input-tag/src/input-tag.vue.d.ts +3 -3
  357. package/dist/mention/index.d.ts +181 -1
  358. package/dist/mention/src/mention.d.vue.ts +9 -9
  359. package/dist/mention/src/mention.vue +6 -2
  360. package/dist/mention/src/mention.vue.d.ts +9 -9
  361. package/dist/menu/src/menu.d.vue.ts +4 -4
  362. package/dist/menu/src/menu.vue.d.ts +4 -4
  363. package/dist/message/src/message.d.vue.ts +1 -1
  364. package/dist/message/src/message.vue.d.ts +1 -1
  365. package/dist/notification/src/notification.d.vue.ts +1 -1
  366. package/dist/notification/src/notification.vue.d.ts +1 -1
  367. package/dist/popconfirm/src/popconfirm.d.vue.ts +5 -5
  368. package/dist/popconfirm/src/popconfirm.vue.d.ts +5 -5
  369. package/dist/popover/src/popover.d.vue.ts +4 -4
  370. package/dist/popover/src/popover.vue.d.ts +4 -4
  371. package/dist/progress/src/progress.d.vue.ts +1 -1
  372. package/dist/progress/src/progress.vue.d.ts +1 -1
  373. package/dist/radio/src/radio-group.d.vue.ts +1 -1
  374. package/dist/radio/src/radio-group.vue +25 -4
  375. package/dist/radio/src/radio-group.vue.d.ts +1 -1
  376. package/dist/radio/src/radio.d.ts +12 -0
  377. package/dist/rate/src/rate.d.vue.ts +1 -1
  378. package/dist/rate/src/rate.vue.d.ts +1 -1
  379. package/dist/select/src/select.d.vue.ts +4 -4
  380. package/dist/select/src/select.vue.d.ts +4 -4
  381. package/dist/slider/src/slider.d.vue.ts +1 -1
  382. package/dist/slider/src/slider.vue.d.ts +1 -1
  383. package/dist/steps/src/step.d.vue.ts +1 -1
  384. package/dist/steps/src/step.vue.d.ts +1 -1
  385. package/dist/switch/src/switch.d.vue.ts +2 -2
  386. package/dist/switch/src/switch.vue.d.ts +2 -2
  387. package/dist/table/__tests__/table.perf.test.cjs +2 -2
  388. package/dist/table/__tests__/table.perf.test.mjs +2 -2
  389. package/dist/table/__tests__/table.test.cjs +18 -0
  390. package/dist/table/__tests__/table.test.mjs +18 -0
  391. package/dist/table/__tests__/use-table-import.test.cjs +6 -0
  392. package/dist/table/__tests__/use-table-import.test.mjs +8 -1
  393. package/dist/table/src/table-column.d.vue.ts +2 -2
  394. package/dist/table/src/table-column.vue.d.ts +2 -2
  395. package/dist/table/src/table.d.vue.ts +3 -3
  396. package/dist/table/src/table.vue.d.ts +3 -3
  397. package/dist/tabs/src/tab-pane.d.vue.ts +1 -1
  398. package/dist/tabs/src/tab-pane.vue.d.ts +1 -1
  399. package/dist/tabs/src/tabs.d.vue.ts +2 -2
  400. package/dist/tabs/src/tabs.vue.d.ts +2 -2
  401. package/dist/time-picker/src/time-picker.d.vue.ts +1 -1
  402. package/dist/time-picker/src/time-picker.vue.d.ts +1 -1
  403. package/dist/tooltip/index.d.ts +7 -7
  404. package/dist/tooltip/src/tooltip.d.vue.ts +7 -7
  405. package/dist/tooltip/src/tooltip.vue.d.ts +7 -7
  406. package/dist/tree/src/tree.d.vue.ts +1 -1
  407. package/dist/tree/src/tree.vue.d.ts +1 -1
  408. package/dist/tree-select/src/tree-select.d.vue.ts +3 -3
  409. package/dist/tree-select/src/tree-select.vue.d.ts +3 -3
  410. package/dist/upload/src/upload.d.vue.ts +1 -1
  411. package/dist/upload/src/upload.vue.d.ts +1 -1
  412. package/package.json +8 -5
@@ -0,0 +1,50 @@
1
+ import 'highlight.js/styles/atom-one-dark.css';
2
+ declare var __VLS_25: {
3
+ data: any;
4
+ title: any;
5
+ }, __VLS_31: {
6
+ data: any;
7
+ };
8
+ type __VLS_Slots = {} & {
9
+ chart?: (props: typeof __VLS_25) => any;
10
+ } & {
11
+ canvas?: (props: typeof __VLS_31) => any;
12
+ };
13
+ declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
14
+ readonly visible: {
15
+ readonly type: BooleanConstructor;
16
+ readonly default: false;
17
+ };
18
+ readonly data: {
19
+ readonly type: import("vue").PropType<import("./ai-artifacts").ArtifactData>;
20
+ };
21
+ readonly width: {
22
+ readonly type: import("vue").PropType<string | number>;
23
+ readonly default: "50%";
24
+ };
25
+ readonly fullscreen: {
26
+ readonly type: BooleanConstructor;
27
+ readonly default: false;
28
+ };
29
+ readonly mode: {
30
+ readonly type: import("vue").PropType<"preview" | "code" | "inline">;
31
+ readonly default: "preview";
32
+ };
33
+ readonly themeOverrides: {
34
+ readonly type: import("vue").PropType<import("@yh-ui/theme").ComponentThemeVars>;
35
+ readonly default: undefined;
36
+ };
37
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {
38
+ readonly themeOverrides: import("@yh-ui/theme").ComponentThemeVars;
39
+ readonly width: string | number;
40
+ readonly visible: boolean;
41
+ readonly fullscreen: boolean;
42
+ readonly mode: "inline" | "code" | "preview";
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
44
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
45
+ export default _default;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _serverRenderer = require("@vue/server-renderer");
5
+ var _vue = require("vue");
6
+ _vitest.vi.mock("markdown-it", async () => {
7
+ class MockMd {
8
+ inline = {
9
+ ruler: {
10
+ after: _vitest.vi.fn()
11
+ }
12
+ };
13
+ render(content) {
14
+ return `<p>${content}</p>`;
15
+ }
16
+ }
17
+ return {
18
+ default: MockMd
19
+ };
20
+ });
21
+ _vitest.vi.mock("highlight.js", () => ({
22
+ default: {
23
+ getLanguage: () => false,
24
+ highlight: _vitest.vi.fn()
25
+ }
26
+ }));
27
+ _vitest.vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
28
+ const {
29
+ default: AiBubble
30
+ } = await Promise.resolve().then(() => require("../src/ai-bubble.vue"));
31
+ (0, _vitest.describe)("YhAiBubble SSR", () => {
32
+ (0, _vitest.it)("should render to string on server", async () => {
33
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
34
+ content: "SSR hello",
35
+ role: "assistant"
36
+ }));
37
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble");
38
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble--assistant");
39
+ });
40
+ (0, _vitest.it)("should render user role on server", async () => {
41
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
42
+ content: "User msg",
43
+ role: "user"
44
+ }));
45
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble--user");
46
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble--placement-end");
47
+ });
48
+ (0, _vitest.it)("should render time on server", async () => {
49
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
50
+ content: "hi",
51
+ time: "09:30",
52
+ role: "assistant"
53
+ }));
54
+ (0, _vitest.expect)(html).toContain("09:30");
55
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble__time");
56
+ });
57
+ (0, _vitest.it)("should render loading state on server", async () => {
58
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
59
+ content: "",
60
+ loading: true
61
+ }));
62
+ (0, _vitest.expect)(html).toContain("is-loading");
63
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble__typing-indicator");
64
+ });
65
+ (0, _vitest.it)("should not render avatar for system role on server", async () => {
66
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
67
+ content: "sys",
68
+ role: "system"
69
+ }));
70
+ (0, _vitest.expect)(html).not.toContain("yh-ai-bubble__avatar");
71
+ });
72
+ (0, _vitest.it)("should render markdown class when markdown=true", async () => {
73
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
74
+ content: "hello",
75
+ markdown: true
76
+ }));
77
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble__markdown");
78
+ });
79
+ (0, _vitest.it)("should render plain text class when markdown=false", async () => {
80
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiBubble, {
81
+ content: "plain",
82
+ markdown: false
83
+ }));
84
+ (0, _vitest.expect)(html).toContain("yh-ai-bubble__text");
85
+ (0, _vitest.expect)(html).toContain("plain");
86
+ });
87
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { renderToString } from "@vue/server-renderer";
3
+ import { h } from "vue";
4
+ vi.mock("markdown-it", async () => {
5
+ class MockMd {
6
+ inline = {
7
+ ruler: {
8
+ after: vi.fn()
9
+ }
10
+ };
11
+ render(content) {
12
+ return `<p>${content}</p>`;
13
+ }
14
+ }
15
+ return { default: MockMd };
16
+ });
17
+ vi.mock("highlight.js", () => ({
18
+ default: { getLanguage: () => false, highlight: vi.fn() }
19
+ }));
20
+ vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
21
+ const { default: AiBubble } = await import("../src/ai-bubble.vue");
22
+ describe("YhAiBubble SSR", () => {
23
+ it("should render to string on server", async () => {
24
+ const html = await renderToString(h(AiBubble, { content: "SSR hello", role: "assistant" }));
25
+ expect(html).toContain("yh-ai-bubble");
26
+ expect(html).toContain("yh-ai-bubble--assistant");
27
+ });
28
+ it("should render user role on server", async () => {
29
+ const html = await renderToString(h(AiBubble, { content: "User msg", role: "user" }));
30
+ expect(html).toContain("yh-ai-bubble--user");
31
+ expect(html).toContain("yh-ai-bubble--placement-end");
32
+ });
33
+ it("should render time on server", async () => {
34
+ const html = await renderToString(
35
+ h(AiBubble, { content: "hi", time: "09:30", role: "assistant" })
36
+ );
37
+ expect(html).toContain("09:30");
38
+ expect(html).toContain("yh-ai-bubble__time");
39
+ });
40
+ it("should render loading state on server", async () => {
41
+ const html = await renderToString(h(AiBubble, { content: "", loading: true }));
42
+ expect(html).toContain("is-loading");
43
+ expect(html).toContain("yh-ai-bubble__typing-indicator");
44
+ });
45
+ it("should not render avatar for system role on server", async () => {
46
+ const html = await renderToString(h(AiBubble, { content: "sys", role: "system" }));
47
+ expect(html).not.toContain("yh-ai-bubble__avatar");
48
+ });
49
+ it("should render markdown class when markdown=true", async () => {
50
+ const html = await renderToString(h(AiBubble, { content: "hello", markdown: true }));
51
+ expect(html).toContain("yh-ai-bubble__markdown");
52
+ });
53
+ it("should render plain text class when markdown=false", async () => {
54
+ const html = await renderToString(h(AiBubble, { content: "plain", markdown: false }));
55
+ expect(html).toContain("yh-ai-bubble__text");
56
+ expect(html).toContain("plain");
57
+ });
58
+ });
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _testUtils = require("@vue/test-utils");
5
+ _vitest.vi.mock("markdown-it", async () => {
6
+ class MockMd {
7
+ inline = {
8
+ ruler: {
9
+ after: _vitest.vi.fn()
10
+ }
11
+ };
12
+ render(content) {
13
+ return `<p>${content}</p>`;
14
+ }
15
+ }
16
+ return {
17
+ default: MockMd
18
+ };
19
+ });
20
+ _vitest.vi.mock("highlight.js", () => ({
21
+ default: {
22
+ getLanguage: () => false,
23
+ highlight: _vitest.vi.fn()
24
+ }
25
+ }));
26
+ _vitest.vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
27
+ const {
28
+ default: AiBubble
29
+ } = await Promise.resolve().then(() => require("../src/ai-bubble.vue"));
30
+ (0, _vitest.describe)("YhAiBubble", () => {
31
+ (0, _vitest.beforeEach)(() => {
32
+ _vitest.vi.clearAllMocks();
33
+ });
34
+ (0, _vitest.afterEach)(() => {
35
+ _vitest.vi.restoreAllMocks();
36
+ });
37
+ (0, _vitest.it)("should render with base class", () => {
38
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
39
+ props: {
40
+ content: "hello",
41
+ role: "assistant"
42
+ }
43
+ });
44
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble").exists()).toBe(true);
45
+ });
46
+ (0, _vitest.it)("should apply role class for user", () => {
47
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
48
+ props: {
49
+ content: "hi",
50
+ role: "user"
51
+ }
52
+ });
53
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--user");
54
+ });
55
+ (0, _vitest.it)("should apply role class for assistant", () => {
56
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
57
+ props: {
58
+ content: "hi",
59
+ role: "assistant"
60
+ }
61
+ });
62
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--assistant");
63
+ });
64
+ (0, _vitest.it)("should not render avatar for system role", () => {
65
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
66
+ props: {
67
+ content: "sys msg",
68
+ role: "system"
69
+ }
70
+ });
71
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__avatar").exists()).toBe(false);
72
+ });
73
+ (0, _vitest.it)("should default placement to end for user role", () => {
74
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
75
+ props: {
76
+ content: "hi",
77
+ role: "user"
78
+ }
79
+ });
80
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--placement-end");
81
+ });
82
+ (0, _vitest.it)("should default placement to start for assistant role", () => {
83
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
84
+ props: {
85
+ content: "hi",
86
+ role: "assistant"
87
+ }
88
+ });
89
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--placement-start");
90
+ });
91
+ (0, _vitest.it)("should override placement via prop", () => {
92
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
93
+ props: {
94
+ content: "hi",
95
+ role: "user",
96
+ placement: "start"
97
+ }
98
+ });
99
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--placement-start");
100
+ });
101
+ (0, _vitest.it)("should apply shape class", () => {
102
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
103
+ props: {
104
+ content: "hi",
105
+ shape: "round"
106
+ }
107
+ });
108
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--shape-round");
109
+ });
110
+ (0, _vitest.it)("should apply variant class", () => {
111
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
112
+ props: {
113
+ content: "hi",
114
+ variant: "borderless"
115
+ }
116
+ });
117
+ (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-bubble--variant-borderless");
118
+ });
119
+ (0, _vitest.it)("should show loading indicator when loading=true and content is empty", () => {
120
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
121
+ props: {
122
+ loading: true,
123
+ content: ""
124
+ }
125
+ });
126
+ (0, _vitest.expect)(wrapper.classes()).toContain("is-loading");
127
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__typing-indicator").exists()).toBe(true);
128
+ });
129
+ (0, _vitest.it)("should not show typing indicator when content exists even if loading=true", () => {
130
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
131
+ props: {
132
+ loading: true,
133
+ content: "some text"
134
+ }
135
+ });
136
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__typing-indicator").exists()).toBe(false);
137
+ });
138
+ (0, _vitest.it)("should render plain text when markdown=false", () => {
139
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
140
+ props: {
141
+ content: "plain text",
142
+ markdown: false
143
+ }
144
+ });
145
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__text").text()).toBe("plain text");
146
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__markdown").exists()).toBe(false);
147
+ });
148
+ (0, _vitest.it)("should render markdown container when markdown=true", () => {
149
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
150
+ props: {
151
+ content: "hello",
152
+ markdown: true
153
+ }
154
+ });
155
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__markdown").exists()).toBe(true);
156
+ });
157
+ (0, _vitest.it)("should render time when provided", () => {
158
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
159
+ props: {
160
+ content: "hi",
161
+ time: "10:00"
162
+ }
163
+ });
164
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__time").text()).toBe("10:00");
165
+ });
166
+ (0, _vitest.it)("should not render header without time and header slot", () => {
167
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
168
+ props: {
169
+ content: "hi"
170
+ }
171
+ });
172
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__header").exists()).toBe(false);
173
+ });
174
+ (0, _vitest.it)("should apply is-typing class when typing=true", () => {
175
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
176
+ props: {
177
+ content: "hi",
178
+ typing: true
179
+ }
180
+ });
181
+ (0, _vitest.expect)(wrapper.classes()).toContain("is-typing");
182
+ });
183
+ (0, _vitest.it)("should render content via default slot", () => {
184
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
185
+ slots: {
186
+ default: '<span class="custom-content">Custom</span>'
187
+ }
188
+ });
189
+ (0, _vitest.expect)(wrapper.find(".custom-content").exists()).toBe(true);
190
+ });
191
+ (0, _vitest.it)("should render footer slot when provided", () => {
192
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
193
+ props: {
194
+ content: "hi"
195
+ },
196
+ slots: {
197
+ footer: '<div class="custom-footer">Actions</div>'
198
+ }
199
+ });
200
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__footer").exists()).toBe(true);
201
+ (0, _vitest.expect)(wrapper.find(".custom-footer").exists()).toBe(true);
202
+ });
203
+ (0, _vitest.it)("should render header slot when provided", () => {
204
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
205
+ props: {
206
+ content: "hi"
207
+ },
208
+ slots: {
209
+ header: '<span class="custom-header">Header</span>'
210
+ }
211
+ });
212
+ (0, _vitest.expect)(wrapper.find(".yh-ai-bubble__header").exists()).toBe(true);
213
+ (0, _vitest.expect)(wrapper.find(".custom-header").exists()).toBe(true);
214
+ });
215
+ (0, _vitest.it)("should render avatar slot when provided", () => {
216
+ const wrapper = (0, _testUtils.mount)(AiBubble, {
217
+ props: {
218
+ content: "hi",
219
+ role: "user"
220
+ },
221
+ slots: {
222
+ avatar: '<img class="custom-avatar" src="test.png" />'
223
+ }
224
+ });
225
+ (0, _vitest.expect)(wrapper.find(".custom-avatar").exists()).toBe(true);
226
+ });
227
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,123 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { mount } from "@vue/test-utils";
3
+ vi.mock("markdown-it", async () => {
4
+ class MockMd {
5
+ inline = {
6
+ ruler: {
7
+ after: vi.fn()
8
+ }
9
+ };
10
+ render(content) {
11
+ return `<p>${content}</p>`;
12
+ }
13
+ }
14
+ return { default: MockMd };
15
+ });
16
+ vi.mock("highlight.js", () => ({
17
+ default: { getLanguage: () => false, highlight: vi.fn() }
18
+ }));
19
+ vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
20
+ const { default: AiBubble } = await import("../src/ai-bubble.vue");
21
+ describe("YhAiBubble", () => {
22
+ beforeEach(() => {
23
+ vi.clearAllMocks();
24
+ });
25
+ afterEach(() => {
26
+ vi.restoreAllMocks();
27
+ });
28
+ it("should render with base class", () => {
29
+ const wrapper = mount(AiBubble, { props: { content: "hello", role: "assistant" } });
30
+ expect(wrapper.find(".yh-ai-bubble").exists()).toBe(true);
31
+ });
32
+ it("should apply role class for user", () => {
33
+ const wrapper = mount(AiBubble, { props: { content: "hi", role: "user" } });
34
+ expect(wrapper.classes()).toContain("yh-ai-bubble--user");
35
+ });
36
+ it("should apply role class for assistant", () => {
37
+ const wrapper = mount(AiBubble, { props: { content: "hi", role: "assistant" } });
38
+ expect(wrapper.classes()).toContain("yh-ai-bubble--assistant");
39
+ });
40
+ it("should not render avatar for system role", () => {
41
+ const wrapper = mount(AiBubble, { props: { content: "sys msg", role: "system" } });
42
+ expect(wrapper.find(".yh-ai-bubble__avatar").exists()).toBe(false);
43
+ });
44
+ it("should default placement to end for user role", () => {
45
+ const wrapper = mount(AiBubble, { props: { content: "hi", role: "user" } });
46
+ expect(wrapper.classes()).toContain("yh-ai-bubble--placement-end");
47
+ });
48
+ it("should default placement to start for assistant role", () => {
49
+ const wrapper = mount(AiBubble, { props: { content: "hi", role: "assistant" } });
50
+ expect(wrapper.classes()).toContain("yh-ai-bubble--placement-start");
51
+ });
52
+ it("should override placement via prop", () => {
53
+ const wrapper = mount(AiBubble, { props: { content: "hi", role: "user", placement: "start" } });
54
+ expect(wrapper.classes()).toContain("yh-ai-bubble--placement-start");
55
+ });
56
+ it("should apply shape class", () => {
57
+ const wrapper = mount(AiBubble, { props: { content: "hi", shape: "round" } });
58
+ expect(wrapper.classes()).toContain("yh-ai-bubble--shape-round");
59
+ });
60
+ it("should apply variant class", () => {
61
+ const wrapper = mount(AiBubble, { props: { content: "hi", variant: "borderless" } });
62
+ expect(wrapper.classes()).toContain("yh-ai-bubble--variant-borderless");
63
+ });
64
+ it("should show loading indicator when loading=true and content is empty", () => {
65
+ const wrapper = mount(AiBubble, { props: { loading: true, content: "" } });
66
+ expect(wrapper.classes()).toContain("is-loading");
67
+ expect(wrapper.find(".yh-ai-bubble__typing-indicator").exists()).toBe(true);
68
+ });
69
+ it("should not show typing indicator when content exists even if loading=true", () => {
70
+ const wrapper = mount(AiBubble, { props: { loading: true, content: "some text" } });
71
+ expect(wrapper.find(".yh-ai-bubble__typing-indicator").exists()).toBe(false);
72
+ });
73
+ it("should render plain text when markdown=false", () => {
74
+ const wrapper = mount(AiBubble, { props: { content: "plain text", markdown: false } });
75
+ expect(wrapper.find(".yh-ai-bubble__text").text()).toBe("plain text");
76
+ expect(wrapper.find(".yh-ai-bubble__markdown").exists()).toBe(false);
77
+ });
78
+ it("should render markdown container when markdown=true", () => {
79
+ const wrapper = mount(AiBubble, { props: { content: "hello", markdown: true } });
80
+ expect(wrapper.find(".yh-ai-bubble__markdown").exists()).toBe(true);
81
+ });
82
+ it("should render time when provided", () => {
83
+ const wrapper = mount(AiBubble, { props: { content: "hi", time: "10:00" } });
84
+ expect(wrapper.find(".yh-ai-bubble__time").text()).toBe("10:00");
85
+ });
86
+ it("should not render header without time and header slot", () => {
87
+ const wrapper = mount(AiBubble, { props: { content: "hi" } });
88
+ expect(wrapper.find(".yh-ai-bubble__header").exists()).toBe(false);
89
+ });
90
+ it("should apply is-typing class when typing=true", () => {
91
+ const wrapper = mount(AiBubble, { props: { content: "hi", typing: true } });
92
+ expect(wrapper.classes()).toContain("is-typing");
93
+ });
94
+ it("should render content via default slot", () => {
95
+ const wrapper = mount(AiBubble, {
96
+ slots: { default: '<span class="custom-content">Custom</span>' }
97
+ });
98
+ expect(wrapper.find(".custom-content").exists()).toBe(true);
99
+ });
100
+ it("should render footer slot when provided", () => {
101
+ const wrapper = mount(AiBubble, {
102
+ props: { content: "hi" },
103
+ slots: { footer: '<div class="custom-footer">Actions</div>' }
104
+ });
105
+ expect(wrapper.find(".yh-ai-bubble__footer").exists()).toBe(true);
106
+ expect(wrapper.find(".custom-footer").exists()).toBe(true);
107
+ });
108
+ it("should render header slot when provided", () => {
109
+ const wrapper = mount(AiBubble, {
110
+ props: { content: "hi" },
111
+ slots: { header: '<span class="custom-header">Header</span>' }
112
+ });
113
+ expect(wrapper.find(".yh-ai-bubble__header").exists()).toBe(true);
114
+ expect(wrapper.find(".custom-header").exists()).toBe(true);
115
+ });
116
+ it("should render avatar slot when provided", () => {
117
+ const wrapper = mount(AiBubble, {
118
+ props: { content: "hi", role: "user" },
119
+ slots: { avatar: '<img class="custom-avatar" src="test.png" />' }
120
+ });
121
+ expect(wrapper.find(".custom-avatar").exists()).toBe(true);
122
+ });
123
+ });
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ YhAiBubble: true
8
+ };
9
+ module.exports = exports.YhAiBubble = void 0;
10
+ var _utils = require("@yh-ui/utils");
11
+ var _aiBubble = _interopRequireDefault(require("./src/ai-bubble.vue"));
12
+ var _aiBubble2 = require("./src/ai-bubble.cjs");
13
+ Object.keys(_aiBubble2).forEach(function (key) {
14
+ if (key === "default" || key === "__esModule") return;
15
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
16
+ if (key in exports && exports[key] === _aiBubble2[key]) return;
17
+ Object.defineProperty(exports, key, {
18
+ enumerable: true,
19
+ get: function () {
20
+ return _aiBubble2[key];
21
+ }
22
+ });
23
+ });
24
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
+ const YhAiBubble = exports.YhAiBubble = (0, _utils.withInstall)(_aiBubble.default);
26
+ module.exports = YhAiBubble;
@@ -0,0 +1,3 @@
1
+ export declare const YhAiBubble: any;
2
+ export default YhAiBubble;
3
+ export * from './src/ai-bubble';
@@ -0,0 +1,5 @@
1
+ import { withInstall } from "@yh-ui/utils";
2
+ import AiBubble from "./src/ai-bubble.vue";
3
+ export const YhAiBubble = withInstall(AiBubble);
4
+ export default YhAiBubble;
5
+ export * from "./src/ai-bubble.mjs";
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.aiBubbleProps = void 0;
7
+ const aiBubbleProps = exports.aiBubbleProps = {
8
+ /**
9
+ * 气泡内容,支持 Markdown
10
+ */
11
+ content: {
12
+ type: String,
13
+ default: ""
14
+ },
15
+ /**
16
+ * 是否开启 Markdown 解析
17
+ */
18
+ markdown: {
19
+ type: Boolean,
20
+ default: true
21
+ },
22
+ /**
23
+ * 角色:用户、助手或系统
24
+ */
25
+ role: {
26
+ type: String,
27
+ default: "assistant"
28
+ },
29
+ /**
30
+ * 气泡位置
31
+ */
32
+ placement: {
33
+ type: String
34
+ },
35
+ /**
36
+ * 气泡形状
37
+ */
38
+ shape: {
39
+ type: String,
40
+ default: "round"
41
+ },
42
+ /**
43
+ * 视觉变体
44
+ */
45
+ variant: {
46
+ type: String,
47
+ default: "filled"
48
+ },
49
+ /**
50
+ * 显示时间
51
+ */
52
+ time: String,
53
+ /**
54
+ * 头像地址
55
+ */
56
+ avatar: String,
57
+ /**
58
+ * 是否在加载中
59
+ */
60
+ loading: Boolean,
61
+ /**
62
+ * 打字机特效
63
+ */
64
+ typing: Boolean,
65
+ /**
66
+ * 引用来源列表 (Citations)
67
+ */
68
+ citations: {
69
+ type: Array,
70
+ default: () => []
71
+ },
72
+ /**
73
+ * 多模态内容 (图片、音频、文件等)
74
+ */
75
+ multimodal: {
76
+ type: Array,
77
+ default: () => []
78
+ },
79
+ /**
80
+ * 主题覆盖变量
81
+ */
82
+ themeOverrides: {
83
+ type: Object,
84
+ default: void 0
85
+ }
86
+ };