@yh-ui/components 0.1.21 → 0.1.22

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 (484) hide show
  1. package/README.md +2 -0
  2. package/dist/form/index.cjs +1 -1
  3. package/dist/form/index.d.ts +1 -1
  4. package/dist/form/index.mjs +1 -1
  5. package/dist/icon/index.cjs +1 -1
  6. package/dist/icon/index.d.ts +1 -1
  7. package/dist/icon/index.mjs +1 -1
  8. package/dist/loading/index.cjs +1 -1
  9. package/dist/loading/index.d.ts +1 -1
  10. package/dist/loading/index.mjs +1 -1
  11. package/dist/message/src/method.cjs +1 -1
  12. package/dist/message/src/method.d.ts +1 -1
  13. package/dist/message/src/method.mjs +1 -1
  14. package/dist/message-box/index.cjs +1 -1
  15. package/dist/message-box/index.d.ts +1 -1
  16. package/dist/message-box/index.mjs +1 -1
  17. package/dist/notification/src/method.cjs +1 -1
  18. package/dist/notification/src/method.d.ts +1 -1
  19. package/dist/notification/src/method.mjs +1 -1
  20. package/dist/resolver.cjs +1 -1
  21. package/dist/resolver.d.ts +7 -5
  22. package/dist/resolver.mjs +1 -1
  23. package/dist/style.css +584 -0
  24. package/package.json +6 -6
  25. package/dist/affix/__tests__/affix.bottom.test.cjs +0 -101
  26. package/dist/affix/__tests__/affix.bottom.test.mjs +0 -88
  27. package/dist/affix/__tests__/affix.ssr.test.cjs +0 -38
  28. package/dist/affix/__tests__/affix.ssr.test.mjs +0 -51
  29. package/dist/affix/__tests__/affix.test.cjs +0 -185
  30. package/dist/affix/__tests__/affix.test.mjs +0 -180
  31. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.cjs +0 -55
  32. package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.mjs +0 -39
  33. package/dist/ai-action-group/__tests__/ai-action-group.test.cjs +0 -235
  34. package/dist/ai-action-group/__tests__/ai-action-group.test.mjs +0 -157
  35. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.cjs +0 -61
  36. package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.mjs +0 -65
  37. package/dist/ai-agent-card/__tests__/ai-agent-card.test.cjs +0 -205
  38. package/dist/ai-agent-card/__tests__/ai-agent-card.test.mjs +0 -133
  39. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.cjs +0 -73
  40. package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.mjs +0 -68
  41. package/dist/ai-artifacts/__tests__/ai-artifacts.test.cjs +0 -128
  42. package/dist/ai-artifacts/__tests__/ai-artifacts.test.mjs +0 -109
  43. package/dist/ai-attachments/__tests__/ai-attachments.ssr.test.cjs +0 -50
  44. package/dist/ai-attachments/__tests__/ai-attachments.ssr.test.mjs +0 -33
  45. package/dist/ai-attachments/__tests__/ai-attachments.test.cjs +0 -113
  46. package/dist/ai-attachments/__tests__/ai-attachments.test.mjs +0 -81
  47. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.cjs +0 -95
  48. package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.mjs +0 -66
  49. package/dist/ai-bubble/__tests__/ai-bubble.test.cjs +0 -624
  50. package/dist/ai-bubble/__tests__/ai-bubble.test.mjs +0 -393
  51. package/dist/ai-bubble-list/__tests__/ai-bubble-list.ssr.test.cjs +0 -51
  52. package/dist/ai-bubble-list/__tests__/ai-bubble-list.ssr.test.mjs +0 -51
  53. package/dist/ai-bubble-list/__tests__/ai-bubble-list.test.cjs +0 -138
  54. package/dist/ai-bubble-list/__tests__/ai-bubble-list.test.mjs +0 -112
  55. package/dist/ai-chat/__tests__/ai-chat.ssr.test.cjs +0 -90
  56. package/dist/ai-chat/__tests__/ai-chat.ssr.test.mjs +0 -77
  57. package/dist/ai-chat/__tests__/ai-chat.test.cjs +0 -177
  58. package/dist/ai-chat/__tests__/ai-chat.test.mjs +0 -129
  59. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.cjs +0 -75
  60. package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.mjs +0 -57
  61. package/dist/ai-code-block/__tests__/ai-code-block.test.cjs +0 -174
  62. package/dist/ai-code-block/__tests__/ai-code-block.test.mjs +0 -108
  63. package/dist/ai-code-editor/__tests__/ai-code-editor.ssr.test.cjs +0 -46
  64. package/dist/ai-code-editor/__tests__/ai-code-editor.ssr.test.mjs +0 -39
  65. package/dist/ai-code-editor/__tests__/ai-code-editor.test.cjs +0 -90
  66. package/dist/ai-code-editor/__tests__/ai-code-editor.test.mjs +0 -78
  67. package/dist/ai-code-runner/__tests__/ai-code-runner.ssr.test.cjs +0 -28
  68. package/dist/ai-code-runner/__tests__/ai-code-runner.ssr.test.mjs +0 -26
  69. package/dist/ai-code-runner/__tests__/ai-code-runner.test.cjs +0 -69
  70. package/dist/ai-code-runner/__tests__/ai-code-runner.test.mjs +0 -66
  71. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.cjs +0 -50
  72. package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.mjs +0 -42
  73. package/dist/ai-conversations/__tests__/ai-conversations.test.cjs +0 -67
  74. package/dist/ai-conversations/__tests__/ai-conversations.test.mjs +0 -51
  75. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.cjs +0 -62
  76. package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.mjs +0 -50
  77. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.cjs +0 -315
  78. package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.mjs +0 -226
  79. package/dist/ai-file-card/__tests__/ai-file-card.ssr.test.cjs +0 -45
  80. package/dist/ai-file-card/__tests__/ai-file-card.ssr.test.mjs +0 -29
  81. package/dist/ai-file-card/__tests__/ai-file-card.test.cjs +0 -160
  82. package/dist/ai-file-card/__tests__/ai-file-card.test.mjs +0 -109
  83. package/dist/ai-mention/__tests__/ai-mention.ssr.test.cjs +0 -38
  84. package/dist/ai-mention/__tests__/ai-mention.ssr.test.mjs +0 -37
  85. package/dist/ai-mention/__tests__/ai-mention.test.cjs +0 -113
  86. package/dist/ai-mention/__tests__/ai-mention.test.mjs +0 -84
  87. package/dist/ai-mermaid/__tests__/ai-mermaid.ssr.test.cjs +0 -43
  88. package/dist/ai-mermaid/__tests__/ai-mermaid.ssr.test.mjs +0 -33
  89. package/dist/ai-mermaid/__tests__/ai-mermaid.test.cjs +0 -113
  90. package/dist/ai-mermaid/__tests__/ai-mermaid.test.mjs +0 -92
  91. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.cjs +0 -49
  92. package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.mjs +0 -41
  93. package/dist/ai-prompts/__tests__/ai-prompts.test.cjs +0 -54
  94. package/dist/ai-prompts/__tests__/ai-prompts.test.mjs +0 -38
  95. package/dist/ai-provider/__tests__/ai-provider.ssr.test.cjs +0 -33
  96. package/dist/ai-provider/__tests__/ai-provider.ssr.test.mjs +0 -34
  97. package/dist/ai-provider/__tests__/ai-provider.test.cjs +0 -38
  98. package/dist/ai-provider/__tests__/ai-provider.test.mjs +0 -33
  99. package/dist/ai-sender/__tests__/ai-sender.ssr.test.cjs +0 -46
  100. package/dist/ai-sender/__tests__/ai-sender.ssr.test.mjs +0 -37
  101. package/dist/ai-sender/__tests__/ai-sender.test.cjs +0 -511
  102. package/dist/ai-sender/__tests__/ai-sender.test.mjs +0 -322
  103. package/dist/ai-sources/__tests__/ai-sources.ssr.test.cjs +0 -72
  104. package/dist/ai-sources/__tests__/ai-sources.ssr.test.mjs +0 -82
  105. package/dist/ai-sources/__tests__/ai-sources.test.cjs +0 -200
  106. package/dist/ai-sources/__tests__/ai-sources.test.mjs +0 -160
  107. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.cjs +0 -56
  108. package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.mjs +0 -42
  109. package/dist/ai-thinking/__tests__/ai-thinking.test.cjs +0 -151
  110. package/dist/ai-thinking/__tests__/ai-thinking.test.mjs +0 -96
  111. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.cjs +0 -88
  112. package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.mjs +0 -55
  113. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.cjs +0 -344
  114. package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.mjs +0 -237
  115. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.cjs +0 -32
  116. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.mjs +0 -25
  117. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.cjs +0 -130
  118. package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.mjs +0 -103
  119. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.cjs +0 -57
  120. package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.mjs +0 -39
  121. package/dist/ai-welcome/__tests__/ai-welcome.test.cjs +0 -169
  122. package/dist/ai-welcome/__tests__/ai-welcome.test.mjs +0 -113
  123. package/dist/alert/__tests__/alert.ssr.test.cjs +0 -28
  124. package/dist/alert/__tests__/alert.ssr.test.mjs +0 -29
  125. package/dist/alert/__tests__/alert.test.cjs +0 -123
  126. package/dist/alert/__tests__/alert.test.mjs +0 -110
  127. package/dist/autocomplete/__tests__/autocomplete.ssr.test.cjs +0 -54
  128. package/dist/autocomplete/__tests__/autocomplete.ssr.test.mjs +0 -47
  129. package/dist/autocomplete/__tests__/autocomplete.test.cjs +0 -299
  130. package/dist/autocomplete/__tests__/autocomplete.test.mjs +0 -263
  131. package/dist/avatar/__tests__/avatar.ssr.test.cjs +0 -103
  132. package/dist/avatar/__tests__/avatar.ssr.test.mjs +0 -108
  133. package/dist/avatar/__tests__/avatar.test.cjs +0 -146
  134. package/dist/avatar/__tests__/avatar.test.mjs +0 -125
  135. package/dist/back-top/__tests__/back-top.ssr.test.cjs +0 -13
  136. package/dist/back-top/__tests__/back-top.ssr.test.mjs +0 -10
  137. package/dist/back-top/__tests__/back-top.test.cjs +0 -88
  138. package/dist/back-top/__tests__/back-top.test.mjs +0 -76
  139. package/dist/badge/__tests__/badge.ssr.test.cjs +0 -36
  140. package/dist/badge/__tests__/badge.ssr.test.mjs +0 -33
  141. package/dist/badge/__tests__/badge.test.cjs +0 -115
  142. package/dist/badge/__tests__/badge.test.mjs +0 -112
  143. package/dist/breadcrumb/__tests__/breadcrumb.ssr.test.cjs +0 -22
  144. package/dist/breadcrumb/__tests__/breadcrumb.ssr.test.mjs +0 -20
  145. package/dist/breadcrumb/__tests__/breadcrumb.test.cjs +0 -64
  146. package/dist/breadcrumb/__tests__/breadcrumb.test.mjs +0 -51
  147. package/dist/button/__tests__/button.ssr.test.cjs +0 -52
  148. package/dist/button/__tests__/button.ssr.test.mjs +0 -55
  149. package/dist/button/__tests__/button.test.cjs +0 -207
  150. package/dist/button/__tests__/button.test.mjs +0 -141
  151. package/dist/calendar/__tests__/calendar.ssr.test.cjs +0 -65
  152. package/dist/calendar/__tests__/calendar.ssr.test.mjs +0 -63
  153. package/dist/calendar/__tests__/calendar.test.cjs +0 -263
  154. package/dist/calendar/__tests__/calendar.test.mjs +0 -255
  155. package/dist/card/__tests__/card.ssr.test.cjs +0 -37
  156. package/dist/card/__tests__/card.ssr.test.mjs +0 -40
  157. package/dist/card/__tests__/card.test.cjs +0 -131
  158. package/dist/card/__tests__/card.test.mjs +0 -124
  159. package/dist/carousel/__tests__/carousel.ssr.test.cjs +0 -27
  160. package/dist/carousel/__tests__/carousel.ssr.test.mjs +0 -27
  161. package/dist/carousel/__tests__/carousel.test.cjs +0 -115
  162. package/dist/carousel/__tests__/carousel.test.mjs +0 -98
  163. package/dist/cascader/__tests__/cascader-panel.test.cjs +0 -162
  164. package/dist/cascader/__tests__/cascader-panel.test.mjs +0 -151
  165. package/dist/cascader/__tests__/cascader.ssr.test.cjs +0 -61
  166. package/dist/cascader/__tests__/cascader.ssr.test.mjs +0 -55
  167. package/dist/cascader/__tests__/cascader.test.cjs +0 -342
  168. package/dist/cascader/__tests__/cascader.test.mjs +0 -316
  169. package/dist/category-nav/__tests__/category-nav.ssr.test.cjs +0 -35
  170. package/dist/category-nav/__tests__/category-nav.ssr.test.mjs +0 -21
  171. package/dist/category-nav/__tests__/category-nav.test.cjs +0 -53
  172. package/dist/category-nav/__tests__/category-nav.test.mjs +0 -33
  173. package/dist/checkbox/__tests__/checkbox.ssr.test.cjs +0 -52
  174. package/dist/checkbox/__tests__/checkbox.ssr.test.mjs +0 -57
  175. package/dist/checkbox/__tests__/checkbox.test.cjs +0 -173
  176. package/dist/checkbox/__tests__/checkbox.test.mjs +0 -133
  177. package/dist/col/__tests__/col.ssr.test.cjs +0 -44
  178. package/dist/col/__tests__/col.ssr.test.mjs +0 -42
  179. package/dist/col/__tests__/col.test.cjs +0 -128
  180. package/dist/col/__tests__/col.test.mjs +0 -116
  181. package/dist/color-picker/__tests__/color-picker.ssr.test.cjs +0 -34
  182. package/dist/color-picker/__tests__/color-picker.ssr.test.mjs +0 -39
  183. package/dist/color-picker/__tests__/color-picker.test.cjs +0 -227
  184. package/dist/color-picker/__tests__/color-picker.test.mjs +0 -176
  185. package/dist/config-provider/__tests__/config-provider.ssr.test.cjs +0 -43
  186. package/dist/config-provider/__tests__/config-provider.ssr.test.mjs +0 -42
  187. package/dist/config-provider/__tests__/config-provider.test.cjs +0 -75
  188. package/dist/config-provider/__tests__/config-provider.test.mjs +0 -64
  189. package/dist/container/__tests__/container.ssr.test.cjs +0 -71
  190. package/dist/container/__tests__/container.ssr.test.mjs +0 -50
  191. package/dist/container/__tests__/container.test.cjs +0 -111
  192. package/dist/container/__tests__/container.test.mjs +0 -84
  193. package/dist/countdown/__tests__/countdown.ssr.test.cjs +0 -86
  194. package/dist/countdown/__tests__/countdown.ssr.test.mjs +0 -78
  195. package/dist/countdown/__tests__/countdown.test.cjs +0 -767
  196. package/dist/countdown/__tests__/countdown.test.mjs +0 -722
  197. package/dist/coupon-card/__tests__/coupon-card.ssr.test.cjs +0 -21
  198. package/dist/coupon-card/__tests__/coupon-card.ssr.test.mjs +0 -18
  199. package/dist/coupon-card/__tests__/coupon-card.test.cjs +0 -67
  200. package/dist/coupon-card/__tests__/coupon-card.test.mjs +0 -64
  201. package/dist/date-picker/__tests__/date-picker-extended.test.cjs +0 -581
  202. package/dist/date-picker/__tests__/date-picker-extended.test.mjs +0 -455
  203. package/dist/date-picker/__tests__/date-picker.ssr.test.cjs +0 -26
  204. package/dist/date-picker/__tests__/date-picker.ssr.test.mjs +0 -23
  205. package/dist/date-picker/__tests__/date-picker.test.cjs +0 -170
  206. package/dist/date-picker/__tests__/date-picker.test.mjs +0 -136
  207. package/dist/descriptions/__tests__/descriptions.ssr.test.cjs +0 -67
  208. package/dist/descriptions/__tests__/descriptions.ssr.test.mjs +0 -72
  209. package/dist/descriptions/__tests__/descriptions.test.cjs +0 -150
  210. package/dist/descriptions/__tests__/descriptions.test.mjs +0 -130
  211. package/dist/dialog/__tests__/dialog.functional.test.cjs +0 -49
  212. package/dist/dialog/__tests__/dialog.functional.test.mjs +0 -49
  213. package/dist/dialog/__tests__/dialog.ssr.test.cjs +0 -31
  214. package/dist/dialog/__tests__/dialog.ssr.test.mjs +0 -29
  215. package/dist/dialog/__tests__/dialog.test.cjs +0 -561
  216. package/dist/dialog/__tests__/dialog.test.mjs +0 -388
  217. package/dist/divider/__tests__/divider.ssr.test.cjs +0 -41
  218. package/dist/divider/__tests__/divider.ssr.test.mjs +0 -44
  219. package/dist/divider/__tests__/divider.test.cjs +0 -71
  220. package/dist/divider/__tests__/divider.test.mjs +0 -68
  221. package/dist/drawer/__tests__/drawer.ssr.test.cjs +0 -25
  222. package/dist/drawer/__tests__/drawer.ssr.test.mjs +0 -23
  223. package/dist/drawer/__tests__/drawer.test.cjs +0 -145
  224. package/dist/drawer/__tests__/drawer.test.mjs +0 -122
  225. package/dist/dropdown/__tests__/dropdown.ssr.test.cjs +0 -49
  226. package/dist/dropdown/__tests__/dropdown.ssr.test.mjs +0 -64
  227. package/dist/dropdown/__tests__/dropdown.test.cjs +0 -310
  228. package/dist/dropdown/__tests__/dropdown.test.mjs +0 -269
  229. package/dist/empty/__tests__/empty.ssr.test.cjs +0 -96
  230. package/dist/empty/__tests__/empty.ssr.test.mjs +0 -99
  231. package/dist/empty/__tests__/empty.test.cjs +0 -110
  232. package/dist/empty/__tests__/empty.test.mjs +0 -101
  233. package/dist/filter-bar/__tests__/filter-bar.ssr.test.cjs +0 -29
  234. package/dist/filter-bar/__tests__/filter-bar.ssr.test.mjs +0 -16
  235. package/dist/filter-bar/__tests__/filter-bar.test.cjs +0 -51
  236. package/dist/filter-bar/__tests__/filter-bar.test.mjs +0 -29
  237. package/dist/form/__tests__/form-schema.test.cjs +0 -636
  238. package/dist/form/__tests__/form-schema.test.mjs +0 -366
  239. package/dist/form/__tests__/form.ssr.test.cjs +0 -74
  240. package/dist/form/__tests__/form.ssr.test.mjs +0 -73
  241. package/dist/form/__tests__/form.test.cjs +0 -208
  242. package/dist/form/__tests__/form.test.mjs +0 -128
  243. package/dist/gantt-chart/__tests__/debug_ssr.test.cjs +0 -51
  244. package/dist/gantt-chart/__tests__/debug_ssr.test.mjs +0 -37
  245. package/dist/gantt-chart/__tests__/gantt-chart.ssr.test.cjs +0 -95
  246. package/dist/gantt-chart/__tests__/gantt-chart.ssr.test.mjs +0 -94
  247. package/dist/gantt-chart/__tests__/gantt-chart.test.cjs +0 -86
  248. package/dist/gantt-chart/__tests__/gantt-chart.test.mjs +0 -79
  249. package/dist/grid/__tests__/grid.ssr.test.cjs +0 -81
  250. package/dist/grid/__tests__/grid.ssr.test.mjs +0 -63
  251. package/dist/grid/__tests__/grid.test.cjs +0 -142
  252. package/dist/grid/__tests__/grid.test.mjs +0 -89
  253. package/dist/icon/__tests__/icon.ssr.test.cjs +0 -35
  254. package/dist/icon/__tests__/icon.ssr.test.mjs +0 -26
  255. package/dist/icon/__tests__/icon.test.cjs +0 -144
  256. package/dist/icon/__tests__/icon.test.mjs +0 -123
  257. package/dist/image/__tests__/image-viewer.test.cjs +0 -101
  258. package/dist/image/__tests__/image-viewer.test.mjs +0 -94
  259. package/dist/image/__tests__/image.ssr.test.cjs +0 -73
  260. package/dist/image/__tests__/image.ssr.test.mjs +0 -72
  261. package/dist/image/__tests__/image.test.cjs +0 -171
  262. package/dist/image/__tests__/image.test.mjs +0 -159
  263. package/dist/image-magnifier/__tests__/image-magnifier.ssr.test.cjs +0 -54
  264. package/dist/image-magnifier/__tests__/image-magnifier.ssr.test.mjs +0 -35
  265. package/dist/image-magnifier/__tests__/image-magnifier.test.cjs +0 -257
  266. package/dist/image-magnifier/__tests__/image-magnifier.test.mjs +0 -177
  267. package/dist/infinite-scroll/__tests__/infinite-scroll.ssr.test.cjs +0 -59
  268. package/dist/infinite-scroll/__tests__/infinite-scroll.ssr.test.mjs +0 -84
  269. package/dist/infinite-scroll/__tests__/infinite-scroll.test.cjs +0 -255
  270. package/dist/infinite-scroll/__tests__/infinite-scroll.test.mjs +0 -187
  271. package/dist/input/__tests__/input-utils.test.cjs +0 -77
  272. package/dist/input/__tests__/input-utils.test.mjs +0 -75
  273. package/dist/input/__tests__/input.ssr.test.cjs +0 -100
  274. package/dist/input/__tests__/input.ssr.test.mjs +0 -85
  275. package/dist/input/__tests__/input.test.cjs +0 -127
  276. package/dist/input/__tests__/input.test.mjs +0 -112
  277. package/dist/input-number/__tests__/input-number.hydration.test.cjs +0 -24
  278. package/dist/input-number/__tests__/input-number.hydration.test.mjs +0 -21
  279. package/dist/input-number/__tests__/input-number.ssr.test.cjs +0 -95
  280. package/dist/input-number/__tests__/input-number.ssr.test.mjs +0 -92
  281. package/dist/input-number/__tests__/input-number.test.cjs +0 -199
  282. package/dist/input-number/__tests__/input-number.test.mjs +0 -173
  283. package/dist/input-tag/__tests__/input-tag.ssr.test.cjs +0 -47
  284. package/dist/input-tag/__tests__/input-tag.ssr.test.mjs +0 -41
  285. package/dist/input-tag/__tests__/input-tag.test.cjs +0 -268
  286. package/dist/input-tag/__tests__/input-tag.test.mjs +0 -201
  287. package/dist/loading/__tests__/loading.ssr.test.cjs +0 -37
  288. package/dist/loading/__tests__/loading.ssr.test.mjs +0 -27
  289. package/dist/loading/__tests__/loading.test.cjs +0 -91
  290. package/dist/loading/__tests__/loading.test.mjs +0 -75
  291. package/dist/lucky-draw/__tests__/lucky-draw.ssr.test.cjs +0 -33
  292. package/dist/lucky-draw/__tests__/lucky-draw.ssr.test.mjs +0 -31
  293. package/dist/lucky-draw/__tests__/lucky-draw.test.cjs +0 -56
  294. package/dist/lucky-draw/__tests__/lucky-draw.test.mjs +0 -48
  295. package/dist/marquee/__tests__/marquee.ssr.test.cjs +0 -59
  296. package/dist/marquee/__tests__/marquee.ssr.test.mjs +0 -60
  297. package/dist/marquee/__tests__/marquee.test.cjs +0 -94
  298. package/dist/marquee/__tests__/marquee.test.mjs +0 -92
  299. package/dist/mention/__tests__/mention.ssr.test.cjs +0 -92
  300. package/dist/mention/__tests__/mention.ssr.test.mjs +0 -70
  301. package/dist/mention/__tests__/mention.test.cjs +0 -650
  302. package/dist/mention/__tests__/mention.test.mjs +0 -523
  303. package/dist/menu/__tests__/menu.ssr.test.cjs +0 -92
  304. package/dist/menu/__tests__/menu.ssr.test.mjs +0 -124
  305. package/dist/menu/__tests__/menu.test.cjs +0 -209
  306. package/dist/menu/__tests__/menu.test.mjs +0 -182
  307. package/dist/message/__tests__/message.ssr.test.cjs +0 -29
  308. package/dist/message/__tests__/message.ssr.test.mjs +0 -23
  309. package/dist/message/__tests__/message.test.cjs +0 -170
  310. package/dist/message/__tests__/message.test.mjs +0 -154
  311. package/dist/message-box/__tests__/message-box.ssr.test.cjs +0 -33
  312. package/dist/message-box/__tests__/message-box.ssr.test.mjs +0 -30
  313. package/dist/message-box/__tests__/message-box.test.cjs +0 -100
  314. package/dist/message-box/__tests__/message-box.test.mjs +0 -95
  315. package/dist/notification/__tests__/notification.ssr.test.cjs +0 -31
  316. package/dist/notification/__tests__/notification.ssr.test.mjs +0 -25
  317. package/dist/notification/__tests__/notification.test.cjs +0 -248
  318. package/dist/notification/__tests__/notification.test.mjs +0 -206
  319. package/dist/pagination/__tests__/pagination.ssr.test.cjs +0 -61
  320. package/dist/pagination/__tests__/pagination.ssr.test.mjs +0 -59
  321. package/dist/pagination/__tests__/pagination.test.cjs +0 -135
  322. package/dist/pagination/__tests__/pagination.test.mjs +0 -131
  323. package/dist/popconfirm/__tests__/popconfirm.ssr.test.cjs +0 -48
  324. package/dist/popconfirm/__tests__/popconfirm.ssr.test.mjs +0 -63
  325. package/dist/popconfirm/__tests__/popconfirm.test.cjs +0 -62
  326. package/dist/popconfirm/__tests__/popconfirm.test.mjs +0 -56
  327. package/dist/popover/__tests__/popover.ssr.test.cjs +0 -48
  328. package/dist/popover/__tests__/popover.ssr.test.mjs +0 -63
  329. package/dist/popover/__tests__/popover.test.cjs +0 -107
  330. package/dist/popover/__tests__/popover.test.mjs +0 -93
  331. package/dist/price/__tests__/price.ssr.test.cjs +0 -20
  332. package/dist/price/__tests__/price.ssr.test.mjs +0 -19
  333. package/dist/price/__tests__/price.test.cjs +0 -45
  334. package/dist/price/__tests__/price.test.mjs +0 -42
  335. package/dist/product-card/__tests__/product-card.ssr.test.cjs +0 -21
  336. package/dist/product-card/__tests__/product-card.ssr.test.mjs +0 -18
  337. package/dist/product-card/__tests__/product-card.test.cjs +0 -54
  338. package/dist/product-card/__tests__/product-card.test.mjs +0 -53
  339. package/dist/progress/__tests__/progress.ssr.test.cjs +0 -31
  340. package/dist/progress/__tests__/progress.ssr.test.mjs +0 -29
  341. package/dist/progress/__tests__/progress.test.cjs +0 -119
  342. package/dist/progress/__tests__/progress.test.mjs +0 -77
  343. package/dist/radio/__tests__/radio-button.test.cjs +0 -99
  344. package/dist/radio/__tests__/radio-button.test.mjs +0 -83
  345. package/dist/radio/__tests__/radio.ssr.test.cjs +0 -132
  346. package/dist/radio/__tests__/radio.ssr.test.mjs +0 -165
  347. package/dist/radio/__tests__/radio.test.cjs +0 -170
  348. package/dist/radio/__tests__/radio.test.mjs +0 -143
  349. package/dist/rate/__tests__/rate.ssr.test.cjs +0 -106
  350. package/dist/rate/__tests__/rate.ssr.test.mjs +0 -103
  351. package/dist/rate/__tests__/rate.test.cjs +0 -88
  352. package/dist/rate/__tests__/rate.test.mjs +0 -85
  353. package/dist/result/__tests__/result.ssr.test.cjs +0 -62
  354. package/dist/result/__tests__/result.ssr.test.mjs +0 -51
  355. package/dist/result/__tests__/result.test.cjs +0 -135
  356. package/dist/result/__tests__/result.test.mjs +0 -92
  357. package/dist/row/__tests__/row.ssr.test.cjs +0 -29
  358. package/dist/row/__tests__/row.ssr.test.mjs +0 -30
  359. package/dist/row/__tests__/row.test.cjs +0 -89
  360. package/dist/row/__tests__/row.test.mjs +0 -86
  361. package/dist/row/__tests__/row_ts.test.cjs +0 -31
  362. package/dist/row/__tests__/row_ts.test.mjs +0 -28
  363. package/dist/scrollbar/__tests__/scrollbar.ssr.test.cjs +0 -49
  364. package/dist/scrollbar/__tests__/scrollbar.ssr.test.mjs +0 -54
  365. package/dist/scrollbar/__tests__/scrollbar.test.cjs +0 -43
  366. package/dist/scrollbar/__tests__/scrollbar.test.mjs +0 -40
  367. package/dist/select/__tests__/select.perf.test.cjs +0 -191
  368. package/dist/select/__tests__/select.perf.test.mjs +0 -185
  369. package/dist/select/__tests__/select.ssr.test.cjs +0 -58
  370. package/dist/select/__tests__/select.ssr.test.mjs +0 -52
  371. package/dist/select/__tests__/select.test.cjs +0 -414
  372. package/dist/select/__tests__/select.test.mjs +0 -345
  373. package/dist/skeleton/__tests__/skeleton.ssr.test.cjs +0 -81
  374. package/dist/skeleton/__tests__/skeleton.ssr.test.mjs +0 -83
  375. package/dist/skeleton/__tests__/skeleton.test.cjs +0 -72
  376. package/dist/skeleton/__tests__/skeleton.test.mjs +0 -65
  377. package/dist/sku-selector/__tests__/sku-selector.ssr.test.cjs +0 -32
  378. package/dist/sku-selector/__tests__/sku-selector.ssr.test.mjs +0 -19
  379. package/dist/sku-selector/__tests__/sku-selector.test.cjs +0 -64
  380. package/dist/sku-selector/__tests__/sku-selector.test.mjs +0 -53
  381. package/dist/slider/__tests__/repro.test.cjs +0 -25
  382. package/dist/slider/__tests__/repro.test.mjs +0 -22
  383. package/dist/slider/__tests__/slider.ssr.test.cjs +0 -118
  384. package/dist/slider/__tests__/slider.ssr.test.mjs +0 -115
  385. package/dist/slider/__tests__/slider.test.cjs +0 -155
  386. package/dist/slider/__tests__/slider.test.mjs +0 -120
  387. package/dist/smart-address/__tests__/smart-address.ssr.test.cjs +0 -28
  388. package/dist/smart-address/__tests__/smart-address.ssr.test.mjs +0 -25
  389. package/dist/smart-address/__tests__/smart-address.test.cjs +0 -68
  390. package/dist/smart-address/__tests__/smart-address.test.mjs +0 -56
  391. package/dist/space/__tests__/space.ssr.test.cjs +0 -115
  392. package/dist/space/__tests__/space.ssr.test.mjs +0 -150
  393. package/dist/space/__tests__/space.test.cjs +0 -227
  394. package/dist/space/__tests__/space.test.mjs +0 -187
  395. package/dist/spin/__tests__/spin.ssr.test.cjs +0 -46
  396. package/dist/spin/__tests__/spin.ssr.test.mjs +0 -43
  397. package/dist/spin/__tests__/spin.test.cjs +0 -65
  398. package/dist/spin/__tests__/spin.test.mjs +0 -63
  399. package/dist/steps/__tests__/steps.ssr.test.cjs +0 -73
  400. package/dist/steps/__tests__/steps.ssr.test.mjs +0 -55
  401. package/dist/steps/__tests__/steps.test.cjs +0 -152
  402. package/dist/steps/__tests__/steps.test.mjs +0 -123
  403. package/dist/submit-bar/__tests__/submit-bar.ssr.test.cjs +0 -21
  404. package/dist/submit-bar/__tests__/submit-bar.ssr.test.mjs +0 -18
  405. package/dist/submit-bar/__tests__/submit-bar.test.cjs +0 -50
  406. package/dist/submit-bar/__tests__/submit-bar.test.mjs +0 -36
  407. package/dist/switch/__tests__/switch.ssr.test.cjs +0 -105
  408. package/dist/switch/__tests__/switch.ssr.test.mjs +0 -102
  409. package/dist/switch/__tests__/switch.test.cjs +0 -251
  410. package/dist/switch/__tests__/switch.test.mjs +0 -193
  411. package/dist/table/__tests__/table-advance.test.cjs +0 -180
  412. package/dist/table/__tests__/table-advance.test.mjs +0 -118
  413. package/dist/table/__tests__/table-interaction.test.cjs +0 -236
  414. package/dist/table/__tests__/table-interaction.test.mjs +0 -162
  415. package/dist/table/__tests__/table-utils.test.cjs +0 -690
  416. package/dist/table/__tests__/table-utils.test.mjs +0 -485
  417. package/dist/table/__tests__/table.perf.test.cjs +0 -231
  418. package/dist/table/__tests__/table.perf.test.mjs +0 -225
  419. package/dist/table/__tests__/table.ssr.test.cjs +0 -296
  420. package/dist/table/__tests__/table.ssr.test.mjs +0 -265
  421. package/dist/table/__tests__/table.test.cjs +0 -682
  422. package/dist/table/__tests__/table.test.mjs +0 -617
  423. package/dist/table/__tests__/use-column-drag.test.cjs +0 -238
  424. package/dist/table/__tests__/use-column-drag.test.mjs +0 -150
  425. package/dist/table/__tests__/use-table-export.test.cjs +0 -179
  426. package/dist/table/__tests__/use-table-export.test.mjs +0 -105
  427. package/dist/table/__tests__/use-table-import.test.cjs +0 -206
  428. package/dist/table/__tests__/use-table-import.test.mjs +0 -144
  429. package/dist/table/__tests__/use-table-print.test.cjs +0 -190
  430. package/dist/table/__tests__/use-table-print.test.mjs +0 -134
  431. package/dist/table/__tests__/use-virtual-scroll.test.cjs +0 -286
  432. package/dist/table/__tests__/use-virtual-scroll.test.mjs +0 -196
  433. package/dist/tabs/__tests__/tabs.ssr.test.cjs +0 -57
  434. package/dist/tabs/__tests__/tabs.ssr.test.mjs +0 -41
  435. package/dist/tabs/__tests__/tabs.test.cjs +0 -171
  436. package/dist/tabs/__tests__/tabs.test.mjs +0 -134
  437. package/dist/tag/__tests__/tag.ssr.test.cjs +0 -45
  438. package/dist/tag/__tests__/tag.ssr.test.mjs +0 -48
  439. package/dist/tag/__tests__/tag.test.cjs +0 -194
  440. package/dist/tag/__tests__/tag.test.mjs +0 -167
  441. package/dist/time-picker/__tests__/time-picker.ssr.test.cjs +0 -46
  442. package/dist/time-picker/__tests__/time-picker.ssr.test.mjs +0 -43
  443. package/dist/time-picker/__tests__/time-picker.test.cjs +0 -228
  444. package/dist/time-picker/__tests__/time-picker.test.mjs +0 -218
  445. package/dist/time-picker/__tests__/time-spinner.test.cjs +0 -196
  446. package/dist/time-picker/__tests__/time-spinner.test.mjs +0 -162
  447. package/dist/time-select/__tests__/time-select.ssr.test.cjs +0 -42
  448. package/dist/time-select/__tests__/time-select.ssr.test.mjs +0 -37
  449. package/dist/time-select/__tests__/time-select.test.cjs +0 -390
  450. package/dist/time-select/__tests__/time-select.test.mjs +0 -374
  451. package/dist/tooltip/__tests__/tooltip.ssr.test.cjs +0 -55
  452. package/dist/tooltip/__tests__/tooltip.ssr.test.mjs +0 -76
  453. package/dist/tooltip/__tests__/tooltip.test.cjs +0 -132
  454. package/dist/tooltip/__tests__/tooltip.test.mjs +0 -121
  455. package/dist/transfer/__tests__/transfer.ssr.test.cjs +0 -47
  456. package/dist/transfer/__tests__/transfer.ssr.test.mjs +0 -44
  457. package/dist/transfer/__tests__/transfer.test.cjs +0 -422
  458. package/dist/transfer/__tests__/transfer.test.mjs +0 -405
  459. package/dist/tree/__tests__/tree.perf.test.cjs +0 -182
  460. package/dist/tree/__tests__/tree.perf.test.mjs +0 -198
  461. package/dist/tree/__tests__/tree.ssr.test.cjs +0 -56
  462. package/dist/tree/__tests__/tree.ssr.test.mjs +0 -45
  463. package/dist/tree/__tests__/tree.test.cjs +0 -488
  464. package/dist/tree/__tests__/tree.test.mjs +0 -333
  465. package/dist/tree-select/__tests__/tree-select.ssr.test.cjs +0 -52
  466. package/dist/tree-select/__tests__/tree-select.ssr.test.mjs +0 -55
  467. package/dist/tree-select/__tests__/tree-select.test.cjs +0 -231
  468. package/dist/tree-select/__tests__/tree-select.test.mjs +0 -189
  469. package/dist/typography/__tests__/typography.ssr.test.cjs +0 -85
  470. package/dist/typography/__tests__/typography.ssr.test.mjs +0 -63
  471. package/dist/typography/__tests__/typography.test.cjs +0 -362
  472. package/dist/typography/__tests__/typography.test.mjs +0 -161
  473. package/dist/upload/__tests__/upload.ssr.test.cjs +0 -28
  474. package/dist/upload/__tests__/upload.ssr.test.mjs +0 -26
  475. package/dist/upload/__tests__/upload.test.cjs +0 -467
  476. package/dist/upload/__tests__/upload.test.mjs +0 -336
  477. package/dist/waterfall/__tests__/waterfall.ssr.test.cjs +0 -38
  478. package/dist/waterfall/__tests__/waterfall.ssr.test.mjs +0 -39
  479. package/dist/waterfall/__tests__/waterfall.test.cjs +0 -122
  480. package/dist/waterfall/__tests__/waterfall.test.mjs +0 -85
  481. package/dist/watermark/__tests__/watermark.ssr.test.cjs +0 -32
  482. package/dist/watermark/__tests__/watermark.ssr.test.mjs +0 -30
  483. package/dist/watermark/__tests__/watermark.test.cjs +0 -127
  484. 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
- });