@yh-ui/components 0.1.21 → 0.1.23

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 (485) hide show
  1. package/README.md +2 -0
  2. package/dist/breadcrumb/src/breadcrumb-item.vue +10 -6
  3. package/dist/form/index.cjs +1 -1
  4. package/dist/form/index.d.ts +1 -1
  5. package/dist/form/index.mjs +1 -1
  6. package/dist/icon/index.cjs +1 -1
  7. package/dist/icon/index.d.ts +1 -1
  8. package/dist/icon/index.mjs +1 -1
  9. package/dist/loading/index.cjs +1 -1
  10. package/dist/loading/index.d.ts +1 -1
  11. package/dist/loading/index.mjs +1 -1
  12. package/dist/message/src/method.cjs +1 -1
  13. package/dist/message/src/method.d.ts +1 -1
  14. package/dist/message/src/method.mjs +1 -1
  15. package/dist/message-box/index.cjs +1 -1
  16. package/dist/message-box/index.d.ts +1 -1
  17. package/dist/message-box/index.mjs +1 -1
  18. package/dist/notification/src/method.cjs +1 -1
  19. package/dist/notification/src/method.d.ts +1 -1
  20. package/dist/notification/src/method.mjs +1 -1
  21. package/dist/resolver.cjs +1 -1
  22. package/dist/resolver.d.ts +7 -5
  23. package/dist/resolver.mjs +1 -1
  24. package/dist/style.css +584 -0
  25. package/package.json +9 -8
  26. package/dist/affix/__tests__/affix.bottom.test.cjs +0 -101
  27. package/dist/affix/__tests__/affix.bottom.test.mjs +0 -88
  28. package/dist/affix/__tests__/affix.ssr.test.cjs +0 -38
  29. package/dist/affix/__tests__/affix.ssr.test.mjs +0 -51
  30. package/dist/affix/__tests__/affix.test.cjs +0 -185
  31. package/dist/affix/__tests__/affix.test.mjs +0 -180
  32. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.cjs +0 -55
  33. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.mjs +0 -39
  34. package/dist/ai-action-group/__tests__/ai-action-group.test.cjs +0 -235
  35. package/dist/ai-action-group/__tests__/ai-action-group.test.mjs +0 -157
  36. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.cjs +0 -61
  37. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.mjs +0 -65
  38. package/dist/ai-agent-card/__tests__/ai-agent-card.test.cjs +0 -205
  39. package/dist/ai-agent-card/__tests__/ai-agent-card.test.mjs +0 -133
  40. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.cjs +0 -73
  41. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.mjs +0 -68
  42. package/dist/ai-artifacts/__tests__/ai-artifacts.test.cjs +0 -128
  43. package/dist/ai-artifacts/__tests__/ai-artifacts.test.mjs +0 -109
  44. package/dist/ai-attachments/__tests__/ai-attachments.ssr.test.cjs +0 -50
  45. package/dist/ai-attachments/__tests__/ai-attachments.ssr.test.mjs +0 -33
  46. package/dist/ai-attachments/__tests__/ai-attachments.test.cjs +0 -113
  47. package/dist/ai-attachments/__tests__/ai-attachments.test.mjs +0 -81
  48. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.cjs +0 -95
  49. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.mjs +0 -66
  50. package/dist/ai-bubble/__tests__/ai-bubble.test.cjs +0 -624
  51. package/dist/ai-bubble/__tests__/ai-bubble.test.mjs +0 -393
  52. package/dist/ai-bubble-list/__tests__/ai-bubble-list.ssr.test.cjs +0 -51
  53. package/dist/ai-bubble-list/__tests__/ai-bubble-list.ssr.test.mjs +0 -51
  54. package/dist/ai-bubble-list/__tests__/ai-bubble-list.test.cjs +0 -138
  55. package/dist/ai-bubble-list/__tests__/ai-bubble-list.test.mjs +0 -112
  56. package/dist/ai-chat/__tests__/ai-chat.ssr.test.cjs +0 -90
  57. package/dist/ai-chat/__tests__/ai-chat.ssr.test.mjs +0 -77
  58. package/dist/ai-chat/__tests__/ai-chat.test.cjs +0 -177
  59. package/dist/ai-chat/__tests__/ai-chat.test.mjs +0 -129
  60. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.cjs +0 -75
  61. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.mjs +0 -57
  62. package/dist/ai-code-block/__tests__/ai-code-block.test.cjs +0 -174
  63. package/dist/ai-code-block/__tests__/ai-code-block.test.mjs +0 -108
  64. package/dist/ai-code-editor/__tests__/ai-code-editor.ssr.test.cjs +0 -46
  65. package/dist/ai-code-editor/__tests__/ai-code-editor.ssr.test.mjs +0 -39
  66. package/dist/ai-code-editor/__tests__/ai-code-editor.test.cjs +0 -90
  67. package/dist/ai-code-editor/__tests__/ai-code-editor.test.mjs +0 -78
  68. package/dist/ai-code-runner/__tests__/ai-code-runner.ssr.test.cjs +0 -28
  69. package/dist/ai-code-runner/__tests__/ai-code-runner.ssr.test.mjs +0 -26
  70. package/dist/ai-code-runner/__tests__/ai-code-runner.test.cjs +0 -69
  71. package/dist/ai-code-runner/__tests__/ai-code-runner.test.mjs +0 -66
  72. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.cjs +0 -50
  73. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.mjs +0 -42
  74. package/dist/ai-conversations/__tests__/ai-conversations.test.cjs +0 -67
  75. package/dist/ai-conversations/__tests__/ai-conversations.test.mjs +0 -51
  76. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.cjs +0 -62
  77. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.mjs +0 -50
  78. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.cjs +0 -315
  79. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.mjs +0 -226
  80. package/dist/ai-file-card/__tests__/ai-file-card.ssr.test.cjs +0 -45
  81. package/dist/ai-file-card/__tests__/ai-file-card.ssr.test.mjs +0 -29
  82. package/dist/ai-file-card/__tests__/ai-file-card.test.cjs +0 -160
  83. package/dist/ai-file-card/__tests__/ai-file-card.test.mjs +0 -109
  84. package/dist/ai-mention/__tests__/ai-mention.ssr.test.cjs +0 -38
  85. package/dist/ai-mention/__tests__/ai-mention.ssr.test.mjs +0 -37
  86. package/dist/ai-mention/__tests__/ai-mention.test.cjs +0 -113
  87. package/dist/ai-mention/__tests__/ai-mention.test.mjs +0 -84
  88. package/dist/ai-mermaid/__tests__/ai-mermaid.ssr.test.cjs +0 -43
  89. package/dist/ai-mermaid/__tests__/ai-mermaid.ssr.test.mjs +0 -33
  90. package/dist/ai-mermaid/__tests__/ai-mermaid.test.cjs +0 -113
  91. package/dist/ai-mermaid/__tests__/ai-mermaid.test.mjs +0 -92
  92. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.cjs +0 -49
  93. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.mjs +0 -41
  94. package/dist/ai-prompts/__tests__/ai-prompts.test.cjs +0 -54
  95. package/dist/ai-prompts/__tests__/ai-prompts.test.mjs +0 -38
  96. package/dist/ai-provider/__tests__/ai-provider.ssr.test.cjs +0 -33
  97. package/dist/ai-provider/__tests__/ai-provider.ssr.test.mjs +0 -34
  98. package/dist/ai-provider/__tests__/ai-provider.test.cjs +0 -38
  99. package/dist/ai-provider/__tests__/ai-provider.test.mjs +0 -33
  100. package/dist/ai-sender/__tests__/ai-sender.ssr.test.cjs +0 -46
  101. package/dist/ai-sender/__tests__/ai-sender.ssr.test.mjs +0 -37
  102. package/dist/ai-sender/__tests__/ai-sender.test.cjs +0 -511
  103. package/dist/ai-sender/__tests__/ai-sender.test.mjs +0 -322
  104. package/dist/ai-sources/__tests__/ai-sources.ssr.test.cjs +0 -72
  105. package/dist/ai-sources/__tests__/ai-sources.ssr.test.mjs +0 -82
  106. package/dist/ai-sources/__tests__/ai-sources.test.cjs +0 -200
  107. package/dist/ai-sources/__tests__/ai-sources.test.mjs +0 -160
  108. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.cjs +0 -56
  109. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.mjs +0 -42
  110. package/dist/ai-thinking/__tests__/ai-thinking.test.cjs +0 -151
  111. package/dist/ai-thinking/__tests__/ai-thinking.test.mjs +0 -96
  112. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.cjs +0 -88
  113. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.mjs +0 -55
  114. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.cjs +0 -344
  115. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.mjs +0 -237
  116. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.cjs +0 -32
  117. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.mjs +0 -25
  118. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.cjs +0 -130
  119. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.mjs +0 -103
  120. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.cjs +0 -57
  121. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.mjs +0 -39
  122. package/dist/ai-welcome/__tests__/ai-welcome.test.cjs +0 -169
  123. package/dist/ai-welcome/__tests__/ai-welcome.test.mjs +0 -113
  124. package/dist/alert/__tests__/alert.ssr.test.cjs +0 -28
  125. package/dist/alert/__tests__/alert.ssr.test.mjs +0 -29
  126. package/dist/alert/__tests__/alert.test.cjs +0 -123
  127. package/dist/alert/__tests__/alert.test.mjs +0 -110
  128. package/dist/autocomplete/__tests__/autocomplete.ssr.test.cjs +0 -54
  129. package/dist/autocomplete/__tests__/autocomplete.ssr.test.mjs +0 -47
  130. package/dist/autocomplete/__tests__/autocomplete.test.cjs +0 -299
  131. package/dist/autocomplete/__tests__/autocomplete.test.mjs +0 -263
  132. package/dist/avatar/__tests__/avatar.ssr.test.cjs +0 -103
  133. package/dist/avatar/__tests__/avatar.ssr.test.mjs +0 -108
  134. package/dist/avatar/__tests__/avatar.test.cjs +0 -146
  135. package/dist/avatar/__tests__/avatar.test.mjs +0 -125
  136. package/dist/back-top/__tests__/back-top.ssr.test.cjs +0 -13
  137. package/dist/back-top/__tests__/back-top.ssr.test.mjs +0 -10
  138. package/dist/back-top/__tests__/back-top.test.cjs +0 -88
  139. package/dist/back-top/__tests__/back-top.test.mjs +0 -76
  140. package/dist/badge/__tests__/badge.ssr.test.cjs +0 -36
  141. package/dist/badge/__tests__/badge.ssr.test.mjs +0 -33
  142. package/dist/badge/__tests__/badge.test.cjs +0 -115
  143. package/dist/badge/__tests__/badge.test.mjs +0 -112
  144. package/dist/breadcrumb/__tests__/breadcrumb.ssr.test.cjs +0 -22
  145. package/dist/breadcrumb/__tests__/breadcrumb.ssr.test.mjs +0 -20
  146. package/dist/breadcrumb/__tests__/breadcrumb.test.cjs +0 -64
  147. package/dist/breadcrumb/__tests__/breadcrumb.test.mjs +0 -51
  148. package/dist/button/__tests__/button.ssr.test.cjs +0 -52
  149. package/dist/button/__tests__/button.ssr.test.mjs +0 -55
  150. package/dist/button/__tests__/button.test.cjs +0 -207
  151. package/dist/button/__tests__/button.test.mjs +0 -141
  152. package/dist/calendar/__tests__/calendar.ssr.test.cjs +0 -65
  153. package/dist/calendar/__tests__/calendar.ssr.test.mjs +0 -63
  154. package/dist/calendar/__tests__/calendar.test.cjs +0 -263
  155. package/dist/calendar/__tests__/calendar.test.mjs +0 -255
  156. package/dist/card/__tests__/card.ssr.test.cjs +0 -37
  157. package/dist/card/__tests__/card.ssr.test.mjs +0 -40
  158. package/dist/card/__tests__/card.test.cjs +0 -131
  159. package/dist/card/__tests__/card.test.mjs +0 -124
  160. package/dist/carousel/__tests__/carousel.ssr.test.cjs +0 -27
  161. package/dist/carousel/__tests__/carousel.ssr.test.mjs +0 -27
  162. package/dist/carousel/__tests__/carousel.test.cjs +0 -115
  163. package/dist/carousel/__tests__/carousel.test.mjs +0 -98
  164. package/dist/cascader/__tests__/cascader-panel.test.cjs +0 -162
  165. package/dist/cascader/__tests__/cascader-panel.test.mjs +0 -151
  166. package/dist/cascader/__tests__/cascader.ssr.test.cjs +0 -61
  167. package/dist/cascader/__tests__/cascader.ssr.test.mjs +0 -55
  168. package/dist/cascader/__tests__/cascader.test.cjs +0 -342
  169. package/dist/cascader/__tests__/cascader.test.mjs +0 -316
  170. package/dist/category-nav/__tests__/category-nav.ssr.test.cjs +0 -35
  171. package/dist/category-nav/__tests__/category-nav.ssr.test.mjs +0 -21
  172. package/dist/category-nav/__tests__/category-nav.test.cjs +0 -53
  173. package/dist/category-nav/__tests__/category-nav.test.mjs +0 -33
  174. package/dist/checkbox/__tests__/checkbox.ssr.test.cjs +0 -52
  175. package/dist/checkbox/__tests__/checkbox.ssr.test.mjs +0 -57
  176. package/dist/checkbox/__tests__/checkbox.test.cjs +0 -173
  177. package/dist/checkbox/__tests__/checkbox.test.mjs +0 -133
  178. package/dist/col/__tests__/col.ssr.test.cjs +0 -44
  179. package/dist/col/__tests__/col.ssr.test.mjs +0 -42
  180. package/dist/col/__tests__/col.test.cjs +0 -128
  181. package/dist/col/__tests__/col.test.mjs +0 -116
  182. package/dist/color-picker/__tests__/color-picker.ssr.test.cjs +0 -34
  183. package/dist/color-picker/__tests__/color-picker.ssr.test.mjs +0 -39
  184. package/dist/color-picker/__tests__/color-picker.test.cjs +0 -227
  185. package/dist/color-picker/__tests__/color-picker.test.mjs +0 -176
  186. package/dist/config-provider/__tests__/config-provider.ssr.test.cjs +0 -43
  187. package/dist/config-provider/__tests__/config-provider.ssr.test.mjs +0 -42
  188. package/dist/config-provider/__tests__/config-provider.test.cjs +0 -75
  189. package/dist/config-provider/__tests__/config-provider.test.mjs +0 -64
  190. package/dist/container/__tests__/container.ssr.test.cjs +0 -71
  191. package/dist/container/__tests__/container.ssr.test.mjs +0 -50
  192. package/dist/container/__tests__/container.test.cjs +0 -111
  193. package/dist/container/__tests__/container.test.mjs +0 -84
  194. package/dist/countdown/__tests__/countdown.ssr.test.cjs +0 -86
  195. package/dist/countdown/__tests__/countdown.ssr.test.mjs +0 -78
  196. package/dist/countdown/__tests__/countdown.test.cjs +0 -767
  197. package/dist/countdown/__tests__/countdown.test.mjs +0 -722
  198. package/dist/coupon-card/__tests__/coupon-card.ssr.test.cjs +0 -21
  199. package/dist/coupon-card/__tests__/coupon-card.ssr.test.mjs +0 -18
  200. package/dist/coupon-card/__tests__/coupon-card.test.cjs +0 -67
  201. package/dist/coupon-card/__tests__/coupon-card.test.mjs +0 -64
  202. package/dist/date-picker/__tests__/date-picker-extended.test.cjs +0 -581
  203. package/dist/date-picker/__tests__/date-picker-extended.test.mjs +0 -455
  204. package/dist/date-picker/__tests__/date-picker.ssr.test.cjs +0 -26
  205. package/dist/date-picker/__tests__/date-picker.ssr.test.mjs +0 -23
  206. package/dist/date-picker/__tests__/date-picker.test.cjs +0 -170
  207. package/dist/date-picker/__tests__/date-picker.test.mjs +0 -136
  208. package/dist/descriptions/__tests__/descriptions.ssr.test.cjs +0 -67
  209. package/dist/descriptions/__tests__/descriptions.ssr.test.mjs +0 -72
  210. package/dist/descriptions/__tests__/descriptions.test.cjs +0 -150
  211. package/dist/descriptions/__tests__/descriptions.test.mjs +0 -130
  212. package/dist/dialog/__tests__/dialog.functional.test.cjs +0 -49
  213. package/dist/dialog/__tests__/dialog.functional.test.mjs +0 -49
  214. package/dist/dialog/__tests__/dialog.ssr.test.cjs +0 -31
  215. package/dist/dialog/__tests__/dialog.ssr.test.mjs +0 -29
  216. package/dist/dialog/__tests__/dialog.test.cjs +0 -561
  217. package/dist/dialog/__tests__/dialog.test.mjs +0 -388
  218. package/dist/divider/__tests__/divider.ssr.test.cjs +0 -41
  219. package/dist/divider/__tests__/divider.ssr.test.mjs +0 -44
  220. package/dist/divider/__tests__/divider.test.cjs +0 -71
  221. package/dist/divider/__tests__/divider.test.mjs +0 -68
  222. package/dist/drawer/__tests__/drawer.ssr.test.cjs +0 -25
  223. package/dist/drawer/__tests__/drawer.ssr.test.mjs +0 -23
  224. package/dist/drawer/__tests__/drawer.test.cjs +0 -145
  225. package/dist/drawer/__tests__/drawer.test.mjs +0 -122
  226. package/dist/dropdown/__tests__/dropdown.ssr.test.cjs +0 -49
  227. package/dist/dropdown/__tests__/dropdown.ssr.test.mjs +0 -64
  228. package/dist/dropdown/__tests__/dropdown.test.cjs +0 -310
  229. package/dist/dropdown/__tests__/dropdown.test.mjs +0 -269
  230. package/dist/empty/__tests__/empty.ssr.test.cjs +0 -96
  231. package/dist/empty/__tests__/empty.ssr.test.mjs +0 -99
  232. package/dist/empty/__tests__/empty.test.cjs +0 -110
  233. package/dist/empty/__tests__/empty.test.mjs +0 -101
  234. package/dist/filter-bar/__tests__/filter-bar.ssr.test.cjs +0 -29
  235. package/dist/filter-bar/__tests__/filter-bar.ssr.test.mjs +0 -16
  236. package/dist/filter-bar/__tests__/filter-bar.test.cjs +0 -51
  237. package/dist/filter-bar/__tests__/filter-bar.test.mjs +0 -29
  238. package/dist/form/__tests__/form-schema.test.cjs +0 -636
  239. package/dist/form/__tests__/form-schema.test.mjs +0 -366
  240. package/dist/form/__tests__/form.ssr.test.cjs +0 -74
  241. package/dist/form/__tests__/form.ssr.test.mjs +0 -73
  242. package/dist/form/__tests__/form.test.cjs +0 -208
  243. package/dist/form/__tests__/form.test.mjs +0 -128
  244. package/dist/gantt-chart/__tests__/debug_ssr.test.cjs +0 -51
  245. package/dist/gantt-chart/__tests__/debug_ssr.test.mjs +0 -37
  246. package/dist/gantt-chart/__tests__/gantt-chart.ssr.test.cjs +0 -95
  247. package/dist/gantt-chart/__tests__/gantt-chart.ssr.test.mjs +0 -94
  248. package/dist/gantt-chart/__tests__/gantt-chart.test.cjs +0 -86
  249. package/dist/gantt-chart/__tests__/gantt-chart.test.mjs +0 -79
  250. package/dist/grid/__tests__/grid.ssr.test.cjs +0 -81
  251. package/dist/grid/__tests__/grid.ssr.test.mjs +0 -63
  252. package/dist/grid/__tests__/grid.test.cjs +0 -142
  253. package/dist/grid/__tests__/grid.test.mjs +0 -89
  254. package/dist/icon/__tests__/icon.ssr.test.cjs +0 -35
  255. package/dist/icon/__tests__/icon.ssr.test.mjs +0 -26
  256. package/dist/icon/__tests__/icon.test.cjs +0 -144
  257. package/dist/icon/__tests__/icon.test.mjs +0 -123
  258. package/dist/image/__tests__/image-viewer.test.cjs +0 -101
  259. package/dist/image/__tests__/image-viewer.test.mjs +0 -94
  260. package/dist/image/__tests__/image.ssr.test.cjs +0 -73
  261. package/dist/image/__tests__/image.ssr.test.mjs +0 -72
  262. package/dist/image/__tests__/image.test.cjs +0 -171
  263. package/dist/image/__tests__/image.test.mjs +0 -159
  264. package/dist/image-magnifier/__tests__/image-magnifier.ssr.test.cjs +0 -54
  265. package/dist/image-magnifier/__tests__/image-magnifier.ssr.test.mjs +0 -35
  266. package/dist/image-magnifier/__tests__/image-magnifier.test.cjs +0 -257
  267. package/dist/image-magnifier/__tests__/image-magnifier.test.mjs +0 -177
  268. package/dist/infinite-scroll/__tests__/infinite-scroll.ssr.test.cjs +0 -59
  269. package/dist/infinite-scroll/__tests__/infinite-scroll.ssr.test.mjs +0 -84
  270. package/dist/infinite-scroll/__tests__/infinite-scroll.test.cjs +0 -255
  271. package/dist/infinite-scroll/__tests__/infinite-scroll.test.mjs +0 -187
  272. package/dist/input/__tests__/input-utils.test.cjs +0 -77
  273. package/dist/input/__tests__/input-utils.test.mjs +0 -75
  274. package/dist/input/__tests__/input.ssr.test.cjs +0 -100
  275. package/dist/input/__tests__/input.ssr.test.mjs +0 -85
  276. package/dist/input/__tests__/input.test.cjs +0 -127
  277. package/dist/input/__tests__/input.test.mjs +0 -112
  278. package/dist/input-number/__tests__/input-number.hydration.test.cjs +0 -24
  279. package/dist/input-number/__tests__/input-number.hydration.test.mjs +0 -21
  280. package/dist/input-number/__tests__/input-number.ssr.test.cjs +0 -95
  281. package/dist/input-number/__tests__/input-number.ssr.test.mjs +0 -92
  282. package/dist/input-number/__tests__/input-number.test.cjs +0 -199
  283. package/dist/input-number/__tests__/input-number.test.mjs +0 -173
  284. package/dist/input-tag/__tests__/input-tag.ssr.test.cjs +0 -47
  285. package/dist/input-tag/__tests__/input-tag.ssr.test.mjs +0 -41
  286. package/dist/input-tag/__tests__/input-tag.test.cjs +0 -268
  287. package/dist/input-tag/__tests__/input-tag.test.mjs +0 -201
  288. package/dist/loading/__tests__/loading.ssr.test.cjs +0 -37
  289. package/dist/loading/__tests__/loading.ssr.test.mjs +0 -27
  290. package/dist/loading/__tests__/loading.test.cjs +0 -91
  291. package/dist/loading/__tests__/loading.test.mjs +0 -75
  292. package/dist/lucky-draw/__tests__/lucky-draw.ssr.test.cjs +0 -33
  293. package/dist/lucky-draw/__tests__/lucky-draw.ssr.test.mjs +0 -31
  294. package/dist/lucky-draw/__tests__/lucky-draw.test.cjs +0 -56
  295. package/dist/lucky-draw/__tests__/lucky-draw.test.mjs +0 -48
  296. package/dist/marquee/__tests__/marquee.ssr.test.cjs +0 -59
  297. package/dist/marquee/__tests__/marquee.ssr.test.mjs +0 -60
  298. package/dist/marquee/__tests__/marquee.test.cjs +0 -94
  299. package/dist/marquee/__tests__/marquee.test.mjs +0 -92
  300. package/dist/mention/__tests__/mention.ssr.test.cjs +0 -92
  301. package/dist/mention/__tests__/mention.ssr.test.mjs +0 -70
  302. package/dist/mention/__tests__/mention.test.cjs +0 -650
  303. package/dist/mention/__tests__/mention.test.mjs +0 -523
  304. package/dist/menu/__tests__/menu.ssr.test.cjs +0 -92
  305. package/dist/menu/__tests__/menu.ssr.test.mjs +0 -124
  306. package/dist/menu/__tests__/menu.test.cjs +0 -209
  307. package/dist/menu/__tests__/menu.test.mjs +0 -182
  308. package/dist/message/__tests__/message.ssr.test.cjs +0 -29
  309. package/dist/message/__tests__/message.ssr.test.mjs +0 -23
  310. package/dist/message/__tests__/message.test.cjs +0 -170
  311. package/dist/message/__tests__/message.test.mjs +0 -154
  312. package/dist/message-box/__tests__/message-box.ssr.test.cjs +0 -33
  313. package/dist/message-box/__tests__/message-box.ssr.test.mjs +0 -30
  314. package/dist/message-box/__tests__/message-box.test.cjs +0 -100
  315. package/dist/message-box/__tests__/message-box.test.mjs +0 -95
  316. package/dist/notification/__tests__/notification.ssr.test.cjs +0 -31
  317. package/dist/notification/__tests__/notification.ssr.test.mjs +0 -25
  318. package/dist/notification/__tests__/notification.test.cjs +0 -248
  319. package/dist/notification/__tests__/notification.test.mjs +0 -206
  320. package/dist/pagination/__tests__/pagination.ssr.test.cjs +0 -61
  321. package/dist/pagination/__tests__/pagination.ssr.test.mjs +0 -59
  322. package/dist/pagination/__tests__/pagination.test.cjs +0 -135
  323. package/dist/pagination/__tests__/pagination.test.mjs +0 -131
  324. package/dist/popconfirm/__tests__/popconfirm.ssr.test.cjs +0 -48
  325. package/dist/popconfirm/__tests__/popconfirm.ssr.test.mjs +0 -63
  326. package/dist/popconfirm/__tests__/popconfirm.test.cjs +0 -62
  327. package/dist/popconfirm/__tests__/popconfirm.test.mjs +0 -56
  328. package/dist/popover/__tests__/popover.ssr.test.cjs +0 -48
  329. package/dist/popover/__tests__/popover.ssr.test.mjs +0 -63
  330. package/dist/popover/__tests__/popover.test.cjs +0 -107
  331. package/dist/popover/__tests__/popover.test.mjs +0 -93
  332. package/dist/price/__tests__/price.ssr.test.cjs +0 -20
  333. package/dist/price/__tests__/price.ssr.test.mjs +0 -19
  334. package/dist/price/__tests__/price.test.cjs +0 -45
  335. package/dist/price/__tests__/price.test.mjs +0 -42
  336. package/dist/product-card/__tests__/product-card.ssr.test.cjs +0 -21
  337. package/dist/product-card/__tests__/product-card.ssr.test.mjs +0 -18
  338. package/dist/product-card/__tests__/product-card.test.cjs +0 -54
  339. package/dist/product-card/__tests__/product-card.test.mjs +0 -53
  340. package/dist/progress/__tests__/progress.ssr.test.cjs +0 -31
  341. package/dist/progress/__tests__/progress.ssr.test.mjs +0 -29
  342. package/dist/progress/__tests__/progress.test.cjs +0 -119
  343. package/dist/progress/__tests__/progress.test.mjs +0 -77
  344. package/dist/radio/__tests__/radio-button.test.cjs +0 -99
  345. package/dist/radio/__tests__/radio-button.test.mjs +0 -83
  346. package/dist/radio/__tests__/radio.ssr.test.cjs +0 -132
  347. package/dist/radio/__tests__/radio.ssr.test.mjs +0 -165
  348. package/dist/radio/__tests__/radio.test.cjs +0 -170
  349. package/dist/radio/__tests__/radio.test.mjs +0 -143
  350. package/dist/rate/__tests__/rate.ssr.test.cjs +0 -106
  351. package/dist/rate/__tests__/rate.ssr.test.mjs +0 -103
  352. package/dist/rate/__tests__/rate.test.cjs +0 -88
  353. package/dist/rate/__tests__/rate.test.mjs +0 -85
  354. package/dist/result/__tests__/result.ssr.test.cjs +0 -62
  355. package/dist/result/__tests__/result.ssr.test.mjs +0 -51
  356. package/dist/result/__tests__/result.test.cjs +0 -135
  357. package/dist/result/__tests__/result.test.mjs +0 -92
  358. package/dist/row/__tests__/row.ssr.test.cjs +0 -29
  359. package/dist/row/__tests__/row.ssr.test.mjs +0 -30
  360. package/dist/row/__tests__/row.test.cjs +0 -89
  361. package/dist/row/__tests__/row.test.mjs +0 -86
  362. package/dist/row/__tests__/row_ts.test.cjs +0 -31
  363. package/dist/row/__tests__/row_ts.test.mjs +0 -28
  364. package/dist/scrollbar/__tests__/scrollbar.ssr.test.cjs +0 -49
  365. package/dist/scrollbar/__tests__/scrollbar.ssr.test.mjs +0 -54
  366. package/dist/scrollbar/__tests__/scrollbar.test.cjs +0 -43
  367. package/dist/scrollbar/__tests__/scrollbar.test.mjs +0 -40
  368. package/dist/select/__tests__/select.perf.test.cjs +0 -191
  369. package/dist/select/__tests__/select.perf.test.mjs +0 -185
  370. package/dist/select/__tests__/select.ssr.test.cjs +0 -58
  371. package/dist/select/__tests__/select.ssr.test.mjs +0 -52
  372. package/dist/select/__tests__/select.test.cjs +0 -414
  373. package/dist/select/__tests__/select.test.mjs +0 -345
  374. package/dist/skeleton/__tests__/skeleton.ssr.test.cjs +0 -81
  375. package/dist/skeleton/__tests__/skeleton.ssr.test.mjs +0 -83
  376. package/dist/skeleton/__tests__/skeleton.test.cjs +0 -72
  377. package/dist/skeleton/__tests__/skeleton.test.mjs +0 -65
  378. package/dist/sku-selector/__tests__/sku-selector.ssr.test.cjs +0 -32
  379. package/dist/sku-selector/__tests__/sku-selector.ssr.test.mjs +0 -19
  380. package/dist/sku-selector/__tests__/sku-selector.test.cjs +0 -64
  381. package/dist/sku-selector/__tests__/sku-selector.test.mjs +0 -53
  382. package/dist/slider/__tests__/repro.test.cjs +0 -25
  383. package/dist/slider/__tests__/repro.test.mjs +0 -22
  384. package/dist/slider/__tests__/slider.ssr.test.cjs +0 -118
  385. package/dist/slider/__tests__/slider.ssr.test.mjs +0 -115
  386. package/dist/slider/__tests__/slider.test.cjs +0 -155
  387. package/dist/slider/__tests__/slider.test.mjs +0 -120
  388. package/dist/smart-address/__tests__/smart-address.ssr.test.cjs +0 -28
  389. package/dist/smart-address/__tests__/smart-address.ssr.test.mjs +0 -25
  390. package/dist/smart-address/__tests__/smart-address.test.cjs +0 -68
  391. package/dist/smart-address/__tests__/smart-address.test.mjs +0 -56
  392. package/dist/space/__tests__/space.ssr.test.cjs +0 -115
  393. package/dist/space/__tests__/space.ssr.test.mjs +0 -150
  394. package/dist/space/__tests__/space.test.cjs +0 -227
  395. package/dist/space/__tests__/space.test.mjs +0 -187
  396. package/dist/spin/__tests__/spin.ssr.test.cjs +0 -46
  397. package/dist/spin/__tests__/spin.ssr.test.mjs +0 -43
  398. package/dist/spin/__tests__/spin.test.cjs +0 -65
  399. package/dist/spin/__tests__/spin.test.mjs +0 -63
  400. package/dist/steps/__tests__/steps.ssr.test.cjs +0 -73
  401. package/dist/steps/__tests__/steps.ssr.test.mjs +0 -55
  402. package/dist/steps/__tests__/steps.test.cjs +0 -152
  403. package/dist/steps/__tests__/steps.test.mjs +0 -123
  404. package/dist/submit-bar/__tests__/submit-bar.ssr.test.cjs +0 -21
  405. package/dist/submit-bar/__tests__/submit-bar.ssr.test.mjs +0 -18
  406. package/dist/submit-bar/__tests__/submit-bar.test.cjs +0 -50
  407. package/dist/submit-bar/__tests__/submit-bar.test.mjs +0 -36
  408. package/dist/switch/__tests__/switch.ssr.test.cjs +0 -105
  409. package/dist/switch/__tests__/switch.ssr.test.mjs +0 -102
  410. package/dist/switch/__tests__/switch.test.cjs +0 -251
  411. package/dist/switch/__tests__/switch.test.mjs +0 -193
  412. package/dist/table/__tests__/table-advance.test.cjs +0 -180
  413. package/dist/table/__tests__/table-advance.test.mjs +0 -118
  414. package/dist/table/__tests__/table-interaction.test.cjs +0 -236
  415. package/dist/table/__tests__/table-interaction.test.mjs +0 -162
  416. package/dist/table/__tests__/table-utils.test.cjs +0 -690
  417. package/dist/table/__tests__/table-utils.test.mjs +0 -485
  418. package/dist/table/__tests__/table.perf.test.cjs +0 -231
  419. package/dist/table/__tests__/table.perf.test.mjs +0 -225
  420. package/dist/table/__tests__/table.ssr.test.cjs +0 -296
  421. package/dist/table/__tests__/table.ssr.test.mjs +0 -265
  422. package/dist/table/__tests__/table.test.cjs +0 -682
  423. package/dist/table/__tests__/table.test.mjs +0 -617
  424. package/dist/table/__tests__/use-column-drag.test.cjs +0 -238
  425. package/dist/table/__tests__/use-column-drag.test.mjs +0 -150
  426. package/dist/table/__tests__/use-table-export.test.cjs +0 -179
  427. package/dist/table/__tests__/use-table-export.test.mjs +0 -105
  428. package/dist/table/__tests__/use-table-import.test.cjs +0 -206
  429. package/dist/table/__tests__/use-table-import.test.mjs +0 -144
  430. package/dist/table/__tests__/use-table-print.test.cjs +0 -190
  431. package/dist/table/__tests__/use-table-print.test.mjs +0 -134
  432. package/dist/table/__tests__/use-virtual-scroll.test.cjs +0 -286
  433. package/dist/table/__tests__/use-virtual-scroll.test.mjs +0 -196
  434. package/dist/tabs/__tests__/tabs.ssr.test.cjs +0 -57
  435. package/dist/tabs/__tests__/tabs.ssr.test.mjs +0 -41
  436. package/dist/tabs/__tests__/tabs.test.cjs +0 -171
  437. package/dist/tabs/__tests__/tabs.test.mjs +0 -134
  438. package/dist/tag/__tests__/tag.ssr.test.cjs +0 -45
  439. package/dist/tag/__tests__/tag.ssr.test.mjs +0 -48
  440. package/dist/tag/__tests__/tag.test.cjs +0 -194
  441. package/dist/tag/__tests__/tag.test.mjs +0 -167
  442. package/dist/time-picker/__tests__/time-picker.ssr.test.cjs +0 -46
  443. package/dist/time-picker/__tests__/time-picker.ssr.test.mjs +0 -43
  444. package/dist/time-picker/__tests__/time-picker.test.cjs +0 -228
  445. package/dist/time-picker/__tests__/time-picker.test.mjs +0 -218
  446. package/dist/time-picker/__tests__/time-spinner.test.cjs +0 -196
  447. package/dist/time-picker/__tests__/time-spinner.test.mjs +0 -162
  448. package/dist/time-select/__tests__/time-select.ssr.test.cjs +0 -42
  449. package/dist/time-select/__tests__/time-select.ssr.test.mjs +0 -37
  450. package/dist/time-select/__tests__/time-select.test.cjs +0 -390
  451. package/dist/time-select/__tests__/time-select.test.mjs +0 -374
  452. package/dist/tooltip/__tests__/tooltip.ssr.test.cjs +0 -55
  453. package/dist/tooltip/__tests__/tooltip.ssr.test.mjs +0 -76
  454. package/dist/tooltip/__tests__/tooltip.test.cjs +0 -132
  455. package/dist/tooltip/__tests__/tooltip.test.mjs +0 -121
  456. package/dist/transfer/__tests__/transfer.ssr.test.cjs +0 -47
  457. package/dist/transfer/__tests__/transfer.ssr.test.mjs +0 -44
  458. package/dist/transfer/__tests__/transfer.test.cjs +0 -422
  459. package/dist/transfer/__tests__/transfer.test.mjs +0 -405
  460. package/dist/tree/__tests__/tree.perf.test.cjs +0 -182
  461. package/dist/tree/__tests__/tree.perf.test.mjs +0 -198
  462. package/dist/tree/__tests__/tree.ssr.test.cjs +0 -56
  463. package/dist/tree/__tests__/tree.ssr.test.mjs +0 -45
  464. package/dist/tree/__tests__/tree.test.cjs +0 -488
  465. package/dist/tree/__tests__/tree.test.mjs +0 -333
  466. package/dist/tree-select/__tests__/tree-select.ssr.test.cjs +0 -52
  467. package/dist/tree-select/__tests__/tree-select.ssr.test.mjs +0 -55
  468. package/dist/tree-select/__tests__/tree-select.test.cjs +0 -231
  469. package/dist/tree-select/__tests__/tree-select.test.mjs +0 -189
  470. package/dist/typography/__tests__/typography.ssr.test.cjs +0 -85
  471. package/dist/typography/__tests__/typography.ssr.test.mjs +0 -63
  472. package/dist/typography/__tests__/typography.test.cjs +0 -362
  473. package/dist/typography/__tests__/typography.test.mjs +0 -161
  474. package/dist/upload/__tests__/upload.ssr.test.cjs +0 -28
  475. package/dist/upload/__tests__/upload.ssr.test.mjs +0 -26
  476. package/dist/upload/__tests__/upload.test.cjs +0 -467
  477. package/dist/upload/__tests__/upload.test.mjs +0 -336
  478. package/dist/waterfall/__tests__/waterfall.ssr.test.cjs +0 -38
  479. package/dist/waterfall/__tests__/waterfall.ssr.test.mjs +0 -39
  480. package/dist/waterfall/__tests__/waterfall.test.cjs +0 -122
  481. package/dist/waterfall/__tests__/waterfall.test.mjs +0 -85
  482. package/dist/watermark/__tests__/watermark.ssr.test.cjs +0 -32
  483. package/dist/watermark/__tests__/watermark.ssr.test.mjs +0 -30
  484. package/dist/watermark/__tests__/watermark.test.cjs +0 -127
  485. package/dist/watermark/__tests__/watermark.test.mjs +0 -124
@@ -1,322 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import { mount } from "@vue/test-utils";
3
- import { nextTick } from "vue";
4
- import AiSender from "../src/ai-sender.vue";
5
- describe("YhAiSender", () => {
6
- beforeEach(() => {
7
- vi.useFakeTimers();
8
- });
9
- afterEach(() => {
10
- vi.useRealTimers();
11
- });
12
- it("should render with base class", () => {
13
- const wrapper = mount(AiSender);
14
- expect(wrapper.find(".yh-ai-sender").exists()).toBe(true);
15
- });
16
- it("should render textarea", () => {
17
- const wrapper = mount(AiSender);
18
- expect(wrapper.find("textarea").exists()).toBe(true);
19
- });
20
- it("should render send button", () => {
21
- const wrapper = mount(AiSender);
22
- expect(wrapper.find(".yh-ai-sender__send-btn").exists()).toBe(true);
23
- });
24
- it("should display modelValue in textarea", () => {
25
- const wrapper = mount(AiSender, { props: { modelValue: "hello" } });
26
- expect(wrapper.find("textarea").element.value).toBe("hello");
27
- });
28
- it("should emit update:modelValue on input", async () => {
29
- const wrapper = mount(AiSender, { props: { modelValue: "" } });
30
- await wrapper.find("textarea").setValue("new text");
31
- const emitted = wrapper.emitted("update:modelValue");
32
- expect(emitted).toBeTruthy();
33
- expect(emitted[emitted.length - 1][0]).toBe("new text");
34
- });
35
- it("should emit change on input", async () => {
36
- const wrapper = mount(AiSender, { props: { modelValue: "" } });
37
- await wrapper.find("textarea").setValue("changed");
38
- expect(wrapper.emitted("change")).toBeTruthy();
39
- });
40
- it("should apply is-disabled class when disabled=true", () => {
41
- const wrapper = mount(AiSender, { props: { disabled: true } });
42
- expect(wrapper.find(".yh-ai-sender").classes()).toContain("is-disabled");
43
- });
44
- it("should disable textarea when disabled=true", () => {
45
- const wrapper = mount(AiSender, { props: { disabled: true } });
46
- expect(wrapper.find("textarea").element.disabled).toBe(true);
47
- });
48
- it("should apply is-loading class when loading=true", () => {
49
- const wrapper = mount(AiSender, { props: { loading: true } });
50
- expect(wrapper.find(".yh-ai-sender").classes()).toContain("is-loading");
51
- });
52
- it("should disable textarea when loading=true", () => {
53
- const wrapper = mount(AiSender, { props: { loading: true } });
54
- expect(wrapper.find("textarea").element.disabled).toBe(true);
55
- });
56
- it("should emit send when button clicked with text", async () => {
57
- const wrapper = mount(AiSender, { props: { modelValue: "Hello" } });
58
- await wrapper.find(".yh-ai-sender__send-btn").trigger("click");
59
- expect(wrapper.emitted("send")).toBeTruthy();
60
- expect(wrapper.emitted("send")[0][0]).toBe("Hello");
61
- });
62
- it("should NOT emit send when textarea is empty", async () => {
63
- const wrapper = mount(AiSender, { props: { modelValue: "" } });
64
- await wrapper.find(".yh-ai-sender__send-btn").trigger("click");
65
- expect(wrapper.emitted("send")).toBeFalsy();
66
- });
67
- it("should NOT emit send when disabled", async () => {
68
- const wrapper = mount(AiSender, { props: { modelValue: "text", disabled: true } });
69
- await wrapper.find(".yh-ai-sender__send-btn").trigger("click");
70
- expect(wrapper.emitted("send")).toBeFalsy();
71
- });
72
- it("should NOT emit send when loading", async () => {
73
- const wrapper = mount(AiSender, { props: { modelValue: "text", loading: true } });
74
- await wrapper.find(".yh-ai-sender__send-btn").trigger("click");
75
- expect(wrapper.emitted("send")).toBeFalsy();
76
- });
77
- it("should emit send on Enter (without Shift)", async () => {
78
- const wrapper = mount(AiSender, { props: { modelValue: "Hello" } });
79
- await wrapper.find("textarea").trigger("keydown", { key: "Enter", shiftKey: false });
80
- expect(wrapper.emitted("send")).toBeTruthy();
81
- });
82
- it("should NOT emit send on Shift+Enter", async () => {
83
- const wrapper = mount(AiSender, { props: { modelValue: "Hello" } });
84
- await wrapper.find("textarea").trigger("keydown", { key: "Enter", shiftKey: true });
85
- expect(wrapper.emitted("send")).toBeFalsy();
86
- });
87
- it("should clear value after send", async () => {
88
- const wrapper = mount(AiSender, { props: { modelValue: "Hello" } });
89
- await wrapper.find(".yh-ai-sender__send-btn").trigger("click");
90
- await nextTick();
91
- const emitted = wrapper.emitted("update:modelValue");
92
- expect(emitted[emitted.length - 1][0]).toBe("");
93
- });
94
- it("should show clear button when clearable=true and has text", () => {
95
- const wrapper = mount(AiSender, {
96
- props: { modelValue: "text", clearable: true }
97
- });
98
- expect(wrapper.find(".yh-ai-sender__clear-btn").exists()).toBe(true);
99
- });
100
- it("should NOT show clear button when clearable=true but empty", () => {
101
- const wrapper = mount(AiSender, {
102
- props: { modelValue: "", clearable: true }
103
- });
104
- expect(wrapper.find(".yh-ai-sender__clear-btn").exists()).toBe(false);
105
- });
106
- it("should emit clear when clear button clicked", async () => {
107
- const wrapper = mount(AiSender, {
108
- props: { modelValue: "text", clearable: true }
109
- });
110
- await wrapper.find(".yh-ai-sender__clear-btn").trigger("click");
111
- expect(wrapper.emitted("clear")).toBeTruthy();
112
- });
113
- it("should show word limit when showWordLimit=true and maxLength set", () => {
114
- const wrapper = mount(AiSender, {
115
- props: { modelValue: "hi", showWordLimit: true, maxLength: 100 }
116
- });
117
- expect(wrapper.find(".yh-ai-sender__word-limit").exists()).toBe(true);
118
- expect(wrapper.find(".yh-ai-sender__word-limit").text()).toContain("100");
119
- });
120
- it("should apply is-focused on textarea focus", async () => {
121
- const wrapper = mount(AiSender);
122
- await wrapper.find("textarea").trigger("focus");
123
- expect(wrapper.find(".yh-ai-sender").classes()).toContain("is-focused");
124
- });
125
- it("should remove is-focused on textarea blur", async () => {
126
- const wrapper = mount(AiSender);
127
- await wrapper.get("textarea").trigger("focus");
128
- await wrapper.get("textarea").trigger("blur");
129
- vi.advanceTimersByTime(400);
130
- await nextTick();
131
- expect(wrapper.find(".yh-ai-sender").classes()).not.toContain("is-focused");
132
- });
133
- it("should render prefix slot", () => {
134
- const wrapper = mount(AiSender, {
135
- slots: { prefix: '<div class="custom-prefix">P</div>' }
136
- });
137
- expect(wrapper.find(".custom-prefix").exists()).toBe(true);
138
- });
139
- it("should render actions slot", () => {
140
- const wrapper = mount(AiSender, {
141
- slots: { actions: '<button class="custom-action">Extra</button>' }
142
- });
143
- expect(wrapper.find(".custom-action").exists()).toBe(true);
144
- });
145
- it("should render submit slot overriding default send button", () => {
146
- const wrapper = mount(AiSender, {
147
- slots: { submit: '<button class="custom-submit">Go</button>' }
148
- });
149
- expect(wrapper.find(".custom-submit").exists()).toBe(true);
150
- });
151
- it("should update when modelValue prop changes", async () => {
152
- const wrapper = mount(AiSender, { props: { modelValue: "old" } });
153
- await wrapper.setProps({ modelValue: "new text" });
154
- await nextTick();
155
- expect(wrapper.find("textarea").element.value).toBe("new text");
156
- });
157
- describe("Slash Commands", () => {
158
- const commands = [
159
- { key: "help", label: "Help" },
160
- { key: "settings", label: "Settings", prompt: "Show Settings " }
161
- ];
162
- it("should show slash commands panel when triggering /", async () => {
163
- const wrapper = mount(AiSender, { props: { commands } });
164
- const textarea = wrapper.get("textarea");
165
- await textarea.setValue("/h");
166
- textarea.element.selectionStart = 2;
167
- await textarea.trigger("input");
168
- await nextTick();
169
- expect(wrapper.find(".yh-ai-sender__command-panel").exists()).toBe(true);
170
- expect(wrapper.findAll(".yh-ai-sender__command-item").length).toBe(1);
171
- });
172
- it("should navigate and select command with keyboard", async () => {
173
- const wrapper = mount(AiSender, { props: { commands } });
174
- const textarea = wrapper.find("textarea");
175
- await textarea.setValue("/");
176
- textarea.element.selectionStart = 1;
177
- await textarea.trigger("input");
178
- expect(wrapper.find(".yh-ai-sender__command-panel").exists()).toBe(true);
179
- await textarea.trigger("keydown", { key: "ArrowDown" });
180
- await textarea.trigger("keydown", { key: "ArrowUp" });
181
- await textarea.trigger("keydown", { key: "Enter" });
182
- expect(wrapper.emitted("command")[0][0]).toEqual(commands[0]);
183
- expect(textarea.element.value).toBe("/help ");
184
- });
185
- it("should select command via mouse click", async () => {
186
- const wrapper = mount(AiSender, { props: { commands } });
187
- const textarea = wrapper.find("textarea");
188
- await textarea.setValue("/");
189
- textarea.element.selectionStart = 1;
190
- await textarea.trigger("input");
191
- await wrapper.find(".yh-ai-sender__command-item").trigger("click");
192
- expect(wrapper.emitted("command")).toBeTruthy();
193
- });
194
- it("should hide commands on Escape", async () => {
195
- const wrapper = mount(AiSender, { props: { commands } });
196
- const textarea = wrapper.find("textarea");
197
- await textarea.setValue("/");
198
- textarea.element.selectionStart = 1;
199
- await textarea.trigger("input");
200
- await textarea.trigger("keydown", { key: "Escape" });
201
- expect(wrapper.find(".yh-ai-sender__command-panel").exists()).toBe(false);
202
- });
203
- it("should ignore slash followed by space", async () => {
204
- const wrapper = mount(AiSender, { props: { commands } });
205
- const textarea = wrapper.find("textarea");
206
- await textarea.setValue("/ ");
207
- textarea.element.selectionStart = 2;
208
- await textarea.trigger("input");
209
- expect(wrapper.find(".yh-ai-sender__command-panel").exists()).toBe(false);
210
- });
211
- it("should hide commands on blur after delay", async () => {
212
- const wrapper = mount(AiSender, { props: { commands } });
213
- const textarea = wrapper.find("textarea");
214
- await textarea.setValue("/");
215
- textarea.element.selectionStart = 1;
216
- await textarea.trigger("input");
217
- await textarea.trigger("blur");
218
- vi.advanceTimersByTime(400);
219
- await nextTick();
220
- expect(wrapper.find(".yh-ai-sender__command-panel").exists()).toBe(false);
221
- });
222
- });
223
- describe("Attachments", () => {
224
- it("should render attachments and emit remove event", async () => {
225
- const attachments = [
226
- { id: "1", name: "img.png", type: "image/png", url: "img.png" },
227
- {
228
- id: "2",
229
- name: "doc.pdf",
230
- type: "application/pdf",
231
- url: "doc.pdf",
232
- status: "uploading",
233
- progress: 50
234
- }
235
- ];
236
- const wrapper = mount(AiSender, { props: { attachments } });
237
- const items = wrapper.findAll(".yh-ai-sender__attachment-item");
238
- expect(items.length).toBe(2);
239
- expect(wrapper.find(".yh-ai-sender__progress-bar").exists()).toBe(true);
240
- await wrapper.find(".yh-ai-sender__attachment-remove").trigger("click");
241
- expect(wrapper.emitted("remove-attachment")[0][0]).toEqual(attachments[0]);
242
- });
243
- });
244
- describe("Drag and Drop", () => {
245
- it("should handle dragenter, dragover, dragleave and drop", async () => {
246
- const wrapper = mount(AiSender);
247
- const container = wrapper.find(".yh-ai-sender");
248
- await container.trigger("dragenter");
249
- expect(wrapper.find(".yh-ai-sender__drag-overlay").exists()).toBe(true);
250
- await container.trigger("dragover");
251
- expect(wrapper.find(".yh-ai-sender__drag-overlay").exists()).toBe(true);
252
- const leaveEvent = new DragEvent("dragleave", { clientX: -10, clientY: -10 });
253
- Object.defineProperty(leaveEvent, "currentTarget", {
254
- value: { getBoundingClientRect: () => ({ left: 0, right: 100, top: 0, bottom: 100 }) }
255
- });
256
- await container.trigger("dragleave", leaveEvent);
257
- await nextTick();
258
- await container.trigger("dragover");
259
- const file = new File([""], "test.png", { type: "image/png" });
260
- const dropEvent = { dataTransfer: { files: [file] }, preventDefault: vi.fn() };
261
- await container.trigger("drop", dropEvent);
262
- expect(wrapper.emitted("upload")).toBeTruthy();
263
- expect(wrapper.emitted("upload")[0][0]).toEqual([file]);
264
- const leaveOutside = new DragEvent("dragleave", { clientX: -10, clientY: -10 });
265
- Object.defineProperty(leaveOutside, "currentTarget", {
266
- value: { getBoundingClientRect: () => ({ left: 0, right: 100, top: 0, bottom: 100 }) }
267
- });
268
- await container.trigger("dragleave", leaveOutside);
269
- expect(wrapper.vm.isDragging).toBe(false);
270
- });
271
- it("should ignore drag events when disabled or loading", async () => {
272
- const wrapper = mount(AiSender, { props: { disabled: true } });
273
- const container = wrapper.find(".yh-ai-sender");
274
- await container.trigger("dragenter");
275
- expect(wrapper.find(".yh-ai-sender__drag-overlay").exists()).toBe(false);
276
- await container.trigger("dragover");
277
- expect(wrapper.find(".yh-ai-sender__drag-overlay").exists()).toBe(false);
278
- await container.trigger("drop");
279
- expect(wrapper.emitted("upload")).toBeFalsy();
280
- });
281
- });
282
- describe("Edge Cases", () => {
283
- it("should handle Enter key scenarios", async () => {
284
- const wrapper = mount(AiSender);
285
- const textarea = wrapper.find("textarea");
286
- const preventDefault = vi.fn();
287
- await textarea.trigger("keydown", { key: "Enter", preventDefault });
288
- expect(preventDefault).toHaveBeenCalled();
289
- expect(wrapper.emitted("send")).toBeFalsy();
290
- const wrapper2 = mount(AiSender, { props: { modelValue: " " } });
291
- const preventDef2 = vi.fn();
292
- await wrapper2.find("textarea").trigger("keydown", { key: "Enter", preventDefault: preventDef2 });
293
- expect(preventDef2).toHaveBeenCalled();
294
- });
295
- it("should handle slash command boundary cases", async () => {
296
- const wrapper = mount(AiSender, { props: { modelValue: "abc/" } });
297
- const textarea = wrapper.find("textarea");
298
- await textarea.trigger("input");
299
- expect(wrapper.vm.showCommands).toBe(false);
300
- });
301
- });
302
- describe("aiSenderEmits", () => {
303
- it("should validate send event", async () => {
304
- const { aiSenderEmits } = await import("../src/ai-sender.mjs");
305
- expect(aiSenderEmits.send("hello")).toBe(true);
306
- expect(aiSenderEmits.send("")).toBe(true);
307
- });
308
- it("should pass-through other event validators", async () => {
309
- const { aiSenderEmits } = await import("../src/ai-sender.mjs");
310
- expect(aiSenderEmits["update:modelValue"]("text")).toBe(true);
311
- expect(aiSenderEmits.change("text")).toBe(true);
312
- expect(aiSenderEmits.command({ key: "a", label: "b" })).toBe(true);
313
- expect(aiSenderEmits.blur(new FocusEvent("blur"))).toBe(true);
314
- expect(aiSenderEmits.focus(new FocusEvent("focus"))).toBe(true);
315
- expect(aiSenderEmits.clear()).toBe(true);
316
- expect(
317
- aiSenderEmits["remove-attachment"]({ id: "1", name: "f", type: "doc", url: "doc" })
318
- ).toBe(true);
319
- expect(aiSenderEmits.upload([new File([""], "test.png")])).toBe(true);
320
- });
321
- });
322
- });
@@ -1,72 +0,0 @@
1
- "use strict";
2
-
3
- var _vitest = require("vitest");
4
- var _serverRenderer = require("@vue/server-renderer");
5
- var _vue = require("vue");
6
- var _aiSources = _interopRequireDefault(require("../src/ai-sources.vue"));
7
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- (0, _vitest.describe)("YhAiSources SSR", () => {
9
- const mockSources = [{
10
- id: 1,
11
- title: "SSR Source 1",
12
- source: "vuejs.org",
13
- fileType: "web",
14
- score: 0.95,
15
- excerpt: "Excerpt 1"
16
- }, {
17
- id: 2,
18
- title: "SSR Source 2",
19
- source: "github.com",
20
- fileType: "code",
21
- score: 0.85,
22
- excerpt: "Excerpt 2"
23
- }];
24
- (0, _vitest.it)("should render basic structure in inline mode on server", async () => {
25
- const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiSources.default, {
26
- sources: mockSources,
27
- mode: "inline"
28
- }));
29
- (0, _vitest.expect)(html).toContain("yh-ai-sources");
30
- (0, _vitest.expect)(html).toContain("yh-ai-sources--inline");
31
- (0, _vitest.expect)(html).toContain("SSR Source 1");
32
- (0, _vitest.expect)(html).toContain("SSR Source 2");
33
- (0, _vitest.expect)(html).toContain("2");
34
- (0, _vitest.expect)(html).toContain("\u53C2\u8003\u6765\u6E90");
35
- });
36
- (0, _vitest.it)("should render in card mode on server", async () => {
37
- const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiSources.default, {
38
- sources: mockSources,
39
- mode: "card"
40
- }));
41
- (0, _vitest.expect)(html).toContain("yh-ai-sources--card");
42
- (0, _vitest.expect)(html).toContain("yh-ai-sources__source-card");
43
- (0, _vitest.expect)(html).toContain("\u5F15\u7528\u6765\u6E90");
44
- });
45
- (0, _vitest.it)("should render in badge mode on server", async () => {
46
- const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiSources.default, {
47
- sources: mockSources,
48
- mode: "badge"
49
- }));
50
- (0, _vitest.expect)(html).toContain("yh-ai-sources--badge");
51
- (0, _vitest.expect)(html).toContain("yh-ai-sources__badge");
52
- });
53
- (0, _vitest.it)("should render relevance score, file types and excerpt on server", async () => {
54
- const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiSources.default, {
55
- sources: mockSources,
56
- mode: "card",
57
- showScore: true
58
- }));
59
- (0, _vitest.expect)(html).toContain("95%");
60
- (0, _vitest.expect)(html).toContain("\u76F8\u5173\u5EA6");
61
- (0, _vitest.expect)(html).toContain("Excerpt 1");
62
- });
63
- (0, _vitest.it)("should handle expansion text on server", async () => {
64
- const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(_aiSources.default, {
65
- sources: mockSources,
66
- mode: "card",
67
- maxVisible: 1
68
- }));
69
- (0, _vitest.expect)(html).toContain("\u663E\u793A\u5168\u90E8");
70
- (0, _vitest.expect)(html).toContain("(2)");
71
- });
72
- });
@@ -1,82 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { renderToString } from "@vue/server-renderer";
3
- import { h } from "vue";
4
- import AiSources from "../src/ai-sources.vue";
5
- describe("YhAiSources SSR", () => {
6
- const mockSources = [
7
- {
8
- id: 1,
9
- title: "SSR Source 1",
10
- source: "vuejs.org",
11
- fileType: "web",
12
- score: 0.95,
13
- excerpt: "Excerpt 1"
14
- },
15
- {
16
- id: 2,
17
- title: "SSR Source 2",
18
- source: "github.com",
19
- fileType: "code",
20
- score: 0.85,
21
- excerpt: "Excerpt 2"
22
- }
23
- ];
24
- it("should render basic structure in inline mode on server", async () => {
25
- const html = await renderToString(
26
- h(AiSources, {
27
- sources: mockSources,
28
- mode: "inline"
29
- })
30
- );
31
- expect(html).toContain("yh-ai-sources");
32
- expect(html).toContain("yh-ai-sources--inline");
33
- expect(html).toContain("SSR Source 1");
34
- expect(html).toContain("SSR Source 2");
35
- expect(html).toContain("2");
36
- expect(html).toContain("\u53C2\u8003\u6765\u6E90");
37
- });
38
- it("should render in card mode on server", async () => {
39
- const html = await renderToString(
40
- h(AiSources, {
41
- sources: mockSources,
42
- mode: "card"
43
- })
44
- );
45
- expect(html).toContain("yh-ai-sources--card");
46
- expect(html).toContain("yh-ai-sources__source-card");
47
- expect(html).toContain("\u5F15\u7528\u6765\u6E90");
48
- });
49
- it("should render in badge mode on server", async () => {
50
- const html = await renderToString(
51
- h(AiSources, {
52
- sources: mockSources,
53
- mode: "badge"
54
- })
55
- );
56
- expect(html).toContain("yh-ai-sources--badge");
57
- expect(html).toContain("yh-ai-sources__badge");
58
- });
59
- it("should render relevance score, file types and excerpt on server", async () => {
60
- const html = await renderToString(
61
- h(AiSources, {
62
- sources: mockSources,
63
- mode: "card",
64
- showScore: true
65
- })
66
- );
67
- expect(html).toContain("95%");
68
- expect(html).toContain("\u76F8\u5173\u5EA6");
69
- expect(html).toContain("Excerpt 1");
70
- });
71
- it("should handle expansion text on server", async () => {
72
- const html = await renderToString(
73
- h(AiSources, {
74
- sources: mockSources,
75
- mode: "card",
76
- maxVisible: 1
77
- })
78
- );
79
- expect(html).toContain("\u663E\u793A\u5168\u90E8");
80
- expect(html).toContain("(2)");
81
- });
82
- });
@@ -1,200 +0,0 @@
1
- "use strict";
2
-
3
- var _testUtils = require("@vue/test-utils");
4
- var _vitest = require("vitest");
5
- var _aiSources = _interopRequireDefault(require("../src/ai-sources.vue"));
6
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
- (0, _vitest.describe)("AiSources", () => {
8
- const mockSources = [{
9
- id: 1,
10
- title: "Source 1",
11
- source: "vuejs.org",
12
- fileType: "web",
13
- score: 0.95,
14
- excerpt: "Excerpt 1"
15
- }, {
16
- id: 2,
17
- title: "Source 2",
18
- source: "github.com",
19
- fileType: "code",
20
- score: 0.85,
21
- excerpt: "Excerpt 2"
22
- }, {
23
- id: 3,
24
- title: "Source 3",
25
- fileType: "pdf",
26
- score: 0.75
27
- }, {
28
- id: 4,
29
- title: "Source 4",
30
- fileType: "doc",
31
- score: 0.55
32
- }, {
33
- id: 5,
34
- title: "Source 5",
35
- fileType: "unknown_type",
36
- score: 0.2
37
- }, {
38
- id: 6,
39
- title: "Source 6",
40
- url: "https://example.com"
41
- }];
42
- (0, _vitest.it)("renders inline mode by default", () => {
43
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
44
- props: {
45
- sources: mockSources,
46
- maxVisible: 6
47
- }
48
- });
49
- (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-sources--inline");
50
- (0, _vitest.expect)(wrapper.find(".yh-ai-sources__inline-item").exists()).toBe(true);
51
- (0, _vitest.expect)(wrapper.findAll(".yh-ai-sources__inline-item")).toHaveLength(6);
52
- });
53
- (0, _vitest.it)("renders card mode correctly", () => {
54
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
55
- props: {
56
- sources: mockSources,
57
- mode: "card"
58
- }
59
- });
60
- (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-sources--card");
61
- (0, _vitest.expect)(wrapper.find(".yh-ai-sources__source-card").exists()).toBe(true);
62
- });
63
- (0, _vitest.it)("renders badge mode correctly", () => {
64
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
65
- props: {
66
- sources: mockSources,
67
- mode: "badge",
68
- maxVisible: 6
69
- }
70
- });
71
- (0, _vitest.expect)(wrapper.classes()).toContain("yh-ai-sources--badge");
72
- (0, _vitest.expect)(wrapper.findAll(".yh-ai-sources__badge")).toHaveLength(6);
73
- });
74
- (0, _vitest.it)("handles expansion correctly", async () => {
75
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
76
- props: {
77
- sources: mockSources,
78
- maxVisible: 1,
79
- mode: "card"
80
- }
81
- });
82
- (0, _vitest.expect)(wrapper.findAll(".yh-ai-sources__source-card")).toHaveLength(1);
83
- const expandBtn = wrapper.find(".yh-ai-sources__expand-btn");
84
- (0, _vitest.expect)(expandBtn.exists()).toBe(true);
85
- await expandBtn.trigger("click");
86
- (0, _vitest.expect)(wrapper.findAll(".yh-ai-sources__source-card")).toHaveLength(6);
87
- });
88
- (0, _vitest.it)("emits events on interaction", async () => {
89
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
90
- props: {
91
- sources: mockSources,
92
- mode: "card"
93
- }
94
- });
95
- await wrapper.find(".yh-ai-sources__source-card").trigger("click");
96
- (0, _vitest.expect)(wrapper.emitted("click")).toBeTruthy();
97
- (0, _vitest.expect)(wrapper.emitted("click")[0][0]).toEqual(mockSources[0]);
98
- });
99
- (0, _vitest.it)("shows relevance score when enabled", () => {
100
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
101
- props: {
102
- sources: mockSources,
103
- showScore: true,
104
- mode: "card"
105
- }
106
- });
107
- (0, _vitest.expect)(wrapper.find(".yh-ai-sources__score-badge").text()).toContain("95%");
108
- });
109
- (0, _vitest.it)("handles badge mode click and drawer", async () => {
110
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
111
- props: {
112
- sources: mockSources,
113
- mode: "badge"
114
- }
115
- });
116
- const badgeBtn = wrapper.find(".yh-ai-sources__badge");
117
- await badgeBtn.trigger("click");
118
- (0, _vitest.expect)(wrapper.vm.drawerVisible).toBe(true);
119
- const mockSrc = mockSources[0];
120
- wrapper.vm.handleClick(mockSrc);
121
- (0, _vitest.expect)(wrapper.emitted("click")).toBeTruthy();
122
- const openMock = _vitest.vi.spyOn(window, "open").mockImplementation(() => null);
123
- const mockLinkSrc = mockSources[5];
124
- wrapper.vm.handleOpen(new MouseEvent("click"), mockLinkSrc);
125
- (0, _vitest.expect)(wrapper.emitted("open")).toBeTruthy();
126
- openMock.mockRestore();
127
- });
128
- (0, _vitest.it)("renders score colors correctly", () => {
129
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
130
- props: {
131
- sources: mockSources,
132
- mode: "card"
133
- }
134
- });
135
- const badges = wrapper.findAll(".yh-ai-sources__score-badge");
136
- });
137
- (0, _vitest.it)("handles scrollToSource expose", async () => {
138
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
139
- props: {
140
- sources: mockSources,
141
- mode: "card"
142
- }
143
- });
144
- Element.prototype.scrollIntoView = _vitest.vi.fn();
145
- wrapper.vm.scrollToSource(1);
146
- await wrapper.vm.$nextTick();
147
- (0, _vitest.expect)(Element.prototype.scrollIntoView).toHaveBeenCalled();
148
- (0, _vitest.expect)(wrapper.find(".is-highlighted").exists()).toBe(true);
149
- });
150
- (0, _vitest.it)("handles expansion in inline mode", async () => {
151
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
152
- props: {
153
- sources: mockSources,
154
- mode: "inline",
155
- maxVisible: 2
156
- }
157
- });
158
- const expandBtn = wrapper.find(".yh-ai-sources__expand-btn");
159
- (0, _vitest.expect)(expandBtn.exists()).toBe(true);
160
- await expandBtn.trigger("click");
161
- (0, _vitest.expect)(wrapper.findAll(".yh-ai-sources__inline-item")).toHaveLength(mockSources.length);
162
- });
163
- (0, _vitest.it)("covers aiSourcesEmits validators", async () => {
164
- const {
165
- aiSourcesEmits
166
- } = await Promise.resolve().then(() => require("../src/ai-sources.cjs"));
167
- (0, _vitest.expect)(aiSourcesEmits.click(mockSources[0])).toBe(true);
168
- (0, _vitest.expect)(aiSourcesEmits.open(mockSources[0])).toBe(true);
169
- (0, _vitest.expect)(aiSourcesEmits.click(null)).toBe(false);
170
- (0, _vitest.expect)(aiSourcesEmits.open(null)).toBe(false);
171
- });
172
- (0, _vitest.it)("covers missing Branches in card handleOpen and default sources", async () => {
173
- const wrapperEmpty = (0, _testUtils.mount)(_aiSources.default);
174
- (0, _vitest.expect)(wrapperEmpty.props().sources).toEqual([]);
175
- const wrapperLink = (0, _testUtils.mount)(_aiSources.default, {
176
- props: {
177
- sources: [{
178
- id: "link",
179
- title: "url",
180
- url: "https://test"
181
- }],
182
- mode: "inline"
183
- }
184
- });
185
- const openMock = _vitest.vi.spyOn(window, "open").mockImplementation(() => null);
186
- await wrapperLink.find(".yh-ai-sources__inline-open").trigger("click");
187
- (0, _vitest.expect)(openMock).toHaveBeenCalledWith("https://test", "_blank", "noopener");
188
- openMock.mockRestore();
189
- });
190
- (0, _vitest.it)("handles click in inline mode", async () => {
191
- const wrapper = (0, _testUtils.mount)(_aiSources.default, {
192
- props: {
193
- sources: mockSources,
194
- mode: "inline"
195
- }
196
- });
197
- await wrapper.find(".yh-ai-sources__inline-item").trigger("click");
198
- (0, _vitest.expect)(wrapper.emitted("click")).toBeTruthy();
199
- });
200
- });