dou-ui 0.1.0-alpha.2 → 0.1.0-alpha.4

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 (459) hide show
  1. package/dist/components/button/button.js.map +1 -1
  2. package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js +2 -1
  3. package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  4. package/dist/components/calendar-view/calendar-view.js.map +1 -1
  5. package/dist/components/calendar-view/calendar-view.vue_vue_type_script_setup_true_lang.js +7 -2
  6. package/dist/components/calendar-view/calendar-view.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/card/card.js.map +1 -1
  8. package/dist/components/card/card.vue_vue_type_script_setup_true_lang.js +45 -19
  9. package/dist/components/card/card.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/cascader/cascader.js.map +1 -1
  11. package/dist/components/cascader/cascader.vue_vue_type_script_setup_true_lang.js +3 -3
  12. package/dist/components/cascader/cascader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/chat-artifact/chat-artifact.js.map +1 -1
  14. package/dist/components/chat-artifact/chat-artifact.vue_vue_type_script_setup_true_lang.js +8 -2
  15. package/dist/components/chat-artifact/chat-artifact.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/components/chat-attachments/chat-attachments.js.map +1 -1
  17. package/dist/components/chat-attachments/chat-attachments.vue_vue_type_script_setup_true_lang.js +11 -2
  18. package/dist/components/chat-attachments/chat-attachments.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/chat-attachments/chat-attachments2.js.map +1 -1
  20. package/dist/components/chat-confirm/chat-confirm.js.map +1 -1
  21. package/dist/components/chat-confirm/chat-confirm.vue_vue_type_script_setup_true_lang.js +40 -17
  22. package/dist/components/chat-confirm/chat-confirm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/chat-context-meter/chat-context-meter.vue_vue_type_script_setup_true_lang.js +2 -2
  24. package/dist/components/chat-context-meter/chat-context-meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/chat-context-meter/chat-context-meter2.js.map +1 -1
  26. package/dist/components/chat-input/chat-input.js.map +1 -1
  27. package/dist/components/chat-input/chat-input.vue_vue_type_script_setup_true_lang.js +75 -7
  28. package/dist/components/chat-input/chat-input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/chat-input/chat-input2.js.map +1 -1
  30. package/dist/components/chat-list/chat-list.js +9 -4
  31. package/dist/components/chat-list/chat-list.js.map +1 -1
  32. package/dist/components/chat-list/chat-list.vue_vue_type_script_setup_true_lang.js +34 -0
  33. package/dist/components/chat-list/chat-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/chat-list/chat-list2.js +6 -0
  35. package/dist/components/chat-list/chat-list2.js.map +1 -0
  36. package/dist/components/chat-list/index.js +1 -1
  37. package/dist/components/chat-message/chat-message.js.map +1 -1
  38. package/dist/components/chat-message/chat-message.vue_vue_type_script_setup_true_lang.js +119 -39
  39. package/dist/components/chat-message/chat-message.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/chat-message/chat-message2.js.map +1 -1
  41. package/dist/components/chat-message/style.js +6 -0
  42. package/dist/components/chat-plan/chat-plan.js +9 -4
  43. package/dist/components/chat-plan/chat-plan.js.map +1 -1
  44. package/dist/components/chat-plan/chat-plan.vue_vue_type_script_setup_true_lang.js +64 -32
  45. package/dist/components/chat-plan/chat-plan.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/chat-plan/chat-plan2.js +6 -0
  47. package/dist/components/chat-plan/chat-plan2.js.map +1 -0
  48. package/dist/components/chat-plan/index.js +1 -1
  49. package/dist/components/chat-plan/style.js +1 -0
  50. package/dist/components/chat-question/chat-question.js +6 -0
  51. package/dist/components/chat-question/chat-question.js.map +1 -0
  52. package/dist/components/chat-question/chat-question.vue_vue_type_script_setup_true_lang.js +116 -0
  53. package/dist/components/chat-question/chat-question.vue_vue_type_script_setup_true_lang.js.map +1 -0
  54. package/dist/components/chat-question/index.js +7 -0
  55. package/dist/components/chat-question/index.js.map +1 -0
  56. package/dist/components/chat-question/style.d.ts +1 -0
  57. package/dist/components/chat-question/style.js +2 -0
  58. package/dist/components/chat-reasoning/chat-reasoning.js.map +1 -1
  59. package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js +4 -4
  60. package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/components/chat-sources/chat-citation.js.map +1 -1
  62. package/dist/components/chat-sources/chat-citation.vue_vue_type_script_setup_true_lang.js +52 -14
  63. package/dist/components/chat-sources/chat-citation.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/chat-sources/chat-sources.js.map +1 -1
  65. package/dist/components/chat-sources/chat-sources.vue_vue_type_script_setup_true_lang.js +6 -4
  66. package/dist/components/chat-sources/chat-sources.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/components/chat-sources/chat-sources2.js.map +1 -1
  68. package/dist/components/chat-sources/index.js +1 -1
  69. package/dist/components/chat-steps/chat-steps.js +9 -4
  70. package/dist/components/chat-steps/chat-steps.js.map +1 -1
  71. package/dist/components/chat-steps/chat-steps.vue_vue_type_script_setup_true_lang.js +20 -13
  72. package/dist/components/chat-steps/chat-steps.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/components/chat-steps/chat-steps2.js +6 -0
  74. package/dist/components/chat-steps/chat-steps2.js.map +1 -0
  75. package/dist/components/chat-steps/index.js +1 -1
  76. package/dist/components/chat-steps/style.js +1 -0
  77. package/dist/components/chat-tool-call/chat-tool-call.js.map +1 -1
  78. package/dist/components/chat-tool-call/chat-tool-call.vue_vue_type_script_setup_true_lang.js +38 -12
  79. package/dist/components/chat-tool-call/chat-tool-call.vue_vue_type_script_setup_true_lang.js.map +1 -1
  80. package/dist/components/chat-tool-call/chat-tool-call2.js.map +1 -1
  81. package/dist/components/chat-tool-call/style.js +1 -0
  82. package/dist/components/code-block/code-block.js.map +1 -1
  83. package/dist/components/code-block/code-block.vue_vue_type_script_setup_true_lang.js +37 -5
  84. package/dist/components/code-block/code-block.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/components/collapse/collapse-item.js.map +1 -1
  86. package/dist/components/collapse/collapse-item.vue_vue_type_script_setup_true_lang.js +2 -2
  87. package/dist/components/collapse/collapse-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/collapse/collapse-transition.js +3 -1
  89. package/dist/components/collapse/collapse-transition.js.map +1 -1
  90. package/dist/components/collapse/index.js +1 -2
  91. package/dist/components/collapse/index.js.map +1 -1
  92. package/dist/components/color-mode/color-mode-button.js.map +1 -1
  93. package/dist/components/color-mode/color-mode-button.vue_vue_type_script_setup_true_lang.js +2 -2
  94. package/dist/components/color-mode/color-mode-button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/components/color-mode/color-mode-select.js.map +1 -1
  96. package/dist/components/color-mode/color-mode-select.vue_vue_type_script_setup_true_lang.js +2 -2
  97. package/dist/components/color-mode/color-mode-select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/color-mode/color-mode-switch.js.map +1 -1
  99. package/dist/components/color-mode/color-mode-switch.vue_vue_type_script_setup_true_lang.js +2 -2
  100. package/dist/components/color-mode/color-mode-switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/components/color-panel/color-panel.js.map +1 -1
  102. package/dist/components/color-panel/color-panel.vue_vue_type_script_setup_true_lang.js +5 -5
  103. package/dist/components/color-panel/color-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/components/color-picker/color-picker.js.map +1 -1
  105. package/dist/components/color-picker/color-picker.vue_vue_type_script_setup_true_lang.js +2 -2
  106. package/dist/components/color-picker/color-picker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/comment-thread/comment-thread.js.map +1 -1
  108. package/dist/components/comment-thread/comment-thread.vue_vue_type_script_setup_true_lang.js +19 -15
  109. package/dist/components/comment-thread/comment-thread.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/components/comment-thread/style.js +2 -0
  111. package/dist/components/config-provider/use-config.js +5 -2
  112. package/dist/components/config-provider/use-config.js.map +1 -1
  113. package/dist/components/context-menu/context-menu.js.map +1 -1
  114. package/dist/components/context-menu/context-menu.vue_vue_type_script_setup_true_lang.js +26 -11
  115. package/dist/components/context-menu/context-menu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  116. package/dist/components/context-menu/index.js +2 -0
  117. package/dist/components/context-menu/index.js.map +1 -1
  118. package/dist/components/copy-button/copy-button.vue_vue_type_script_setup_true_lang.js +1 -1
  119. package/dist/components/descriptions/descriptions.js.map +1 -1
  120. package/dist/components/descriptions/descriptions.vue_vue_type_script_setup_true_lang.js +3 -1
  121. package/dist/components/descriptions/descriptions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  122. package/dist/components/descriptions/descriptions2.js.map +1 -1
  123. package/dist/components/dialog/functional.js +3 -7
  124. package/dist/components/dialog/functional.js.map +1 -1
  125. package/dist/components/dialog/index.js +4 -3
  126. package/dist/components/dialog/index.js.map +1 -1
  127. package/dist/components/dropdown/dropdown-button.js.map +1 -1
  128. package/dist/components/dropdown/dropdown-button.vue_vue_type_script_setup_true_lang.js +5 -5
  129. package/dist/components/dropdown/dropdown-button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/components/dropdown/dropdown-group.js +6 -0
  131. package/dist/components/dropdown/dropdown-group.js.map +1 -0
  132. package/dist/components/dropdown/dropdown-group.vue_vue_type_script_setup_true_lang.js +42 -0
  133. package/dist/components/dropdown/dropdown-group.vue_vue_type_script_setup_true_lang.js.map +1 -0
  134. package/dist/components/dropdown/dropdown-item.js.map +1 -1
  135. package/dist/components/dropdown/dropdown-item.vue_vue_type_script_setup_true_lang.js +31 -9
  136. package/dist/components/dropdown/dropdown-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/components/dropdown/dropdown-items.js.map +1 -1
  138. package/dist/components/dropdown/dropdown-items.vue_vue_type_script_setup_true_lang.js +77 -52
  139. package/dist/components/dropdown/dropdown-items.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/components/dropdown/dropdown-radio-group.js.map +1 -1
  141. package/dist/components/dropdown/dropdown-radio-group.vue_vue_type_script_setup_true_lang.js +23 -5
  142. package/dist/components/dropdown/dropdown-radio-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
  143. package/dist/components/dropdown/dropdown-sub.js.map +1 -1
  144. package/dist/components/dropdown/dropdown-sub.vue_vue_type_script_setup_true_lang.js +5 -4
  145. package/dist/components/dropdown/dropdown-sub.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/dropdown/dropdown.js.map +1 -1
  147. package/dist/components/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js +2 -1
  148. package/dist/components/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  149. package/dist/components/dropdown/dropdown2.js.map +1 -1
  150. package/dist/components/dropdown/index.js +4 -5
  151. package/dist/components/dropdown/index.js.map +1 -1
  152. package/dist/components/dropdown/item-components.js +11 -0
  153. package/dist/components/dropdown/item-components.js.map +1 -0
  154. package/dist/components/dropdown/menu-entries.js +14 -0
  155. package/dist/components/dropdown/menu-entries.js.map +1 -0
  156. package/dist/components/dropdown/menu-keys.js +1 -1
  157. package/dist/components/dropdown/menu-keys.js.map +1 -1
  158. package/dist/components/ellipsis/ellipsis.js.map +1 -1
  159. package/dist/components/ellipsis/ellipsis.vue_vue_type_script_setup_true_lang.js +2 -2
  160. package/dist/components/ellipsis/ellipsis.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/components/image/image.js.map +1 -1
  162. package/dist/components/image/image.vue_vue_type_script_setup_true_lang.js +10 -1
  163. package/dist/components/image/image.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/image-cropper/image-cropper.js.map +1 -1
  165. package/dist/components/image-cropper/image-cropper.vue_vue_type_script_setup_true_lang.js +10 -10
  166. package/dist/components/image-cropper/image-cropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  167. package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
  168. package/dist/components/infinite-scroll/infinite-scroll.vue_vue_type_script_setup_true_lang.js +2 -2
  169. package/dist/components/infinite-scroll/infinite-scroll.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/components/input-date/segment-field.js.map +1 -1
  171. package/dist/components/input-date/segment-field.vue_vue_type_script_setup_true_lang.js +2 -2
  172. package/dist/components/input-date/segment-field.vue_vue_type_script_setup_true_lang.js.map +1 -1
  173. package/dist/components/input-date/style.js +1 -0
  174. package/dist/components/input-time/style.js +1 -0
  175. package/dist/components/layout/layout-aside-trigger.js.map +1 -1
  176. package/dist/components/layout/layout-aside-trigger.vue_vue_type_script_setup_true_lang.js +2 -2
  177. package/dist/components/layout/layout-aside-trigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  178. package/dist/components/layout/layout-aside.js.map +1 -1
  179. package/dist/components/layout/layout-aside.vue_vue_type_script_setup_true_lang.js +3 -3
  180. package/dist/components/layout/layout-aside.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/components/layout/layout-footer.js.map +1 -1
  182. package/dist/components/layout/layout-footer.vue_vue_type_script_setup_true_lang.js +5 -1
  183. package/dist/components/layout/layout-footer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  184. package/dist/components/layout/layout.js.map +1 -1
  185. package/dist/components/link/link.js.map +1 -1
  186. package/dist/components/link/link.vue_vue_type_script_setup_true_lang.js +116 -31
  187. package/dist/components/link/link.vue_vue_type_script_setup_true_lang.js.map +1 -1
  188. package/dist/components/markdown/index.js +9 -0
  189. package/dist/components/markdown/index.js.map +1 -0
  190. package/dist/components/markdown/markdown.js +6 -0
  191. package/dist/components/markdown/markdown.js.map +1 -0
  192. package/dist/components/markdown/markdown.vue_vue_type_script_setup_true_lang.js +225 -0
  193. package/dist/components/markdown/markdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
  194. package/dist/components/markdown/parse-block.js +577 -0
  195. package/dist/components/markdown/parse-block.js.map +1 -0
  196. package/dist/components/markdown/parse-inline.js +626 -0
  197. package/dist/components/markdown/parse-inline.js.map +1 -0
  198. package/dist/components/markdown/parser.js +308 -0
  199. package/dist/components/markdown/parser.js.map +1 -0
  200. package/dist/components/markdown/render.js +424 -0
  201. package/dist/components/markdown/render.js.map +1 -0
  202. package/dist/components/markdown/style.d.ts +1 -0
  203. package/dist/components/markdown/style.js +10 -0
  204. package/dist/components/markdown/url.js +16 -0
  205. package/dist/components/markdown/url.js.map +1 -0
  206. package/dist/components/menu/menu-actions.js +65 -0
  207. package/dist/components/menu/menu-actions.js.map +1 -0
  208. package/dist/components/menu/menu-item.js.map +1 -1
  209. package/dist/components/menu/menu-item.vue_vue_type_script_setup_true_lang.js +52 -13
  210. package/dist/components/menu/menu-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/components/menu/menu-list.js.map +1 -1
  212. package/dist/components/menu/menu-list.vue_vue_type_script_setup_true_lang.js +33 -18
  213. package/dist/components/menu/menu-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
  214. package/dist/components/menu/menu-popup.js.map +1 -1
  215. package/dist/components/menu/menu-popup.vue_vue_type_script_setup_true_lang.js +60 -19
  216. package/dist/components/menu/menu-popup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  217. package/dist/components/menu/menu.js +17 -13
  218. package/dist/components/menu/menu.js.map +1 -1
  219. package/dist/components/menu/menu.vue_vue_type_script_setup_true_lang.js +9 -2
  220. package/dist/components/menu/menu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  221. package/dist/components/menu/menu2.js.map +1 -1
  222. package/dist/components/menubar/menubar.js.map +1 -1
  223. package/dist/components/node-graph/layout.js +251 -38
  224. package/dist/components/node-graph/layout.js.map +1 -1
  225. package/dist/components/node-graph/node-graph-legend.js.map +1 -1
  226. package/dist/components/node-graph/node-graph-legend.vue_vue_type_script_setup_true_lang.js +5 -5
  227. package/dist/components/node-graph/node-graph-legend.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/components/node-graph/node-graph.js.map +1 -1
  229. package/dist/components/node-graph/node-graph.vue_vue_type_script_setup_true_lang.js +3 -3
  230. package/dist/components/node-graph/node-graph.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/components/pagination/pagination-gap.js.map +1 -1
  232. package/dist/components/pagination/pagination-gap.vue_vue_type_script_setup_true_lang.js +2 -2
  233. package/dist/components/pagination/pagination-gap.vue_vue_type_script_setup_true_lang.js.map +1 -1
  234. package/dist/components/pagination/pagination.js.map +1 -1
  235. package/dist/components/pagination/pagination.vue_vue_type_script_setup_true_lang.js +7 -7
  236. package/dist/components/pagination/pagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/components/popconfirm/index.js +2 -0
  238. package/dist/components/popconfirm/index.js.map +1 -1
  239. package/dist/components/popconfirm/popconfirm.js.map +1 -1
  240. package/dist/components/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +6 -2
  241. package/dist/components/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  242. package/dist/components/popover/index.js +2 -0
  243. package/dist/components/popover/index.js.map +1 -1
  244. package/dist/components/popover/popover.js.map +1 -1
  245. package/dist/components/popover/popover.vue_vue_type_script_setup_true_lang.js +12 -5
  246. package/dist/components/popover/popover.vue_vue_type_script_setup_true_lang.js.map +1 -1
  247. package/dist/components/progress-group/progress-group.js.map +1 -1
  248. package/dist/components/progress-group/progress-group.vue_vue_type_script_setup_true_lang.js +11 -4
  249. package/dist/components/progress-group/progress-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/components/qrcode/qrcode.js.map +1 -1
  251. package/dist/components/qrcode/qrcode.vue_vue_type_script_setup_true_lang.js +10 -2
  252. package/dist/components/qrcode/qrcode.vue_vue_type_script_setup_true_lang.js.map +1 -1
  253. package/dist/components/select/select.js.map +1 -1
  254. package/dist/components/select/select.vue_vue_type_script_setup_true_lang.js +2 -2
  255. package/dist/components/select/select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  256. package/dist/components/slider/slider.js.map +1 -1
  257. package/dist/components/slider/slider.vue_vue_type_script_setup_true_lang.js +2 -2
  258. package/dist/components/slider/slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  259. package/dist/components/status-dot/index.js +7 -0
  260. package/dist/components/status-dot/index.js.map +1 -0
  261. package/dist/components/status-dot/status-dot.js +26 -0
  262. package/dist/components/status-dot/status-dot.js.map +1 -0
  263. package/dist/components/status-dot/status-dot.vue_vue_type_script_lang.js +43 -0
  264. package/dist/components/status-dot/status-dot.vue_vue_type_script_lang.js.map +1 -0
  265. package/dist/components/status-dot/status-dot2.js +6 -0
  266. package/dist/components/status-dot/status-dot2.js.map +1 -0
  267. package/dist/components/status-dot/style.d.ts +1 -0
  268. package/dist/components/status-dot/style.js +2 -0
  269. package/dist/components/steps/steps.js.map +1 -1
  270. package/dist/components/steps/steps.vue_vue_type_script_setup_true_lang.js +6 -6
  271. package/dist/components/steps/steps.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/components/table/table.js.map +1 -1
  273. package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js +19 -14
  274. package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/components/tabs/tab-panel.vue_vue_type_script_setup_true_lang.js +1 -0
  276. package/dist/components/tabs/tab-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  277. package/dist/components/tabs/tabs.js.map +1 -1
  278. package/dist/components/tabs/tabs.vue_vue_type_script_setup_true_lang.js +117 -47
  279. package/dist/components/tabs/tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  280. package/dist/components/tabs/tabs2.js.map +1 -1
  281. package/dist/components/tag/tag.js.map +1 -1
  282. package/dist/components/tag/tag.vue_vue_type_script_setup_true_lang.js +21 -4
  283. package/dist/components/tag/tag.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/components/timeline/style.js +1 -0
  285. package/dist/components/timeline/timeline-item.js.map +1 -1
  286. package/dist/components/timeline/timeline-item.vue_vue_type_script_setup_true_lang.js +6 -2
  287. package/dist/components/timeline/timeline-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  288. package/dist/components/toast/index.js +5 -4
  289. package/dist/components/toast/index.js.map +1 -1
  290. package/dist/components/toast/store.js +1 -9
  291. package/dist/components/toast/store.js.map +1 -1
  292. package/dist/components/tooltip/index.js +2 -0
  293. package/dist/components/tooltip/index.js.map +1 -1
  294. package/dist/components/tooltip/tooltip.js.map +1 -1
  295. package/dist/components/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +55 -8
  296. package/dist/components/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  297. package/dist/components/tour/tour.js.map +1 -1
  298. package/dist/components/tour/tour.vue_vue_type_script_setup_true_lang.js +3 -3
  299. package/dist/components/tour/tour.vue_vue_type_script_setup_true_lang.js.map +1 -1
  300. package/dist/components/transfer/transfer-list.vue_vue_type_script_setup_true_lang.js +1 -1
  301. package/dist/components/tree/tree.vue_vue_type_script_setup_true_lang.js +1 -1
  302. package/dist/components/tree-select/tree-select.js.map +1 -1
  303. package/dist/components/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +3 -3
  304. package/dist/components/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  305. package/dist/components/upload/upload.vue_vue_type_script_setup_true_lang.js +2 -2
  306. package/dist/components/upload/upload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  307. package/dist/components/upload/upload2.js.map +1 -1
  308. package/dist/components/user/user.js.map +1 -1
  309. package/dist/components/user/user.vue_vue_type_script_setup_true_lang.js +2 -2
  310. package/dist/components/user/user.vue_vue_type_script_setup_true_lang.js.map +1 -1
  311. package/dist/components/virtual-list/virtual-list.js +7 -1
  312. package/dist/components/virtual-list/virtual-list.js.map +1 -1
  313. package/dist/components/virtual-list/virtual-list.vue_vue_type_script_setup_true_lang.js +2 -7
  314. package/dist/components/virtual-list/virtual-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
  315. package/dist/components/virtual-list/virtual-list2.js.map +1 -1
  316. package/dist/composables/use-popup.js +30 -5
  317. package/dist/composables/use-popup.js.map +1 -1
  318. package/dist/index.js +26 -19
  319. package/dist/index.js.map +1 -1
  320. package/dist/locale/en.js +14 -8
  321. package/dist/locale/en.js.map +1 -1
  322. package/dist/locale/zh-cn.js +14 -8
  323. package/dist/locale/zh-cn.js.map +1 -1
  324. package/dist/locale/zh-tw.js +14 -8
  325. package/dist/locale/zh-tw.js.map +1 -1
  326. package/dist/plugin.js +25 -14
  327. package/dist/plugin.js.map +1 -1
  328. package/dist/style.css +1 -1
  329. package/dist/types/components/button/button.d.ts +5 -1
  330. package/dist/types/components/calendar-view/calendar-view.d.ts +6 -0
  331. package/dist/types/components/calendar-view/calendar-view.vue.d.ts +1 -0
  332. package/dist/types/components/calendar-view/index.d.ts +3 -0
  333. package/dist/types/components/card/card.d.ts +6 -1
  334. package/dist/types/components/chat-artifact/chat-artifact.d.ts +2 -1
  335. package/dist/types/components/chat-attachments/chat-attachments.d.ts +2 -2
  336. package/dist/types/components/chat-confirm/chat-confirm.d.ts +7 -2
  337. package/dist/types/components/chat-input/chat-input.d.ts +33 -3
  338. package/dist/types/components/chat-input/chat-input.vue.d.ts +7 -0
  339. package/dist/types/components/chat-input/index.d.ts +20 -0
  340. package/dist/types/components/chat-list/chat-list.d.ts +19 -1
  341. package/dist/types/components/chat-list/index.d.ts +3 -3
  342. package/dist/types/components/chat-message/chat-message.d.ts +58 -5
  343. package/dist/types/components/chat-message/chat-message.vue.d.ts +7 -3
  344. package/dist/types/components/chat-message/index.d.ts +15 -4
  345. package/dist/types/components/chat-plan/chat-plan.d.ts +19 -2
  346. package/dist/types/components/chat-plan/chat-plan.vue.d.ts +2 -0
  347. package/dist/types/components/chat-plan/index.d.ts +6 -0
  348. package/dist/types/components/chat-question/chat-question.d.ts +43 -0
  349. package/dist/types/components/chat-question/chat-question.vue.d.ts +18 -0
  350. package/dist/types/components/chat-question/index.d.ts +43 -0
  351. package/dist/types/components/chat-sources/chat-sources.d.ts +6 -1
  352. package/dist/types/components/chat-steps/chat-steps.d.ts +10 -4
  353. package/dist/types/components/chat-steps/chat-steps.vue.d.ts +1 -1
  354. package/dist/types/components/chat-steps/index.d.ts +3 -3
  355. package/dist/types/components/chat-tool-call/chat-tool-call.d.ts +12 -3
  356. package/dist/types/components/chat-tool-call/chat-tool-call.vue.d.ts +1 -0
  357. package/dist/types/components/chat-tool-call/index.d.ts +3 -0
  358. package/dist/types/components/checkbox/index.d.ts +5 -5
  359. package/dist/types/components/code-block/code-block.d.ts +11 -0
  360. package/dist/types/components/code-block/code-block.vue.d.ts +3 -1
  361. package/dist/types/components/code-block/index.d.ts +9 -3
  362. package/dist/types/components/collapse/collapse-transition.d.ts +2 -7
  363. package/dist/types/components/collapse/collapse.vue.d.ts +1 -1
  364. package/dist/types/components/collapse/index.d.ts +5 -6
  365. package/dist/types/components/comment-thread/comment-thread.d.ts +6 -0
  366. package/dist/types/components/comment-thread/comment-thread.vue.d.ts +1 -0
  367. package/dist/types/components/comment-thread/index.d.ts +3 -0
  368. package/dist/types/components/context-menu/context-menu.d.ts +37 -4
  369. package/dist/types/components/context-menu/context-menu.vue.d.ts +2 -0
  370. package/dist/types/components/context-menu/index.d.ts +5 -0
  371. package/dist/types/components/copy-button/copy-button.vue.d.ts +1 -1
  372. package/dist/types/components/copy-button/index.d.ts +1 -1
  373. package/dist/types/components/descriptions/descriptions.d.ts +9 -1
  374. package/dist/types/components/descriptions/descriptions.vue.d.ts +1 -0
  375. package/dist/types/components/descriptions/index.d.ts +3 -0
  376. package/dist/types/components/dialog/functional.d.ts +0 -3
  377. package/dist/types/components/dialog/index.d.ts +1 -1
  378. package/dist/types/components/dropdown/dropdown-group.vue.d.ts +13 -0
  379. package/dist/types/components/dropdown/dropdown-items.vue.d.ts +2 -2
  380. package/dist/types/components/dropdown/dropdown-radio-group.vue.d.ts +8 -4
  381. package/dist/types/components/dropdown/dropdown.d.ts +28 -6
  382. package/dist/types/components/dropdown/dropdown.vue.d.ts +1 -1
  383. package/dist/types/components/dropdown/index.d.ts +10 -81
  384. package/dist/types/components/dropdown/item-components.d.ts +103 -0
  385. package/dist/types/components/dropdown/menu-entries.d.ts +4 -0
  386. package/dist/types/components/image/image.d.ts +9 -0
  387. package/dist/types/components/index.d.ts +3 -0
  388. package/dist/types/components/layout/index.d.ts +12 -6
  389. package/dist/types/components/layout/layout-aside.vue.d.ts +1 -1
  390. package/dist/types/components/layout/layout-footer.vue.d.ts +4 -2
  391. package/dist/types/components/layout/layout.d.ts +4 -0
  392. package/dist/types/components/link/index.d.ts +3 -0
  393. package/dist/types/components/link/link.d.ts +24 -3
  394. package/dist/types/components/link/link.vue.d.ts +1 -0
  395. package/dist/types/components/markdown/index.d.ts +58 -0
  396. package/dist/types/components/markdown/markdown.d.ts +251 -0
  397. package/dist/types/components/markdown/markdown.vue.d.ts +22 -0
  398. package/dist/types/components/markdown/parse-block.d.ts +61 -0
  399. package/dist/types/components/markdown/parse-inline.d.ts +19 -0
  400. package/dist/types/components/markdown/parser.d.ts +22 -0
  401. package/dist/types/components/markdown/render.d.ts +84 -0
  402. package/dist/types/components/markdown/url.d.ts +10 -0
  403. package/dist/types/components/masonry/index.d.ts +3 -3
  404. package/dist/types/components/menu/index.d.ts +11 -3
  405. package/dist/types/components/menu/menu-actions.d.ts +26 -0
  406. package/dist/types/components/menu/menu-item.vue.d.ts +6 -0
  407. package/dist/types/components/menu/menu.d.ts +48 -5
  408. package/dist/types/components/menu/menu.vue.d.ts +4 -1
  409. package/dist/types/components/menubar/menubar.d.ts +1 -1
  410. package/dist/types/components/node-graph/layout.d.ts +42 -0
  411. package/dist/types/components/node-graph/node-graph.d.ts +1 -1
  412. package/dist/types/components/popover/index.d.ts +3 -3
  413. package/dist/types/components/popover/popover.vue.d.ts +1 -1
  414. package/dist/types/components/progress-group/index.d.ts +3 -0
  415. package/dist/types/components/progress-group/progress-group.d.ts +7 -0
  416. package/dist/types/components/progress-group/progress-group.vue.d.ts +1 -0
  417. package/dist/types/components/qrcode/index.d.ts +3 -0
  418. package/dist/types/components/qrcode/qrcode.d.ts +5 -0
  419. package/dist/types/components/qrcode/qrcode.vue.d.ts +1 -0
  420. package/dist/types/components/select/index.d.ts +3 -3
  421. package/dist/types/components/select/select.vue.d.ts +1 -1
  422. package/dist/types/components/sortable/index.d.ts +3 -3
  423. package/dist/types/components/status-dot/index.d.ts +51 -0
  424. package/dist/types/components/status-dot/status-dot.d.ts +46 -0
  425. package/dist/types/components/status-dot/status-dot.vue.d.ts +46 -0
  426. package/dist/types/components/steps/steps.d.ts +1 -1
  427. package/dist/types/components/switch/index.d.ts +3 -3
  428. package/dist/types/components/table/index.d.ts +4 -3
  429. package/dist/types/components/table/table.d.ts +6 -1
  430. package/dist/types/components/tabs/index.d.ts +3 -0
  431. package/dist/types/components/tabs/tabs.d.ts +16 -3
  432. package/dist/types/components/tabs/tabs.vue.d.ts +1 -0
  433. package/dist/types/components/timeline/index.d.ts +3 -3
  434. package/dist/types/components/timeline/timeline-item.vue.d.ts +1 -1
  435. package/dist/types/components/toast/index.d.ts +0 -2
  436. package/dist/types/components/toast/store.d.ts +0 -4
  437. package/dist/types/components/virtual-list/index.d.ts +3 -3
  438. package/dist/types/components/virtual-list/virtual-list.d.ts +2 -0
  439. package/dist/types/composables/use-popup.d.ts +15 -5
  440. package/dist/types/index.d.ts +1 -0
  441. package/dist/types/locale/types.d.ts +20 -7
  442. package/dist/types/utils/app-context.d.ts +14 -0
  443. package/dist/types/utils/only-child.d.ts +3 -1
  444. package/dist/types/utils/pointer.d.ts +5 -0
  445. package/dist/types/utils/safe-url.d.ts +14 -0
  446. package/dist/types/utils/status-check.d.ts +8 -0
  447. package/dist/utils/app-context.js +22 -0
  448. package/dist/utils/app-context.js.map +1 -0
  449. package/dist/utils/install.js +5 -0
  450. package/dist/utils/install.js.map +1 -1
  451. package/dist/utils/only-child.js +56 -5
  452. package/dist/utils/only-child.js.map +1 -1
  453. package/dist/utils/pointer.js +6 -1
  454. package/dist/utils/pointer.js.map +1 -1
  455. package/dist/utils/safe-url.js +57 -0
  456. package/dist/utils/safe-url.js.map +1 -0
  457. package/dist/utils/status-check.js +27 -0
  458. package/dist/utils/status-check.js.map +1 -0
  459. package/package.json +3 -3
@@ -1,26 +1,31 @@
1
1
  import { useNamespace } from "../../utils/namespace.js";
2
2
  import { useLocale } from "../config-provider/use-config.js";
3
- import spinner_default from "../spinner/spinner.js";
4
- import shimmer_default from "../shimmer/shimmer.js";
5
- import { CollapseTransition } from "../collapse/collapse-transition.js";
6
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useId, vShow, withCtx, withDirectives } from "vue";
7
- import { AlertCircleIcon, CheckIcon, ChevronDownIcon, ListChecksIcon } from "@dou-ui/icons";
3
+ import { DouSpinner } from "../spinner/index.js";
4
+ import { DouShimmer } from "../shimmer/index.js";
5
+ import { DouCollapseTransition } from "../collapse/collapse-transition.js";
6
+ import { DouStatusDot } from "../status-dot/index.js";
7
+ import { planRunning } from "./chat-plan.js";
8
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, vShow, watchEffect, withCtx, withDirectives } from "vue";
9
+ import { AlertCircleIcon, CheckIcon, ChevronDownIcon, ClockPauseIcon, ListChecksIcon } from "@dou-ui/icons";
8
10
  // src/components/chat-plan/chat-plan.vue?vue&type=script&setup=true&lang.ts
9
- var _hoisted_1 = [
10
- "id",
11
- "aria-expanded",
12
- "aria-controls"
13
- ];
14
- var _hoisted_2 = ["id", "aria-labelledby"];
11
+ var _hoisted_1 = ["id", "aria-labelledby"];
15
12
  var chat_plan_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
16
13
  name: "DouChatPlan",
17
14
  __name: "chat-plan",
18
15
  props: {
19
16
  items: { default: () => [] },
20
17
  title: {},
18
+ collapsible: {
19
+ type: Boolean,
20
+ default: true
21
+ },
21
22
  open: {
22
23
  type: Boolean,
23
24
  default: void 0
25
+ },
26
+ live: {
27
+ type: Boolean,
28
+ default: true
24
29
  }
25
30
  },
26
31
  emits: ["update:open"],
@@ -31,64 +36,91 @@ var chat_plan_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
31
36
  const { t } = useLocale();
32
37
  const id = useId();
33
38
  const inner = ref(true);
34
- const open = computed(() => props.open ?? inner.value);
39
+ const open = computed(() => !props.collapsible || (props.open ?? inner.value));
35
40
  function toggle() {
36
41
  inner.value = !open.value;
37
42
  emit("update:open", inner.value);
38
43
  }
44
+ if (process.env.NODE_ENV !== "production") {
45
+ let warned = false;
46
+ watchEffect(() => {
47
+ if (warned || props.collapsible || props.open === void 0) return;
48
+ warned = true;
49
+ console.warn("[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.");
50
+ });
51
+ }
39
52
  const finished = computed(() => props.items.filter((item) => item.status === "done" || item.status === "skipped").length);
40
- const running = computed(() => props.items.some((item) => item.status === "running"));
53
+ const running = computed(() => planRunning(props.items, props.live));
41
54
  return (_ctx, _cache) => {
42
55
  return openBlock(), createElementBlock("div", { class: normalizeClass([
43
56
  unref(ns).b(),
57
+ unref(ns).is("collapsible", __props.collapsible),
44
58
  unref(ns).is("open", open.value),
45
59
  unref(ns).is("running", running.value)
46
- ]) }, [createElementVNode("button", {
47
- id: `${unref(id)}-trigger`,
48
- type: "button",
60
+ ]) }, [(openBlock(), createBlock(resolveDynamicComponent(__props.collapsible ? "button" : "div"), {
61
+ id: `${unref(id)}-header`,
49
62
  class: normalizeClass(unref(ns).e("header")),
50
- "aria-expanded": open.value,
51
- "aria-controls": `${unref(id)}-panel`,
52
- onClick: toggle
53
- }, [
54
- createVNode(unref(ListChecksIcon), { class: normalizeClass(unref(ns).e("icon")) }, null, 8, ["class"]),
55
- createElementVNode("span", { class: normalizeClass(unref(ns).e("title")) }, toDisplayString(__props.title ?? unref(t)("chat.plan")), 3),
56
- createElementVNode("span", { class: normalizeClass(unref(ns).e("count")) }, toDisplayString(finished.value) + " / " + toDisplayString(__props.items.length), 3),
57
- createVNode(unref(ChevronDownIcon), { class: normalizeClass(unref(ns).e("arrow")) }, null, 8, ["class"])
58
- ], 10, _hoisted_1), createVNode(unref(CollapseTransition), null, {
63
+ type: __props.collapsible ? "button" : void 0,
64
+ "aria-expanded": __props.collapsible ? open.value : void 0,
65
+ "aria-controls": __props.collapsible ? `${unref(id)}-panel` : void 0,
66
+ onClick: _cache[0] || (_cache[0] = ($event) => __props.collapsible && toggle())
67
+ }, {
68
+ default: withCtx(() => [
69
+ createVNode(unref(ListChecksIcon), { class: normalizeClass(unref(ns).e("icon")) }, null, 8, ["class"]),
70
+ createElementVNode("span", { class: normalizeClass(unref(ns).e("title")) }, toDisplayString(__props.title ?? unref(t)("chat.plan")), 3),
71
+ createElementVNode("span", { class: normalizeClass(unref(ns).e("count")) }, toDisplayString(finished.value) + " / " + toDisplayString(__props.items.length), 3),
72
+ __props.collapsible ? (openBlock(), createBlock(unref(ChevronDownIcon), {
73
+ key: 0,
74
+ class: normalizeClass(unref(ns).e("arrow"))
75
+ }, null, 8, ["class"])) : createCommentVNode("", true)
76
+ ]),
77
+ _: 1
78
+ }, 8, [
79
+ "id",
80
+ "class",
81
+ "type",
82
+ "aria-expanded",
83
+ "aria-controls"
84
+ ])), createVNode(unref(DouCollapseTransition), null, {
59
85
  default: withCtx(() => [withDirectives(createElementVNode("div", {
60
86
  id: `${unref(id)}-panel`,
61
87
  role: "region",
62
88
  class: normalizeClass(unref(ns).e("panel")),
63
- "aria-labelledby": `${unref(id)}-trigger`
89
+ "aria-labelledby": `${unref(id)}-header`
64
90
  }, [createElementVNode("ol", { class: normalizeClass(unref(ns).e("list")) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item, index) => {
65
91
  return openBlock(), createElementBlock("li", {
66
92
  key: item.key ?? index,
67
93
  class: normalizeClass([unref(ns).e("item"), unref(ns).is(item.status ?? "pending")])
68
- }, [createElementVNode("span", { class: normalizeClass(unref(ns).e("mark")) }, [item.status === "running" ? (openBlock(), createBlock(spinner_default, {
94
+ }, [createElementVNode("span", { class: normalizeClass(unref(ns).e("mark")) }, [item.status === "running" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.live ? (openBlock(), createBlock(unref(DouSpinner), {
69
95
  key: 0,
70
96
  size: "sm",
71
97
  label: unref(t)("chat.stepRunning")
72
- }, null, 8, ["label"])) : item.status === "done" ? (openBlock(), createBlock(unref(CheckIcon), {
98
+ }, null, 8, ["label"])) : (openBlock(), createBlock(unref(DouStatusDot), {
99
+ key: 1,
100
+ label: unref(t)("chat.stepRunning")
101
+ }, null, 8, ["label"]))], 64)) : item.status === "waiting" ? (openBlock(), createBlock(unref(ClockPauseIcon), {
73
102
  key: 1,
103
+ label: unref(t)("chat.stepWaiting")
104
+ }, null, 8, ["label"])) : item.status === "done" ? (openBlock(), createBlock(unref(CheckIcon), {
105
+ key: 2,
74
106
  label: unref(t)("chat.stepDone")
75
107
  }, null, 8, ["label"])) : item.status === "error" ? (openBlock(), createBlock(unref(AlertCircleIcon), {
76
- key: 2,
108
+ key: 3,
77
109
  label: unref(t)("chat.stepError")
78
110
  }, null, 8, ["label"])) : (openBlock(), createElementBlock("span", {
79
- key: 3,
111
+ key: 4,
80
112
  class: normalizeClass(unref(ns).e("dot"))
81
113
  }, null, 2))], 2), createElementVNode("span", { class: normalizeClass(unref(ns).e("text")) }, [renderSlot(_ctx.$slots, "item", {
82
114
  item,
83
115
  index
84
- }, () => [createElementVNode("span", { class: normalizeClass(unref(ns).e("label")) }, [createVNode(shimmer_default, { active: item.status === "running" }, {
116
+ }, () => [createElementVNode("span", { class: normalizeClass(unref(ns).e("label")) }, [createVNode(unref(DouShimmer), { active: __props.live && item.status === "running" }, {
85
117
  default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
86
118
  _: 2
87
119
  }, 1032, ["active"])], 2), item.description ? (openBlock(), createElementBlock("span", {
88
120
  key: 0,
89
121
  class: normalizeClass(unref(ns).e("description"))
90
122
  }, toDisplayString(item.description), 3)) : createCommentVNode("", true)])], 2)], 2);
91
- }), 128))], 2)], 10, _hoisted_2), [[vShow, open.value]])]),
123
+ }), 128))], 2)], 10, _hoisted_1), [[vShow, open.value]])]),
92
124
  _: 3
93
125
  })], 2);
94
126
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chat-plan.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","_toDisplayString","_withCtx","_withDirectives","_Fragment","_renderList","_createBlock","DouSpinner","_renderSlot","DouShimmer","_createTextVNode","_createCommentVNode","_vShow"],"sources":["../../../src/components/chat-plan/chat-plan.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertCircleIcon, CheckIcon, ChevronDownIcon, ListChecksIcon } from '@dou-ui/icons'\nimport { computed, ref, useId } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport DouShimmer from '../shimmer/shimmer.vue'\nimport DouSpinner from '../spinner/spinner.vue'\nimport type { ChatPlanEmits, ChatPlanProps, ChatPlanSlots } from './chat-plan'\n\ndefineOptions({ name: 'DouChatPlan' })\n\nconst props = withDefaults(defineProps<ChatPlanProps>(), {\n items: () => [],\n open: undefined,\n})\nconst emit = defineEmits<ChatPlanEmits>()\ndefineSlots<ChatPlanSlots>()\n\nconst ns = useNamespace('chat-plan')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(true)\nconst open = computed(() => props.open ?? inner.value)\nfunction toggle() {\n inner.value = !open.value\n emit('update:open', inner.value)\n}\n\nconst finished = computed(\n () => props.items.filter((item) => item.status === 'done' || item.status === 'skipped').length,\n)\nconst running = computed(() => props.items.some((item) => item.status === 'running'))\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('running', running)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('header')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"toggle\"\n >\n <ListChecksIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">{{ title ?? t('chat.plan') }}</span>\n <span :class=\"ns.e('count')\">{{ finished }} / {{ items.length }}</span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <ol :class=\"ns.e('list')\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.key ?? index\"\n :class=\"[ns.e('item'), ns.is(item.status ?? 'pending')]\"\n >\n <span :class=\"ns.e('mark')\">\n <DouSpinner\n v-if=\"item.status === 'running'\"\n size=\"sm\"\n :label=\"t('chat.stepRunning')\"\n />\n <CheckIcon v-else-if=\"item.status === 'done'\" :label=\"t('chat.stepDone')\" />\n <AlertCircleIcon v-else-if=\"item.status === 'error'\" :label=\"t('chat.stepError')\" />\n <span v-else :class=\"ns.e('dot')\" />\n </span>\n <span :class=\"ns.e('text')\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <span :class=\"ns.e('label')\">\n <DouShimmer :active=\"item.status === 'running'\">{{ item.label }}</DouShimmer>\n </span>\n <span v-if=\"item.description\" :class=\"ns.e('description')\">\n {{ item.description }}\n </span>\n </slot>\n </span>\n </li>\n </ol>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat-plan.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createBlock","_resolveDynamicComponent","_withCtx","_createVNode","_createElementVNode","_toDisplayString","_createCommentVNode","CollapseTransition","_withDirectives","_Fragment","_renderList","_renderSlot","_createTextVNode","_vShow"],"sources":["../../../src/components/chat-plan/chat-plan.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AlertCircleIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockPauseIcon,\n ListChecksIcon,\n} from '@dou-ui/icons'\nimport { computed, ref, useId, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { DouSpinner } from '../spinner'\nimport { DouStatusDot } from '../status-dot'\nimport { planRunning } from './chat-plan'\nimport type { ChatPlanEmits, ChatPlanProps, ChatPlanSlots } from './chat-plan'\n\ndefineOptions({ name: 'DouChatPlan' })\n\nconst props = withDefaults(defineProps<ChatPlanProps>(), {\n items: () => [],\n collapsible: true,\n open: undefined,\n live: true,\n})\nconst emit = defineEmits<ChatPlanEmits>()\ndefineSlots<ChatPlanSlots>()\n\nconst ns = useNamespace('chat-plan')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(true)\nconst open = computed(() => !props.collapsible || (props.open ?? inner.value))\nfunction toggle() {\n inner.value = !open.value\n emit('update:open', inner.value)\n}\n\n// Say once, while developing, that `open` does nothing on a plain panel.\n// The app's bundler replaces this, as for Vue's own warnings.\nif (process.env.NODE_ENV !== 'production') {\n let warned = false\n watchEffect(() => {\n if (warned || props.collapsible || props.open === undefined) return\n warned = true\n console.warn('[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.')\n })\n}\n\nconst finished = computed(\n () => props.items.filter((item) => item.status === 'done' || item.status === 'skipped').length,\n)\n// `live` false: the run has stopped, so a running step holds still\nconst running = computed(() => planRunning(props.items, props.live))\n</script>\n\n<template>\n <div\n :class=\"[\n ns.b(),\n ns.is('collapsible', collapsible),\n ns.is('open', open),\n ns.is('running', running),\n ]\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n :id=\"`${id}-header`\"\n :class=\"ns.e('header')\"\n :type=\"collapsible ? 'button' : undefined\"\n :aria-expanded=\"collapsible ? open : undefined\"\n :aria-controls=\"collapsible ? `${id}-panel` : undefined\"\n @click=\"collapsible && toggle()\"\n >\n <ListChecksIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">{{ title ?? t('chat.plan') }}</span>\n <span :class=\"ns.e('count')\">{{ finished }} / {{ items.length }}</span>\n <ChevronDownIcon v-if=\"collapsible\" :class=\"ns.e('arrow')\" />\n </component>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-header`\"\n >\n <ol :class=\"ns.e('list')\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.key ?? index\"\n :class=\"[ns.e('item'), ns.is(item.status ?? 'pending')]\"\n >\n <span :class=\"ns.e('mark')\">\n <template v-if=\"item.status === 'running'\">\n <DouSpinner v-if=\"live\" size=\"sm\" :label=\"t('chat.stepRunning')\" />\n <DouStatusDot v-else :label=\"t('chat.stepRunning')\" />\n </template>\n <ClockPauseIcon\n v-else-if=\"item.status === 'waiting'\"\n :label=\"t('chat.stepWaiting')\"\n />\n <CheckIcon v-else-if=\"item.status === 'done'\" :label=\"t('chat.stepDone')\" />\n <AlertCircleIcon v-else-if=\"item.status === 'error'\" :label=\"t('chat.stepError')\" />\n <span v-else :class=\"ns.e('dot')\" />\n </span>\n <span :class=\"ns.e('text')\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <span :class=\"ns.e('label')\">\n <DouShimmer :active=\"live && item.status === 'running'\">{{\n item.label\n }}</DouShimmer>\n </span>\n <span v-if=\"item.description\" :class=\"ns.e('description')\">\n {{ item.description }}\n </span>\n </slot>\n </span>\n </li>\n </ol>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import chat_plan_vue_vue_type_script_setup_true_lang_default from "./chat-plan.vue_vue_type_script_setup_true_lang.js";
2
+ // src/components/chat-plan/chat-plan.vue
3
+ var chat_plan_default = chat_plan_vue_vue_type_script_setup_true_lang_default;
4
+ export { chat_plan_default as default };
5
+
6
+ //# sourceMappingURL=chat-plan2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-plan2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-plan/chat-plan.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AlertCircleIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockPauseIcon,\n ListChecksIcon,\n} from '@dou-ui/icons'\nimport { computed, ref, useId, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { DouSpinner } from '../spinner'\nimport { DouStatusDot } from '../status-dot'\nimport { planRunning } from './chat-plan'\nimport type { ChatPlanEmits, ChatPlanProps, ChatPlanSlots } from './chat-plan'\n\ndefineOptions({ name: 'DouChatPlan' })\n\nconst props = withDefaults(defineProps<ChatPlanProps>(), {\n items: () => [],\n collapsible: true,\n open: undefined,\n live: true,\n})\nconst emit = defineEmits<ChatPlanEmits>()\ndefineSlots<ChatPlanSlots>()\n\nconst ns = useNamespace('chat-plan')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(true)\nconst open = computed(() => !props.collapsible || (props.open ?? inner.value))\nfunction toggle() {\n inner.value = !open.value\n emit('update:open', inner.value)\n}\n\n// Say once, while developing, that `open` does nothing on a plain panel.\n// The app's bundler replaces this, as for Vue's own warnings.\nif (process.env.NODE_ENV !== 'production') {\n let warned = false\n watchEffect(() => {\n if (warned || props.collapsible || props.open === undefined) return\n warned = true\n console.warn('[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.')\n })\n}\n\nconst finished = computed(\n () => props.items.filter((item) => item.status === 'done' || item.status === 'skipped').length,\n)\n// `live` false: the run has stopped, so a running step holds still\nconst running = computed(() => planRunning(props.items, props.live))\n</script>\n\n<template>\n <div\n :class=\"[\n ns.b(),\n ns.is('collapsible', collapsible),\n ns.is('open', open),\n ns.is('running', running),\n ]\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n :id=\"`${id}-header`\"\n :class=\"ns.e('header')\"\n :type=\"collapsible ? 'button' : undefined\"\n :aria-expanded=\"collapsible ? open : undefined\"\n :aria-controls=\"collapsible ? `${id}-panel` : undefined\"\n @click=\"collapsible && toggle()\"\n >\n <ListChecksIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">{{ title ?? t('chat.plan') }}</span>\n <span :class=\"ns.e('count')\">{{ finished }} / {{ items.length }}</span>\n <ChevronDownIcon v-if=\"collapsible\" :class=\"ns.e('arrow')\" />\n </component>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-header`\"\n >\n <ol :class=\"ns.e('list')\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.key ?? index\"\n :class=\"[ns.e('item'), ns.is(item.status ?? 'pending')]\"\n >\n <span :class=\"ns.e('mark')\">\n <template v-if=\"item.status === 'running'\">\n <DouSpinner v-if=\"live\" size=\"sm\" :label=\"t('chat.stepRunning')\" />\n <DouStatusDot v-else :label=\"t('chat.stepRunning')\" />\n </template>\n <ClockPauseIcon\n v-else-if=\"item.status === 'waiting'\"\n :label=\"t('chat.stepWaiting')\"\n />\n <CheckIcon v-else-if=\"item.status === 'done'\" :label=\"t('chat.stepDone')\" />\n <AlertCircleIcon v-else-if=\"item.status === 'error'\" :label=\"t('chat.stepError')\" />\n <span v-else :class=\"ns.e('dot')\" />\n </span>\n <span :class=\"ns.e('text')\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <span :class=\"ns.e('label')\">\n <DouShimmer :active=\"live && item.status === 'running'\">{{\n item.label\n }}</DouShimmer>\n </span>\n <span v-if=\"item.description\" :class=\"ns.e('description')\">\n {{ item.description }}\n </span>\n </slot>\n </span>\n </li>\n </ol>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { withInstall } from "../../utils/install.js";
2
- import chat_plan_default from "./chat-plan.js";
2
+ import chat_plan_default from "./chat-plan2.js";
3
3
  // src/components/chat-plan/index.ts
4
4
  var DouChatPlan = withInstall(chat_plan_default);
5
5
  export { DouChatPlan, DouChatPlan as default };
@@ -1,4 +1,5 @@
1
1
  import '@dou-ui/theme/core.css'
2
+ import '@dou-ui/theme/components/status-dot.css'
2
3
  import '@dou-ui/theme/components/collapse.css'
3
4
  import '@dou-ui/theme/components/spinner.css'
4
5
  import '@dou-ui/theme/components/shimmer.css'
@@ -0,0 +1,6 @@
1
+ import chat_question_vue_vue_type_script_setup_true_lang_default from "./chat-question.vue_vue_type_script_setup_true_lang.js";
2
+ // src/components/chat-question/chat-question.vue
3
+ var chat_question_default = chat_question_vue_vue_type_script_setup_true_lang_default;
4
+ export { chat_question_default as default };
5
+
6
+ //# sourceMappingURL=chat-question.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-question.js","names":["_sfc_main"],"sources":["../../../src/components/chat-question/chat-question.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, MessageQuestionIcon, UndoIcon } from '@dou-ui/icons'\nimport { computed, nextTick, ref, useId, watch, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { devWarn, useStatusCheck } from '../../utils/status-check'\nimport { useLocale } from '../config-provider/use-config'\nimport type {\n ChatQuestionEmits,\n ChatQuestionOption,\n ChatQuestionProps,\n ChatQuestionSlots,\n} from './chat-question'\n\ndefineOptions({ name: 'DouChatQuestion' })\n\nconst props = withDefaults(defineProps<ChatQuestionProps>(), {\n options: () => [],\n status: 'waiting',\n})\nconst emit = defineEmits<ChatQuestionEmits>()\nconst slots = defineSlots<ChatQuestionSlots>()\n\nconst ns = useNamespace('chat-question')\nconst { t } = useLocale()\nconst id = useId()\n\nconst waiting = computed(() => props.status === 'waiting')\nconst chosen = computed(() => props.options.find((option) => option.value === props.answer))\n\nfunction pick(option: ChatQuestionOption) {\n if (waiting.value && !option.disabled) emit('select', option.value, option)\n}\n\n// Answering or withdrawing removes the options; if focus was on one, keep\n// it on the card instead of losing it to the page. The watcher runs before\n// the DOM updates, while the focused option is still there to find.\nconst root = ref<HTMLElement>()\nwatch(\n () => props.status,\n (now, before) => {\n if (before !== 'waiting' || now === 'waiting') return\n if (!root.value?.contains(document.activeElement)) return\n void nextTick(() => root.value?.focus({ preventScroll: true }))\n },\n)\n\nconst statuses = ['waiting', 'answered', 'withdrawn']\nuseStatusCheck('DouChatQuestion', () => [props.status], statuses, { pending: 'waiting' })\n\n// Mistakes the types can't catch, with options from a server.\nif (process.env.NODE_ENV !== 'production')\n watchEffect(() => {\n const seen = new Set<string | number>()\n for (const option of props.options) {\n if (seen.has(option.value))\n devWarn(\n `[dou-ui] DouChatQuestion: two options share the value ${JSON.stringify(option.value)}; values tell the options apart and name the answer, so they must differ.`,\n )\n seen.add(option.value)\n }\n if (props.status === 'waiting' && !props.options.length)\n devWarn(\n '[dou-ui] DouChatQuestion: waiting with no options, so there is nothing to answer with.',\n )\n })\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"[ns.b(), ns.is(status)]\"\n role=\"group\"\n tabindex=\"-1\"\n :aria-labelledby=\"title || slots.title ? `${id}-title` : undefined\"\n >\n <div :class=\"ns.e('header')\">\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <slot name=\"icon\"><MessageQuestionIcon /></slot>\n </span>\n <div :class=\"ns.e('text')\">\n <div v-if=\"title || slots.title\" :id=\"`${id}-title`\" :class=\"ns.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div v-if=\"description\" :class=\"ns.e('description')\">{{ description }}</div>\n </div>\n <!-- always there, so screen readers announce the outcome when it appears -->\n <span :class=\"ns.e('result')\" role=\"status\">\n <template v-if=\"status === 'answered'\">\n <CheckIcon aria-hidden=\"true\" />\n <!-- a long label is cut short: the whole of it on hover -->\n <span :class=\"ns.e('answer')\" :title=\"chosen?.label\">{{\n chosen?.label ?? t('chat.answered')\n }}</span>\n </template>\n <template v-else-if=\"status === 'withdrawn'\">\n <UndoIcon aria-hidden=\"true\" />\n {{ t('chat.withdrawn') }}\n </template>\n </span>\n </div>\n <ul v-if=\"waiting && options.length\" :class=\"ns.e('options')\">\n <li v-for=\"(option, index) in options\" :key=\"option.value\">\n <!-- named by the label alone, with the second line read as its description -->\n <button\n type=\"button\"\n :class=\"ns.e('option')\"\n :disabled=\"option.disabled\"\n :aria-labelledby=\"slots.option ? undefined : `${id}-${index}`\"\n :aria-describedby=\"option.description && !slots.option ? `${id}-${index}-d` : undefined\"\n @click=\"pick(option)\"\n >\n <slot name=\"option\" :option=\"option\">\n <component :is=\"option.icon\" v-if=\"option.icon\" :class=\"ns.e('option-icon')\" />\n <span :class=\"ns.e('option-text')\">\n <span :id=\"`${id}-${index}`\" :class=\"ns.e('label')\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :id=\"`${id}-${index}-d`\"\n :class=\"ns.e('option-description')\"\n >{{ option.description }}</span\n >\n </span>\n </slot>\n </button>\n </li>\n </ul>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,116 @@
1
+ import { useNamespace } from "../../utils/namespace.js";
2
+ import { useLocale } from "../config-provider/use-config.js";
3
+ import { devWarn, useStatusCheck } from "../../utils/status-check.js";
4
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useSlots, watch, watchEffect } from "vue";
5
+ import { CheckIcon, MessageQuestionIcon, UndoIcon } from "@dou-ui/icons";
6
+ // src/components/chat-question/chat-question.vue?vue&type=script&setup=true&lang.ts
7
+ var _hoisted_1 = ["aria-labelledby"];
8
+ var _hoisted_2 = ["id"];
9
+ var _hoisted_3 = ["title"];
10
+ var _hoisted_4 = [
11
+ "disabled",
12
+ "aria-labelledby",
13
+ "aria-describedby",
14
+ "onClick"
15
+ ];
16
+ var _hoisted_5 = ["id"];
17
+ var _hoisted_6 = ["id"];
18
+ var chat_question_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
19
+ name: "DouChatQuestion",
20
+ __name: "chat-question",
21
+ props: {
22
+ title: {},
23
+ description: {},
24
+ options: { default: () => [] },
25
+ status: { default: "waiting" },
26
+ answer: {}
27
+ },
28
+ emits: ["select"],
29
+ setup(__props, { emit: __emit }) {
30
+ const props = __props;
31
+ const emit = __emit;
32
+ const slots = useSlots();
33
+ const ns = useNamespace("chat-question");
34
+ const { t } = useLocale();
35
+ const id = useId();
36
+ const waiting = computed(() => props.status === "waiting");
37
+ const chosen = computed(() => props.options.find((option) => option.value === props.answer));
38
+ function pick(option) {
39
+ if (waiting.value && !option.disabled) emit("select", option.value, option);
40
+ }
41
+ const root = ref();
42
+ watch(() => props.status, (now, before) => {
43
+ if (before !== "waiting" || now === "waiting") return;
44
+ if (!root.value?.contains(document.activeElement)) return;
45
+ nextTick(() => root.value?.focus({ preventScroll: true }));
46
+ });
47
+ useStatusCheck("DouChatQuestion", () => [props.status], [
48
+ "waiting",
49
+ "answered",
50
+ "withdrawn"
51
+ ], { pending: "waiting" });
52
+ if (process.env.NODE_ENV !== "production") watchEffect(() => {
53
+ const seen = /* @__PURE__ */ new Set();
54
+ for (const option of props.options) {
55
+ if (seen.has(option.value)) devWarn(`[dou-ui] DouChatQuestion: two options share the value ${JSON.stringify(option.value)}; values tell the options apart and name the answer, so they must differ.`);
56
+ seen.add(option.value);
57
+ }
58
+ if (props.status === "waiting" && !props.options.length) devWarn("[dou-ui] DouChatQuestion: waiting with no options, so there is nothing to answer with.");
59
+ });
60
+ return (_ctx, _cache) => {
61
+ return openBlock(), createElementBlock("div", {
62
+ ref_key: "root",
63
+ ref: root,
64
+ class: normalizeClass([unref(ns).b(), unref(ns).is(__props.status)]),
65
+ role: "group",
66
+ tabindex: "-1",
67
+ "aria-labelledby": __props.title || slots.title ? `${unref(id)}-title` : void 0
68
+ }, [createElementVNode("div", { class: normalizeClass(unref(ns).e("header")) }, [
69
+ createElementVNode("span", {
70
+ class: normalizeClass(unref(ns).e("icon")),
71
+ "aria-hidden": "true"
72
+ }, [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(unref(MessageQuestionIcon))])], 2),
73
+ createElementVNode("div", { class: normalizeClass(unref(ns).e("text")) }, [__props.title || slots.title ? (openBlock(), createElementBlock("div", {
74
+ key: 0,
75
+ id: `${unref(id)}-title`,
76
+ class: normalizeClass(unref(ns).e("title"))
77
+ }, [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 10, _hoisted_2)) : createCommentVNode("", true), __props.description ? (openBlock(), createElementBlock("div", {
78
+ key: 1,
79
+ class: normalizeClass(unref(ns).e("description"))
80
+ }, toDisplayString(__props.description), 3)) : createCommentVNode("", true)], 2),
81
+ createElementVNode("span", {
82
+ class: normalizeClass(unref(ns).e("result")),
83
+ role: "status"
84
+ }, [__props.status === "answered" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(CheckIcon), { "aria-hidden": "true" }), createElementVNode("span", {
85
+ class: normalizeClass(unref(ns).e("answer")),
86
+ title: chosen.value?.label
87
+ }, toDisplayString(chosen.value?.label ?? unref(t)("chat.answered")), 11, _hoisted_3)], 64)) : __props.status === "withdrawn" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createVNode(unref(UndoIcon), { "aria-hidden": "true" }), createTextVNode(" " + toDisplayString(unref(t)("chat.withdrawn")), 1)], 64)) : createCommentVNode("", true)], 2)
88
+ ], 2), waiting.value && __props.options.length ? (openBlock(), createElementBlock("ul", {
89
+ key: 0,
90
+ class: normalizeClass(unref(ns).e("options"))
91
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option, index) => {
92
+ return openBlock(), createElementBlock("li", { key: option.value }, [createElementVNode("button", {
93
+ type: "button",
94
+ class: normalizeClass(unref(ns).e("option")),
95
+ disabled: option.disabled,
96
+ "aria-labelledby": slots.option ? void 0 : `${unref(id)}-${index}`,
97
+ "aria-describedby": option.description && !slots.option ? `${unref(id)}-${index}-d` : void 0,
98
+ onClick: ($event) => pick(option)
99
+ }, [renderSlot(_ctx.$slots, "option", { option }, () => [option.icon ? (openBlock(), createBlock(resolveDynamicComponent(option.icon), {
100
+ key: 0,
101
+ class: normalizeClass(unref(ns).e("option-icon"))
102
+ }, null, 8, ["class"])) : createCommentVNode("", true), createElementVNode("span", { class: normalizeClass(unref(ns).e("option-text")) }, [createElementVNode("span", {
103
+ id: `${unref(id)}-${index}`,
104
+ class: normalizeClass(unref(ns).e("label"))
105
+ }, toDisplayString(option.label), 11, _hoisted_5), option.description ? (openBlock(), createElementBlock("span", {
106
+ key: 0,
107
+ id: `${unref(id)}-${index}-d`,
108
+ class: normalizeClass(unref(ns).e("option-description"))
109
+ }, toDisplayString(option.description), 11, _hoisted_6)) : createCommentVNode("", true)], 2)])], 10, _hoisted_4)]);
110
+ }), 128))], 2)) : createCommentVNode("", true)], 10, _hoisted_1);
111
+ };
112
+ }
113
+ });
114
+ export { chat_question_vue_vue_type_script_setup_true_lang_default as default };
115
+
116
+ //# sourceMappingURL=chat-question.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-question.vue_vue_type_script_setup_true_lang.js","names":["_useSlots","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_renderSlot","_createVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_createBlock","_resolveDynamicComponent"],"sources":["../../../src/components/chat-question/chat-question.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, MessageQuestionIcon, UndoIcon } from '@dou-ui/icons'\nimport { computed, nextTick, ref, useId, watch, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { devWarn, useStatusCheck } from '../../utils/status-check'\nimport { useLocale } from '../config-provider/use-config'\nimport type {\n ChatQuestionEmits,\n ChatQuestionOption,\n ChatQuestionProps,\n ChatQuestionSlots,\n} from './chat-question'\n\ndefineOptions({ name: 'DouChatQuestion' })\n\nconst props = withDefaults(defineProps<ChatQuestionProps>(), {\n options: () => [],\n status: 'waiting',\n})\nconst emit = defineEmits<ChatQuestionEmits>()\nconst slots = defineSlots<ChatQuestionSlots>()\n\nconst ns = useNamespace('chat-question')\nconst { t } = useLocale()\nconst id = useId()\n\nconst waiting = computed(() => props.status === 'waiting')\nconst chosen = computed(() => props.options.find((option) => option.value === props.answer))\n\nfunction pick(option: ChatQuestionOption) {\n if (waiting.value && !option.disabled) emit('select', option.value, option)\n}\n\n// Answering or withdrawing removes the options; if focus was on one, keep\n// it on the card instead of losing it to the page. The watcher runs before\n// the DOM updates, while the focused option is still there to find.\nconst root = ref<HTMLElement>()\nwatch(\n () => props.status,\n (now, before) => {\n if (before !== 'waiting' || now === 'waiting') return\n if (!root.value?.contains(document.activeElement)) return\n void nextTick(() => root.value?.focus({ preventScroll: true }))\n },\n)\n\nconst statuses = ['waiting', 'answered', 'withdrawn']\nuseStatusCheck('DouChatQuestion', () => [props.status], statuses, { pending: 'waiting' })\n\n// Mistakes the types can't catch, with options from a server.\nif (process.env.NODE_ENV !== 'production')\n watchEffect(() => {\n const seen = new Set<string | number>()\n for (const option of props.options) {\n if (seen.has(option.value))\n devWarn(\n `[dou-ui] DouChatQuestion: two options share the value ${JSON.stringify(option.value)}; values tell the options apart and name the answer, so they must differ.`,\n )\n seen.add(option.value)\n }\n if (props.status === 'waiting' && !props.options.length)\n devWarn(\n '[dou-ui] DouChatQuestion: waiting with no options, so there is nothing to answer with.',\n )\n })\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"[ns.b(), ns.is(status)]\"\n role=\"group\"\n tabindex=\"-1\"\n :aria-labelledby=\"title || slots.title ? `${id}-title` : undefined\"\n >\n <div :class=\"ns.e('header')\">\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <slot name=\"icon\"><MessageQuestionIcon /></slot>\n </span>\n <div :class=\"ns.e('text')\">\n <div v-if=\"title || slots.title\" :id=\"`${id}-title`\" :class=\"ns.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div v-if=\"description\" :class=\"ns.e('description')\">{{ description }}</div>\n </div>\n <!-- always there, so screen readers announce the outcome when it appears -->\n <span :class=\"ns.e('result')\" role=\"status\">\n <template v-if=\"status === 'answered'\">\n <CheckIcon aria-hidden=\"true\" />\n <!-- a long label is cut short: the whole of it on hover -->\n <span :class=\"ns.e('answer')\" :title=\"chosen?.label\">{{\n chosen?.label ?? t('chat.answered')\n }}</span>\n </template>\n <template v-else-if=\"status === 'withdrawn'\">\n <UndoIcon aria-hidden=\"true\" />\n {{ t('chat.withdrawn') }}\n </template>\n </span>\n </div>\n <ul v-if=\"waiting && options.length\" :class=\"ns.e('options')\">\n <li v-for=\"(option, index) in options\" :key=\"option.value\">\n <!-- named by the label alone, with the second line read as its description -->\n <button\n type=\"button\"\n :class=\"ns.e('option')\"\n :disabled=\"option.disabled\"\n :aria-labelledby=\"slots.option ? undefined : `${id}-${index}`\"\n :aria-describedby=\"option.description && !slots.option ? `${id}-${index}-d` : undefined\"\n @click=\"pick(option)\"\n >\n <slot name=\"option\" :option=\"option\">\n <component :is=\"option.icon\" v-if=\"option.icon\" :class=\"ns.e('option-icon')\" />\n <span :class=\"ns.e('option-text')\">\n <span :id=\"`${id}-${index}`\" :class=\"ns.e('label')\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :id=\"`${id}-${index}-d`\"\n :class=\"ns.e('option-description')\"\n >{{ option.description }}</span\n >\n </span>\n </slot>\n </button>\n </li>\n </ul>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { withInstall } from "../../utils/install.js";
2
+ import chat_question_default from "./chat-question.js";
3
+ // src/components/chat-question/index.ts
4
+ var DouChatQuestion = withInstall(chat_question_default);
5
+ export { DouChatQuestion, DouChatQuestion as default };
6
+
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["ChatQuestion"],"sources":["../../../src/components/chat-question/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport ChatQuestion from './chat-question.vue'\n\nexport const DouChatQuestion = withInstall(ChatQuestion)\nexport default DouChatQuestion\n\nexport type * from './chat-question'\nexport type ChatQuestionInstance = InstanceType<typeof ChatQuestion>\n\ndeclare module 'vue' {\n export interface GlobalComponents {\n DouChatQuestion: typeof DouChatQuestion\n }\n}\n"],"mappings":";;;AAGA,IAAa,kBAAkB,YAAYA,qBAAY"}
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,2 @@
1
+ import '@dou-ui/theme/core.css'
2
+ import '@dou-ui/theme/components/chat-question.css'
@@ -1 +1 @@
1
- {"version":3,"file":"chat-reasoning.js","names":["_sfc_main"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport DouShimmer from '../shimmer/shimmer.vue'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"chat-reasoning.js","names":["_sfc_main"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { useNamespace } from "../../utils/namespace.js";
2
2
  import { useLocale } from "../config-provider/use-config.js";
3
- import shimmer_default from "../shimmer/shimmer.js";
4
- import { CollapseTransition } from "../collapse/collapse-transition.js";
3
+ import { DouShimmer } from "../shimmer/index.js";
4
+ import { DouCollapseTransition } from "../collapse/collapse-transition.js";
5
5
  import { formatDuration } from "./format.js";
6
6
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderSlot, toDisplayString, unref, useId, vShow, watch, withCtx, withDirectives } from "vue";
7
7
  import { ChevronDownIcon, SparklesIcon } from "@dou-ui/icons";
@@ -81,12 +81,12 @@ var chat_reasoning_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
81
81
  createElementVNode("span", { class: normalizeClass(unref(ns).e("title")) }, [renderSlot(_ctx.$slots, "title", {
82
82
  thinking: __props.thinking,
83
83
  duration: duration.value
84
- }, () => [createVNode(shimmer_default, { active: __props.thinking }, {
84
+ }, () => [createVNode(unref(DouShimmer), { active: __props.thinking }, {
85
85
  default: withCtx(() => [createTextVNode(toDisplayString(label.value), 1)]),
86
86
  _: 1
87
87
  }, 8, ["active"])])], 2),
88
88
  createVNode(unref(ChevronDownIcon), { class: normalizeClass(unref(ns).e("arrow")) }, null, 8, ["class"])
89
- ], 10, _hoisted_1), createVNode(unref(CollapseTransition), null, {
89
+ ], 10, _hoisted_1), createVNode(unref(DouCollapseTransition), null, {
90
90
  default: withCtx(() => [withDirectives(createElementVNode("div", {
91
91
  id: `${unref(id)}-panel`,
92
92
  role: "region",
@@ -1 +1 @@
1
- {"version":3,"file":"chat-reasoning.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","_renderSlot","DouShimmer","_withCtx","_createTextVNode","_toDisplayString","_withDirectives","_vShow"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport DouShimmer from '../shimmer/shimmer.vue'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat-reasoning.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","_renderSlot","_withCtx","_createTextVNode","_toDisplayString","CollapseTransition","_withDirectives","_vShow"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat-citation.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-citation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport DouPopover from '../popover/popover.vue'\nimport { sourceSite } from './chat-sources'\nimport type { ChatCitationProps } from './chat-sources'\n\ndefineOptions({ name: 'DouChatCitation' })\n\nconst props = defineProps<ChatCitationProps>()\n\nconst ns = useNamespace('chat-citation')\nconst { t } = useLocale()\nconst site = computed(() => (props.source ? sourceSite(props.source) : ''))\nconst label = computed(() =>\n props.source\n ? t('chat.citation', { index: props.index, title: props.source.title })\n : String(props.index),\n)\n</script>\n\n<template>\n <DouPopover\n v-if=\"source\"\n trigger=\"hover\"\n placement=\"top\"\n :width=\"300\"\n :show-delay=\"150\"\n :class=\"ns.e('popover')\"\n >\n <component\n :is=\"source.url ? 'a' : 'span'\"\n :class=\"ns.b()\"\n :href=\"source.url\"\n :target=\"source.url ? '_blank' : undefined\"\n :rel=\"source.url ? 'noopener noreferrer' : undefined\"\n :tabindex=\"source.url ? undefined : 0\"\n :aria-label=\"label\"\n >{{ index }}</component\n >\n <template #content>\n <span :class=\"ns.e('site')\">\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n {{ site }}\n </span>\n <span :class=\"ns.e('title')\">{{ source.title }}</span>\n <span v-if=\"source.description\" :class=\"ns.e('description')\">{{ source.description }}</span>\n </template>\n </DouPopover>\n <span v-else :class=\"ns.b()\">{{ index }}</span>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"chat-citation.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-citation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { checkedUrl, opensNewTab } from '../../utils/safe-url'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouPopover } from '../popover'\nimport { sourceSite } from './chat-sources'\nimport type { ChatCitationProps } from './chat-sources'\n\ndefineOptions({ name: 'DouChatCitation' })\n\nconst props = defineProps<ChatCitationProps>()\n\nconst ns = useNamespace('chat-citation')\nconst { t } = useLocale()\n// unsafe addresses such as `javascript:` are shown without a link\nconst href = computed(() => checkedUrl('DouChatCitation', props.source?.url))\nconst newTab = computed(() => !!href.value && opensNewTab(href.value))\nconst site = computed(() => (props.source ? sourceSite(props.source) : ''))\nconst label = computed(() =>\n props.source\n ? t('chat.citation', { index: props.index, title: props.source.title })\n : String(props.index),\n)\n\n/*\n * Hover shows the card; a tap opens it first, and the title in it is the\n * link (a second tap on the number follows it too). Focus from the\n * keyboard shows the card, and it goes when focus leaves for somewhere\n * other than the card.\n */\nconst open = ref(false)\nlet byFocus = false\nfunction onFocus(event: FocusEvent) {\n if (open.value || !(event.target as Element).matches(':focus-visible')) return\n byFocus = true\n open.value = true\n}\nfunction onOpen(value: boolean) {\n if (!value) byFocus = false\n}\nfunction onBlur(event: FocusEvent) {\n const to = event.relatedTarget as Element | null\n if (!byFocus || to?.closest(`.${ns.e('popover')}`)) return\n byFocus = false\n open.value = false\n}\n</script>\n\n<template>\n <DouPopover\n v-if=\"source\"\n trigger=\"hover\"\n placement=\"top\"\n :width=\"300\"\n :show-delay=\"150\"\n :class=\"ns.e('popover')\"\n v-model:open=\"open\"\n @update:open=\"onOpen\"\n >\n <component\n :is=\"href ? 'a' : 'span'\"\n :class=\"ns.b()\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n :tabindex=\"href ? undefined : 0\"\n :aria-label=\"label\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n >{{ index }}</component\n >\n <template #content>\n <span :class=\"ns.e('site')\">\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n {{ site }}\n </span>\n <a\n v-if=\"href\"\n :class=\"[ns.e('title'), ns.e('link')]\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n @blur=\"onBlur\"\n >{{ source.title }}</a\n >\n <span v-else :class=\"ns.e('title')\">{{ source.title }}</span>\n <span v-if=\"source.description\" :class=\"ns.e('description')\">{{ source.description }}</span>\n </template>\n </DouPopover>\n <span v-else :class=\"ns.b()\">{{ index }}</span>\n</template>\n"],"mappings":""}