@yh-ui/components 0.1.7 → 0.1.12

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 (387) hide show
  1. package/README.md +28 -0
  2. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.cjs +55 -0
  3. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.d.ts +1 -0
  4. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.mjs +39 -0
  5. package/dist/ai-action-group/__tests__/ai-action-group.test.cjs +149 -0
  6. package/dist/ai-action-group/__tests__/ai-action-group.test.d.ts +1 -0
  7. package/dist/ai-action-group/__tests__/ai-action-group.test.mjs +104 -0
  8. package/dist/ai-action-group/index.cjs +26 -0
  9. package/dist/ai-action-group/index.d.ts +3 -0
  10. package/dist/ai-action-group/index.mjs +5 -0
  11. package/dist/ai-action-group/src/ai-action-group.cjs +50 -0
  12. package/dist/ai-action-group/src/ai-action-group.css +517 -0
  13. package/dist/ai-action-group/src/ai-action-group.d.ts +55 -0
  14. package/dist/ai-action-group/src/ai-action-group.d.vue.ts +40 -0
  15. package/dist/ai-action-group/src/ai-action-group.mjs +44 -0
  16. package/dist/ai-action-group/src/ai-action-group.vue +602 -0
  17. package/dist/ai-action-group/src/ai-action-group.vue.d.ts +40 -0
  18. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.cjs +61 -0
  19. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.d.ts +1 -0
  20. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.mjs +65 -0
  21. package/dist/ai-agent-card/__tests__/ai-agent-card.test.cjs +70 -0
  22. package/dist/ai-agent-card/__tests__/ai-agent-card.test.d.ts +1 -0
  23. package/dist/ai-agent-card/__tests__/ai-agent-card.test.mjs +64 -0
  24. package/dist/ai-agent-card/index.cjs +26 -0
  25. package/dist/ai-agent-card/index.d.ts +3 -0
  26. package/dist/ai-agent-card/index.mjs +5 -0
  27. package/dist/ai-agent-card/src/ai-agent-card.cjs +74 -0
  28. package/dist/ai-agent-card/src/ai-agent-card.css +859 -0
  29. package/dist/ai-agent-card/src/ai-agent-card.d.ts +122 -0
  30. package/dist/ai-agent-card/src/ai-agent-card.d.vue.ts +62 -0
  31. package/dist/ai-agent-card/src/ai-agent-card.mjs +68 -0
  32. package/dist/ai-agent-card/src/ai-agent-card.vue +1029 -0
  33. package/dist/ai-agent-card/src/ai-agent-card.vue.d.ts +62 -0
  34. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.cjs +73 -0
  35. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.d.ts +1 -0
  36. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.mjs +68 -0
  37. package/dist/ai-artifacts/__tests__/ai-artifacts.test.cjs +128 -0
  38. package/dist/ai-artifacts/__tests__/ai-artifacts.test.d.ts +1 -0
  39. package/dist/ai-artifacts/__tests__/ai-artifacts.test.mjs +109 -0
  40. package/dist/ai-artifacts/index.cjs +26 -0
  41. package/dist/ai-artifacts/index.d.ts +3 -0
  42. package/dist/ai-artifacts/index.mjs +5 -0
  43. package/dist/ai-artifacts/src/ai-artifacts.cjs +55 -0
  44. package/dist/ai-artifacts/src/ai-artifacts.css +633 -0
  45. package/dist/ai-artifacts/src/ai-artifacts.d.ts +93 -0
  46. package/dist/ai-artifacts/src/ai-artifacts.d.vue.ts +33 -0
  47. package/dist/ai-artifacts/src/ai-artifacts.mjs +49 -0
  48. package/dist/ai-artifacts/src/ai-artifacts.vue +803 -0
  49. package/dist/ai-artifacts/src/ai-artifacts.vue.d.ts +33 -0
  50. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.cjs +87 -0
  51. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.d.ts +1 -0
  52. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.mjs +58 -0
  53. package/dist/ai-bubble/__tests__/ai-bubble.test.cjs +227 -0
  54. package/dist/ai-bubble/__tests__/ai-bubble.test.d.ts +1 -0
  55. package/dist/ai-bubble/__tests__/ai-bubble.test.mjs +123 -0
  56. package/dist/ai-bubble/index.cjs +26 -0
  57. package/dist/ai-bubble/index.d.ts +3 -0
  58. package/dist/ai-bubble/index.mjs +5 -0
  59. package/dist/ai-bubble/src/ai-bubble.cjs +86 -0
  60. package/dist/ai-bubble/src/ai-bubble.css +932 -0
  61. package/dist/ai-bubble/src/ai-bubble.d.ts +126 -0
  62. package/dist/ai-bubble/src/ai-bubble.d.vue.ts +110 -0
  63. package/dist/ai-bubble/src/ai-bubble.mjs +80 -0
  64. package/dist/ai-bubble/src/ai-bubble.vue +1300 -0
  65. package/dist/ai-bubble/src/ai-bubble.vue.d.ts +110 -0
  66. package/dist/ai-chat/__tests__/ai-chat.ssr.test.cjs +82 -0
  67. package/dist/ai-chat/__tests__/ai-chat.ssr.test.d.ts +1 -0
  68. package/dist/ai-chat/__tests__/ai-chat.ssr.test.mjs +69 -0
  69. package/dist/ai-chat/__tests__/ai-chat.test.cjs +169 -0
  70. package/dist/ai-chat/__tests__/ai-chat.test.d.ts +1 -0
  71. package/dist/ai-chat/__tests__/ai-chat.test.mjs +121 -0
  72. package/dist/ai-chat/index.cjs +26 -0
  73. package/dist/ai-chat/index.d.ts +3 -0
  74. package/dist/ai-chat/index.mjs +5 -0
  75. package/dist/ai-chat/src/ai-chat.cjs +41 -0
  76. package/dist/ai-chat/src/ai-chat.css +503 -0
  77. package/dist/ai-chat/src/ai-chat.d.ts +57 -0
  78. package/dist/ai-chat/src/ai-chat.d.vue.ts +43 -0
  79. package/dist/ai-chat/src/ai-chat.mjs +35 -0
  80. package/dist/ai-chat/src/ai-chat.vue +606 -0
  81. package/dist/ai-chat/src/ai-chat.vue.d.ts +43 -0
  82. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.cjs +66 -0
  83. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.d.ts +1 -0
  84. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.mjs +48 -0
  85. package/dist/ai-code-block/__tests__/ai-code-block.test.cjs +174 -0
  86. package/dist/ai-code-block/__tests__/ai-code-block.test.d.ts +1 -0
  87. package/dist/ai-code-block/__tests__/ai-code-block.test.mjs +108 -0
  88. package/dist/ai-code-block/index.cjs +26 -0
  89. package/dist/ai-code-block/index.d.ts +3 -0
  90. package/dist/ai-code-block/index.mjs +5 -0
  91. package/dist/ai-code-block/src/ai-code-block.cjs +79 -0
  92. package/dist/ai-code-block/src/ai-code-block.css +589 -0
  93. package/dist/ai-code-block/src/ai-code-block.d.ts +76 -0
  94. package/dist/ai-code-block/src/ai-code-block.d.vue.ts +63 -0
  95. package/dist/ai-code-block/src/ai-code-block.mjs +73 -0
  96. package/dist/ai-code-block/src/ai-code-block.vue +706 -0
  97. package/dist/ai-code-block/src/ai-code-block.vue.d.ts +63 -0
  98. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.cjs +50 -0
  99. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.d.ts +1 -0
  100. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.mjs +42 -0
  101. package/dist/ai-conversations/__tests__/ai-conversations.test.cjs +67 -0
  102. package/dist/ai-conversations/__tests__/ai-conversations.test.d.ts +1 -0
  103. package/dist/ai-conversations/__tests__/ai-conversations.test.mjs +51 -0
  104. package/dist/ai-conversations/index.cjs +26 -0
  105. package/dist/ai-conversations/index.d.ts +3 -0
  106. package/dist/ai-conversations/index.mjs +5 -0
  107. package/dist/ai-conversations/src/ai-conversations.cjs +69 -0
  108. package/dist/ai-conversations/src/ai-conversations.css +679 -0
  109. package/dist/ai-conversations/src/ai-conversations.d.ts +67 -0
  110. package/dist/ai-conversations/src/ai-conversations.d.vue.ts +52 -0
  111. package/dist/ai-conversations/src/ai-conversations.mjs +63 -0
  112. package/dist/ai-conversations/src/ai-conversations.vue +949 -0
  113. package/dist/ai-conversations/src/ai-conversations.vue.d.ts +52 -0
  114. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.cjs +62 -0
  115. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.d.ts +1 -0
  116. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.mjs +50 -0
  117. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.cjs +315 -0
  118. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.d.ts +1 -0
  119. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.mjs +226 -0
  120. package/dist/ai-editor-sender/index.cjs +26 -0
  121. package/dist/ai-editor-sender/index.d.ts +3 -0
  122. package/dist/ai-editor-sender/index.mjs +5 -0
  123. package/dist/ai-editor-sender/src/ai-editor-sender.cjs +66 -0
  124. package/dist/ai-editor-sender/src/ai-editor-sender.css +566 -0
  125. package/dist/ai-editor-sender/src/ai-editor-sender.d.ts +70 -0
  126. package/dist/ai-editor-sender/src/ai-editor-sender.d.vue.ts +70 -0
  127. package/dist/ai-editor-sender/src/ai-editor-sender.mjs +60 -0
  128. package/dist/ai-editor-sender/src/ai-editor-sender.vue +713 -0
  129. package/dist/ai-editor-sender/src/ai-editor-sender.vue.d.ts +70 -0
  130. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.cjs +49 -0
  131. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.d.ts +1 -0
  132. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.mjs +41 -0
  133. package/dist/ai-prompts/__tests__/ai-prompts.test.cjs +54 -0
  134. package/dist/ai-prompts/__tests__/ai-prompts.test.d.ts +1 -0
  135. package/dist/ai-prompts/__tests__/ai-prompts.test.mjs +38 -0
  136. package/dist/ai-prompts/index.cjs +26 -0
  137. package/dist/ai-prompts/index.d.ts +3 -0
  138. package/dist/ai-prompts/index.mjs +5 -0
  139. package/dist/ai-prompts/src/ai-prompts.cjs +42 -0
  140. package/dist/ai-prompts/src/ai-prompts.css +572 -0
  141. package/dist/ai-prompts/src/ai-prompts.d.ts +45 -0
  142. package/dist/ai-prompts/src/ai-prompts.d.vue.ts +44 -0
  143. package/dist/ai-prompts/src/ai-prompts.mjs +36 -0
  144. package/dist/ai-prompts/src/ai-prompts.vue +646 -0
  145. package/dist/ai-prompts/src/ai-prompts.vue.d.ts +44 -0
  146. package/dist/ai-provider/__tests__/ai-provider.ssr.test.cjs +33 -0
  147. package/dist/ai-provider/__tests__/ai-provider.ssr.test.d.ts +1 -0
  148. package/dist/ai-provider/__tests__/ai-provider.ssr.test.mjs +34 -0
  149. package/dist/ai-provider/__tests__/ai-provider.test.cjs +38 -0
  150. package/dist/ai-provider/__tests__/ai-provider.test.d.ts +1 -0
  151. package/dist/ai-provider/__tests__/ai-provider.test.mjs +33 -0
  152. package/dist/ai-provider/index.cjs +38 -0
  153. package/dist/ai-provider/index.d.ts +4 -0
  154. package/dist/ai-provider/index.mjs +6 -0
  155. package/dist/ai-provider/src/ai-provider.cjs +7 -0
  156. package/dist/ai-provider/src/ai-provider.d.ts +88 -0
  157. package/dist/ai-provider/src/ai-provider.d.vue.ts +48 -0
  158. package/dist/ai-provider/src/ai-provider.mjs +1 -0
  159. package/dist/ai-provider/src/ai-provider.vue +24 -0
  160. package/dist/ai-provider/src/ai-provider.vue.d.ts +48 -0
  161. package/dist/ai-provider/src/use-ai-provider.cjs +11 -0
  162. package/dist/ai-provider/src/use-ai-provider.d.ts +10 -0
  163. package/dist/ai-provider/src/use-ai-provider.mjs +5 -0
  164. package/dist/ai-sender/__tests__/ai-sender.ssr.test.cjs +46 -0
  165. package/dist/ai-sender/__tests__/ai-sender.ssr.test.d.ts +1 -0
  166. package/dist/ai-sender/__tests__/ai-sender.ssr.test.mjs +37 -0
  167. package/dist/ai-sender/__tests__/ai-sender.test.cjs +388 -0
  168. package/dist/ai-sender/__tests__/ai-sender.test.d.ts +1 -0
  169. package/dist/ai-sender/__tests__/ai-sender.test.mjs +248 -0
  170. package/dist/ai-sender/index.cjs +26 -0
  171. package/dist/ai-sender/index.d.ts +3 -0
  172. package/dist/ai-sender/index.mjs +5 -0
  173. package/dist/ai-sender/src/ai-sender.cjs +91 -0
  174. package/dist/ai-sender/src/ai-sender.css +754 -0
  175. package/dist/ai-sender/src/ai-sender.d.ts +140 -0
  176. package/dist/ai-sender/src/ai-sender.d.vue.ts +69 -0
  177. package/dist/ai-sender/src/ai-sender.mjs +85 -0
  178. package/dist/ai-sender/src/ai-sender.vue +1032 -0
  179. package/dist/ai-sender/src/ai-sender.vue.d.ts +69 -0
  180. package/dist/ai-sources/__tests__/ai-sources.ssr.test.cjs +72 -0
  181. package/dist/ai-sources/__tests__/ai-sources.ssr.test.d.ts +1 -0
  182. package/dist/ai-sources/__tests__/ai-sources.ssr.test.mjs +82 -0
  183. package/dist/ai-sources/__tests__/ai-sources.test.cjs +93 -0
  184. package/dist/ai-sources/__tests__/ai-sources.test.d.ts +1 -0
  185. package/dist/ai-sources/__tests__/ai-sources.test.mjs +89 -0
  186. package/dist/ai-sources/index.cjs +26 -0
  187. package/dist/ai-sources/index.d.ts +3 -0
  188. package/dist/ai-sources/index.mjs +5 -0
  189. package/dist/ai-sources/src/ai-sources.cjs +59 -0
  190. package/dist/ai-sources/src/ai-sources.css +830 -0
  191. package/dist/ai-sources/src/ai-sources.d.ts +79 -0
  192. package/dist/ai-sources/src/ai-sources.d.vue.ts +45 -0
  193. package/dist/ai-sources/src/ai-sources.mjs +53 -0
  194. package/dist/ai-sources/src/ai-sources.vue +1109 -0
  195. package/dist/ai-sources/src/ai-sources.vue.d.ts +45 -0
  196. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.cjs +56 -0
  197. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.d.ts +1 -0
  198. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.mjs +42 -0
  199. package/dist/ai-thinking/__tests__/ai-thinking.test.cjs +151 -0
  200. package/dist/ai-thinking/__tests__/ai-thinking.test.d.ts +1 -0
  201. package/dist/ai-thinking/__tests__/ai-thinking.test.mjs +96 -0
  202. package/dist/ai-thinking/index.cjs +26 -0
  203. package/dist/ai-thinking/index.d.ts +3 -0
  204. package/dist/ai-thinking/index.mjs +5 -0
  205. package/dist/ai-thinking/src/ai-thinking.cjs +44 -0
  206. package/dist/ai-thinking/src/ai-thinking.css +543 -0
  207. package/dist/ai-thinking/src/ai-thinking.d.ts +42 -0
  208. package/dist/ai-thinking/src/ai-thinking.d.vue.ts +33 -0
  209. package/dist/ai-thinking/src/ai-thinking.mjs +38 -0
  210. package/dist/ai-thinking/src/ai-thinking.vue +631 -0
  211. package/dist/ai-thinking/src/ai-thinking.vue.d.ts +33 -0
  212. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.cjs +83 -0
  213. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.d.ts +1 -0
  214. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.mjs +52 -0
  215. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.cjs +204 -0
  216. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.d.ts +1 -0
  217. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.mjs +134 -0
  218. package/dist/ai-thought-chain/index.cjs +26 -0
  219. package/dist/ai-thought-chain/index.d.ts +3 -0
  220. package/dist/ai-thought-chain/index.mjs +5 -0
  221. package/dist/ai-thought-chain/src/ai-thought-chain.cjs +68 -0
  222. package/dist/ai-thought-chain/src/ai-thought-chain.css +668 -0
  223. package/dist/ai-thought-chain/src/ai-thought-chain.d.ts +82 -0
  224. package/dist/ai-thought-chain/src/ai-thought-chain.d.vue.ts +83 -0
  225. package/dist/ai-thought-chain/src/ai-thought-chain.mjs +62 -0
  226. package/dist/ai-thought-chain/src/ai-thought-chain.vue +813 -0
  227. package/dist/ai-thought-chain/src/ai-thought-chain.vue.d.ts +83 -0
  228. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.cjs +32 -0
  229. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.d.ts +1 -0
  230. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.mjs +25 -0
  231. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.cjs +113 -0
  232. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.d.ts +1 -0
  233. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.mjs +93 -0
  234. package/dist/ai-voice-trigger/index.cjs +26 -0
  235. package/dist/ai-voice-trigger/index.d.ts +3 -0
  236. package/dist/ai-voice-trigger/index.mjs +5 -0
  237. package/dist/ai-voice-trigger/src/ai-voice-trigger.cjs +35 -0
  238. package/dist/ai-voice-trigger/src/ai-voice-trigger.css +603 -0
  239. package/dist/ai-voice-trigger/src/ai-voice-trigger.d.ts +37 -0
  240. package/dist/ai-voice-trigger/src/ai-voice-trigger.d.vue.ts +29 -0
  241. package/dist/ai-voice-trigger/src/ai-voice-trigger.mjs +29 -0
  242. package/dist/ai-voice-trigger/src/ai-voice-trigger.vue +708 -0
  243. package/dist/ai-voice-trigger/src/ai-voice-trigger.vue.d.ts +29 -0
  244. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.cjs +57 -0
  245. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.d.ts +1 -0
  246. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.mjs +39 -0
  247. package/dist/ai-welcome/__tests__/ai-welcome.test.cjs +169 -0
  248. package/dist/ai-welcome/__tests__/ai-welcome.test.d.ts +1 -0
  249. package/dist/ai-welcome/__tests__/ai-welcome.test.mjs +113 -0
  250. package/dist/ai-welcome/index.cjs +26 -0
  251. package/dist/ai-welcome/index.d.ts +3 -0
  252. package/dist/ai-welcome/index.mjs +5 -0
  253. package/dist/ai-welcome/src/ai-welcome.cjs +56 -0
  254. package/dist/ai-welcome/src/ai-welcome.css +591 -0
  255. package/dist/ai-welcome/src/ai-welcome.d.ts +59 -0
  256. package/dist/ai-welcome/src/ai-welcome.d.vue.ts +51 -0
  257. package/dist/ai-welcome/src/ai-welcome.mjs +50 -0
  258. package/dist/ai-welcome/src/ai-welcome.vue +655 -0
  259. package/dist/ai-welcome/src/ai-welcome.vue.d.ts +51 -0
  260. package/dist/alert/src/alert.d.vue.ts +5 -5
  261. package/dist/alert/src/alert.vue.d.ts +5 -5
  262. package/dist/autocomplete/src/autocomplete.d.vue.ts +2 -2
  263. package/dist/autocomplete/src/autocomplete.vue.d.ts +2 -2
  264. package/dist/avatar/index.d.ts +39 -1
  265. package/dist/back-top/src/back-top.d.vue.ts +1 -1
  266. package/dist/back-top/src/back-top.vue.d.ts +1 -1
  267. package/dist/button/index.d.ts +3 -3
  268. package/dist/button/src/button.css +3 -3
  269. package/dist/button/src/button.d.vue.ts +1 -1
  270. package/dist/button/src/button.vue +3 -3
  271. package/dist/button/src/button.vue.d.ts +1 -1
  272. package/dist/calendar/src/calendar.d.vue.ts +2 -2
  273. package/dist/calendar/src/calendar.vue.d.ts +2 -2
  274. package/dist/cascader/src/cascader-panel.d.vue.ts +2 -2
  275. package/dist/cascader/src/cascader-panel.vue.d.ts +2 -2
  276. package/dist/checkbox/index.d.ts +3 -3
  277. package/dist/checkbox/src/checkbox-group.d.vue.ts +1 -1
  278. package/dist/checkbox/src/checkbox-group.vue +13 -1
  279. package/dist/checkbox/src/checkbox-group.vue.d.ts +1 -1
  280. package/dist/checkbox/src/checkbox.d.ts +12 -0
  281. package/dist/col/src/col.d.vue.ts +4 -4
  282. package/dist/col/src/col.vue.d.ts +4 -4
  283. package/dist/color-picker/src/color-picker.d.vue.ts +1 -1
  284. package/dist/color-picker/src/color-picker.vue.d.ts +1 -1
  285. package/dist/component.d.ts +63 -0
  286. package/dist/date-picker/src/date-picker.d.vue.ts +4 -4
  287. package/dist/date-picker/src/date-picker.vue.d.ts +4 -4
  288. package/dist/descriptions/src/description-item.d.vue.ts +1 -1
  289. package/dist/descriptions/src/description-item.vue.d.ts +1 -1
  290. package/dist/dialog/src/dialog.d.vue.ts +6 -6
  291. package/dist/dialog/src/dialog.vue.d.ts +6 -6
  292. package/dist/drawer/src/drawer.d.vue.ts +3 -3
  293. package/dist/drawer/src/drawer.vue.d.ts +3 -3
  294. package/dist/dropdown/src/dropdown-item.d.vue.ts +1 -1
  295. package/dist/dropdown/src/dropdown-item.vue.d.ts +1 -1
  296. package/dist/dropdown/src/dropdown.d.vue.ts +8 -8
  297. package/dist/dropdown/src/dropdown.vue.d.ts +8 -8
  298. package/dist/form/__tests__/form-schema.test.cjs +477 -24
  299. package/dist/form/__tests__/form-schema.test.mjs +277 -57
  300. package/dist/form/index.cjs +12 -0
  301. package/dist/form/index.d.ts +1 -2
  302. package/dist/form/index.mjs +1 -0
  303. package/dist/form/src/form-item.d.vue.ts +2 -1
  304. package/dist/form/src/form-item.vue +3 -1
  305. package/dist/form/src/form-item.vue.d.ts +2 -1
  306. package/dist/form/src/form-schema.cjs +2 -1
  307. package/dist/form/src/form-schema.d.ts +124 -19
  308. package/dist/form/src/form-schema.d.vue.ts +69 -19
  309. package/dist/form/src/form-schema.mjs +2 -1
  310. package/dist/form/src/form-schema.vue +522 -160
  311. package/dist/form/src/form-schema.vue.d.ts +69 -19
  312. package/dist/form/src/form.cjs +7 -0
  313. package/dist/form/src/form.d.ts +20 -0
  314. package/dist/form/src/form.d.vue.ts +10 -1
  315. package/dist/form/src/form.mjs +7 -0
  316. package/dist/form/src/form.vue +22 -10
  317. package/dist/form/src/form.vue.d.ts +10 -1
  318. package/dist/grid/src/grid.d.vue.ts +1 -1
  319. package/dist/grid/src/grid.vue.d.ts +1 -1
  320. package/dist/icon/src/icons/index.cjs +122 -2
  321. package/dist/icon/src/icons/index.d.ts +24 -0
  322. package/dist/icon/src/icons/index.mjs +145 -1
  323. package/dist/image/index.d.ts +356 -2
  324. package/dist/image/src/image-viewer.d.vue.ts +3 -3
  325. package/dist/image/src/image-viewer.vue.d.ts +3 -3
  326. package/dist/image/src/image.d.vue.ts +4 -4
  327. package/dist/image/src/image.vue.d.ts +4 -4
  328. package/dist/index.cjs +193 -1
  329. package/dist/index.d.ts +16 -0
  330. package/dist/index.mjs +49 -1
  331. package/dist/input/index.d.ts +18 -18
  332. package/dist/input/src/input.d.vue.ts +6 -6
  333. package/dist/input/src/input.vue.d.ts +6 -6
  334. package/dist/input-tag/src/input-tag.d.vue.ts +2 -2
  335. package/dist/input-tag/src/input-tag.vue.d.ts +2 -2
  336. package/dist/mention/src/mention.d.vue.ts +8 -8
  337. package/dist/mention/src/mention.vue.d.ts +8 -8
  338. package/dist/menu/src/menu.d.vue.ts +4 -4
  339. package/dist/menu/src/menu.vue.d.ts +4 -4
  340. package/dist/message/src/message.d.vue.ts +1 -1
  341. package/dist/message/src/message.vue.d.ts +1 -1
  342. package/dist/popconfirm/src/popconfirm.d.vue.ts +5 -5
  343. package/dist/popconfirm/src/popconfirm.vue.d.ts +5 -5
  344. package/dist/popover/src/popover.d.vue.ts +4 -4
  345. package/dist/popover/src/popover.vue.d.ts +4 -4
  346. package/dist/progress/src/progress.d.vue.ts +1 -1
  347. package/dist/progress/src/progress.vue.d.ts +1 -1
  348. package/dist/radio/src/radio-group.d.vue.ts +1 -1
  349. package/dist/radio/src/radio-group.vue +25 -4
  350. package/dist/radio/src/radio-group.vue.d.ts +1 -1
  351. package/dist/radio/src/radio.d.ts +12 -0
  352. package/dist/rate/src/rate.d.vue.ts +1 -1
  353. package/dist/rate/src/rate.vue.d.ts +1 -1
  354. package/dist/select/src/select.d.vue.ts +1 -1
  355. package/dist/select/src/select.vue.d.ts +1 -1
  356. package/dist/skeleton/src/skeleton.d.vue.ts +1 -1
  357. package/dist/skeleton/src/skeleton.vue.d.ts +1 -1
  358. package/dist/slider/src/slider.d.vue.ts +1 -1
  359. package/dist/slider/src/slider.vue.d.ts +1 -1
  360. package/dist/steps/src/step.d.vue.ts +1 -1
  361. package/dist/steps/src/step.vue.d.ts +1 -1
  362. package/dist/switch/src/switch.d.vue.ts +2 -2
  363. package/dist/switch/src/switch.vue.d.ts +2 -2
  364. package/dist/table/__tests__/table.perf.test.cjs +2 -2
  365. package/dist/table/__tests__/table.perf.test.mjs +2 -2
  366. package/dist/table/__tests__/table.test.cjs +18 -0
  367. package/dist/table/__tests__/table.test.mjs +18 -0
  368. package/dist/table/__tests__/use-table-import.test.cjs +6 -0
  369. package/dist/table/__tests__/use-table-import.test.mjs +8 -1
  370. package/dist/table/src/table-column.d.vue.ts +1 -1
  371. package/dist/table/src/table-column.vue.d.ts +1 -1
  372. package/dist/table/src/table.d.vue.ts +1 -1
  373. package/dist/table/src/table.vue.d.ts +1 -1
  374. package/dist/tabs/src/tab-pane.d.vue.ts +1 -1
  375. package/dist/tabs/src/tab-pane.vue.d.ts +1 -1
  376. package/dist/tabs/src/tabs.d.vue.ts +2 -2
  377. package/dist/tabs/src/tabs.vue.d.ts +2 -2
  378. package/dist/tooltip/index.d.ts +7 -7
  379. package/dist/tooltip/src/tooltip.d.vue.ts +7 -7
  380. package/dist/tooltip/src/tooltip.vue.d.ts +7 -7
  381. package/dist/tree/src/tree.d.vue.ts +1 -1
  382. package/dist/tree/src/tree.vue.d.ts +1 -1
  383. package/dist/tree-select/src/tree-select.d.vue.ts +3 -3
  384. package/dist/tree-select/src/tree-select.vue.d.ts +3 -3
  385. package/dist/upload/src/upload.d.vue.ts +1 -1
  386. package/dist/upload/src/upload.vue.d.ts +1 -1
  387. package/package.json +8 -5
@@ -0,0 +1,52 @@
1
+ import type { AiConversation } from '@yh-ui/hooks';
2
+ declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {
3
+ label: any;
4
+ }, __VLS_11: {}, __VLS_13: {}, __VLS_15: {};
5
+ type __VLS_Slots = {} & {
6
+ 'add-icon'?: (props: typeof __VLS_1) => any;
7
+ } & {
8
+ 'add-text'?: (props: typeof __VLS_3) => any;
9
+ } & {
10
+ 'group-label'?: (props: typeof __VLS_5) => any;
11
+ } & {
12
+ 'edit-icon'?: (props: typeof __VLS_11) => any;
13
+ } & {
14
+ 'delete-icon'?: (props: typeof __VLS_13) => any;
15
+ } & {
16
+ empty?: (props: typeof __VLS_15) => any;
17
+ };
18
+ declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
19
+ data: {
20
+ type: import("vue").PropType<AiConversation[]>;
21
+ default: () => never[];
22
+ };
23
+ activeId: {
24
+ type: StringConstructor;
25
+ default: string;
26
+ };
27
+ loading: {
28
+ type: BooleanConstructor;
29
+ default: boolean;
30
+ };
31
+ themeOverrides: {
32
+ type: import("vue").PropType<import("@yh-ui/theme").AiConversationsThemeVars>;
33
+ default: undefined;
34
+ };
35
+ grouped: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
39
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {
40
+ themeOverrides: import("@yh-ui/theme").AiConversationsThemeVars;
41
+ data: AiConversation[];
42
+ loading: boolean;
43
+ activeId: string;
44
+ grouped: boolean;
45
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
46
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
47
+ export default _default;
48
+ type __VLS_WithSlots<T, S> = T & {
49
+ new (): {
50
+ $slots: S;
51
+ };
52
+ };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _serverRenderer = require("@vue/server-renderer");
5
+ var _vue = require("vue");
6
+ var _aiEditorSender = _interopRequireDefault(require("../src/ai-editor-sender.vue"));
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ (0, _vitest.describe)("YhAiEditorSender SSR", () => {
9
+ (0, _vitest.it)("should render to string on server", async () => {
10
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default));
11
+ (0, _vitest.expect)(html).toContain("yh-ai-editor-sender");
12
+ });
13
+ (0, _vitest.it)("should render textarea on server", async () => {
14
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default));
15
+ (0, _vitest.expect)(html).toContain("textarea");
16
+ });
17
+ (0, _vitest.it)("should render placeholder on server", async () => {
18
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default, {
19
+ placeholder: "Type here..."
20
+ }));
21
+ (0, _vitest.expect)(html).toContain("Type here...");
22
+ });
23
+ (0, _vitest.it)("should render disabled state on server", async () => {
24
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default, {
25
+ disabled: true
26
+ }));
27
+ (0, _vitest.expect)(html).toContain("is-disabled");
28
+ });
29
+ (0, _vitest.it)("should render loading state on server", async () => {
30
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default, {
31
+ loading: true
32
+ }));
33
+ (0, _vitest.expect)(html).toContain("is-loading");
34
+ });
35
+ (0, _vitest.it)("should render word limit section on server", async () => {
36
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default, {
37
+ modelValue: "hello",
38
+ showWordLimit: true,
39
+ maxLength: 200
40
+ }));
41
+ (0, _vitest.expect)(html).toContain("yh-ai-editor-sender__word-limit");
42
+ (0, _vitest.expect)(html).toContain("200");
43
+ });
44
+ (0, _vitest.it)("should render attachment on server", async () => {
45
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default, {
46
+ attachments: [{
47
+ name: "report.pdf",
48
+ type: "document"
49
+ }]
50
+ }));
51
+ (0, _vitest.expect)(html).toContain("yh-ai-editor-sender__header");
52
+ (0, _vitest.expect)(html).toContain("report.pdf");
53
+ });
54
+ (0, _vitest.it)("should render send button on server", async () => {
55
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default));
56
+ (0, _vitest.expect)(html).toContain("yh-ai-editor-sender__send-btn");
57
+ });
58
+ (0, _vitest.it)("should render footer section on server", async () => {
59
+ const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiEditorSender.default));
60
+ (0, _vitest.expect)(html).toContain("yh-ai-editor-sender__footer");
61
+ });
62
+ });
@@ -0,0 +1,50 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { renderToString } from "@vue/server-renderer";
3
+ import { h } from "vue";
4
+ import AiEditorSender from "../src/ai-editor-sender.vue";
5
+ describe("YhAiEditorSender SSR", () => {
6
+ it("should render to string on server", async () => {
7
+ const html = await renderToString(h(AiEditorSender));
8
+ expect(html).toContain("yh-ai-editor-sender");
9
+ });
10
+ it("should render textarea on server", async () => {
11
+ const html = await renderToString(h(AiEditorSender));
12
+ expect(html).toContain("textarea");
13
+ });
14
+ it("should render placeholder on server", async () => {
15
+ const html = await renderToString(h(AiEditorSender, { placeholder: "Type here..." }));
16
+ expect(html).toContain("Type here...");
17
+ });
18
+ it("should render disabled state on server", async () => {
19
+ const html = await renderToString(h(AiEditorSender, { disabled: true }));
20
+ expect(html).toContain("is-disabled");
21
+ });
22
+ it("should render loading state on server", async () => {
23
+ const html = await renderToString(h(AiEditorSender, { loading: true }));
24
+ expect(html).toContain("is-loading");
25
+ });
26
+ it("should render word limit section on server", async () => {
27
+ const html = await renderToString(
28
+ h(AiEditorSender, { modelValue: "hello", showWordLimit: true, maxLength: 200 })
29
+ );
30
+ expect(html).toContain("yh-ai-editor-sender__word-limit");
31
+ expect(html).toContain("200");
32
+ });
33
+ it("should render attachment on server", async () => {
34
+ const html = await renderToString(
35
+ h(AiEditorSender, {
36
+ attachments: [{ name: "report.pdf", type: "document" }]
37
+ })
38
+ );
39
+ expect(html).toContain("yh-ai-editor-sender__header");
40
+ expect(html).toContain("report.pdf");
41
+ });
42
+ it("should render send button on server", async () => {
43
+ const html = await renderToString(h(AiEditorSender));
44
+ expect(html).toContain("yh-ai-editor-sender__send-btn");
45
+ });
46
+ it("should render footer section on server", async () => {
47
+ const html = await renderToString(h(AiEditorSender));
48
+ expect(html).toContain("yh-ai-editor-sender__footer");
49
+ });
50
+ });
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _testUtils = require("@vue/test-utils");
5
+ var _vue = require("vue");
6
+ var _aiEditorSender = _interopRequireDefault(require("../src/ai-editor-sender.vue"));
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ (0, _vitest.describe)("YhAiEditorSender", () => {
9
+ (0, _vitest.it)("should render with base class", () => {
10
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default);
11
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender").exists()).toBe(true);
12
+ });
13
+ (0, _vitest.it)("should render textarea", () => {
14
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default);
15
+ (0, _vitest.expect)(wrapper.find("textarea").exists()).toBe(true);
16
+ });
17
+ (0, _vitest.it)("should render with placeholder", () => {
18
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
19
+ props: {
20
+ placeholder: "Type here..."
21
+ }
22
+ });
23
+ (0, _vitest.expect)(wrapper.find("textarea").attributes("placeholder")).toBe("Type here...");
24
+ });
25
+ (0, _vitest.it)("should render modelValue in textarea", () => {
26
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
27
+ props: {
28
+ modelValue: "initial text"
29
+ }
30
+ });
31
+ (0, _vitest.expect)(wrapper.find("textarea").element.value).toBe("initial text");
32
+ });
33
+ (0, _vitest.it)("should emit update:modelValue on input", async () => {
34
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
35
+ props: {
36
+ modelValue: ""
37
+ }
38
+ });
39
+ const textarea = wrapper.find("textarea");
40
+ await textarea.setValue("hello");
41
+ const emitted = wrapper.emitted("update:modelValue");
42
+ (0, _vitest.expect)(emitted).toBeTruthy();
43
+ (0, _vitest.expect)(emitted[emitted.length - 1][0]).toBe("hello");
44
+ });
45
+ (0, _vitest.it)("should emit change on input", async () => {
46
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
47
+ props: {
48
+ modelValue: ""
49
+ }
50
+ });
51
+ await wrapper.find("textarea").setValue("changed");
52
+ (0, _vitest.expect)(wrapper.emitted("change")).toBeTruthy();
53
+ });
54
+ (0, _vitest.it)("should apply is-disabled class when disabled=true", () => {
55
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
56
+ props: {
57
+ disabled: true
58
+ }
59
+ });
60
+ (0, _vitest.expect)(wrapper.classes()).toContain("is-disabled");
61
+ });
62
+ (0, _vitest.it)("should disable textarea when disabled=true", () => {
63
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
64
+ props: {
65
+ disabled: true
66
+ }
67
+ });
68
+ (0, _vitest.expect)(wrapper.find("textarea").element.disabled).toBe(true);
69
+ });
70
+ (0, _vitest.it)("should apply is-loading class when loading=true", () => {
71
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
72
+ props: {
73
+ loading: true
74
+ }
75
+ });
76
+ (0, _vitest.expect)(wrapper.classes()).toContain("is-loading");
77
+ });
78
+ (0, _vitest.it)("should disable textarea when loading=true", () => {
79
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
80
+ props: {
81
+ loading: true
82
+ }
83
+ });
84
+ (0, _vitest.expect)(wrapper.find("textarea").element.disabled).toBe(true);
85
+ });
86
+ (0, _vitest.it)("should emit send event when send button clicked with text", async () => {
87
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
88
+ props: {
89
+ modelValue: "Hello"
90
+ }
91
+ });
92
+ const sendBtn = wrapper.find(".yh-ai-editor-sender__send-btn");
93
+ await sendBtn.trigger("click");
94
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeTruthy();
95
+ const emitted = wrapper.emitted("send");
96
+ (0, _vitest.expect)(emitted[0][0]).toBe("Hello");
97
+ });
98
+ (0, _vitest.it)("should NOT emit send if textarea is empty", async () => {
99
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
100
+ props: {
101
+ modelValue: ""
102
+ }
103
+ });
104
+ const sendBtn = wrapper.find(".yh-ai-editor-sender__send-btn");
105
+ await sendBtn.trigger("click");
106
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeFalsy();
107
+ });
108
+ (0, _vitest.it)("should NOT emit send if disabled", async () => {
109
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
110
+ props: {
111
+ modelValue: "some text",
112
+ disabled: true
113
+ }
114
+ });
115
+ const sendBtn = wrapper.find(".yh-ai-editor-sender__send-btn");
116
+ await sendBtn.trigger("click");
117
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeFalsy();
118
+ });
119
+ (0, _vitest.it)("should NOT emit send if loading", async () => {
120
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
121
+ props: {
122
+ modelValue: "some text",
123
+ loading: true
124
+ }
125
+ });
126
+ const sendBtn = wrapper.find(".yh-ai-editor-sender__send-btn");
127
+ await sendBtn.trigger("click");
128
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeFalsy();
129
+ });
130
+ (0, _vitest.it)("should emit send on Enter key (without Shift)", async () => {
131
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
132
+ props: {
133
+ modelValue: "Hello"
134
+ }
135
+ });
136
+ await wrapper.find("textarea").trigger("keydown", {
137
+ key: "Enter",
138
+ shiftKey: false
139
+ });
140
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeTruthy();
141
+ });
142
+ (0, _vitest.it)("should NOT emit send on Shift+Enter", async () => {
143
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
144
+ props: {
145
+ modelValue: "Hello"
146
+ }
147
+ });
148
+ await wrapper.find("textarea").trigger("keydown", {
149
+ key: "Enter",
150
+ shiftKey: true
151
+ });
152
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeFalsy();
153
+ });
154
+ (0, _vitest.it)("should NOT emit send on Enter key when empty (prevents default)", async () => {
155
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
156
+ props: {
157
+ modelValue: " "
158
+ }
159
+ });
160
+ await wrapper.find("textarea").trigger("keydown", {
161
+ key: "Enter",
162
+ shiftKey: false
163
+ });
164
+ (0, _vitest.expect)(wrapper.emitted("send")).toBeFalsy();
165
+ });
166
+ (0, _vitest.it)("should clear value after send", async () => {
167
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
168
+ props: {
169
+ modelValue: "Hello"
170
+ }
171
+ });
172
+ const sendBtn = wrapper.find(".yh-ai-editor-sender__send-btn");
173
+ await sendBtn.trigger("click");
174
+ await (0, _vue.nextTick)();
175
+ const emitted = wrapper.emitted("update:modelValue");
176
+ const lastEmit = emitted[emitted.length - 1][0];
177
+ (0, _vitest.expect)(lastEmit).toBe("");
178
+ });
179
+ (0, _vitest.it)("should render attachments header when attachments provided", () => {
180
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
181
+ props: {
182
+ attachments: [{
183
+ name: "file.ts",
184
+ type: "document"
185
+ }]
186
+ }
187
+ });
188
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__header").exists()).toBe(true);
189
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__attachment").exists()).toBe(true);
190
+ });
191
+ (0, _vitest.it)("should not render attachments header when empty", () => {
192
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
193
+ props: {
194
+ attachments: []
195
+ }
196
+ });
197
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__header").exists()).toBe(false);
198
+ });
199
+ (0, _vitest.it)("should emit remove-attachment when remove icon clicked", async () => {
200
+ const attachments = [{
201
+ name: "file.ts",
202
+ type: "document"
203
+ }];
204
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
205
+ props: {
206
+ attachments
207
+ }
208
+ });
209
+ const removeBtn = wrapper.find(".yh-ai-editor-sender__attachment-remove");
210
+ await removeBtn.trigger("click");
211
+ (0, _vitest.expect)(wrapper.emitted("remove-attachment")).toBeTruthy();
212
+ const emitted = wrapper.emitted("remove-attachment");
213
+ (0, _vitest.expect)(emitted[0][0]).toBe(0);
214
+ });
215
+ (0, _vitest.it)("should render word limit when showWordLimit=true and maxLength provided", () => {
216
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
217
+ props: {
218
+ modelValue: "hi",
219
+ showWordLimit: true,
220
+ maxLength: 100
221
+ }
222
+ });
223
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__word-limit").exists()).toBe(true);
224
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__word-limit").text()).toContain("100");
225
+ });
226
+ (0, _vitest.it)("should not render word limit without maxLength", () => {
227
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
228
+ props: {
229
+ showWordLimit: true
230
+ }
231
+ });
232
+ (0, _vitest.expect)(wrapper.find(".yh-ai-editor-sender__word-limit").exists()).toBe(false);
233
+ });
234
+ (0, _vitest.it)("should apply is-focused class on textarea focus", async () => {
235
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default);
236
+ await wrapper.find("textarea").trigger("focus");
237
+ (0, _vitest.expect)(wrapper.classes()).toContain("is-focused");
238
+ });
239
+ (0, _vitest.it)("should remove is-focused class on textarea blur", async () => {
240
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default);
241
+ await wrapper.find("textarea").trigger("focus");
242
+ await wrapper.find("textarea").trigger("blur");
243
+ (0, _vitest.expect)(wrapper.classes()).not.toContain("is-focused");
244
+ });
245
+ (0, _vitest.it)("should render toolbar slot", () => {
246
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
247
+ slots: {
248
+ toolbar: '<button class="toolbar-btn">Tool</button>'
249
+ }
250
+ });
251
+ (0, _vitest.expect)(wrapper.find(".toolbar-btn").exists()).toBe(true);
252
+ });
253
+ (0, _vitest.it)("should render actions slot", () => {
254
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
255
+ slots: {
256
+ actions: '<span class="custom-action">Model</span>'
257
+ }
258
+ });
259
+ (0, _vitest.expect)(wrapper.find(".custom-action").exists()).toBe(true);
260
+ });
261
+ (0, _vitest.it)("should render header slot as attachment override", () => {
262
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
263
+ props: {
264
+ attachments: [{
265
+ name: "f.ts",
266
+ type: "document"
267
+ }]
268
+ },
269
+ slots: {
270
+ header: '<div class="custom-header">Header</div>'
271
+ }
272
+ });
273
+ (0, _vitest.expect)(wrapper.find(".custom-header").exists()).toBe(true);
274
+ });
275
+ (0, _vitest.it)("should set rows attribute on textarea", () => {
276
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
277
+ props: {
278
+ rows: 5
279
+ }
280
+ });
281
+ (0, _vitest.expect)(wrapper.find("textarea").attributes("rows")).toBe("5");
282
+ });
283
+ (0, _vitest.it)("should update textarea when modelValue prop changes", async () => {
284
+ const wrapper = (0, _testUtils.mount)(_aiEditorSender.default, {
285
+ props: {
286
+ modelValue: "old text"
287
+ }
288
+ });
289
+ await wrapper.setProps({
290
+ modelValue: "new text"
291
+ });
292
+ await (0, _vue.nextTick)();
293
+ (0, _vitest.expect)(wrapper.find("textarea").element.value).toBe("new text");
294
+ });
295
+ (0, _vitest.describe)("aiEditorSenderEmits", () => {
296
+ (0, _vitest.it)("should validate send event", async () => {
297
+ const {
298
+ aiEditorSenderEmits
299
+ } = await Promise.resolve().then(() => require("../src/ai-editor-sender.cjs"));
300
+ (0, _vitest.expect)(aiEditorSenderEmits.send("hello")).toBe(true);
301
+ (0, _vitest.expect)(aiEditorSenderEmits.send("")).toBe(false);
302
+ });
303
+ (0, _vitest.it)("should pass-through other event validators", async () => {
304
+ const {
305
+ aiEditorSenderEmits
306
+ } = await Promise.resolve().then(() => require("../src/ai-editor-sender.cjs"));
307
+ (0, _vitest.expect)(aiEditorSenderEmits["update:modelValue"]("text")).toBe(true);
308
+ (0, _vitest.expect)(aiEditorSenderEmits.change("text")).toBe(true);
309
+ (0, _vitest.expect)(aiEditorSenderEmits["remove-attachment"](0, {
310
+ name: "f"
311
+ })).toBe(true);
312
+ (0, _vitest.expect)(aiEditorSenderEmits.clear()).toBe(true);
313
+ });
314
+ });
315
+ });