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,4 +1,10 @@
1
1
  // src/components/virtual-list/virtual-list.ts
2
+ /** The key of an item as `itemKey` gives it: a property, a function, or the index. */
3
+ function virtualItemKey(itemKey, item, index) {
4
+ if (typeof itemKey === "function") return itemKey(item, index);
5
+ if (itemKey) return item[itemKey];
6
+ return index;
7
+ }
2
8
  /**
3
9
  * Offsets of items with known heights. `start(i)` is where item `i`
4
10
  * begins; `find(y)` is the item covering `y`, by binary search.
@@ -23,6 +29,6 @@ function createOffsets(count, size) {
23
29
  find
24
30
  };
25
31
  }
26
- export { createOffsets };
32
+ export { createOffsets, virtualItemKey };
27
33
 
28
34
  //# sourceMappingURL=virtual-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list.js","names":[],"sources":["../../../src/components/virtual-list/virtual-list.ts"],"sourcesContent":["export type VirtualListKey = string | number\nexport type VirtualListAlign = 'start' | 'center' | 'end' | 'nearest'\n\nexport interface VirtualListProps<T = any> {\n /** The items. Only those in or near the viewport are rendered. */\n items: T[]\n /**\n * The height of each item in px, or a function giving it per item.\n * Heights are known up front, so the scrollbar never jumps. Without it,\n * items are measured once rendered.\n */\n itemSize?: number | ((item: T, index: number) => number)\n /** Without `itemSize`, the height to assume for an item not rendered yet. */\n estimateSize?: number | ((item: T, index: number) => number)\n /** A property of each item, or a function, that gives it a unique key. Defaults to the index. */\n itemKey?: string | ((item: T, index: number) => VirtualListKey)\n /** The height of the viewport. A number is in px. Without it the list fills its container. */\n height?: number | string\n /** Extra items rendered above and below the viewport, so fast scrolling shows no gaps. */\n overscan?: number\n /** How close to the bottom, in px, counts as reaching the end. */\n endThreshold?: number\n}\n\nexport interface VirtualListEmits {\n scroll: [event: Event]\n /** Scrolled within `endThreshold` of the bottom, e.g. to load the next page. */\n endReached: []\n}\n\nexport interface VirtualListSlots<T = any> {\n /** One item. */\n default?: (props: { item: T; index: number }) => unknown\n /** Shown when there are no items. */\n empty?: () => unknown\n}\n\nexport interface VirtualListExpose {\n /** Scroll so the item at `index` is visible. `nearest` scrolls as little as possible. */\n scrollToIndex: (index: number, align?: VirtualListAlign) => void\n /** Scroll to an offset in px. */\n scrollTo: (offset: number) => void\n /** The scrolling element. */\n el: () => HTMLElement | null\n}\n\n/**\n * Offsets of items with known heights. `start(i)` is where item `i`\n * begins; `find(y)` is the item covering `y`, by binary search.\n */\nexport function createOffsets(count: number, size: (index: number) => number) {\n const starts = new Float64Array(count + 1)\n for (let index = 0; index < count; index++) starts[index + 1] = starts[index]! + size(index)\n const start = (index: number) => starts[Math.max(0, Math.min(index, count))]!\n function find(y: number) {\n let low = 0\n let high = count - 1\n while (low < high) {\n const mid = (low + high + 1) >> 1\n if (starts[mid]! <= y) low = mid\n else high = mid - 1\n }\n return Math.max(0, low)\n }\n return { total: starts[count]!, start, find }\n}\n"],"mappings":";;;;;AAkDA,SAAgB,cAAc,OAAe,MAAiC;CAC5E,MAAM,SAAS,IAAI,aAAa,QAAQ,CAAC;CACzC,KAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS,OAAO,QAAQ,KAAK,OAAO,SAAU,KAAK,KAAK;CAC3F,MAAM,SAAS,UAAkB,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC;CAC1E,SAAS,KAAK,GAAW;EACvB,IAAI,MAAM;EACV,IAAI,OAAO,QAAQ;EACnB,OAAO,MAAM,MAAM;GACjB,MAAM,MAAO,MAAM,OAAO,KAAM;GAChC,IAAI,OAAO,QAAS,GAAG,MAAM;QACxB,OAAO,MAAM;EACpB;EACA,OAAO,KAAK,IAAI,GAAG,GAAG;CACxB;CACA,OAAO;EAAE,OAAO,OAAO;EAAS;EAAO;CAAK;AAC9C"}
1
+ {"version":3,"file":"virtual-list.js","names":[],"sources":["../../../src/components/virtual-list/virtual-list.ts"],"sourcesContent":["export type VirtualListKey = string | number\nexport type VirtualListAlign = 'start' | 'center' | 'end' | 'nearest'\n\n/** The key of an item as `itemKey` gives it: a property, a function, or the index. */\nexport function virtualItemKey<T>(\n itemKey: VirtualListProps<T>['itemKey'],\n item: T,\n index: number,\n): VirtualListKey {\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (itemKey) return (item as Record<string, VirtualListKey>)[itemKey]!\n return index\n}\n\nexport interface VirtualListProps<T = any> {\n /** The items. Only those in or near the viewport are rendered. */\n items: T[]\n /**\n * The height of each item in px, or a function giving it per item.\n * Heights are known up front, so the scrollbar never jumps. Without it,\n * items are measured once rendered.\n */\n itemSize?: number | ((item: T, index: number) => number)\n /** Without `itemSize`, the height to assume for an item not rendered yet. */\n estimateSize?: number | ((item: T, index: number) => number)\n /** A property of each item, or a function, that gives it a unique key. Defaults to the index. */\n itemKey?: string | ((item: T, index: number) => VirtualListKey)\n /** The height of the viewport. A number is in px. Without it the list fills its container. */\n height?: number | string\n /** Extra items rendered above and below the viewport, so fast scrolling shows no gaps. */\n overscan?: number\n /** How close to the bottom, in px, counts as reaching the end. */\n endThreshold?: number\n}\n\nexport interface VirtualListEmits {\n scroll: [event: Event]\n /** Scrolled within `endThreshold` of the bottom, e.g. to load the next page. */\n endReached: []\n}\n\nexport interface VirtualListSlots<T = any> {\n /** One item. */\n default?: (props: { item: T; index: number }) => unknown\n /** Shown when there are no items. */\n empty?: () => unknown\n}\n\nexport interface VirtualListExpose {\n /** Scroll so the item at `index` is visible. `nearest` scrolls as little as possible. */\n scrollToIndex: (index: number, align?: VirtualListAlign) => void\n /** Scroll to an offset in px. */\n scrollTo: (offset: number) => void\n /** The scrolling element. */\n el: () => HTMLElement | null\n}\n\n/**\n * Offsets of items with known heights. `start(i)` is where item `i`\n * begins; `find(y)` is the item covering `y`, by binary search.\n */\nexport function createOffsets(count: number, size: (index: number) => number) {\n const starts = new Float64Array(count + 1)\n for (let index = 0; index < count; index++) starts[index + 1] = starts[index]! + size(index)\n const start = (index: number) => starts[Math.max(0, Math.min(index, count))]!\n function find(y: number) {\n let low = 0\n let high = count - 1\n while (low < high) {\n const mid = (low + high + 1) >> 1\n if (starts[mid]! <= y) low = mid\n else high = mid - 1\n }\n return Math.max(0, low)\n }\n return { total: starts[count]!, start, find }\n}\n"],"mappings":";;AAIA,SAAgB,eACd,SACA,MACA,OACgB;CAChB,IAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,MAAM,KAAK;CAC7D,IAAI,SAAS,OAAQ,KAAwC;CAC7D,OAAO;AACT;;;;;AAiDA,SAAgB,cAAc,OAAe,MAAiC;CAC5E,MAAM,SAAS,IAAI,aAAa,QAAQ,CAAC;CACzC,KAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS,OAAO,QAAQ,KAAK,OAAO,SAAU,KAAK,KAAK;CAC3F,MAAM,SAAS,UAAkB,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC;CAC1E,SAAS,KAAK,GAAW;EACvB,IAAI,MAAM;EACV,IAAI,OAAO,QAAQ;EACnB,OAAO,MAAM,MAAM;GACjB,MAAM,MAAO,MAAM,OAAO,KAAM;GAChC,IAAI,OAAO,QAAS,GAAG,MAAM;QACxB,OAAO,MAAM;EACpB;EACA,OAAO,KAAK,IAAI,GAAG,GAAG;CACxB;CACA,OAAO;EAAE,OAAO,OAAO;EAAS;EAAO;CAAK;AAC9C"}
@@ -1,6 +1,6 @@
1
1
  import { useNamespace } from "../../utils/namespace.js";
2
2
  import { scrollPositionOf } from "../../utils/scroll.js";
3
- import { createOffsets } from "./virtual-list.js";
3
+ import { createOffsets, virtualItemKey } from "./virtual-list.js";
4
4
  import { useTouchScroll } from "../../composables/use-touch-scroll.js";
5
5
  import { useMeasuredSizes } from "../../composables/use-measured-sizes.js";
6
6
  import { Fragment, computed, createElementBlock, defineComponent, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUpdated, openBlock, ref, renderList, renderSlot, shallowRef, unref, useTemplateRef, watch } from "vue";
@@ -59,12 +59,7 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
59
59
  to: Math.min(count, last + 1 + props.overscan)
60
60
  };
61
61
  });
62
- const keyOf = (item, index) => {
63
- const { itemKey } = props;
64
- if (typeof itemKey === "function") return itemKey(item, index);
65
- if (itemKey) return item[itemKey];
66
- return index;
67
- };
62
+ const keyOf = (item, index) => virtualItemKey(props.itemKey, item, index);
68
63
  const visible = computed(() => {
69
64
  const { from, to } = range.value;
70
65
  return props.items.slice(from, to).map((item, offset) => {
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_Fragment","_renderList","_renderSlot"],"sources":["../../../src/components/virtual-list/virtual-list.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport type { HTMLAttributes } from 'vue'\nimport type { ForwardedAttributes } from '../../utils/install'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n useTemplateRef,\n watch,\n} from 'vue'\nimport { useMeasuredSizes } from '../../composables/use-measured-sizes'\nimport { useTouchScroll } from '../../composables/use-touch-scroll'\nimport { scrollPositionOf } from '../../utils/scroll'\nimport { useNamespace } from '../../utils/namespace'\nimport { createOffsets } from './virtual-list'\nimport type {\n VirtualListAlign,\n VirtualListEmits,\n VirtualListExpose,\n VirtualListKey,\n VirtualListProps,\n VirtualListSlots,\n} from './virtual-list'\n\ndefineOptions({ name: 'DouVirtualList' })\n\nconst props = withDefaults(\n defineProps<\n VirtualListProps<T> &\n /* @vue-ignore */ ForwardedAttributes<\n HTMLAttributes,\n VirtualListProps<T>,\n keyof VirtualListEmits & string\n >\n >(),\n {\n itemSize: undefined,\n estimateSize: 40,\n overscan: 4,\n endThreshold: 40,\n },\n)\nconst emit = defineEmits<{ scroll: [event: Event]; endReached: [] }>()\ndefineSlots<VirtualListSlots<T>>()\n\n// The list itself takes focus (tabindex 0) so the keyboard can scroll it.\n// A parent that manages focus on its own passes `:tabindex=\"undefined\"`.\nconst ns = useNamespace('virtual-list')\nconst elRef = useTemplateRef<HTMLElement>('el')\n\nconst sizeBy = (size: number | ((item: T, index: number) => number), index: number) =>\n typeof size === 'function' ? size(props.items[index]!, index) : size\n\n// Without `itemSize`, heights come from the rendered items.\nconst measured = computed(() => props.itemSize === undefined)\nconst measuredSizes = useMeasuredSizes({\n count: () => props.items.length,\n keyOf: (index) => keyOf(props.items[index]!, index),\n estimate: (index) => sizeBy(props.estimateSize, index),\n container: () => elRef.value,\n})\nconst fixedOffsets = computed(() =>\n createOffsets(props.items.length, (index) => sizeBy(props.itemSize!, index)),\n)\nconst offsets = computed(() => (measured.value ? measuredSizes.offsets.value : fixedOffsets.value))\nconst sizeOf = (index: number) =>\n measured.value ? undefined : `${sizeBy(props.itemSize!, index)}px`\nonUpdated(measuredSizes.prune)\n\nconst scrollTop = ref(0)\n// The measured viewport, or the `height` prop until it can be measured.\nconst viewportSize = ref(0)\nconst viewport = computed(\n () => viewportSize.value || (typeof props.height === 'number' ? props.height : 0),\n)\n\nconst range = computed(() => {\n const count = props.items.length\n if (!count) return { from: 0, to: 0 }\n const { find } = offsets.value\n const first = find(scrollTop.value)\n const last = find(scrollTop.value + Math.max(viewport.value, 1) - 1)\n return {\n from: Math.max(0, first - props.overscan),\n to: Math.min(count, last + 1 + props.overscan),\n }\n})\n\nconst keyOf = (item: T, index: number): VirtualListKey => {\n const { itemKey } = props\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (itemKey) return (item as Record<string, VirtualListKey>)[itemKey]!\n return index\n}\n\nconst visible = computed(() => {\n const { from, to } = range.value\n return props.items.slice(from, to).map((item, offset) => {\n const index = from + offset\n return { item, index, key: keyOf(item, index) }\n })\n})\n\nconst style = computed(() =>\n props.height === undefined\n ? undefined\n : { height: typeof props.height === 'number' ? `${props.height}px` : props.height },\n)\n\nlet reachedEnd = false\nfunction onScroll(event: Event) {\n const el = event.currentTarget as HTMLElement\n // iOS reports positions past either end while the content bounces back\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n emit('scroll', event)\n const atEnd = el.scrollTop + el.clientHeight >= el.scrollHeight - props.endThreshold\n if (atEnd && !reachedEnd && props.items.length) emit('endReached')\n reachedEnd = atEnd\n}\n// New items push the end away again.\nwatch(\n () => props.items.length,\n () => (reachedEnd = false),\n)\n\n// With measured items, items added or removed above the view keep the\n// first visible item where it was, e.g. earlier messages loaded on top,\n// also when the view is at the very top.\nconst touch = useTouchScroll()\nlet anchor: { key: VirtualListKey; offset: number } | undefined\nfunction remember(el: HTMLElement) {\n if (!measured.value || !props.items.length) return (anchor = undefined)\n const top = scrollPositionOf(el).top\n const index = offsets.value.find(top)\n anchor = {\n key: keyOf(props.items[index]!, index),\n offset: offsets.value.start(index) - top,\n }\n}\nwatch(\n () => props.items,\n (items) => {\n const held = anchor\n const el = elRef.value\n if (!held || !el) return\n const index = items.findIndex((item, at) => keyOf(item, at) === held.key)\n if (index < 0) return\n // a move iOS drops during a touch scroll is made once it is over\n const target = Math.max(0, offsets.value.start(index) - held.offset)\n touch.shiftScroll(el, target - el.scrollTop)\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n },\n { flush: 'post' },\n)\n\nconst observer = shallowRef<ResizeObserver>()\nonMounted(() => {\n const el = elRef.value\n if (!el) return\n viewportSize.value = el.clientHeight\n if (typeof ResizeObserver === 'undefined') return\n observer.value = new ResizeObserver(() => (viewportSize.value = el.clientHeight))\n observer.value.observe(el)\n})\nonBeforeUnmount(() => observer.value?.disconnect())\n\nfunction scrollTo(offset: number) {\n const el = elRef.value\n if (!el) return\n el.scrollTop = offset\n // Rendering follows right away, without waiting for the scroll event.\n scrollTop.value = el.scrollTop\n}\n\nfunction scrollToIndex(index: number, align: VirtualListAlign = 'nearest', settle = 2) {\n if (index < 0 || index >= props.items.length) return\n // Measured items land where estimated at first; once the items around\n // the target are rendered and measured, aim again.\n if (measured.value && settle > 0 && typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => scrollToIndex(index, align, settle - 1))\n }\n const { start } = offsets.value\n const top = start(index)\n const bottom = start(index + 1)\n const height = viewport.value\n const current = scrollTop.value\n let target = current\n if (align === 'start') target = top\n else if (align === 'end') target = bottom - height\n else if (align === 'center') target = top - (height - (bottom - top)) / 2\n else if (top < current) target = top\n else if (bottom > current + height) target = bottom - height\n if (target !== current) scrollTo(Math.max(0, target))\n}\n\ndefineExpose<VirtualListExpose>({\n scrollToIndex: (index, align) => scrollToIndex(index, align),\n scrollTo,\n el: () => elRef.value,\n})\n</script>\n\n<template>\n <div ref=\"el\" tabindex=\"0\" :class=\"ns.b()\" :style=\"style\" @scroll=\"onScroll\">\n <div v-if=\"items.length\" :class=\"ns.e('spacer')\" :style=\"{ height: `${offsets.total}px` }\">\n <div\n v-for=\"entry in visible\"\n :key=\"entry.key\"\n :ref=\"\n measured ? (el) => measuredSizes.track(el as Element, entry.key, entry.index) : undefined\n \"\n :class=\"ns.e('item')\"\n :data-index=\"entry.index\"\n :style=\"{\n transform: `translateY(${offsets.start(entry.index)}px)`,\n height: sizeOf(entry.index),\n }\"\n >\n <slot :item=\"entry.item\" :index=\"entry.index\" />\n </div>\n </div>\n <slot v-else name=\"empty\" />\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"virtual-list.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_Fragment","_renderList","_renderSlot"],"sources":["../../../src/components/virtual-list/virtual-list.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport type { HTMLAttributes } from 'vue'\nimport type { ForwardedAttributes } from '../../utils/install'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n useTemplateRef,\n watch,\n} from 'vue'\nimport { useMeasuredSizes } from '../../composables/use-measured-sizes'\nimport { useTouchScroll } from '../../composables/use-touch-scroll'\nimport { scrollPositionOf } from '../../utils/scroll'\nimport { useNamespace } from '../../utils/namespace'\nimport { createOffsets, virtualItemKey } from './virtual-list'\nimport type {\n VirtualListAlign,\n VirtualListEmits,\n VirtualListExpose,\n VirtualListKey,\n VirtualListProps,\n VirtualListSlots,\n} from './virtual-list'\n\ndefineOptions({ name: 'DouVirtualList' })\n\nconst props = withDefaults(\n defineProps<\n VirtualListProps<T> &\n /* @vue-ignore */ ForwardedAttributes<\n HTMLAttributes,\n VirtualListProps<T>,\n keyof VirtualListEmits & string\n >\n >(),\n {\n itemSize: undefined,\n estimateSize: 40,\n overscan: 4,\n endThreshold: 40,\n },\n)\nconst emit = defineEmits<{ scroll: [event: Event]; endReached: [] }>()\ndefineSlots<VirtualListSlots<T>>()\n\n// The list itself takes focus (tabindex 0) so the keyboard can scroll it.\n// A parent that manages focus on its own passes `:tabindex=\"undefined\"`.\nconst ns = useNamespace('virtual-list')\nconst elRef = useTemplateRef<HTMLElement>('el')\n\nconst sizeBy = (size: number | ((item: T, index: number) => number), index: number) =>\n typeof size === 'function' ? size(props.items[index]!, index) : size\n\n// Without `itemSize`, heights come from the rendered items.\nconst measured = computed(() => props.itemSize === undefined)\nconst measuredSizes = useMeasuredSizes({\n count: () => props.items.length,\n keyOf: (index) => keyOf(props.items[index]!, index),\n estimate: (index) => sizeBy(props.estimateSize, index),\n container: () => elRef.value,\n})\nconst fixedOffsets = computed(() =>\n createOffsets(props.items.length, (index) => sizeBy(props.itemSize!, index)),\n)\nconst offsets = computed(() => (measured.value ? measuredSizes.offsets.value : fixedOffsets.value))\nconst sizeOf = (index: number) =>\n measured.value ? undefined : `${sizeBy(props.itemSize!, index)}px`\nonUpdated(measuredSizes.prune)\n\nconst scrollTop = ref(0)\n// The measured viewport, or the `height` prop until it can be measured.\nconst viewportSize = ref(0)\nconst viewport = computed(\n () => viewportSize.value || (typeof props.height === 'number' ? props.height : 0),\n)\n\nconst range = computed(() => {\n const count = props.items.length\n if (!count) return { from: 0, to: 0 }\n const { find } = offsets.value\n const first = find(scrollTop.value)\n const last = find(scrollTop.value + Math.max(viewport.value, 1) - 1)\n return {\n from: Math.max(0, first - props.overscan),\n to: Math.min(count, last + 1 + props.overscan),\n }\n})\n\nconst keyOf = (item: T, index: number) => virtualItemKey(props.itemKey, item, index)\n\nconst visible = computed(() => {\n const { from, to } = range.value\n return props.items.slice(from, to).map((item, offset) => {\n const index = from + offset\n return { item, index, key: keyOf(item, index) }\n })\n})\n\nconst style = computed(() =>\n props.height === undefined\n ? undefined\n : { height: typeof props.height === 'number' ? `${props.height}px` : props.height },\n)\n\nlet reachedEnd = false\nfunction onScroll(event: Event) {\n const el = event.currentTarget as HTMLElement\n // iOS reports positions past either end while the content bounces back\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n emit('scroll', event)\n const atEnd = el.scrollTop + el.clientHeight >= el.scrollHeight - props.endThreshold\n if (atEnd && !reachedEnd && props.items.length) emit('endReached')\n reachedEnd = atEnd\n}\n// New items push the end away again.\nwatch(\n () => props.items.length,\n () => (reachedEnd = false),\n)\n\n// With measured items, items added or removed above the view keep the\n// first visible item where it was, e.g. earlier messages loaded on top,\n// also when the view is at the very top.\nconst touch = useTouchScroll()\nlet anchor: { key: VirtualListKey; offset: number } | undefined\nfunction remember(el: HTMLElement) {\n if (!measured.value || !props.items.length) return (anchor = undefined)\n const top = scrollPositionOf(el).top\n const index = offsets.value.find(top)\n anchor = {\n key: keyOf(props.items[index]!, index),\n offset: offsets.value.start(index) - top,\n }\n}\nwatch(\n () => props.items,\n (items) => {\n const held = anchor\n const el = elRef.value\n if (!held || !el) return\n const index = items.findIndex((item, at) => keyOf(item, at) === held.key)\n if (index < 0) return\n // a move iOS drops during a touch scroll is made once it is over\n const target = Math.max(0, offsets.value.start(index) - held.offset)\n touch.shiftScroll(el, target - el.scrollTop)\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n },\n { flush: 'post' },\n)\n\nconst observer = shallowRef<ResizeObserver>()\nonMounted(() => {\n const el = elRef.value\n if (!el) return\n viewportSize.value = el.clientHeight\n if (typeof ResizeObserver === 'undefined') return\n observer.value = new ResizeObserver(() => (viewportSize.value = el.clientHeight))\n observer.value.observe(el)\n})\nonBeforeUnmount(() => observer.value?.disconnect())\n\nfunction scrollTo(offset: number) {\n const el = elRef.value\n if (!el) return\n el.scrollTop = offset\n // Rendering follows right away, without waiting for the scroll event.\n scrollTop.value = el.scrollTop\n}\n\nfunction scrollToIndex(index: number, align: VirtualListAlign = 'nearest', settle = 2) {\n if (index < 0 || index >= props.items.length) return\n // Measured items land where estimated at first; once the items around\n // the target are rendered and measured, aim again.\n if (measured.value && settle > 0 && typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => scrollToIndex(index, align, settle - 1))\n }\n const { start } = offsets.value\n const top = start(index)\n const bottom = start(index + 1)\n const height = viewport.value\n const current = scrollTop.value\n let target = current\n if (align === 'start') target = top\n else if (align === 'end') target = bottom - height\n else if (align === 'center') target = top - (height - (bottom - top)) / 2\n else if (top < current) target = top\n else if (bottom > current + height) target = bottom - height\n if (target !== current) scrollTo(Math.max(0, target))\n}\n\ndefineExpose<VirtualListExpose>({\n scrollToIndex: (index, align) => scrollToIndex(index, align),\n scrollTo,\n el: () => elRef.value,\n})\n</script>\n\n<template>\n <div ref=\"el\" tabindex=\"0\" :class=\"ns.b()\" :style=\"style\" @scroll=\"onScroll\">\n <div v-if=\"items.length\" :class=\"ns.e('spacer')\" :style=\"{ height: `${offsets.total}px` }\">\n <div\n v-for=\"entry in visible\"\n :key=\"entry.key\"\n :ref=\"\n measured ? (el) => measuredSizes.track(el as Element, entry.key, entry.index) : undefined\n \"\n :class=\"ns.e('item')\"\n :data-index=\"entry.index\"\n :style=\"{\n transform: `translateY(${offsets.start(entry.index)}px)`,\n height: sizeOf(entry.index),\n }\"\n >\n <slot :item=\"entry.item\" :index=\"entry.index\" />\n </div>\n </div>\n <slot v-else name=\"empty\" />\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list2.js","names":["_sfc_main"],"sources":["../../../src/components/virtual-list/virtual-list.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport type { HTMLAttributes } from 'vue'\nimport type { ForwardedAttributes } from '../../utils/install'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n useTemplateRef,\n watch,\n} from 'vue'\nimport { useMeasuredSizes } from '../../composables/use-measured-sizes'\nimport { useTouchScroll } from '../../composables/use-touch-scroll'\nimport { scrollPositionOf } from '../../utils/scroll'\nimport { useNamespace } from '../../utils/namespace'\nimport { createOffsets } from './virtual-list'\nimport type {\n VirtualListAlign,\n VirtualListEmits,\n VirtualListExpose,\n VirtualListKey,\n VirtualListProps,\n VirtualListSlots,\n} from './virtual-list'\n\ndefineOptions({ name: 'DouVirtualList' })\n\nconst props = withDefaults(\n defineProps<\n VirtualListProps<T> &\n /* @vue-ignore */ ForwardedAttributes<\n HTMLAttributes,\n VirtualListProps<T>,\n keyof VirtualListEmits & string\n >\n >(),\n {\n itemSize: undefined,\n estimateSize: 40,\n overscan: 4,\n endThreshold: 40,\n },\n)\nconst emit = defineEmits<{ scroll: [event: Event]; endReached: [] }>()\ndefineSlots<VirtualListSlots<T>>()\n\n// The list itself takes focus (tabindex 0) so the keyboard can scroll it.\n// A parent that manages focus on its own passes `:tabindex=\"undefined\"`.\nconst ns = useNamespace('virtual-list')\nconst elRef = useTemplateRef<HTMLElement>('el')\n\nconst sizeBy = (size: number | ((item: T, index: number) => number), index: number) =>\n typeof size === 'function' ? size(props.items[index]!, index) : size\n\n// Without `itemSize`, heights come from the rendered items.\nconst measured = computed(() => props.itemSize === undefined)\nconst measuredSizes = useMeasuredSizes({\n count: () => props.items.length,\n keyOf: (index) => keyOf(props.items[index]!, index),\n estimate: (index) => sizeBy(props.estimateSize, index),\n container: () => elRef.value,\n})\nconst fixedOffsets = computed(() =>\n createOffsets(props.items.length, (index) => sizeBy(props.itemSize!, index)),\n)\nconst offsets = computed(() => (measured.value ? measuredSizes.offsets.value : fixedOffsets.value))\nconst sizeOf = (index: number) =>\n measured.value ? undefined : `${sizeBy(props.itemSize!, index)}px`\nonUpdated(measuredSizes.prune)\n\nconst scrollTop = ref(0)\n// The measured viewport, or the `height` prop until it can be measured.\nconst viewportSize = ref(0)\nconst viewport = computed(\n () => viewportSize.value || (typeof props.height === 'number' ? props.height : 0),\n)\n\nconst range = computed(() => {\n const count = props.items.length\n if (!count) return { from: 0, to: 0 }\n const { find } = offsets.value\n const first = find(scrollTop.value)\n const last = find(scrollTop.value + Math.max(viewport.value, 1) - 1)\n return {\n from: Math.max(0, first - props.overscan),\n to: Math.min(count, last + 1 + props.overscan),\n }\n})\n\nconst keyOf = (item: T, index: number): VirtualListKey => {\n const { itemKey } = props\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (itemKey) return (item as Record<string, VirtualListKey>)[itemKey]!\n return index\n}\n\nconst visible = computed(() => {\n const { from, to } = range.value\n return props.items.slice(from, to).map((item, offset) => {\n const index = from + offset\n return { item, index, key: keyOf(item, index) }\n })\n})\n\nconst style = computed(() =>\n props.height === undefined\n ? undefined\n : { height: typeof props.height === 'number' ? `${props.height}px` : props.height },\n)\n\nlet reachedEnd = false\nfunction onScroll(event: Event) {\n const el = event.currentTarget as HTMLElement\n // iOS reports positions past either end while the content bounces back\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n emit('scroll', event)\n const atEnd = el.scrollTop + el.clientHeight >= el.scrollHeight - props.endThreshold\n if (atEnd && !reachedEnd && props.items.length) emit('endReached')\n reachedEnd = atEnd\n}\n// New items push the end away again.\nwatch(\n () => props.items.length,\n () => (reachedEnd = false),\n)\n\n// With measured items, items added or removed above the view keep the\n// first visible item where it was, e.g. earlier messages loaded on top,\n// also when the view is at the very top.\nconst touch = useTouchScroll()\nlet anchor: { key: VirtualListKey; offset: number } | undefined\nfunction remember(el: HTMLElement) {\n if (!measured.value || !props.items.length) return (anchor = undefined)\n const top = scrollPositionOf(el).top\n const index = offsets.value.find(top)\n anchor = {\n key: keyOf(props.items[index]!, index),\n offset: offsets.value.start(index) - top,\n }\n}\nwatch(\n () => props.items,\n (items) => {\n const held = anchor\n const el = elRef.value\n if (!held || !el) return\n const index = items.findIndex((item, at) => keyOf(item, at) === held.key)\n if (index < 0) return\n // a move iOS drops during a touch scroll is made once it is over\n const target = Math.max(0, offsets.value.start(index) - held.offset)\n touch.shiftScroll(el, target - el.scrollTop)\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n },\n { flush: 'post' },\n)\n\nconst observer = shallowRef<ResizeObserver>()\nonMounted(() => {\n const el = elRef.value\n if (!el) return\n viewportSize.value = el.clientHeight\n if (typeof ResizeObserver === 'undefined') return\n observer.value = new ResizeObserver(() => (viewportSize.value = el.clientHeight))\n observer.value.observe(el)\n})\nonBeforeUnmount(() => observer.value?.disconnect())\n\nfunction scrollTo(offset: number) {\n const el = elRef.value\n if (!el) return\n el.scrollTop = offset\n // Rendering follows right away, without waiting for the scroll event.\n scrollTop.value = el.scrollTop\n}\n\nfunction scrollToIndex(index: number, align: VirtualListAlign = 'nearest', settle = 2) {\n if (index < 0 || index >= props.items.length) return\n // Measured items land where estimated at first; once the items around\n // the target are rendered and measured, aim again.\n if (measured.value && settle > 0 && typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => scrollToIndex(index, align, settle - 1))\n }\n const { start } = offsets.value\n const top = start(index)\n const bottom = start(index + 1)\n const height = viewport.value\n const current = scrollTop.value\n let target = current\n if (align === 'start') target = top\n else if (align === 'end') target = bottom - height\n else if (align === 'center') target = top - (height - (bottom - top)) / 2\n else if (top < current) target = top\n else if (bottom > current + height) target = bottom - height\n if (target !== current) scrollTo(Math.max(0, target))\n}\n\ndefineExpose<VirtualListExpose>({\n scrollToIndex: (index, align) => scrollToIndex(index, align),\n scrollTo,\n el: () => elRef.value,\n})\n</script>\n\n<template>\n <div ref=\"el\" tabindex=\"0\" :class=\"ns.b()\" :style=\"style\" @scroll=\"onScroll\">\n <div v-if=\"items.length\" :class=\"ns.e('spacer')\" :style=\"{ height: `${offsets.total}px` }\">\n <div\n v-for=\"entry in visible\"\n :key=\"entry.key\"\n :ref=\"\n measured ? (el) => measuredSizes.track(el as Element, entry.key, entry.index) : undefined\n \"\n :class=\"ns.e('item')\"\n :data-index=\"entry.index\"\n :style=\"{\n transform: `translateY(${offsets.start(entry.index)}px)`,\n height: sizeOf(entry.index),\n }\"\n >\n <slot :item=\"entry.item\" :index=\"entry.index\" />\n </div>\n </div>\n <slot v-else name=\"empty\" />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"virtual-list2.js","names":["_sfc_main"],"sources":["../../../src/components/virtual-list/virtual-list.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport type { HTMLAttributes } from 'vue'\nimport type { ForwardedAttributes } from '../../utils/install'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n useTemplateRef,\n watch,\n} from 'vue'\nimport { useMeasuredSizes } from '../../composables/use-measured-sizes'\nimport { useTouchScroll } from '../../composables/use-touch-scroll'\nimport { scrollPositionOf } from '../../utils/scroll'\nimport { useNamespace } from '../../utils/namespace'\nimport { createOffsets, virtualItemKey } from './virtual-list'\nimport type {\n VirtualListAlign,\n VirtualListEmits,\n VirtualListExpose,\n VirtualListKey,\n VirtualListProps,\n VirtualListSlots,\n} from './virtual-list'\n\ndefineOptions({ name: 'DouVirtualList' })\n\nconst props = withDefaults(\n defineProps<\n VirtualListProps<T> &\n /* @vue-ignore */ ForwardedAttributes<\n HTMLAttributes,\n VirtualListProps<T>,\n keyof VirtualListEmits & string\n >\n >(),\n {\n itemSize: undefined,\n estimateSize: 40,\n overscan: 4,\n endThreshold: 40,\n },\n)\nconst emit = defineEmits<{ scroll: [event: Event]; endReached: [] }>()\ndefineSlots<VirtualListSlots<T>>()\n\n// The list itself takes focus (tabindex 0) so the keyboard can scroll it.\n// A parent that manages focus on its own passes `:tabindex=\"undefined\"`.\nconst ns = useNamespace('virtual-list')\nconst elRef = useTemplateRef<HTMLElement>('el')\n\nconst sizeBy = (size: number | ((item: T, index: number) => number), index: number) =>\n typeof size === 'function' ? size(props.items[index]!, index) : size\n\n// Without `itemSize`, heights come from the rendered items.\nconst measured = computed(() => props.itemSize === undefined)\nconst measuredSizes = useMeasuredSizes({\n count: () => props.items.length,\n keyOf: (index) => keyOf(props.items[index]!, index),\n estimate: (index) => sizeBy(props.estimateSize, index),\n container: () => elRef.value,\n})\nconst fixedOffsets = computed(() =>\n createOffsets(props.items.length, (index) => sizeBy(props.itemSize!, index)),\n)\nconst offsets = computed(() => (measured.value ? measuredSizes.offsets.value : fixedOffsets.value))\nconst sizeOf = (index: number) =>\n measured.value ? undefined : `${sizeBy(props.itemSize!, index)}px`\nonUpdated(measuredSizes.prune)\n\nconst scrollTop = ref(0)\n// The measured viewport, or the `height` prop until it can be measured.\nconst viewportSize = ref(0)\nconst viewport = computed(\n () => viewportSize.value || (typeof props.height === 'number' ? props.height : 0),\n)\n\nconst range = computed(() => {\n const count = props.items.length\n if (!count) return { from: 0, to: 0 }\n const { find } = offsets.value\n const first = find(scrollTop.value)\n const last = find(scrollTop.value + Math.max(viewport.value, 1) - 1)\n return {\n from: Math.max(0, first - props.overscan),\n to: Math.min(count, last + 1 + props.overscan),\n }\n})\n\nconst keyOf = (item: T, index: number) => virtualItemKey(props.itemKey, item, index)\n\nconst visible = computed(() => {\n const { from, to } = range.value\n return props.items.slice(from, to).map((item, offset) => {\n const index = from + offset\n return { item, index, key: keyOf(item, index) }\n })\n})\n\nconst style = computed(() =>\n props.height === undefined\n ? undefined\n : { height: typeof props.height === 'number' ? `${props.height}px` : props.height },\n)\n\nlet reachedEnd = false\nfunction onScroll(event: Event) {\n const el = event.currentTarget as HTMLElement\n // iOS reports positions past either end while the content bounces back\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n emit('scroll', event)\n const atEnd = el.scrollTop + el.clientHeight >= el.scrollHeight - props.endThreshold\n if (atEnd && !reachedEnd && props.items.length) emit('endReached')\n reachedEnd = atEnd\n}\n// New items push the end away again.\nwatch(\n () => props.items.length,\n () => (reachedEnd = false),\n)\n\n// With measured items, items added or removed above the view keep the\n// first visible item where it was, e.g. earlier messages loaded on top,\n// also when the view is at the very top.\nconst touch = useTouchScroll()\nlet anchor: { key: VirtualListKey; offset: number } | undefined\nfunction remember(el: HTMLElement) {\n if (!measured.value || !props.items.length) return (anchor = undefined)\n const top = scrollPositionOf(el).top\n const index = offsets.value.find(top)\n anchor = {\n key: keyOf(props.items[index]!, index),\n offset: offsets.value.start(index) - top,\n }\n}\nwatch(\n () => props.items,\n (items) => {\n const held = anchor\n const el = elRef.value\n if (!held || !el) return\n const index = items.findIndex((item, at) => keyOf(item, at) === held.key)\n if (index < 0) return\n // a move iOS drops during a touch scroll is made once it is over\n const target = Math.max(0, offsets.value.start(index) - held.offset)\n touch.shiftScroll(el, target - el.scrollTop)\n scrollTop.value = scrollPositionOf(el).top\n remember(el)\n },\n { flush: 'post' },\n)\n\nconst observer = shallowRef<ResizeObserver>()\nonMounted(() => {\n const el = elRef.value\n if (!el) return\n viewportSize.value = el.clientHeight\n if (typeof ResizeObserver === 'undefined') return\n observer.value = new ResizeObserver(() => (viewportSize.value = el.clientHeight))\n observer.value.observe(el)\n})\nonBeforeUnmount(() => observer.value?.disconnect())\n\nfunction scrollTo(offset: number) {\n const el = elRef.value\n if (!el) return\n el.scrollTop = offset\n // Rendering follows right away, without waiting for the scroll event.\n scrollTop.value = el.scrollTop\n}\n\nfunction scrollToIndex(index: number, align: VirtualListAlign = 'nearest', settle = 2) {\n if (index < 0 || index >= props.items.length) return\n // Measured items land where estimated at first; once the items around\n // the target are rendered and measured, aim again.\n if (measured.value && settle > 0 && typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => scrollToIndex(index, align, settle - 1))\n }\n const { start } = offsets.value\n const top = start(index)\n const bottom = start(index + 1)\n const height = viewport.value\n const current = scrollTop.value\n let target = current\n if (align === 'start') target = top\n else if (align === 'end') target = bottom - height\n else if (align === 'center') target = top - (height - (bottom - top)) / 2\n else if (top < current) target = top\n else if (bottom > current + height) target = bottom - height\n if (target !== current) scrollTo(Math.max(0, target))\n}\n\ndefineExpose<VirtualListExpose>({\n scrollToIndex: (index, align) => scrollToIndex(index, align),\n scrollTo,\n el: () => elRef.value,\n})\n</script>\n\n<template>\n <div ref=\"el\" tabindex=\"0\" :class=\"ns.b()\" :style=\"style\" @scroll=\"onScroll\">\n <div v-if=\"items.length\" :class=\"ns.e('spacer')\" :style=\"{ height: `${offsets.total}px` }\">\n <div\n v-for=\"entry in visible\"\n :key=\"entry.key\"\n :ref=\"\n measured ? (el) => measuredSizes.track(el as Element, entry.key, entry.index) : undefined\n \"\n :class=\"ns.e('item')\"\n :data-index=\"entry.index\"\n :style=\"{\n transform: `translateY(${offsets.start(entry.index)}px)`,\n height: sizeOf(entry.index),\n }\"\n >\n <slot :item=\"entry.item\" :index=\"entry.index\" />\n </div>\n </div>\n <slot v-else name=\"empty\" />\n </div>\n</template>\n"],"mappings":""}
@@ -1,10 +1,12 @@
1
1
  import { useZIndex } from "../components/config-provider/use-config.js";
2
2
  import { onlyChildElement } from "../utils/only-child.js";
3
+ import { hasHover } from "../utils/pointer.js";
3
4
  import { useFloating } from "./use-floating.js";
4
5
  import { useLayer } from "./use-layer.js";
5
6
  import { useThemeScope } from "./use-theme-scope.js";
6
7
  import { computed, nextTick, onScopeDispose, ref, toValue, watch } from "vue";
7
8
  // src/composables/use-popup.ts
9
+ var hoverable = (event) => hasHover(event.pointerType);
8
10
  /**
9
11
  * The shared behavior of panels anchored to a trigger: opening on hover,
10
12
  * focus or click, closing on `Escape` or a press outside, stacking above
@@ -56,12 +58,16 @@ function usePopup(options) {
56
58
  offset: options.offset,
57
59
  sameWidth: options.sameWidth
58
60
  });
61
+ let press = null;
62
+ /** The panel was opened by a tap, and stays until tapped away. */
63
+ const tapped = ref(false);
64
+ watch(open, (value) => value || (tapped.value = false));
59
65
  useLayer({
60
66
  open,
61
67
  elements: () => [reference(), panelRef.value],
62
68
  onEscape: dismiss,
63
69
  onOutside: () => {
64
- if (toValue(options.closeOnOutside) ?? (triggers.value.has("click") || triggers.value.has("focus"))) hide();
70
+ if (toValue(options.closeOnOutside) ?? (triggers.value.has("click") || triggers.value.has("focus") || tapped.value)) hide();
65
71
  }
66
72
  });
67
73
  const showDelay = () => toValue(options.showDelay) ?? 0;
@@ -69,8 +75,26 @@ function usePopup(options) {
69
75
  const triggerListeners = computed(() => {
70
76
  const on = {};
71
77
  if (triggers.value.has("hover")) {
72
- on.onMouseenter = () => show(showDelay());
73
- on.onMouseleave = () => hide(hideDelay());
78
+ on.onPointerenter = (event) => hoverable(event) && show(showDelay());
79
+ on.onPointerleave = (event) => hoverable(event) && hide(hideDelay());
80
+ if (!triggers.value.has("click") && (toValue(options.tap) ?? true)) {
81
+ on.onPointerdown = (event) => {
82
+ press = {
83
+ hover: hoverable(event),
84
+ wasOpen: open.value
85
+ };
86
+ };
87
+ on.onPointercancel = () => press = null;
88
+ on.onClick = (event) => {
89
+ const from = press;
90
+ press = null;
91
+ if (event.detail === 0 || from?.hover) return;
92
+ if (from ? from.wasOpen : open.value) return hide();
93
+ if (event.currentTarget?.closest("a[href]")) event.preventDefault();
94
+ tapped.value = !toValue(options.disabled);
95
+ show();
96
+ };
97
+ }
74
98
  }
75
99
  if (triggers.value.has("focus")) {
76
100
  on.onFocusin = () => show();
@@ -86,8 +110,8 @@ function usePopup(options) {
86
110
  const panelListeners = computed(() => {
87
111
  if (!triggers.value.has("hover")) return {};
88
112
  return {
89
- onMouseenter: clear,
90
- onMouseleave: () => hide(hideDelay())
113
+ onPointerenter: (event) => hoverable(event) && clear(),
114
+ onPointerleave: (event) => hoverable(event) && hide(hideDelay())
91
115
  };
92
116
  });
93
117
  const panelStyle = computed(() => ({
@@ -104,6 +128,7 @@ function usePopup(options) {
104
128
  panelStyle,
105
129
  triggerListeners,
106
130
  panelListeners,
131
+ tapped,
107
132
  show,
108
133
  hide,
109
134
  dismiss,
@@ -1 +1 @@
1
- {"version":3,"file":"use-popup.js","names":[],"sources":["../../src/composables/use-popup.ts"],"sourcesContent":["import { computed, nextTick, onScopeDispose, ref, toValue, watch } from 'vue'\nimport type { CSSProperties, ComponentPublicInstance, MaybeRefOrGetter, Ref } from 'vue'\nimport { useZIndex } from '../components/config-provider/use-config'\nimport { onlyChildElement } from '../utils/only-child'\nimport { useFloating } from './use-floating'\nimport type { Placement, VirtualElement } from './use-floating'\nimport { useLayer } from './use-layer'\nimport { useThemeScope } from './use-theme-scope'\n\n/** What opens a floating panel. `manual` leaves it entirely to `v-model:open`. */\nexport type PopupTrigger = 'hover' | 'click' | 'focus' | 'manual'\n\nexport interface UsePopupOptions {\n open: Ref<boolean>\n trigger: MaybeRefOrGetter<PopupTrigger | PopupTrigger[]>\n disabled?: MaybeRefOrGetter<boolean>\n placement: MaybeRefOrGetter<Placement>\n offset?: MaybeRefOrGetter<number>\n sameWidth?: MaybeRefOrGetter<boolean>\n /** Delay before opening on hover, in ms. */\n showDelay?: MaybeRefOrGetter<number>\n /** Delay before closing once the pointer leaves, in ms. */\n hideDelay?: MaybeRefOrGetter<number>\n /** Close on a press outside. Defaults to on for `click` and `focus` triggers. */\n closeOnOutside?: MaybeRefOrGetter<boolean>\n /** What the panel is placed next to, when not the trigger itself (e.g. the pointer). */\n anchor?: () => Element | VirtualElement | null | undefined\n}\n\n/**\n * The shared behavior of panels anchored to a trigger: opening on hover,\n * focus or click, closing on `Escape` or a press outside, stacking above\n * other layers and following the trigger around.\n */\nexport function usePopup(options: UsePopupOptions) {\n const { open } = options\n const triggerRef = ref<ComponentPublicInstance | null>(null)\n const panelRef = ref<HTMLElement | null>(null)\n const reference = () => onlyChildElement(triggerRef.value)\n\n const triggers = computed(() => {\n const value = toValue(options.trigger)\n return new Set(Array.isArray(value) ? value : [value])\n })\n\n let timer: ReturnType<typeof setTimeout> | undefined\n const clear = () => clearTimeout(timer)\n function show(delay = 0) {\n clear()\n if (toValue(options.disabled)) return\n if (delay > 0) timer = setTimeout(() => (open.value = true), delay)\n else open.value = true\n }\n function hide(delay = 0) {\n clear()\n if (delay > 0) timer = setTimeout(() => (open.value = false), delay)\n else open.value = false\n }\n onScopeDispose(clear)\n\n /** Close, handing focus back to the trigger if it was inside the panel. */\n function dismiss() {\n const restore = !!panelRef.value?.contains(document.activeElement)\n hide()\n if (restore) (reference() as HTMLElement | null)?.focus()\n }\n\n watch(\n () => toValue(options.disabled),\n (disabled) => disabled && hide(),\n )\n\n // Render the panel the first time it opens, then keep it.\n const rendered = ref(open.value)\n const zIndex = ref<number>()\n const { next } = useZIndex()\n const { theme, sync } = useThemeScope(reference)\n watch(\n open,\n (value) => {\n if (!value) return\n rendered.value = true\n zIndex.value = next()\n void nextTick(sync)\n },\n { immediate: true },\n )\n\n const floating = useFloating(() => options.anchor?.() ?? reference(), panelRef, {\n open,\n placement: options.placement,\n offset: options.offset,\n sameWidth: options.sameWidth,\n })\n\n useLayer({\n open,\n elements: () => [reference(), panelRef.value],\n onEscape: dismiss,\n onOutside: () => {\n const close =\n toValue(options.closeOnOutside) ??\n (triggers.value.has('click') || triggers.value.has('focus'))\n if (close) hide()\n },\n })\n\n const showDelay = () => toValue(options.showDelay) ?? 0\n const hideDelay = () => toValue(options.hideDelay) ?? 0\n\n const triggerListeners = computed(() => {\n const on: Record<string, (event: Event) => void> = {}\n if (triggers.value.has('hover')) {\n on.onMouseenter = () => show(showDelay())\n on.onMouseleave = () => hide(hideDelay())\n }\n if (triggers.value.has('focus')) {\n on.onFocusin = () => show()\n on.onFocusout = (event) => {\n const related = (event as FocusEvent).relatedTarget\n if (related instanceof Node && panelRef.value?.contains(related)) return\n hide()\n }\n }\n if (triggers.value.has('click')) {\n on.onClick = () => (open.value ? hide() : show())\n }\n return on\n })\n\n // Moving from the trigger onto the panel keeps a hover panel open.\n const panelListeners = computed(() => {\n if (!triggers.value.has('hover')) return {}\n return {\n onMouseenter: clear,\n onMouseleave: () => hide(hideDelay()),\n }\n })\n\n const panelStyle = computed<CSSProperties>(() => ({\n ...floating.style.value,\n zIndex: zIndex.value,\n }))\n\n return {\n triggerRef,\n panelRef,\n reference,\n rendered,\n theme,\n placement: floating.placement,\n panelStyle,\n triggerListeners,\n panelListeners,\n show,\n hide,\n dismiss,\n update: floating.update,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-popup.js","names":[],"sources":["../../src/composables/use-popup.ts"],"sourcesContent":["import { computed, nextTick, onScopeDispose, ref, toValue, watch } from 'vue'\nimport type { CSSProperties, ComponentPublicInstance, MaybeRefOrGetter, Ref } from 'vue'\nimport { useZIndex } from '../components/config-provider/use-config'\nimport { onlyChildElement } from '../utils/only-child'\nimport { hasHover } from '../utils/pointer'\nimport { useFloating } from './use-floating'\nimport type { Placement, VirtualElement } from './use-floating'\nimport { useLayer } from './use-layer'\nimport { useThemeScope } from './use-theme-scope'\n\n/** What opens a floating panel. `manual` leaves it entirely to `v-model:open`. */\nexport type PopupTrigger = 'hover' | 'click' | 'focus' | 'manual'\n\nexport interface UsePopupOptions {\n open: Ref<boolean>\n trigger: MaybeRefOrGetter<PopupTrigger | PopupTrigger[]>\n disabled?: MaybeRefOrGetter<boolean>\n placement: MaybeRefOrGetter<Placement>\n offset?: MaybeRefOrGetter<number>\n sameWidth?: MaybeRefOrGetter<boolean>\n /** Delay before opening on hover, in ms. */\n showDelay?: MaybeRefOrGetter<number>\n /** Delay before closing once the pointer leaves, in ms. */\n hideDelay?: MaybeRefOrGetter<number>\n /**\n * Close on a press outside. Defaults to on for `click` and `focus` triggers,\n * and for a `hover` panel a tap opened.\n */\n closeOnOutside?: MaybeRefOrGetter<boolean>\n /**\n * A finger or a pen has no hover: a tap on the trigger of a `hover` panel\n * without the `click` trigger opens and closes it instead, and a link\n * there is followed only once the panel is open. Defaults to on.\n */\n tap?: MaybeRefOrGetter<boolean>\n /** What the panel is placed next to, when not the trigger itself (e.g. the pointer). */\n anchor?: () => Element | VirtualElement | null | undefined\n}\n\n// Hover listens to pointer events and leaves fingers and pens out: a tap\n// also sends mouseenter, and the mouseleave that may follow at any time\n// (or only with the next tap elsewhere) would close what the tap opened.\nconst hoverable = (event: Event) => hasHover((event as PointerEvent).pointerType)\n\n/**\n * The shared behavior of panels anchored to a trigger: opening on hover,\n * focus or click, closing on `Escape` or a press outside, stacking above\n * other layers and following the trigger around.\n */\nexport function usePopup(options: UsePopupOptions) {\n const { open } = options\n const triggerRef = ref<ComponentPublicInstance | null>(null)\n const panelRef = ref<HTMLElement | null>(null)\n const reference = () => onlyChildElement(triggerRef.value)\n\n const triggers = computed(() => {\n const value = toValue(options.trigger)\n return new Set(Array.isArray(value) ? value : [value])\n })\n\n let timer: ReturnType<typeof setTimeout> | undefined\n const clear = () => clearTimeout(timer)\n function show(delay = 0) {\n clear()\n if (toValue(options.disabled)) return\n if (delay > 0) timer = setTimeout(() => (open.value = true), delay)\n else open.value = true\n }\n function hide(delay = 0) {\n clear()\n if (delay > 0) timer = setTimeout(() => (open.value = false), delay)\n else open.value = false\n }\n onScopeDispose(clear)\n\n /** Close, handing focus back to the trigger if it was inside the panel. */\n function dismiss() {\n const restore = !!panelRef.value?.contains(document.activeElement)\n hide()\n if (restore) (reference() as HTMLElement | null)?.focus()\n }\n\n watch(\n () => toValue(options.disabled),\n (disabled) => disabled && hide(),\n )\n\n // Render the panel the first time it opens, then keep it.\n const rendered = ref(open.value)\n const zIndex = ref<number>()\n const { next } = useZIndex()\n const { theme, sync } = useThemeScope(reference)\n watch(\n open,\n (value) => {\n if (!value) return\n rendered.value = true\n zIndex.value = next()\n void nextTick(sync)\n },\n { immediate: true },\n )\n\n const floating = useFloating(() => options.anchor?.() ?? reference(), panelRef, {\n open,\n placement: options.placement,\n offset: options.offset,\n sameWidth: options.sameWidth,\n })\n\n // The press the next click comes from, and whether the panel was open\n // then: focus from the same tap may open it before the click arrives.\n let press: { hover: boolean; wasOpen: boolean } | null = null\n /** The panel was opened by a tap, and stays until tapped away. */\n const tapped = ref(false)\n watch(open, (value) => value || (tapped.value = false))\n\n useLayer({\n open,\n elements: () => [reference(), panelRef.value],\n onEscape: dismiss,\n onOutside: () => {\n const close =\n toValue(options.closeOnOutside) ??\n (triggers.value.has('click') || triggers.value.has('focus') || tapped.value)\n if (close) hide()\n },\n })\n\n const showDelay = () => toValue(options.showDelay) ?? 0\n const hideDelay = () => toValue(options.hideDelay) ?? 0\n\n const triggerListeners = computed(() => {\n const on: Record<string, (event: Event) => void> = {}\n if (triggers.value.has('hover')) {\n on.onPointerenter = (event) => hoverable(event) && show(showDelay())\n on.onPointerleave = (event) => hoverable(event) && hide(hideDelay())\n if (!triggers.value.has('click') && (toValue(options.tap) ?? true)) {\n on.onPointerdown = (event) => {\n press = { hover: hoverable(event), wasOpen: open.value }\n }\n // a finger that scrolls the page instead sends no click\n on.onPointercancel = () => (press = null)\n on.onClick = (event) => {\n const from = press\n press = null\n // the keyboard is left to the component, and the mouse has hover;\n // a click with no press before it comes from assistive technology\n if ((event as MouseEvent).detail === 0 || from?.hover) return\n if (from ? from.wasOpen : open.value) return hide()\n // a link opens the panel first; the next tap follows it\n if ((event.currentTarget as Element | null)?.closest('a[href]')) event.preventDefault()\n // before showing: a `v-model:open` only takes the new value later\n tapped.value = !toValue(options.disabled)\n show()\n }\n }\n }\n if (triggers.value.has('focus')) {\n on.onFocusin = () => show()\n on.onFocusout = (event) => {\n const related = (event as FocusEvent).relatedTarget\n if (related instanceof Node && panelRef.value?.contains(related)) return\n hide()\n }\n }\n if (triggers.value.has('click')) {\n on.onClick = () => (open.value ? hide() : show())\n }\n return on\n })\n\n // Moving from the trigger onto the panel keeps a hover panel open.\n const panelListeners = computed(() => {\n if (!triggers.value.has('hover')) return {}\n return {\n onPointerenter: (event: Event) => hoverable(event) && clear(),\n onPointerleave: (event: Event) => hoverable(event) && hide(hideDelay()),\n }\n })\n\n const panelStyle = computed<CSSProperties>(() => ({\n ...floating.style.value,\n zIndex: zIndex.value,\n }))\n\n return {\n triggerRef,\n panelRef,\n reference,\n rendered,\n theme,\n placement: floating.placement,\n panelStyle,\n triggerListeners,\n panelListeners,\n tapped,\n show,\n hide,\n dismiss,\n update: floating.update,\n }\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { installedAppContext, setInstalledAppContext } from "./utils/app-context.js";
1
2
  import { configProviderKey } from "./components/config-provider/config-provider.js";
2
3
  import { withInstall } from "./utils/install.js";
3
4
  import { useNamespace } from "./utils/namespace.js";
@@ -8,6 +9,7 @@ import { provideGlobalConfig, useGlobalConfig, useLocale, useZIndex } from "./co
8
9
  import { DouAlert } from "./components/alert/index.js";
9
10
  import { getMotionDuration, setMotionMode, useMotionMode, useReducedMotion } from "./composables/use-motion.js";
10
11
  import { DouAnchor } from "./components/anchor/index.js";
12
+ import { holdPointer } from "./utils/pointer.js";
11
13
  import { computePosition, useFloating } from "./composables/use-floating.js";
12
14
  import { isComposing } from "./utils/keyboard.js";
13
15
  import { isTopLayer, useLayer } from "./composables/use-layer.js";
@@ -27,10 +29,10 @@ import { DouBanner } from "./components/banner/index.js";
27
29
  import { DouBreadcrumb } from "./components/breadcrumb/index.js";
28
30
  import { DouButton } from "./components/button/index.js";
29
31
  import { DouCalendarHeatmap } from "./components/calendar-heatmap/index.js";
30
- import { holdPointer } from "./utils/pointer.js";
31
32
  import { dropdownHostKey, dropdownKey } from "./components/dropdown/dropdown.js";
32
33
  import { DouIcon } from "./components/icon/index.js";
33
34
  import { ariaHotkey, formatHotkey, isApplePlatform, matchesHotkey, parseHotkey, useApplePlatform, useHotkey } from "./composables/use-hotkey.js";
35
+ import { DouDropdownGroup, DouDropdownItem, DouDropdownRadioGroup } from "./components/dropdown/item-components.js";
34
36
  import { DouContextMenu } from "./components/context-menu/index.js";
35
37
  import { DouSegmentedControl } from "./components/segmented-control/index.js";
36
38
  import { visibleRange } from "./components/calendar-view/range.js";
@@ -39,47 +41,59 @@ import { DouCalendarView } from "./components/calendar-view/index.js";
39
41
  import { DouCard } from "./components/card/index.js";
40
42
  import { DouCarousel, DouCarouselItem } from "./components/carousel/index.js";
41
43
  import { checkboxGroupKey } from "./components/checkbox/checkbox.js";
44
+ import { DouCheckbox, DouCheckboxGroup } from "./components/checkbox/index.js";
42
45
  import { DouTag } from "./components/tag/index.js";
43
46
  import { DouCascader } from "./components/cascader/index.js";
47
+ import { DouShimmer } from "./components/shimmer/index.js";
44
48
  import { DouChatArtifact } from "./components/chat-artifact/index.js";
45
49
  import { formatFileSize, matchesAccept } from "./components/upload/upload.js";
46
50
  import { DouChatAttachments } from "./components/chat-attachments/index.js";
47
51
  import { DouChatBubble } from "./components/chat-bubble/index.js";
48
52
  import { DouChatConfirm } from "./components/chat-confirm/index.js";
49
53
  import { DouKbd } from "./components/kbd/index.js";
54
+ import { DouTooltip } from "./components/tooltip/index.js";
50
55
  import { DouChatContextMeter } from "./components/chat-context-meter/index.js";
51
56
  import { DouChatInput } from "./components/chat-input/index.js";
52
57
  import { createOffsets } from "./components/virtual-list/virtual-list.js";
53
58
  import { useTouchScroll } from "./composables/use-touch-scroll.js";
54
59
  import { DouVirtualList } from "./components/virtual-list/index.js";
55
60
  import { DouChatList } from "./components/chat-list/index.js";
56
- import { useClipboard } from "./composables/use-clipboard.js";
57
- import { DouTooltip } from "./components/tooltip/index.js";
58
- import { DouChatMessage } from "./components/chat-message/index.js";
61
+ import { DouChatQuestion } from "./components/chat-question/index.js";
62
+ import { DouCollapseTransition } from "./components/collapse/collapse-transition.js";
63
+ import { DouStatusDot } from "./components/status-dot/index.js";
59
64
  import { DouChatPlan } from "./components/chat-plan/index.js";
60
65
  import { DouChatReasoning } from "./components/chat-reasoning/index.js";
61
66
  import { getTabbable, useFocusTrap } from "./composables/use-focus-trap.js";
67
+ import { DouPopover } from "./components/popover/index.js";
62
68
  import { DouChatCitation, DouChatSources } from "./components/chat-sources/index.js";
63
69
  import { DouChatSteps } from "./components/chat-steps/index.js";
64
- import { DouChatSuggestions } from "./components/chat-suggestions/index.js";
65
70
  import { DouChatToolCall } from "./components/chat-tool-call/index.js";
66
- import { DouCheckTag, DouCheckTagGroup } from "./components/check-tag/index.js";
71
+ import { useClipboard } from "./composables/use-clipboard.js";
67
72
  import { DouCopyButton } from "./components/copy-button/index.js";
73
+ import { createMarkdownParser, parseMarkdown } from "./components/markdown/parser.js";
68
74
  import { DouCodeBlock } from "./components/code-block/index.js";
75
+ import { defaultSanitizeUrl } from "./components/markdown/url.js";
76
+ import { DouMarkdown } from "./components/markdown/index.js";
77
+ import { DouStreamText } from "./components/stream-text/index.js";
78
+ import { DouChatMessage } from "./components/chat-message/index.js";
79
+ import { DouChatSuggestions } from "./components/chat-suggestions/index.js";
80
+ import { DouCheckTag, DouCheckTagGroup } from "./components/check-tag/index.js";
69
81
  import { useNow } from "./composables/use-now.js";
70
82
  import { DouRelativeTime } from "./components/relative-time/index.js";
71
- import { DouCheckbox, DouCheckboxGroup } from "./components/checkbox/index.js";
72
- import { DouCollapse, DouCollapseItem, DouCollapseTransition } from "./components/collapse/index.js";
83
+ import { DouCollapse, DouCollapseItem } from "./components/collapse/index.js";
73
84
  import { colorModeScript, useColorMode } from "./components/color-mode/use-color-mode.js";
85
+ import { DouSelect } from "./components/select/index.js";
86
+ import { DouSwitch } from "./components/switch/index.js";
74
87
  import { DouColorModeButton, DouColorModeSelect, DouColorModeSwitch } from "./components/color-mode/index.js";
75
88
  import { DouFieldGroup, DouFieldGroupText } from "./components/field-group/index.js";
76
89
  import { DouColorPanel } from "./components/color-panel/index.js";
77
90
  import { DouColorPicker } from "./components/color-picker/index.js";
78
91
  import { fuzzyMatch, matchCommand } from "./components/command/command.js";
79
92
  import { useScrollLock } from "./composables/use-scroll-lock.js";
80
- import { dialog, setDialogContext, useDialog } from "./components/dialog/functional.js";
93
+ import { dialog, useDialog } from "./components/dialog/functional.js";
81
94
  import { DouDialog } from "./components/dialog/index.js";
82
95
  import { DouCommand, DouCommandDialog } from "./components/command/index.js";
96
+ import { DouDropdown, DouDropdownButton, DouDropdownSub } from "./components/dropdown/index.js";
83
97
  import { applyCommentAction, applySharedCommentAction, createCommentId, readSharedComments } from "./components/comment-thread/comments.js";
84
98
  import { DouCommentThread } from "./components/comment-thread/index.js";
85
99
  import { DouConfigProvider } from "./components/config-provider/index.js";
@@ -92,13 +106,11 @@ import { DouCalendar, DouDatePicker } from "./components/date-picker/index.js";
92
106
  import { DouDescriptions, DouDescriptionsItem } from "./components/descriptions/index.js";
93
107
  import { DouDivider } from "./components/divider/index.js";
94
108
  import { DouDrawer } from "./components/drawer/index.js";
95
- import { DouDropdown, DouDropdownButton, DouDropdownItem, DouDropdownRadioGroup, DouDropdownSub } from "./components/dropdown/index.js";
96
109
  import { DouEditable } from "./components/editable/index.js";
97
110
  import { useElementSize, useIntersection, useResizeObserver } from "./composables/use-element-size.js";
98
111
  import { DouEllipsis } from "./components/ellipsis/index.js";
99
112
  import { DouEmpty } from "./components/empty/index.js";
100
113
  import { DouFindReplace } from "./components/find-replace/index.js";
101
- import { DouPopover } from "./components/popover/index.js";
102
114
  import { layoutGraph } from "./components/node-graph/layout.js";
103
115
  import { DouNodeGraph, DouNodeGraphLegend } from "./components/node-graph/index.js";
104
116
  import { isStandardSchema } from "./components/form/standard-schema.js";
@@ -107,11 +119,12 @@ import { DouGrid, DouGridItem } from "./components/grid/index.js";
107
119
  import { DouHighlight } from "./components/highlight/index.js";
108
120
  import { downloadBlob } from "./utils/download.js";
109
121
  import { DouImage, DouImagePreview } from "./components/image/index.js";
122
+ import { DouInputNumber } from "./components/input-number/index.js";
123
+ import { DouSlider } from "./components/slider/index.js";
110
124
  import { DouImageCropper } from "./components/image-cropper/index.js";
111
125
  import { vInfiniteScroll } from "./components/infinite-scroll/directive.js";
112
126
  import { DouInfiniteScroll } from "./components/infinite-scroll/index.js";
113
127
  import { DouInputDate } from "./components/input-date/index.js";
114
- import { DouInputNumber } from "./components/input-number/index.js";
115
128
  import { DouInputOtp } from "./components/input-otp/index.js";
116
129
  import { DouInputTag } from "./components/input-tag/index.js";
117
130
  import { DouInputTime } from "./components/input-time/index.js";
@@ -141,18 +154,13 @@ import { DouRadio, DouRadioGroup } from "./components/radio/index.js";
141
154
  import { DouRate } from "./components/rate/index.js";
142
155
  import { DouResult } from "./components/result/index.js";
143
156
  import { DouScrollbar } from "./components/scrollbar/index.js";
144
- import { DouSelect } from "./components/select/index.js";
145
- import { DouShimmer } from "./components/shimmer/index.js";
146
157
  import { DouSkeleton } from "./components/skeleton/index.js";
147
- import { DouSlider } from "./components/slider/index.js";
148
158
  import { useSortable } from "./components/sortable/use-sortable.js";
149
159
  import { DouSortable, DouSortableHandle } from "./components/sortable/index.js";
150
160
  import { DouSpace } from "./components/space/index.js";
151
161
  import { DouSparkline } from "./components/sparkline/index.js";
152
162
  import { DouSplitter } from "./components/splitter/index.js";
153
163
  import { DouSteps } from "./components/steps/index.js";
154
- import { DouStreamText } from "./components/stream-text/index.js";
155
- import { DouSwitch } from "./components/switch/index.js";
156
164
  import { DouTable } from "./components/table/index.js";
157
165
  import { DouTabPanel, DouTabs } from "./components/tabs/index.js";
158
166
  import { DouText } from "./components/text/index.js";
@@ -160,7 +168,6 @@ import { DouTimePicker } from "./components/time-picker/index.js";
160
168
  import { DouTimeline, DouTimelineItem } from "./components/timeline/index.js";
161
169
  import { DouToggle, DouToggleGroup } from "./components/toggle/index.js";
162
170
  import { DouToolbar, DouToolbarSeparator } from "./components/toolbar/index.js";
163
- import { setToastContext } from "./components/toast/store.js";
164
171
  import { DouToastViewport, toast } from "./components/toast/index.js";
165
172
  import { DouTour } from "./components/tour/index.js";
166
173
  import { DouTransfer } from "./components/transfer/index.js";
@@ -177,6 +184,6 @@ import { CANVAS_MAX_SIDE, canvasMaxArea, fitPixelRatio, svgToPNG } from "./utils
177
184
  import { breakpoints, collaborationColors } from "@dou-ui/theme";
178
185
  // src/index.ts
179
186
  var src_default = DouUI;
180
- export { CANVAS_MAX_SIDE, DouAffix, DouAlert, DouAnchor, DouAutocomplete, DouAvatar, DouAvatarGroup, DouBackTop, DouBadge, DouBanner, DouBreadcrumb, DouButton, DouCalendar, DouCalendarHeatmap, DouCalendarView, DouCard, DouCarousel, DouCarouselItem, DouCascader, DouChatArtifact, DouChatAttachments, DouChatBubble, DouChatCitation, DouChatConfirm, DouChatContextMeter, DouChatInput, DouChatList, DouChatMessage, DouChatPlan, DouChatReasoning, DouChatSources, DouChatSteps, DouChatSuggestions, DouChatToolCall, DouCheckTag, DouCheckTagGroup, DouCheckbox, DouCheckboxGroup, DouCodeBlock, DouCollapse, DouCollapseItem, DouCollapseTransition, DouColorModeButton, DouColorModeSelect, DouColorModeSwitch, DouColorPanel, DouColorPicker, DouCommand, DouCommandDialog, DouCommentThread, DouConfigProvider, DouContextMenu, DouCopyButton, DouCountdown, DouDatePicker, DouDescriptions, DouDescriptionsItem, DouDialog, DouDivider, DouDrawer, DouDropdown, DouDropdownButton, DouDropdownItem, DouDropdownRadioGroup, DouDropdownSub, DouEditable, DouEllipsis, DouEmpty, DouFieldGroup, DouFieldGroupText, DouFindReplace, DouForm, DouFormItem, DouGrid, DouGridItem, DouHighlight, DouIcon, DouImage, DouImageCropper, DouImagePreview, DouInfiniteScroll, DouInput, DouInputDate, DouInputNumber, DouInputOtp, DouInputTag, DouInputTime, DouKbd, DouLayout, DouLayoutAside, DouLayoutAsideTrigger, DouLayoutFooter, DouLayoutHeader, DouLayoutMain, DouLink, DouListbox, DouLoading, DouMarquee, DouMasonry, DouMenu, DouMenubar, DouMenubarMenu, DouNodeGraph, DouNodeGraphLegend, DouPageHeader, DouPagination, DouPopconfirm, DouPopover, DouProgress, DouProgressGroup, DouQrcode, DouRadio, DouRadioGroup, DouRate, DouRelativeTime, DouResult, DouScrollbar, DouSegmentedControl, DouSelect, DouShimmer, DouSkeleton, DouSlider, DouSortable, DouSortableHandle, DouSpace, DouSparkline, DouSpinner, DouSplitter, DouStatistic, DouSteps, DouStreamText, DouSwitch, DouTabPanel, DouTable, DouTabs, DouTag, DouText, DouTextarea, DouTimePicker, DouTimeline, DouTimelineItem, DouToastViewport, DouToggle, DouToggleGroup, DouToolbar, DouToolbarSeparator, DouTooltip, DouTour, DouTransfer, DouTree, DouTreeSelect, DouUI, DouUpload, DouUser, DouVirtualList, DouWatermark, applyCommentAction, applySharedCommentAction, ariaHotkey, breakpointWidth, breakpoints, canvasMaxArea, checkboxGroupKey, collaborationColors, colorModeScript, computePosition, configProviderKey, createCommentId, createOffsets, createScrollLink, src_default as default, dialog, downloadBlob, dropdownHostKey, dropdownKey, en, encodeQr, expandRepeats, fieldGroupKey, fitPixelRatio, formItemKey, formKey, formatDateValue, formatDuration, formatFileSize, formatHotkey, fuzzyMatch, getMotionDuration, getTabbable, holdPointer, isApplePlatform, isComposing, isStandardSchema, isTopLayer, layoutGraph, layoutKey, matchCommand, matchesAccept, matchesHotkey, occurrenceOf, paginationRange, parseHotkey, placeItems, provideGlobalConfig, radioGroupKey, readSharedComments, scrollPositionOf, setDialogContext, setMotionMode, setToastContext, showFormErrors, splitHighlight, svgToPNG, toast, treeRowHeights, useApplePlatform, useBreakpoints, useClipboard, useColorMode, useCountdown, useDialog, useElementSize, useFloating, useFocusTrap, useFormDisabled, useFormItem, useFormReadonly, useFormSize, useGlobalConfig, useHotkey, useIntersection, useLayer, useLocale, useMotionMode, useNamespace, useNow, useReducedMotion, useResizeObserver, useRovingFocus, useScrollLock, useSortable, useTeleport, useTouchScroll, useZIndex, vInfiniteScroll, vLoading, visibleRange, withInstall, zhCN, zhTW };
187
+ export { CANVAS_MAX_SIDE, DouAffix, DouAlert, DouAnchor, DouAutocomplete, DouAvatar, DouAvatarGroup, DouBackTop, DouBadge, DouBanner, DouBreadcrumb, DouButton, DouCalendar, DouCalendarHeatmap, DouCalendarView, DouCard, DouCarousel, DouCarouselItem, DouCascader, DouChatArtifact, DouChatAttachments, DouChatBubble, DouChatCitation, DouChatConfirm, DouChatContextMeter, DouChatInput, DouChatList, DouChatMessage, DouChatPlan, DouChatQuestion, DouChatReasoning, DouChatSources, DouChatSteps, DouChatSuggestions, DouChatToolCall, DouCheckTag, DouCheckTagGroup, DouCheckbox, DouCheckboxGroup, DouCodeBlock, DouCollapse, DouCollapseItem, DouCollapseTransition, DouColorModeButton, DouColorModeSelect, DouColorModeSwitch, DouColorPanel, DouColorPicker, DouCommand, DouCommandDialog, DouCommentThread, DouConfigProvider, DouContextMenu, DouCopyButton, DouCountdown, DouDatePicker, DouDescriptions, DouDescriptionsItem, DouDialog, DouDivider, DouDrawer, DouDropdown, DouDropdownButton, DouDropdownGroup, DouDropdownItem, DouDropdownRadioGroup, DouDropdownSub, DouEditable, DouEllipsis, DouEmpty, DouFieldGroup, DouFieldGroupText, DouFindReplace, DouForm, DouFormItem, DouGrid, DouGridItem, DouHighlight, DouIcon, DouImage, DouImageCropper, DouImagePreview, DouInfiniteScroll, DouInput, DouInputDate, DouInputNumber, DouInputOtp, DouInputTag, DouInputTime, DouKbd, DouLayout, DouLayoutAside, DouLayoutAsideTrigger, DouLayoutFooter, DouLayoutHeader, DouLayoutMain, DouLink, DouListbox, DouLoading, DouMarkdown, DouMarquee, DouMasonry, DouMenu, DouMenubar, DouMenubarMenu, DouNodeGraph, DouNodeGraphLegend, DouPageHeader, DouPagination, DouPopconfirm, DouPopover, DouProgress, DouProgressGroup, DouQrcode, DouRadio, DouRadioGroup, DouRate, DouRelativeTime, DouResult, DouScrollbar, DouSegmentedControl, DouSelect, DouShimmer, DouSkeleton, DouSlider, DouSortable, DouSortableHandle, DouSpace, DouSparkline, DouSpinner, DouSplitter, DouStatistic, DouStatusDot, DouSteps, DouStreamText, DouSwitch, DouTabPanel, DouTable, DouTabs, DouTag, DouText, DouTextarea, DouTimePicker, DouTimeline, DouTimelineItem, DouToastViewport, DouToggle, DouToggleGroup, DouToolbar, DouToolbarSeparator, DouTooltip, DouTour, DouTransfer, DouTree, DouTreeSelect, DouUI, DouUpload, DouUser, DouVirtualList, DouWatermark, applyCommentAction, applySharedCommentAction, ariaHotkey, breakpointWidth, breakpoints, canvasMaxArea, checkboxGroupKey, collaborationColors, colorModeScript, computePosition, configProviderKey, createCommentId, createMarkdownParser, createOffsets, createScrollLink, src_default as default, defaultSanitizeUrl, dialog, downloadBlob, dropdownHostKey, dropdownKey, en, encodeQr, expandRepeats, fieldGroupKey, fitPixelRatio, formItemKey, formKey, formatDateValue, formatDuration, formatFileSize, formatHotkey, fuzzyMatch, getMotionDuration, getTabbable, holdPointer, installedAppContext, isApplePlatform, isComposing, isStandardSchema, isTopLayer, layoutGraph, layoutKey, matchCommand, matchesAccept, matchesHotkey, occurrenceOf, paginationRange, parseHotkey, parseMarkdown, placeItems, provideGlobalConfig, radioGroupKey, readSharedComments, scrollPositionOf, setInstalledAppContext, setMotionMode, showFormErrors, splitHighlight, svgToPNG, toast, treeRowHeights, useApplePlatform, useBreakpoints, useClipboard, useColorMode, useCountdown, useDialog, useElementSize, useFloating, useFocusTrap, useFormDisabled, useFormItem, useFormReadonly, useFormSize, useGlobalConfig, useHotkey, useIntersection, useLayer, useLocale, useMotionMode, useNamespace, useNow, useReducedMotion, useResizeObserver, useRovingFocus, useScrollLock, useSortable, useTeleport, useTouchScroll, useZIndex, vInfiniteScroll, vLoading, visibleRange, withInstall, zhCN, zhTW };
181
188
 
182
189
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { DouUI } from './plugin'\n\nexport * from './components'\nexport * from './locale'\nexport {\n computePosition,\n getTabbable,\n isTopLayer,\n useFloating,\n useFocusTrap,\n useLayer,\n useScrollLock,\n} from './composables'\nexport type {\n Layer,\n Placement,\n Position,\n PositionOptions,\n Side,\n UseFloatingOptions,\n UseFocusTrapOptions,\n UseLayerOptions,\n VirtualElement,\n} from './composables'\nexport { useElementSize, useIntersection, useResizeObserver } from './composables/use-element-size'\nexport type {\n UseElementSizeOptions,\n UseIntersectionOptions,\n UseResizeObserverOptions,\n} from './composables/use-element-size'\nexport {\n getMotionDuration,\n setMotionMode,\n useMotionMode,\n useReducedMotion,\n} from './composables/use-motion'\nexport type { MotionDuration, MotionMode } from './composables/use-motion'\nexport {\n ariaHotkey,\n formatHotkey,\n isApplePlatform,\n matchesHotkey,\n parseHotkey,\n useApplePlatform,\n useHotkey,\n} from './composables/use-hotkey'\nexport type { UseHotkeyOptions } from './composables/use-hotkey'\nexport { breakpointWidth, useBreakpoints } from './composables/use-breakpoints'\nexport type { UseBreakpointsReturn } from './composables/use-breakpoints'\nexport { useClipboard } from './composables/use-clipboard'\nexport type { UseClipboardOptions, UseClipboardReturn } from './composables/use-clipboard'\nexport { useRovingFocus } from './composables/use-roving-focus'\nexport type { RovingOrientation, UseRovingFocusOptions } from './composables/use-roving-focus'\nexport { useNow } from './composables/use-now'\nexport type { UseNowOptions } from './composables/use-now'\nexport { breakpoints, collaborationColors } from '@dou-ui/theme'\nexport type { Breakpoint } from '@dou-ui/theme'\nexport { useNamespace, withInstall } from './utils'\nexport { isComposing } from './utils/keyboard'\nexport { holdPointer } from './utils/pointer'\nexport { createScrollLink, scrollPositionOf } from './utils/scroll'\nexport type { ScrollLink, ScrollLinkAxis } from './utils/scroll'\nexport { useTouchScroll } from './composables/use-touch-scroll'\nexport type { UseTouchScrollReturn } from './composables/use-touch-scroll'\nexport type { PointerHold } from './utils/pointer'\nexport { useTeleport } from './utils/teleport'\nexport type { TeleportTarget } from './utils/teleport'\nexport { CANVAS_MAX_SIDE, canvasMaxArea, fitPixelRatio, svgToPNG } from './utils/png'\nexport { downloadBlob } from './utils/download'\nexport type { PNGExportSource, SvgToPNGOptions } from './utils/png'\nexport type { ForwardedAttributes, Size, Tone, WithAttributes, WithInstall } from './utils'\nexport type { DataAttributes } from './attributes'\nexport { DouUI }\nexport default DouUI\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEA,IAAA,cAAe"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { DouUI } from './plugin'\n\nexport * from './components'\nexport * from './locale'\nexport {\n computePosition,\n getTabbable,\n isTopLayer,\n useFloating,\n useFocusTrap,\n useLayer,\n useScrollLock,\n} from './composables'\nexport type {\n Layer,\n Placement,\n Position,\n PositionOptions,\n Side,\n UseFloatingOptions,\n UseFocusTrapOptions,\n UseLayerOptions,\n VirtualElement,\n} from './composables'\nexport { useElementSize, useIntersection, useResizeObserver } from './composables/use-element-size'\nexport type {\n UseElementSizeOptions,\n UseIntersectionOptions,\n UseResizeObserverOptions,\n} from './composables/use-element-size'\nexport {\n getMotionDuration,\n setMotionMode,\n useMotionMode,\n useReducedMotion,\n} from './composables/use-motion'\nexport type { MotionDuration, MotionMode } from './composables/use-motion'\nexport {\n ariaHotkey,\n formatHotkey,\n isApplePlatform,\n matchesHotkey,\n parseHotkey,\n useApplePlatform,\n useHotkey,\n} from './composables/use-hotkey'\nexport type { UseHotkeyOptions } from './composables/use-hotkey'\nexport { breakpointWidth, useBreakpoints } from './composables/use-breakpoints'\nexport type { UseBreakpointsReturn } from './composables/use-breakpoints'\nexport { useClipboard } from './composables/use-clipboard'\nexport type { UseClipboardOptions, UseClipboardReturn } from './composables/use-clipboard'\nexport { useRovingFocus } from './composables/use-roving-focus'\nexport type { RovingOrientation, UseRovingFocusOptions } from './composables/use-roving-focus'\nexport { useNow } from './composables/use-now'\nexport type { UseNowOptions } from './composables/use-now'\nexport { breakpoints, collaborationColors } from '@dou-ui/theme'\nexport type { Breakpoint } from '@dou-ui/theme'\nexport { useNamespace, withInstall } from './utils'\nexport { isComposing } from './utils/keyboard'\nexport { holdPointer } from './utils/pointer'\nexport { createScrollLink, scrollPositionOf } from './utils/scroll'\nexport { installedAppContext, setInstalledAppContext } from './utils/app-context'\nexport type { ScrollLink, ScrollLinkAxis } from './utils/scroll'\nexport { useTouchScroll } from './composables/use-touch-scroll'\nexport type { UseTouchScrollReturn } from './composables/use-touch-scroll'\nexport type { PointerHold } from './utils/pointer'\nexport { useTeleport } from './utils/teleport'\nexport type { TeleportTarget } from './utils/teleport'\nexport { CANVAS_MAX_SIDE, canvasMaxArea, fitPixelRatio, svgToPNG } from './utils/png'\nexport { downloadBlob } from './utils/download'\nexport type { PNGExportSource, SvgToPNGOptions } from './utils/png'\nexport type { ForwardedAttributes, Size, Tone, WithAttributes, WithInstall } from './utils'\nexport type { DataAttributes } from './attributes'\nexport { DouUI }\nexport default DouUI\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA,IAAA,cAAe"}
package/dist/locale/en.js CHANGED
@@ -130,17 +130,17 @@ var en = {
130
130
  empty: "No results"
131
131
  },
132
132
  steps: {
133
- finish: "completed",
134
- process: "current",
135
- wait: "not started",
133
+ done: "completed",
134
+ running: "current",
135
+ pending: "not started",
136
136
  error: "failed"
137
137
  },
138
138
  nodeGraph: {
139
139
  label: "Node graph",
140
140
  status: {
141
- wait: "Not started",
142
- process: "In progress",
143
- finish: "Completed",
141
+ pending: "Not started",
142
+ running: "In progress",
143
+ done: "Completed",
144
144
  error: "Failed",
145
145
  blocked: "Waiting on dependencies"
146
146
  },
@@ -419,10 +419,12 @@ var en = {
419
419
  reasoning: "Reasoning",
420
420
  thoughtSeconds: "Thought for {seconds}s",
421
421
  thoughtMinutes: "Thought for {minutes}m {seconds}s",
422
- toolPending: "Awaiting approval",
422
+ toolPending: "Not started",
423
423
  toolRunning: "Running",
424
- toolSuccess: "Done",
424
+ toolWaiting: "Waiting",
425
+ toolDone: "Done",
425
426
  toolError: "Failed",
427
+ toolWithdrawn: "Withdrawn",
426
428
  toolInput: "Input",
427
429
  toolOutput: "Output",
428
430
  attachments: "Attachments",
@@ -431,10 +433,12 @@ var en = {
431
433
  uploadError: "Upload failed",
432
434
  plan: "Plan",
433
435
  stepRunning: "In progress",
436
+ stepWaiting: "Waiting",
434
437
  stepDone: "Done",
435
438
  stepError: "Failed",
436
439
  working: "Working",
437
440
  stepsDone: "{count} steps done",
441
+ stepsTotal: "{count} steps",
438
442
  sources: "Sources",
439
443
  citation: "Source {index}: {title}",
440
444
  approve: "Allow",
@@ -442,6 +446,8 @@ var en = {
442
446
  deny: "Deny",
443
447
  approved: "Allowed",
444
448
  denied: "Denied",
449
+ answered: "Answered",
450
+ withdrawn: "Withdrawn",
445
451
  generating: "Generating…",
446
452
  generateError: "Generation failed",
447
453
  context: "Context {used} / {total} ({percent}%)",