dou-ui 0.1.0-alpha.2 → 0.1.0-alpha.3
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.
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar-view/calendar-view.js.map +1 -1
- package/dist/components/calendar-view/calendar-view.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/calendar-view/calendar-view.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/cascader/cascader.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/cascader/cascader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-artifact/chat-artifact.js.map +1 -1
- package/dist/components/chat-artifact/chat-artifact.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/components/chat-artifact/chat-artifact.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-attachments/chat-attachments.js.map +1 -1
- package/dist/components/chat-attachments/chat-attachments.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/chat-attachments/chat-attachments.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-attachments/chat-attachments2.js.map +1 -1
- package/dist/components/chat-confirm/chat-confirm.js.map +1 -1
- package/dist/components/chat-confirm/chat-confirm.vue_vue_type_script_setup_true_lang.js +38 -14
- package/dist/components/chat-confirm/chat-confirm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-context-meter/chat-context-meter.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/chat-context-meter/chat-context-meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-context-meter/chat-context-meter2.js.map +1 -1
- package/dist/components/chat-message/chat-message.js.map +1 -1
- package/dist/components/chat-message/chat-message.vue_vue_type_script_setup_true_lang.js +88 -33
- package/dist/components/chat-message/chat-message.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-message/chat-message2.js.map +1 -1
- package/dist/components/chat-message/style.js +5 -0
- package/dist/components/chat-plan/chat-plan.js +9 -4
- package/dist/components/chat-plan/chat-plan.js.map +1 -1
- package/dist/components/chat-plan/chat-plan.vue_vue_type_script_setup_true_lang.js +64 -32
- package/dist/components/chat-plan/chat-plan.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-plan/chat-plan2.js +6 -0
- package/dist/components/chat-plan/chat-plan2.js.map +1 -0
- package/dist/components/chat-plan/index.js +1 -1
- package/dist/components/chat-plan/style.js +1 -0
- package/dist/components/chat-reasoning/chat-reasoning.js.map +1 -1
- package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-sources/chat-citation.js.map +1 -1
- package/dist/components/chat-sources/chat-citation.vue_vue_type_script_setup_true_lang.js +52 -14
- package/dist/components/chat-sources/chat-citation.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-sources/chat-sources.js.map +1 -1
- package/dist/components/chat-sources/chat-sources.vue_vue_type_script_setup_true_lang.js +6 -4
- package/dist/components/chat-sources/chat-sources.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-sources/chat-sources2.js.map +1 -1
- package/dist/components/chat-sources/index.js +1 -1
- package/dist/components/chat-steps/chat-steps.js +9 -4
- package/dist/components/chat-steps/chat-steps.js.map +1 -1
- package/dist/components/chat-steps/chat-steps.vue_vue_type_script_setup_true_lang.js +20 -13
- package/dist/components/chat-steps/chat-steps.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-steps/chat-steps2.js +6 -0
- package/dist/components/chat-steps/chat-steps2.js.map +1 -0
- package/dist/components/chat-steps/index.js +1 -1
- package/dist/components/chat-steps/style.js +1 -0
- package/dist/components/chat-tool-call/chat-tool-call.js.map +1 -1
- package/dist/components/chat-tool-call/chat-tool-call.vue_vue_type_script_setup_true_lang.js +38 -12
- package/dist/components/chat-tool-call/chat-tool-call.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-tool-call/chat-tool-call2.js.map +1 -1
- package/dist/components/chat-tool-call/style.js +1 -0
- package/dist/components/code-block/code-block.js.map +1 -1
- package/dist/components/code-block/code-block.vue_vue_type_script_setup_true_lang.js +37 -5
- package/dist/components/code-block/code-block.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse-item.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/collapse/collapse-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapse/collapse-transition.js +3 -1
- package/dist/components/collapse/collapse-transition.js.map +1 -1
- package/dist/components/collapse/index.js +1 -2
- package/dist/components/collapse/index.js.map +1 -1
- package/dist/components/color-mode/color-mode-button.js.map +1 -1
- package/dist/components/color-mode/color-mode-button.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/color-mode/color-mode-button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-mode/color-mode-select.js.map +1 -1
- package/dist/components/color-mode/color-mode-select.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/color-mode/color-mode-select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-mode/color-mode-switch.js.map +1 -1
- package/dist/components/color-mode/color-mode-switch.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/color-mode/color-mode-switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-panel/color-panel.js.map +1 -1
- package/dist/components/color-panel/color-panel.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/color-panel/color-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-picker/color-picker.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/color-picker/color-picker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/comment-thread/comment-thread.js.map +1 -1
- package/dist/components/comment-thread/comment-thread.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/comment-thread/comment-thread.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/comment-thread/style.js +2 -0
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/context-menu/context-menu.vue_vue_type_script_setup_true_lang.js +26 -11
- package/dist/components/context-menu/context-menu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/context-menu/index.js +2 -0
- package/dist/components/context-menu/index.js.map +1 -1
- package/dist/components/copy-button/copy-button.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/descriptions/descriptions.js.map +1 -1
- package/dist/components/descriptions/descriptions.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/components/descriptions/descriptions.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/descriptions/descriptions2.js.map +1 -1
- package/dist/components/dropdown/dropdown-button.js.map +1 -1
- package/dist/components/dropdown/dropdown-button.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/dropdown/dropdown-button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown-group.js +6 -0
- package/dist/components/dropdown/dropdown-group.js.map +1 -0
- package/dist/components/dropdown/dropdown-group.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/components/dropdown/dropdown-group.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/dropdown/dropdown-item.js.map +1 -1
- package/dist/components/dropdown/dropdown-item.vue_vue_type_script_setup_true_lang.js +31 -9
- package/dist/components/dropdown/dropdown-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown-items.js.map +1 -1
- package/dist/components/dropdown/dropdown-items.vue_vue_type_script_setup_true_lang.js +77 -52
- package/dist/components/dropdown/dropdown-items.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown-radio-group.js.map +1 -1
- package/dist/components/dropdown/dropdown-radio-group.vue_vue_type_script_setup_true_lang.js +23 -5
- package/dist/components/dropdown/dropdown-radio-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown-sub.js.map +1 -1
- package/dist/components/dropdown/dropdown-sub.vue_vue_type_script_setup_true_lang.js +5 -4
- package/dist/components/dropdown/dropdown-sub.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/dropdown2.js.map +1 -1
- package/dist/components/dropdown/index.js +4 -5
- package/dist/components/dropdown/index.js.map +1 -1
- package/dist/components/dropdown/item-components.js +11 -0
- package/dist/components/dropdown/item-components.js.map +1 -0
- package/dist/components/dropdown/menu-entries.js +14 -0
- package/dist/components/dropdown/menu-entries.js.map +1 -0
- package/dist/components/dropdown/menu-keys.js +1 -1
- package/dist/components/dropdown/menu-keys.js.map +1 -1
- package/dist/components/ellipsis/ellipsis.js.map +1 -1
- package/dist/components/ellipsis/ellipsis.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/ellipsis/ellipsis.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/image-cropper/image-cropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/infinite-scroll/infinite-scroll.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input-date/segment-field.js.map +1 -1
- package/dist/components/input-date/segment-field.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/input-date/segment-field.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input-date/style.js +1 -0
- package/dist/components/input-time/style.js +1 -0
- package/dist/components/layout/layout-aside-trigger.js.map +1 -1
- package/dist/components/layout/layout-aside-trigger.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/layout/layout-aside-trigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/layout-aside.js.map +1 -1
- package/dist/components/layout/layout-aside.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/layout/layout-aside.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/layout-footer.js.map +1 -1
- package/dist/components/layout/layout-footer.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/components/layout/layout-footer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/markdown/index.js +9 -0
- package/dist/components/markdown/index.js.map +1 -0
- package/dist/components/markdown/markdown.js +6 -0
- package/dist/components/markdown/markdown.js.map +1 -0
- package/dist/components/markdown/markdown.vue_vue_type_script_setup_true_lang.js +225 -0
- package/dist/components/markdown/markdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/markdown/parse-block.js +577 -0
- package/dist/components/markdown/parse-block.js.map +1 -0
- package/dist/components/markdown/parse-inline.js +626 -0
- package/dist/components/markdown/parse-inline.js.map +1 -0
- package/dist/components/markdown/parser.js +308 -0
- package/dist/components/markdown/parser.js.map +1 -0
- package/dist/components/markdown/render.js +424 -0
- package/dist/components/markdown/render.js.map +1 -0
- package/dist/components/markdown/style.d.ts +1 -0
- package/dist/components/markdown/style.js +10 -0
- package/dist/components/markdown/url.js +16 -0
- package/dist/components/markdown/url.js.map +1 -0
- package/dist/components/menu/menu-item.js.map +1 -1
- package/dist/components/menu/menu-item.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/menu/menu-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/menu/menu-list.js.map +1 -1
- package/dist/components/menu/menu-list.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/menu/menu-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/menu/menu-popup.js.map +1 -1
- package/dist/components/menu/menu-popup.vue_vue_type_script_setup_true_lang.js +33 -21
- package/dist/components/menu/menu-popup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/menu/menu.js +16 -13
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/menu.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/menu/menu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/menu/menu2.js.map +1 -1
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/node-graph/layout.js +136 -31
- package/dist/components/node-graph/layout.js.map +1 -1
- package/dist/components/node-graph/node-graph-legend.js.map +1 -1
- package/dist/components/node-graph/node-graph-legend.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/node-graph/node-graph-legend.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/node-graph/node-graph.js.map +1 -1
- package/dist/components/node-graph/node-graph.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/node-graph/node-graph.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/pagination-gap.js.map +1 -1
- package/dist/components/pagination/pagination-gap.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/pagination/pagination-gap.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/pagination/pagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/pagination/pagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/popconfirm/index.js +2 -0
- package/dist/components/popconfirm/index.js.map +1 -1
- package/dist/components/popconfirm/popconfirm.js.map +1 -1
- package/dist/components/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/popover/index.js +2 -0
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/popover/popover.vue_vue_type_script_setup_true_lang.js +12 -5
- package/dist/components/popover/popover.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-group/progress-group.js.map +1 -1
- package/dist/components/progress-group/progress-group.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/components/progress-group/progress-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/qrcode/qrcode.js.map +1 -1
- package/dist/components/qrcode/qrcode.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/components/qrcode/qrcode.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/select.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/select/select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/slider/slider.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/slider/slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/status-dot/index.js +7 -0
- package/dist/components/status-dot/index.js.map +1 -0
- package/dist/components/status-dot/status-dot.js +26 -0
- package/dist/components/status-dot/status-dot.js.map +1 -0
- package/dist/components/status-dot/status-dot.vue_vue_type_script_lang.js +43 -0
- package/dist/components/status-dot/status-dot.vue_vue_type_script_lang.js.map +1 -0
- package/dist/components/status-dot/status-dot2.js +6 -0
- package/dist/components/status-dot/status-dot2.js.map +1 -0
- package/dist/components/status-dot/style.d.ts +1 -0
- package/dist/components/status-dot/style.js +2 -0
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/steps/steps.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/components/steps/steps.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js +19 -14
- package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tab-panel.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/tabs/tab-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/tabs.vue_vue_type_script_setup_true_lang.js +117 -47
- package/dist/components/tabs/tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tabs2.js.map +1 -1
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/tag/tag.vue_vue_type_script_setup_true_lang.js +21 -4
- package/dist/components/tag/tag.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/timeline/style.js +1 -0
- package/dist/components/timeline/timeline-item.js.map +1 -1
- package/dist/components/timeline/timeline-item.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/timeline/timeline-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +55 -8
- package/dist/components/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tour/tour.js.map +1 -1
- package/dist/components/tour/tour.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/tour/tour.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/transfer/transfer-list.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tree/tree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/upload/upload.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/upload/upload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/upload/upload2.js.map +1 -1
- package/dist/components/user/user.js.map +1 -1
- package/dist/components/user/user.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/user/user.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/use-popup.js +30 -5
- package/dist/composables/use-popup.js.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/dist/locale/en.js +13 -8
- package/dist/locale/en.js.map +1 -1
- package/dist/locale/zh-cn.js +13 -8
- package/dist/locale/zh-cn.js.map +1 -1
- package/dist/locale/zh-tw.js +13 -8
- package/dist/locale/zh-tw.js.map +1 -1
- package/dist/plugin.js +21 -14
- package/dist/plugin.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/components/button/button.d.ts +5 -1
- package/dist/types/components/calendar-view/calendar-view.d.ts +6 -0
- package/dist/types/components/calendar-view/calendar-view.vue.d.ts +1 -0
- package/dist/types/components/calendar-view/index.d.ts +3 -0
- package/dist/types/components/chat-artifact/chat-artifact.d.ts +2 -1
- package/dist/types/components/chat-attachments/chat-attachments.d.ts +2 -2
- package/dist/types/components/chat-confirm/chat-confirm.d.ts +7 -2
- package/dist/types/components/chat-list/index.d.ts +3 -3
- package/dist/types/components/chat-message/chat-message.d.ts +26 -3
- package/dist/types/components/chat-message/chat-message.vue.d.ts +4 -3
- package/dist/types/components/chat-message/index.d.ts +7 -4
- package/dist/types/components/chat-plan/chat-plan.d.ts +19 -2
- package/dist/types/components/chat-plan/chat-plan.vue.d.ts +2 -0
- package/dist/types/components/chat-plan/index.d.ts +6 -0
- package/dist/types/components/chat-sources/chat-sources.d.ts +6 -1
- package/dist/types/components/chat-steps/chat-steps.d.ts +10 -4
- package/dist/types/components/chat-steps/chat-steps.vue.d.ts +1 -1
- package/dist/types/components/chat-steps/index.d.ts +3 -3
- package/dist/types/components/chat-tool-call/chat-tool-call.d.ts +12 -3
- package/dist/types/components/chat-tool-call/chat-tool-call.vue.d.ts +1 -0
- package/dist/types/components/chat-tool-call/index.d.ts +3 -0
- package/dist/types/components/checkbox/index.d.ts +5 -5
- package/dist/types/components/code-block/code-block.d.ts +11 -0
- package/dist/types/components/code-block/code-block.vue.d.ts +3 -1
- package/dist/types/components/code-block/index.d.ts +9 -3
- package/dist/types/components/collapse/collapse-transition.d.ts +2 -7
- package/dist/types/components/collapse/collapse.vue.d.ts +1 -1
- package/dist/types/components/collapse/index.d.ts +5 -6
- package/dist/types/components/context-menu/context-menu.d.ts +37 -4
- package/dist/types/components/context-menu/context-menu.vue.d.ts +2 -0
- package/dist/types/components/context-menu/index.d.ts +5 -0
- package/dist/types/components/copy-button/copy-button.vue.d.ts +1 -1
- package/dist/types/components/copy-button/index.d.ts +1 -1
- package/dist/types/components/descriptions/descriptions.d.ts +9 -1
- package/dist/types/components/descriptions/descriptions.vue.d.ts +1 -0
- package/dist/types/components/descriptions/index.d.ts +3 -0
- package/dist/types/components/dropdown/dropdown-group.vue.d.ts +13 -0
- package/dist/types/components/dropdown/dropdown-items.vue.d.ts +2 -2
- package/dist/types/components/dropdown/dropdown-radio-group.vue.d.ts +8 -4
- package/dist/types/components/dropdown/dropdown.d.ts +28 -6
- package/dist/types/components/dropdown/dropdown.vue.d.ts +1 -1
- package/dist/types/components/dropdown/index.d.ts +10 -81
- package/dist/types/components/dropdown/item-components.d.ts +103 -0
- package/dist/types/components/dropdown/menu-entries.d.ts +4 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/layout/index.d.ts +12 -6
- package/dist/types/components/layout/layout-aside.vue.d.ts +1 -1
- package/dist/types/components/layout/layout-footer.vue.d.ts +4 -2
- package/dist/types/components/layout/layout.d.ts +4 -0
- package/dist/types/components/markdown/index.d.ts +58 -0
- package/dist/types/components/markdown/markdown.d.ts +251 -0
- package/dist/types/components/markdown/markdown.vue.d.ts +22 -0
- package/dist/types/components/markdown/parse-block.d.ts +61 -0
- package/dist/types/components/markdown/parse-inline.d.ts +19 -0
- package/dist/types/components/markdown/parser.d.ts +22 -0
- package/dist/types/components/markdown/render.d.ts +84 -0
- package/dist/types/components/markdown/url.d.ts +10 -0
- package/dist/types/components/masonry/index.d.ts +3 -3
- package/dist/types/components/menu/index.d.ts +8 -3
- package/dist/types/components/menu/menu.d.ts +16 -5
- package/dist/types/components/menu/menu.vue.d.ts +3 -1
- package/dist/types/components/menubar/menubar.d.ts +1 -1
- package/dist/types/components/node-graph/layout.d.ts +16 -0
- package/dist/types/components/node-graph/node-graph.d.ts +1 -1
- package/dist/types/components/popover/index.d.ts +3 -3
- package/dist/types/components/popover/popover.vue.d.ts +1 -1
- package/dist/types/components/progress-group/index.d.ts +3 -0
- package/dist/types/components/progress-group/progress-group.d.ts +7 -0
- package/dist/types/components/progress-group/progress-group.vue.d.ts +1 -0
- package/dist/types/components/qrcode/index.d.ts +3 -0
- package/dist/types/components/qrcode/qrcode.d.ts +5 -0
- package/dist/types/components/qrcode/qrcode.vue.d.ts +1 -0
- package/dist/types/components/sortable/index.d.ts +3 -3
- package/dist/types/components/status-dot/index.d.ts +51 -0
- package/dist/types/components/status-dot/status-dot.d.ts +46 -0
- package/dist/types/components/status-dot/status-dot.vue.d.ts +46 -0
- package/dist/types/components/steps/steps.d.ts +1 -1
- package/dist/types/components/switch/index.d.ts +3 -3
- package/dist/types/components/table/index.d.ts +4 -3
- package/dist/types/components/table/table.d.ts +6 -1
- package/dist/types/components/tabs/index.d.ts +3 -0
- package/dist/types/components/tabs/tabs.d.ts +16 -3
- package/dist/types/components/tabs/tabs.vue.d.ts +1 -0
- package/dist/types/components/timeline/index.d.ts +3 -3
- package/dist/types/components/timeline/timeline-item.vue.d.ts +1 -1
- package/dist/types/components/virtual-list/index.d.ts +3 -3
- package/dist/types/composables/use-popup.d.ts +15 -5
- package/dist/types/locale/types.d.ts +18 -7
- package/dist/types/utils/only-child.d.ts +3 -1
- package/dist/types/utils/pointer.d.ts +5 -0
- package/dist/types/utils/safe-url.d.ts +14 -0
- package/dist/types/utils/status-check.d.ts +8 -0
- package/dist/utils/install.js +5 -0
- package/dist/utils/install.js.map +1 -1
- package/dist/utils/only-child.js +56 -5
- package/dist/utils/only-child.js.map +1 -1
- package/dist/utils/pointer.js +6 -1
- package/dist/utils/pointer.js.map +1 -1
- package/dist/utils/safe-url.js +57 -0
- package/dist/utils/safe-url.js.map +1 -0
- package/dist/utils/status-check.js +27 -0
- package/dist/utils/status-check.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { DouSpinner } from "../spinner/index.js";
|
|
4
|
+
import { DouShimmer } from "../shimmer/index.js";
|
|
5
|
+
import { DouCollapseTransition } from "../collapse/collapse-transition.js";
|
|
6
|
+
import { DouStatusDot } from "../status-dot/index.js";
|
|
7
|
+
import { planRunning } from "./chat-plan.js";
|
|
8
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, vShow, watchEffect, withCtx, withDirectives } from "vue";
|
|
9
|
+
import { AlertCircleIcon, CheckIcon, ChevronDownIcon, ClockPauseIcon, ListChecksIcon } from "@dou-ui/icons";
|
|
8
10
|
// src/components/chat-plan/chat-plan.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
-
var _hoisted_1 = [
|
|
10
|
-
"id",
|
|
11
|
-
"aria-expanded",
|
|
12
|
-
"aria-controls"
|
|
13
|
-
];
|
|
14
|
-
var _hoisted_2 = ["id", "aria-labelledby"];
|
|
11
|
+
var _hoisted_1 = ["id", "aria-labelledby"];
|
|
15
12
|
var chat_plan_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
16
13
|
name: "DouChatPlan",
|
|
17
14
|
__name: "chat-plan",
|
|
18
15
|
props: {
|
|
19
16
|
items: { default: () => [] },
|
|
20
17
|
title: {},
|
|
18
|
+
collapsible: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: true
|
|
21
|
+
},
|
|
21
22
|
open: {
|
|
22
23
|
type: Boolean,
|
|
23
24
|
default: void 0
|
|
25
|
+
},
|
|
26
|
+
live: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: true
|
|
24
29
|
}
|
|
25
30
|
},
|
|
26
31
|
emits: ["update:open"],
|
|
@@ -31,64 +36,91 @@ var chat_plan_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
31
36
|
const { t } = useLocale();
|
|
32
37
|
const id = useId();
|
|
33
38
|
const inner = ref(true);
|
|
34
|
-
const open = computed(() => props.open ?? inner.value);
|
|
39
|
+
const open = computed(() => !props.collapsible || (props.open ?? inner.value));
|
|
35
40
|
function toggle() {
|
|
36
41
|
inner.value = !open.value;
|
|
37
42
|
emit("update:open", inner.value);
|
|
38
43
|
}
|
|
44
|
+
if (process.env.NODE_ENV !== "production") {
|
|
45
|
+
let warned = false;
|
|
46
|
+
watchEffect(() => {
|
|
47
|
+
if (warned || props.collapsible || props.open === void 0) return;
|
|
48
|
+
warned = true;
|
|
49
|
+
console.warn("[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.");
|
|
50
|
+
});
|
|
51
|
+
}
|
|
39
52
|
const finished = computed(() => props.items.filter((item) => item.status === "done" || item.status === "skipped").length);
|
|
40
|
-
const running = computed(() => props.items
|
|
53
|
+
const running = computed(() => planRunning(props.items, props.live));
|
|
41
54
|
return (_ctx, _cache) => {
|
|
42
55
|
return openBlock(), createElementBlock("div", { class: normalizeClass([
|
|
43
56
|
unref(ns).b(),
|
|
57
|
+
unref(ns).is("collapsible", __props.collapsible),
|
|
44
58
|
unref(ns).is("open", open.value),
|
|
45
59
|
unref(ns).is("running", running.value)
|
|
46
|
-
]) }, [
|
|
47
|
-
id: `${unref(id)}-
|
|
48
|
-
type: "button",
|
|
60
|
+
]) }, [(openBlock(), createBlock(resolveDynamicComponent(__props.collapsible ? "button" : "div"), {
|
|
61
|
+
id: `${unref(id)}-header`,
|
|
49
62
|
class: normalizeClass(unref(ns).e("header")),
|
|
50
|
-
"
|
|
51
|
-
"aria-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
type: __props.collapsible ? "button" : void 0,
|
|
64
|
+
"aria-expanded": __props.collapsible ? open.value : void 0,
|
|
65
|
+
"aria-controls": __props.collapsible ? `${unref(id)}-panel` : void 0,
|
|
66
|
+
onClick: _cache[0] || (_cache[0] = ($event) => __props.collapsible && toggle())
|
|
67
|
+
}, {
|
|
68
|
+
default: withCtx(() => [
|
|
69
|
+
createVNode(unref(ListChecksIcon), { class: normalizeClass(unref(ns).e("icon")) }, null, 8, ["class"]),
|
|
70
|
+
createElementVNode("span", { class: normalizeClass(unref(ns).e("title")) }, toDisplayString(__props.title ?? unref(t)("chat.plan")), 3),
|
|
71
|
+
createElementVNode("span", { class: normalizeClass(unref(ns).e("count")) }, toDisplayString(finished.value) + " / " + toDisplayString(__props.items.length), 3),
|
|
72
|
+
__props.collapsible ? (openBlock(), createBlock(unref(ChevronDownIcon), {
|
|
73
|
+
key: 0,
|
|
74
|
+
class: normalizeClass(unref(ns).e("arrow"))
|
|
75
|
+
}, null, 8, ["class"])) : createCommentVNode("", true)
|
|
76
|
+
]),
|
|
77
|
+
_: 1
|
|
78
|
+
}, 8, [
|
|
79
|
+
"id",
|
|
80
|
+
"class",
|
|
81
|
+
"type",
|
|
82
|
+
"aria-expanded",
|
|
83
|
+
"aria-controls"
|
|
84
|
+
])), createVNode(unref(DouCollapseTransition), null, {
|
|
59
85
|
default: withCtx(() => [withDirectives(createElementVNode("div", {
|
|
60
86
|
id: `${unref(id)}-panel`,
|
|
61
87
|
role: "region",
|
|
62
88
|
class: normalizeClass(unref(ns).e("panel")),
|
|
63
|
-
"aria-labelledby": `${unref(id)}-
|
|
89
|
+
"aria-labelledby": `${unref(id)}-header`
|
|
64
90
|
}, [createElementVNode("ol", { class: normalizeClass(unref(ns).e("list")) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item, index) => {
|
|
65
91
|
return openBlock(), createElementBlock("li", {
|
|
66
92
|
key: item.key ?? index,
|
|
67
93
|
class: normalizeClass([unref(ns).e("item"), unref(ns).is(item.status ?? "pending")])
|
|
68
|
-
}, [createElementVNode("span", { class: normalizeClass(unref(ns).e("mark")) }, [item.status === "running" ? (openBlock(), createBlock(
|
|
94
|
+
}, [createElementVNode("span", { class: normalizeClass(unref(ns).e("mark")) }, [item.status === "running" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.live ? (openBlock(), createBlock(unref(DouSpinner), {
|
|
69
95
|
key: 0,
|
|
70
96
|
size: "sm",
|
|
71
97
|
label: unref(t)("chat.stepRunning")
|
|
72
|
-
}, null, 8, ["label"])) :
|
|
98
|
+
}, null, 8, ["label"])) : (openBlock(), createBlock(unref(DouStatusDot), {
|
|
99
|
+
key: 1,
|
|
100
|
+
label: unref(t)("chat.stepRunning")
|
|
101
|
+
}, null, 8, ["label"]))], 64)) : item.status === "waiting" ? (openBlock(), createBlock(unref(ClockPauseIcon), {
|
|
73
102
|
key: 1,
|
|
103
|
+
label: unref(t)("chat.stepWaiting")
|
|
104
|
+
}, null, 8, ["label"])) : item.status === "done" ? (openBlock(), createBlock(unref(CheckIcon), {
|
|
105
|
+
key: 2,
|
|
74
106
|
label: unref(t)("chat.stepDone")
|
|
75
107
|
}, null, 8, ["label"])) : item.status === "error" ? (openBlock(), createBlock(unref(AlertCircleIcon), {
|
|
76
|
-
key:
|
|
108
|
+
key: 3,
|
|
77
109
|
label: unref(t)("chat.stepError")
|
|
78
110
|
}, null, 8, ["label"])) : (openBlock(), createElementBlock("span", {
|
|
79
|
-
key:
|
|
111
|
+
key: 4,
|
|
80
112
|
class: normalizeClass(unref(ns).e("dot"))
|
|
81
113
|
}, null, 2))], 2), createElementVNode("span", { class: normalizeClass(unref(ns).e("text")) }, [renderSlot(_ctx.$slots, "item", {
|
|
82
114
|
item,
|
|
83
115
|
index
|
|
84
|
-
}, () => [createElementVNode("span", { class: normalizeClass(unref(ns).e("label")) }, [createVNode(
|
|
116
|
+
}, () => [createElementVNode("span", { class: normalizeClass(unref(ns).e("label")) }, [createVNode(unref(DouShimmer), { active: __props.live && item.status === "running" }, {
|
|
85
117
|
default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
|
|
86
118
|
_: 2
|
|
87
119
|
}, 1032, ["active"])], 2), item.description ? (openBlock(), createElementBlock("span", {
|
|
88
120
|
key: 0,
|
|
89
121
|
class: normalizeClass(unref(ns).e("description"))
|
|
90
122
|
}, toDisplayString(item.description), 3)) : createCommentVNode("", true)])], 2)], 2);
|
|
91
|
-
}), 128))], 2)], 10,
|
|
123
|
+
}), 128))], 2)], 10, _hoisted_1), [[vShow, open.value]])]),
|
|
92
124
|
_: 3
|
|
93
125
|
})], 2);
|
|
94
126
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-plan.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","
|
|
1
|
+
{"version":3,"file":"chat-plan.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createBlock","_resolveDynamicComponent","_withCtx","_createVNode","_createElementVNode","_toDisplayString","_createCommentVNode","CollapseTransition","_withDirectives","_Fragment","_renderList","_renderSlot","_createTextVNode","_vShow"],"sources":["../../../src/components/chat-plan/chat-plan.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AlertCircleIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockPauseIcon,\n ListChecksIcon,\n} from '@dou-ui/icons'\nimport { computed, ref, useId, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { DouSpinner } from '../spinner'\nimport { DouStatusDot } from '../status-dot'\nimport { planRunning } from './chat-plan'\nimport type { ChatPlanEmits, ChatPlanProps, ChatPlanSlots } from './chat-plan'\n\ndefineOptions({ name: 'DouChatPlan' })\n\nconst props = withDefaults(defineProps<ChatPlanProps>(), {\n items: () => [],\n collapsible: true,\n open: undefined,\n live: true,\n})\nconst emit = defineEmits<ChatPlanEmits>()\ndefineSlots<ChatPlanSlots>()\n\nconst ns = useNamespace('chat-plan')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(true)\nconst open = computed(() => !props.collapsible || (props.open ?? inner.value))\nfunction toggle() {\n inner.value = !open.value\n emit('update:open', inner.value)\n}\n\n// Say once, while developing, that `open` does nothing on a plain panel.\n// The app's bundler replaces this, as for Vue's own warnings.\nif (process.env.NODE_ENV !== 'production') {\n let warned = false\n watchEffect(() => {\n if (warned || props.collapsible || props.open === undefined) return\n warned = true\n console.warn('[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.')\n })\n}\n\nconst finished = computed(\n () => props.items.filter((item) => item.status === 'done' || item.status === 'skipped').length,\n)\n// `live` false: the run has stopped, so a running step holds still\nconst running = computed(() => planRunning(props.items, props.live))\n</script>\n\n<template>\n <div\n :class=\"[\n ns.b(),\n ns.is('collapsible', collapsible),\n ns.is('open', open),\n ns.is('running', running),\n ]\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n :id=\"`${id}-header`\"\n :class=\"ns.e('header')\"\n :type=\"collapsible ? 'button' : undefined\"\n :aria-expanded=\"collapsible ? open : undefined\"\n :aria-controls=\"collapsible ? `${id}-panel` : undefined\"\n @click=\"collapsible && toggle()\"\n >\n <ListChecksIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">{{ title ?? t('chat.plan') }}</span>\n <span :class=\"ns.e('count')\">{{ finished }} / {{ items.length }}</span>\n <ChevronDownIcon v-if=\"collapsible\" :class=\"ns.e('arrow')\" />\n </component>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-header`\"\n >\n <ol :class=\"ns.e('list')\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.key ?? index\"\n :class=\"[ns.e('item'), ns.is(item.status ?? 'pending')]\"\n >\n <span :class=\"ns.e('mark')\">\n <template v-if=\"item.status === 'running'\">\n <DouSpinner v-if=\"live\" size=\"sm\" :label=\"t('chat.stepRunning')\" />\n <DouStatusDot v-else :label=\"t('chat.stepRunning')\" />\n </template>\n <ClockPauseIcon\n v-else-if=\"item.status === 'waiting'\"\n :label=\"t('chat.stepWaiting')\"\n />\n <CheckIcon v-else-if=\"item.status === 'done'\" :label=\"t('chat.stepDone')\" />\n <AlertCircleIcon v-else-if=\"item.status === 'error'\" :label=\"t('chat.stepError')\" />\n <span v-else :class=\"ns.e('dot')\" />\n </span>\n <span :class=\"ns.e('text')\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <span :class=\"ns.e('label')\">\n <DouShimmer :active=\"live && item.status === 'running'\">{{\n item.label\n }}</DouShimmer>\n </span>\n <span v-if=\"item.description\" :class=\"ns.e('description')\">\n {{ item.description }}\n </span>\n </slot>\n </span>\n </li>\n </ol>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import chat_plan_vue_vue_type_script_setup_true_lang_default from "./chat-plan.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
// src/components/chat-plan/chat-plan.vue
|
|
3
|
+
var chat_plan_default = chat_plan_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
export { chat_plan_default as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=chat-plan2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-plan2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-plan/chat-plan.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AlertCircleIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockPauseIcon,\n ListChecksIcon,\n} from '@dou-ui/icons'\nimport { computed, ref, useId, watchEffect } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { DouSpinner } from '../spinner'\nimport { DouStatusDot } from '../status-dot'\nimport { planRunning } from './chat-plan'\nimport type { ChatPlanEmits, ChatPlanProps, ChatPlanSlots } from './chat-plan'\n\ndefineOptions({ name: 'DouChatPlan' })\n\nconst props = withDefaults(defineProps<ChatPlanProps>(), {\n items: () => [],\n collapsible: true,\n open: undefined,\n live: true,\n})\nconst emit = defineEmits<ChatPlanEmits>()\ndefineSlots<ChatPlanSlots>()\n\nconst ns = useNamespace('chat-plan')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(true)\nconst open = computed(() => !props.collapsible || (props.open ?? inner.value))\nfunction toggle() {\n inner.value = !open.value\n emit('update:open', inner.value)\n}\n\n// Say once, while developing, that `open` does nothing on a plain panel.\n// The app's bundler replaces this, as for Vue's own warnings.\nif (process.env.NODE_ENV !== 'production') {\n let warned = false\n watchEffect(() => {\n if (warned || props.collapsible || props.open === undefined) return\n warned = true\n console.warn('[dou-ui] DouChatPlan: `open` is ignored when `collapsible` is false.')\n })\n}\n\nconst finished = computed(\n () => props.items.filter((item) => item.status === 'done' || item.status === 'skipped').length,\n)\n// `live` false: the run has stopped, so a running step holds still\nconst running = computed(() => planRunning(props.items, props.live))\n</script>\n\n<template>\n <div\n :class=\"[\n ns.b(),\n ns.is('collapsible', collapsible),\n ns.is('open', open),\n ns.is('running', running),\n ]\"\n >\n <component\n :is=\"collapsible ? 'button' : 'div'\"\n :id=\"`${id}-header`\"\n :class=\"ns.e('header')\"\n :type=\"collapsible ? 'button' : undefined\"\n :aria-expanded=\"collapsible ? open : undefined\"\n :aria-controls=\"collapsible ? `${id}-panel` : undefined\"\n @click=\"collapsible && toggle()\"\n >\n <ListChecksIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">{{ title ?? t('chat.plan') }}</span>\n <span :class=\"ns.e('count')\">{{ finished }} / {{ items.length }}</span>\n <ChevronDownIcon v-if=\"collapsible\" :class=\"ns.e('arrow')\" />\n </component>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-header`\"\n >\n <ol :class=\"ns.e('list')\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.key ?? index\"\n :class=\"[ns.e('item'), ns.is(item.status ?? 'pending')]\"\n >\n <span :class=\"ns.e('mark')\">\n <template v-if=\"item.status === 'running'\">\n <DouSpinner v-if=\"live\" size=\"sm\" :label=\"t('chat.stepRunning')\" />\n <DouStatusDot v-else :label=\"t('chat.stepRunning')\" />\n </template>\n <ClockPauseIcon\n v-else-if=\"item.status === 'waiting'\"\n :label=\"t('chat.stepWaiting')\"\n />\n <CheckIcon v-else-if=\"item.status === 'done'\" :label=\"t('chat.stepDone')\" />\n <AlertCircleIcon v-else-if=\"item.status === 'error'\" :label=\"t('chat.stepError')\" />\n <span v-else :class=\"ns.e('dot')\" />\n </span>\n <span :class=\"ns.e('text')\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <span :class=\"ns.e('label')\">\n <DouShimmer :active=\"live && item.status === 'running'\">{{\n item.label\n }}</DouShimmer>\n </span>\n <span v-if=\"item.description\" :class=\"ns.e('description')\">\n {{ item.description }}\n </span>\n </slot>\n </span>\n </li>\n </ol>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { withInstall } from "../../utils/install.js";
|
|
2
|
-
import chat_plan_default from "./chat-
|
|
2
|
+
import chat_plan_default from "./chat-plan2.js";
|
|
3
3
|
// src/components/chat-plan/index.ts
|
|
4
4
|
var DouChatPlan = withInstall(chat_plan_default);
|
|
5
5
|
export { DouChatPlan, DouChatPlan as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-reasoning.js","names":["_sfc_main"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport DouShimmer from '../shimmer
|
|
1
|
+
{"version":3,"file":"chat-reasoning.js","names":["_sfc_main"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":""}
|
package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import { DouShimmer } from "../shimmer/index.js";
|
|
4
|
+
import { DouCollapseTransition } from "../collapse/collapse-transition.js";
|
|
5
5
|
import { formatDuration } from "./format.js";
|
|
6
6
|
import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderSlot, toDisplayString, unref, useId, vShow, watch, withCtx, withDirectives } from "vue";
|
|
7
7
|
import { ChevronDownIcon, SparklesIcon } from "@dou-ui/icons";
|
|
@@ -81,12 +81,12 @@ var chat_reasoning_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
81
81
|
createElementVNode("span", { class: normalizeClass(unref(ns).e("title")) }, [renderSlot(_ctx.$slots, "title", {
|
|
82
82
|
thinking: __props.thinking,
|
|
83
83
|
duration: duration.value
|
|
84
|
-
}, () => [createVNode(
|
|
84
|
+
}, () => [createVNode(unref(DouShimmer), { active: __props.thinking }, {
|
|
85
85
|
default: withCtx(() => [createTextVNode(toDisplayString(label.value), 1)]),
|
|
86
86
|
_: 1
|
|
87
87
|
}, 8, ["active"])])], 2),
|
|
88
88
|
createVNode(unref(ChevronDownIcon), { class: normalizeClass(unref(ns).e("arrow")) }, null, 8, ["class"])
|
|
89
|
-
], 10, _hoisted_1), createVNode(unref(
|
|
89
|
+
], 10, _hoisted_1), createVNode(unref(DouCollapseTransition), null, {
|
|
90
90
|
default: withCtx(() => [withDirectives(createElementVNode("div", {
|
|
91
91
|
id: `${unref(id)}-panel`,
|
|
92
92
|
role: "region",
|
package/dist/components/chat-reasoning/chat-reasoning.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-reasoning.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","_renderSlot","
|
|
1
|
+
{"version":3,"file":"chat-reasoning.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","_renderSlot","_withCtx","_createTextVNode","_toDisplayString","CollapseTransition","_withDirectives","_vShow"],"sources":["../../../src/components/chat-reasoning/chat-reasoning.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ChevronDownIcon, SparklesIcon } from '@dou-ui/icons'\nimport { computed, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouCollapseTransition as CollapseTransition } from '../collapse/collapse-transition'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouShimmer } from '../shimmer'\nimport { formatDuration } from './format'\nimport type { ChatReasoningEmits, ChatReasoningProps, ChatReasoningSlots } from './chat-reasoning'\n\ndefineOptions({ name: 'DouChatReasoning' })\n\nconst props = withDefaults(defineProps<ChatReasoningProps>(), {\n thinking: false,\n open: undefined,\n autoCollapse: true,\n})\nconst emit = defineEmits<ChatReasoningEmits>()\ndefineSlots<ChatReasoningSlots>()\n\nconst ns = useNamespace('chat-reasoning')\nconst { t } = useLocale()\nconst id = useId()\n\nconst inner = ref(props.thinking)\nconst open = computed(() => props.open ?? inner.value)\nfunction setOpen(value: boolean) {\n inner.value = value\n emit('update:open', value)\n}\n\nlet startedAt = props.thinking ? Date.now() : 0\nconst measured = ref<number>()\nwatch(\n () => props.thinking,\n (thinking) => {\n if (thinking) {\n startedAt = Date.now()\n measured.value = undefined\n if (!open.value) setOpen(true)\n return\n }\n if (startedAt) measured.value = Math.round((Date.now() - startedAt) / 1000)\n startedAt = 0\n if (props.autoCollapse && open.value) setOpen(false)\n },\n)\n\nconst duration = computed(() => props.duration ?? measured.value)\nconst label = computed(() => {\n if (props.title) return props.title\n if (props.thinking) return t('chat.thinking')\n if (duration.value === undefined) return t('chat.reasoning')\n return formatDuration(duration.value, t)\n})\n</script>\n\n<template>\n <div :class=\"[ns.b(), ns.is('open', open), ns.is('thinking', thinking)]\">\n <button\n :id=\"`${id}-trigger`\"\n type=\"button\"\n :class=\"ns.e('trigger')\"\n :aria-expanded=\"open\"\n :aria-controls=\"`${id}-panel`\"\n @click=\"setOpen(!open)\"\n >\n <SparklesIcon :class=\"ns.e('icon')\" />\n <span :class=\"ns.e('title')\">\n <slot name=\"title\" :thinking=\"thinking\" :duration=\"duration\">\n <DouShimmer :active=\"thinking\">{{ label }}</DouShimmer>\n </slot>\n </span>\n <ChevronDownIcon :class=\"ns.e('arrow')\" />\n </button>\n <CollapseTransition>\n <div\n v-show=\"open\"\n :id=\"`${id}-panel`\"\n role=\"region\"\n :class=\"ns.e('panel')\"\n :aria-labelledby=\"`${id}-trigger`\"\n >\n <div :class=\"ns.e('content')\">\n <div :class=\"ns.e('text')\"><slot /></div>\n </div>\n </div>\n </CollapseTransition>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-citation.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-citation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport DouPopover from '../popover
|
|
1
|
+
{"version":3,"file":"chat-citation.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-citation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { checkedUrl, opensNewTab } from '../../utils/safe-url'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouPopover } from '../popover'\nimport { sourceSite } from './chat-sources'\nimport type { ChatCitationProps } from './chat-sources'\n\ndefineOptions({ name: 'DouChatCitation' })\n\nconst props = defineProps<ChatCitationProps>()\n\nconst ns = useNamespace('chat-citation')\nconst { t } = useLocale()\n// unsafe addresses such as `javascript:` are shown without a link\nconst href = computed(() => checkedUrl('DouChatCitation', props.source?.url))\nconst newTab = computed(() => !!href.value && opensNewTab(href.value))\nconst site = computed(() => (props.source ? sourceSite(props.source) : ''))\nconst label = computed(() =>\n props.source\n ? t('chat.citation', { index: props.index, title: props.source.title })\n : String(props.index),\n)\n\n/*\n * Hover shows the card; a tap opens it first, and the title in it is the\n * link (a second tap on the number follows it too). Focus from the\n * keyboard shows the card, and it goes when focus leaves for somewhere\n * other than the card.\n */\nconst open = ref(false)\nlet byFocus = false\nfunction onFocus(event: FocusEvent) {\n if (open.value || !(event.target as Element).matches(':focus-visible')) return\n byFocus = true\n open.value = true\n}\nfunction onOpen(value: boolean) {\n if (!value) byFocus = false\n}\nfunction onBlur(event: FocusEvent) {\n const to = event.relatedTarget as Element | null\n if (!byFocus || to?.closest(`.${ns.e('popover')}`)) return\n byFocus = false\n open.value = false\n}\n</script>\n\n<template>\n <DouPopover\n v-if=\"source\"\n trigger=\"hover\"\n placement=\"top\"\n :width=\"300\"\n :show-delay=\"150\"\n :class=\"ns.e('popover')\"\n v-model:open=\"open\"\n @update:open=\"onOpen\"\n >\n <component\n :is=\"href ? 'a' : 'span'\"\n :class=\"ns.b()\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n :tabindex=\"href ? undefined : 0\"\n :aria-label=\"label\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n >{{ index }}</component\n >\n <template #content>\n <span :class=\"ns.e('site')\">\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n {{ site }}\n </span>\n <a\n v-if=\"href\"\n :class=\"[ns.e('title'), ns.e('link')]\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n @blur=\"onBlur\"\n >{{ source.title }}</a\n >\n <span v-else :class=\"ns.e('title')\">{{ source.title }}</span>\n <span v-if=\"source.description\" :class=\"ns.e('description')\">{{ source.description }}</span>\n </template>\n </DouPopover>\n <span v-else :class=\"ns.b()\">{{ index }}</span>\n</template>\n"],"mappings":""}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
+
import { checkedUrl, opensNewTab } from "../../utils/safe-url.js";
|
|
4
|
+
import { DouPopover } from "../popover/index.js";
|
|
3
5
|
import { sourceSite } from "./chat-sources.js";
|
|
4
|
-
import
|
|
5
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
|
|
6
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, ref, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
|
|
6
7
|
import { GlobeIcon } from "@dou-ui/icons";
|
|
7
8
|
// src/components/chat-sources/chat-citation.vue?vue&type=script&setup=true&lang.ts
|
|
8
9
|
var _hoisted_1 = ["src"];
|
|
10
|
+
var _hoisted_2 = [
|
|
11
|
+
"href",
|
|
12
|
+
"target",
|
|
13
|
+
"rel"
|
|
14
|
+
];
|
|
9
15
|
var chat_citation_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
10
16
|
name: "DouChatCitation",
|
|
11
17
|
__name: "chat-citation",
|
|
@@ -17,19 +23,39 @@ var chat_citation_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
17
23
|
const props = __props;
|
|
18
24
|
const ns = useNamespace("chat-citation");
|
|
19
25
|
const { t } = useLocale();
|
|
26
|
+
const href = computed(() => checkedUrl("DouChatCitation", props.source?.url));
|
|
27
|
+
const newTab = computed(() => !!href.value && opensNewTab(href.value));
|
|
20
28
|
const site = computed(() => props.source ? sourceSite(props.source) : "");
|
|
21
29
|
const label = computed(() => props.source ? t("chat.citation", {
|
|
22
30
|
index: props.index,
|
|
23
31
|
title: props.source.title
|
|
24
32
|
}) : String(props.index));
|
|
33
|
+
const open = ref(false);
|
|
34
|
+
let byFocus = false;
|
|
35
|
+
function onFocus(event) {
|
|
36
|
+
if (open.value || !event.target.matches(":focus-visible")) return;
|
|
37
|
+
byFocus = true;
|
|
38
|
+
open.value = true;
|
|
39
|
+
}
|
|
40
|
+
function onOpen(value) {
|
|
41
|
+
if (!value) byFocus = false;
|
|
42
|
+
}
|
|
43
|
+
function onBlur(event) {
|
|
44
|
+
const to = event.relatedTarget;
|
|
45
|
+
if (!byFocus || to?.closest(`.${ns.e("popover")}`)) return;
|
|
46
|
+
byFocus = false;
|
|
47
|
+
open.value = false;
|
|
48
|
+
}
|
|
25
49
|
return (_ctx, _cache) => {
|
|
26
|
-
return __props.source ? (openBlock(), createBlock(
|
|
50
|
+
return __props.source ? (openBlock(), createBlock(unref(DouPopover), {
|
|
27
51
|
key: 0,
|
|
28
52
|
trigger: "hover",
|
|
29
53
|
placement: "top",
|
|
30
54
|
width: 300,
|
|
31
55
|
"show-delay": 150,
|
|
32
|
-
class: normalizeClass(unref(ns).e("popover"))
|
|
56
|
+
class: normalizeClass(unref(ns).e("popover")),
|
|
57
|
+
open: open.value,
|
|
58
|
+
"onUpdate:open": [_cache[0] || (_cache[0] = ($event) => open.value = $event), onOpen]
|
|
33
59
|
}, {
|
|
34
60
|
content: withCtx(() => [
|
|
35
61
|
createElementVNode("span", { class: normalizeClass(unref(ns).e("site")) }, [__props.source.icon ? (openBlock(), createElementBlock("img", {
|
|
@@ -41,23 +67,35 @@ var chat_citation_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
41
67
|
key: 1,
|
|
42
68
|
class: normalizeClass(unref(ns).e("favicon"))
|
|
43
69
|
}, null, 8, ["class"])), createTextVNode(" " + toDisplayString(site.value), 1)], 2),
|
|
44
|
-
|
|
45
|
-
__props.source.description ? (openBlock(), createElementBlock("span", {
|
|
70
|
+
href.value ? (openBlock(), createElementBlock("a", {
|
|
46
71
|
key: 0,
|
|
72
|
+
class: normalizeClass([unref(ns).e("title"), unref(ns).e("link")]),
|
|
73
|
+
href: href.value,
|
|
74
|
+
target: newTab.value ? "_blank" : void 0,
|
|
75
|
+
rel: newTab.value ? "noopener noreferrer" : void 0,
|
|
76
|
+
onBlur
|
|
77
|
+
}, toDisplayString(__props.source.title), 43, _hoisted_2)) : (openBlock(), createElementBlock("span", {
|
|
78
|
+
key: 1,
|
|
79
|
+
class: normalizeClass(unref(ns).e("title"))
|
|
80
|
+
}, toDisplayString(__props.source.title), 3)),
|
|
81
|
+
__props.source.description ? (openBlock(), createElementBlock("span", {
|
|
82
|
+
key: 2,
|
|
47
83
|
class: normalizeClass(unref(ns).e("description"))
|
|
48
84
|
}, toDisplayString(__props.source.description), 3)) : createCommentVNode("", true)
|
|
49
85
|
]),
|
|
50
|
-
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(
|
|
86
|
+
default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(href.value ? "a" : "span"), {
|
|
51
87
|
class: normalizeClass(unref(ns).b()),
|
|
52
|
-
href:
|
|
53
|
-
target:
|
|
54
|
-
rel:
|
|
55
|
-
tabindex:
|
|
56
|
-
"aria-label": label.value
|
|
88
|
+
href: href.value,
|
|
89
|
+
target: newTab.value ? "_blank" : void 0,
|
|
90
|
+
rel: newTab.value ? "noopener noreferrer" : void 0,
|
|
91
|
+
tabindex: href.value ? void 0 : 0,
|
|
92
|
+
"aria-label": label.value,
|
|
93
|
+
onFocus,
|
|
94
|
+
onBlur
|
|
57
95
|
}, {
|
|
58
96
|
default: withCtx(() => [createTextVNode(toDisplayString(__props.index), 1)]),
|
|
59
97
|
_: 1
|
|
60
|
-
},
|
|
98
|
+
}, 40, [
|
|
61
99
|
"class",
|
|
62
100
|
"href",
|
|
63
101
|
"target",
|
|
@@ -66,7 +104,7 @@ var chat_citation_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
66
104
|
"aria-label"
|
|
67
105
|
]))]),
|
|
68
106
|
_: 1
|
|
69
|
-
}, 8, ["class"])) : (openBlock(), createElementBlock("span", {
|
|
107
|
+
}, 8, ["class", "open"])) : (openBlock(), createElementBlock("span", {
|
|
70
108
|
key: 1,
|
|
71
109
|
class: normalizeClass(unref(ns).b())
|
|
72
110
|
}, toDisplayString(__props.index), 3));
|
package/dist/components/chat-sources/chat-citation.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-citation.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","
|
|
1
|
+
{"version":3,"file":"chat-citation.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_unref","_normalizeClass","_withCtx","_createElementVNode","_createElementBlock","_createTextVNode","_toDisplayString","_createCommentVNode","_resolveDynamicComponent"],"sources":["../../../src/components/chat-sources/chat-citation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { checkedUrl, opensNewTab } from '../../utils/safe-url'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouPopover } from '../popover'\nimport { sourceSite } from './chat-sources'\nimport type { ChatCitationProps } from './chat-sources'\n\ndefineOptions({ name: 'DouChatCitation' })\n\nconst props = defineProps<ChatCitationProps>()\n\nconst ns = useNamespace('chat-citation')\nconst { t } = useLocale()\n// unsafe addresses such as `javascript:` are shown without a link\nconst href = computed(() => checkedUrl('DouChatCitation', props.source?.url))\nconst newTab = computed(() => !!href.value && opensNewTab(href.value))\nconst site = computed(() => (props.source ? sourceSite(props.source) : ''))\nconst label = computed(() =>\n props.source\n ? t('chat.citation', { index: props.index, title: props.source.title })\n : String(props.index),\n)\n\n/*\n * Hover shows the card; a tap opens it first, and the title in it is the\n * link (a second tap on the number follows it too). Focus from the\n * keyboard shows the card, and it goes when focus leaves for somewhere\n * other than the card.\n */\nconst open = ref(false)\nlet byFocus = false\nfunction onFocus(event: FocusEvent) {\n if (open.value || !(event.target as Element).matches(':focus-visible')) return\n byFocus = true\n open.value = true\n}\nfunction onOpen(value: boolean) {\n if (!value) byFocus = false\n}\nfunction onBlur(event: FocusEvent) {\n const to = event.relatedTarget as Element | null\n if (!byFocus || to?.closest(`.${ns.e('popover')}`)) return\n byFocus = false\n open.value = false\n}\n</script>\n\n<template>\n <DouPopover\n v-if=\"source\"\n trigger=\"hover\"\n placement=\"top\"\n :width=\"300\"\n :show-delay=\"150\"\n :class=\"ns.e('popover')\"\n v-model:open=\"open\"\n @update:open=\"onOpen\"\n >\n <component\n :is=\"href ? 'a' : 'span'\"\n :class=\"ns.b()\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n :tabindex=\"href ? undefined : 0\"\n :aria-label=\"label\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n >{{ index }}</component\n >\n <template #content>\n <span :class=\"ns.e('site')\">\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n {{ site }}\n </span>\n <a\n v-if=\"href\"\n :class=\"[ns.e('title'), ns.e('link')]\"\n :href=\"href\"\n :target=\"newTab ? '_blank' : undefined\"\n :rel=\"newTab ? 'noopener noreferrer' : undefined\"\n @blur=\"onBlur\"\n >{{ source.title }}</a\n >\n <span v-else :class=\"ns.e('title')\">{{ source.title }}</span>\n <span v-if=\"source.description\" :class=\"ns.e('description')\">{{ source.description }}</span>\n </template>\n </DouPopover>\n <span v-else :class=\"ns.b()\">{{ index }}</span>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-sources.js","names":[],"sources":["../../../src/components/chat-sources/chat-sources.ts"],"sourcesContent":["export interface ChatSource {\n /** Unique within the list. Defaults to the position. */\n key?: string | number\n title: string\n
|
|
1
|
+
{"version":3,"file":"chat-sources.js","names":[],"sources":["../../../src/components/chat-sources/chat-sources.ts"],"sourcesContent":["export interface ChatSource {\n /** Unique within the list. Defaults to the position. */\n key?: string | number\n title: string\n /**\n * Where the source lives. Without it the source is shown but not linked.\n * Only http(s), mailto, tel and relative addresses become links; others,\n * such as `javascript:`, are shown without a link. http(s) and relative\n * links open in a new tab.\n */\n url?: string\n /** A short name for the site, e.g. `weather.sh.cn`. Defaults to the host of `url`. */\n site?: string\n /** A line of the text it was quoted from, shown in the citation preview. */\n description?: string\n /** A small image for the site, such as its favicon. */\n icon?: string\n}\n\nexport interface ChatSourcesProps {\n /** The sources, in citation order: the first is `[1]`. */\n items?: ChatSource[]\n /** Show at most this many, followed by a \"+N\" button that shows the rest. */\n max?: number\n}\n\nexport interface ChatSourcesSlots {\n /** Replaces the inside of each source. */\n item?: (props: { source: ChatSource; index: number }) => unknown\n}\n\nexport interface ChatCitationProps {\n /** The number shown, counted from 1. */\n index: number\n /** The source it points to. Shown in a preview on hover or focus. */\n source?: ChatSource\n}\n\n/** The host of a URL without `www.`, or an empty string when it does not parse. */\nexport function sourceSite(source: Pick<ChatSource, 'site' | 'url'>): string {\n if (source.site) return source.site\n if (!source.url) return ''\n try {\n return new URL(source.url).host.replace(/^www\\./, '')\n } catch {\n return ''\n }\n}\n"],"mappings":";;AAuCA,SAAgB,WAAW,QAAkD;CAC3E,IAAI,OAAO,MAAM,OAAO,OAAO;CAC/B,IAAI,CAAC,OAAO,KAAK,OAAO;CACxB,IAAI;EACF,OAAO,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,UAAU,EAAE;CACtD,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
+
import { checkedUrl, opensNewTab } from "../../utils/safe-url.js";
|
|
3
4
|
import { sourceSite } from "./chat-sources.js";
|
|
4
5
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
|
|
5
6
|
import { GlobeIcon } from "@dou-ui/icons";
|
|
@@ -21,6 +22,7 @@ var chat_sources_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
21
22
|
const expanded = ref(false);
|
|
22
23
|
const visible = computed(() => props.max === void 0 || expanded.value ? props.items : props.items.slice(0, props.max));
|
|
23
24
|
const hidden = computed(() => props.items.length - visible.value.length);
|
|
25
|
+
const hrefs = computed(() => visible.value.map((source) => checkedUrl("DouChatSources", source.url)));
|
|
24
26
|
return (_ctx, _cache) => {
|
|
25
27
|
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(ns).b()) }, [createElementVNode("ol", {
|
|
26
28
|
class: normalizeClass(unref(ns).e("list")),
|
|
@@ -29,11 +31,11 @@ var chat_sources_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
29
31
|
return openBlock(), createElementBlock("li", {
|
|
30
32
|
key: source.key ?? index,
|
|
31
33
|
class: normalizeClass(unref(ns).e("item"))
|
|
32
|
-
}, [(openBlock(), createBlock(resolveDynamicComponent(
|
|
34
|
+
}, [(openBlock(), createBlock(resolveDynamicComponent(hrefs.value[index] ? "a" : "span"), {
|
|
33
35
|
class: normalizeClass(unref(ns).e("link")),
|
|
34
|
-
href:
|
|
35
|
-
target:
|
|
36
|
-
rel:
|
|
36
|
+
href: hrefs.value[index],
|
|
37
|
+
target: hrefs.value[index] && unref(opensNewTab)(hrefs.value[index]) ? "_blank" : void 0,
|
|
38
|
+
rel: hrefs.value[index] && unref(opensNewTab)(hrefs.value[index]) ? "noopener noreferrer" : void 0,
|
|
37
39
|
title: source.title
|
|
38
40
|
}, {
|
|
39
41
|
default: withCtx(() => [renderSlot(_ctx.$slots, "item", {
|
package/dist/components/chat-sources/chat-sources.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-sources.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_Fragment","_renderList","_createBlock","_resolveDynamicComponent","_withCtx","_renderSlot","_toDisplayString","_createCommentVNode"],"sources":["../../../src/components/chat-sources/chat-sources.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { sourceSite } from './chat-sources'\nimport type { ChatSourcesProps, ChatSourcesSlots } from './chat-sources'\n\ndefineOptions({ name: 'DouChatSources' })\n\nconst props = withDefaults(defineProps<ChatSourcesProps>(), {\n items: () => [],\n})\ndefineSlots<ChatSourcesSlots>()\n\nconst ns = useNamespace('chat-sources')\nconst { t } = useLocale()\n\nconst expanded = ref(false)\nconst visible = computed(() =>\n props.max === undefined || expanded.value ? props.items : props.items.slice(0, props.max),\n)\nconst hidden = computed(() => props.items.length - visible.value.length)\n</script>\n\n<template>\n <div :class=\"ns.b()\">\n <ol :class=\"ns.e('list')\" :aria-label=\"t('chat.sources')\">\n <li v-for=\"(source, index) in visible\" :key=\"source.key ?? index\" :class=\"ns.e('item')\">\n <component\n :is=\"
|
|
1
|
+
{"version":3,"file":"chat-sources.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_Fragment","_renderList","_createBlock","_resolveDynamicComponent","_withCtx","_renderSlot","_toDisplayString","_createCommentVNode"],"sources":["../../../src/components/chat-sources/chat-sources.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { checkedUrl, opensNewTab } from '../../utils/safe-url'\nimport { useLocale } from '../config-provider/use-config'\nimport { sourceSite } from './chat-sources'\nimport type { ChatSourcesProps, ChatSourcesSlots } from './chat-sources'\n\ndefineOptions({ name: 'DouChatSources' })\n\nconst props = withDefaults(defineProps<ChatSourcesProps>(), {\n items: () => [],\n})\ndefineSlots<ChatSourcesSlots>()\n\nconst ns = useNamespace('chat-sources')\nconst { t } = useLocale()\n\nconst expanded = ref(false)\nconst visible = computed(() =>\n props.max === undefined || expanded.value ? props.items : props.items.slice(0, props.max),\n)\nconst hidden = computed(() => props.items.length - visible.value.length)\n// unsafe addresses such as `javascript:` are shown without a link\nconst hrefs = computed(() =>\n visible.value.map((source) => checkedUrl('DouChatSources', source.url)),\n)\n</script>\n\n<template>\n <div :class=\"ns.b()\">\n <ol :class=\"ns.e('list')\" :aria-label=\"t('chat.sources')\">\n <li v-for=\"(source, index) in visible\" :key=\"source.key ?? index\" :class=\"ns.e('item')\">\n <component\n :is=\"hrefs[index] ? 'a' : 'span'\"\n :class=\"ns.e('link')\"\n :href=\"hrefs[index]\"\n :target=\"hrefs[index] && opensNewTab(hrefs[index]) ? '_blank' : undefined\"\n :rel=\"hrefs[index] && opensNewTab(hrefs[index]) ? 'noopener noreferrer' : undefined\"\n :title=\"source.title\"\n >\n <slot name=\"item\" :source=\"source\" :index=\"index\">\n <span :class=\"ns.e('index')\">{{ index + 1 }}</span>\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n <span :class=\"ns.e('site')\">{{ sourceSite(source) || source.title }}</span>\n <span v-if=\"sourceSite(source)\" :class=\"ns.e('title')\">{{ source.title }}</span>\n </slot>\n </component>\n </li>\n <li v-if=\"hidden > 0\">\n <button type=\"button\" :class=\"[ns.e('link'), ns.e('more')]\" @click=\"expanded = true\">\n +{{ hidden }}\n </button>\n </li>\n </ol>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAWA,MAAM,QAAQ;EAKd,MAAM,KAAK,aAAa,cAAc;EACtC,MAAM,EAAE,MAAM,UAAU;EAExB,MAAM,WAAW,IAAI,KAAK;EAC1B,MAAM,UAAU,eACd,MAAM,QAAQ,KAAA,KAAa,SAAS,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,CAC1F;EACA,MAAM,SAAS,eAAe,MAAM,MAAM,SAAS,QAAQ,MAAM,MAAM;EAEvE,MAAM,QAAQ,eACZ,QAAQ,MAAM,KAAK,WAAW,WAAW,kBAAkB,OAAO,GAAG,CAAC,CACxE;;GAIE,OAAAA,UAAA,GAAAC,mBA0BM,OAAA,EA1BA,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,CAAA,E,IACfC,mBAwBK,MAAA;IAxBA,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA;IAAW,cAAYA,MAAA,CAAA,CAAC,CAAA,cAAA;G,KACtCH,UAAA,IAAA,GAAAC,mBAiBKI,UAAA,MAAAC,WAjByB,QAAA,QAAlB,QAAQ,UAAK;IAAzB,OAAAN,UAAA,GAAAC,mBAiBK,MAAA;KAjBmC,KAAK,OAAO,OAAO;KAAQ,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA;I,KAC5EH,UAAA,GAAAO,YAeYC,wBAdL,MAAA,MAAM,SAAK,MAAA,MAAA,GAAA;KACf,OAAKN,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA;KACX,MAAM,MAAA,MAAM;KACZ,QAAQ,MAAA,MAAM,UAAUA,MAAA,WAAA,CAAW,CAAC,MAAA,MAAM,MAAK,IAAA,WAAgB,KAAA;KAC/D,KAAK,MAAA,MAAM,UAAUA,MAAA,WAAA,CAAW,CAAC,MAAA,MAAM,MAAK,IAAA,wBAA6B,KAAA;KACzE,OAAO,OAAO;;KAEf,SAAAM,cAMO,CANPC,WAMO,KAAA,QAAA,QAAA;MANoB;MAAgB;KAA3C,SAMO;MALLN,mBAAmD,QAAA,EAA5C,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,OAAA,CAAA,EAAc,GAAAQ,gBAAA,QAAK,CAAA,GAAA,CAAA;MAC1B,OAAO,QAAlBX,UAAA,GAAAC,mBAA6E,OAAA;;OAApD,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,SAAA,CAAA;OAAc,KAAK,OAAO;OAAM,KAAI;M,6BACxEH,UAAA,GAAAO,YAA6CJ,MAAA,SAAA,GAAA;;OAA1B,OAAKD,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,SAAA,CAAA;;MAC9BC,mBAA2E,QAAA,EAApE,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA,EAAa,GAAAQ,gBAAAR,MAAA,UAAA,CAAU,CAAC,MAAM,KAAK,OAAO,KAAK,GAAA,CAAA;MACrDA,MAAA,UAAA,CAAU,CAAC,MAAM,KAA7BH,UAAA,GAAAC,mBAAgF,QAAA;;OAA/C,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,OAAA,CAAA;MAAc,GAAAQ,gBAAA,OAAO,KAAK,GAAA,CAAA,K;;;;;;;;;;G,WAIlE,OAAA,QAAM,KAAhBX,UAAA,GAAAC,mBAIK,MAAA,YAAA,CAHHG,mBAES,UAAA;IAFD,MAAK;IAAU,OAAKF,eAAA,CAAGC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,GAAUA,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA,CAAA;IAAY,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,SAAA,QAAQ;GAAS,GAAA,OAClFQ,gBAAG,OAAA,KAAM,GAAA,CAAA,C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-sources2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-sources.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { sourceSite } from './chat-sources'\nimport type { ChatSourcesProps, ChatSourcesSlots } from './chat-sources'\n\ndefineOptions({ name: 'DouChatSources' })\n\nconst props = withDefaults(defineProps<ChatSourcesProps>(), {\n items: () => [],\n})\ndefineSlots<ChatSourcesSlots>()\n\nconst ns = useNamespace('chat-sources')\nconst { t } = useLocale()\n\nconst expanded = ref(false)\nconst visible = computed(() =>\n props.max === undefined || expanded.value ? props.items : props.items.slice(0, props.max),\n)\nconst hidden = computed(() => props.items.length - visible.value.length)\n</script>\n\n<template>\n <div :class=\"ns.b()\">\n <ol :class=\"ns.e('list')\" :aria-label=\"t('chat.sources')\">\n <li v-for=\"(source, index) in visible\" :key=\"source.key ?? index\" :class=\"ns.e('item')\">\n <component\n :is=\"
|
|
1
|
+
{"version":3,"file":"chat-sources2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-sources/chat-sources.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { GlobeIcon } from '@dou-ui/icons'\nimport { computed, ref } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { checkedUrl, opensNewTab } from '../../utils/safe-url'\nimport { useLocale } from '../config-provider/use-config'\nimport { sourceSite } from './chat-sources'\nimport type { ChatSourcesProps, ChatSourcesSlots } from './chat-sources'\n\ndefineOptions({ name: 'DouChatSources' })\n\nconst props = withDefaults(defineProps<ChatSourcesProps>(), {\n items: () => [],\n})\ndefineSlots<ChatSourcesSlots>()\n\nconst ns = useNamespace('chat-sources')\nconst { t } = useLocale()\n\nconst expanded = ref(false)\nconst visible = computed(() =>\n props.max === undefined || expanded.value ? props.items : props.items.slice(0, props.max),\n)\nconst hidden = computed(() => props.items.length - visible.value.length)\n// unsafe addresses such as `javascript:` are shown without a link\nconst hrefs = computed(() =>\n visible.value.map((source) => checkedUrl('DouChatSources', source.url)),\n)\n</script>\n\n<template>\n <div :class=\"ns.b()\">\n <ol :class=\"ns.e('list')\" :aria-label=\"t('chat.sources')\">\n <li v-for=\"(source, index) in visible\" :key=\"source.key ?? index\" :class=\"ns.e('item')\">\n <component\n :is=\"hrefs[index] ? 'a' : 'span'\"\n :class=\"ns.e('link')\"\n :href=\"hrefs[index]\"\n :target=\"hrefs[index] && opensNewTab(hrefs[index]) ? '_blank' : undefined\"\n :rel=\"hrefs[index] && opensNewTab(hrefs[index]) ? 'noopener noreferrer' : undefined\"\n :title=\"source.title\"\n >\n <slot name=\"item\" :source=\"source\" :index=\"index\">\n <span :class=\"ns.e('index')\">{{ index + 1 }}</span>\n <img v-if=\"source.icon\" :class=\"ns.e('favicon')\" :src=\"source.icon\" alt=\"\" />\n <GlobeIcon v-else :class=\"ns.e('favicon')\" />\n <span :class=\"ns.e('site')\">{{ sourceSite(source) || source.title }}</span>\n <span v-if=\"sourceSite(source)\" :class=\"ns.e('title')\">{{ source.title }}</span>\n </slot>\n </component>\n </li>\n <li v-if=\"hidden > 0\">\n <button type=\"button\" :class=\"[ns.e('link'), ns.e('more')]\" @click=\"expanded = true\">\n +{{ hidden }}\n </button>\n </li>\n </ol>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { withInstall } from "../../utils/install.js";
|
|
2
|
-
import chat_sources_default from "./chat-sources2.js";
|
|
3
2
|
import chat_citation_default from "./chat-citation.js";
|
|
3
|
+
import chat_sources_default from "./chat-sources2.js";
|
|
4
4
|
// src/components/chat-sources/index.ts
|
|
5
5
|
var DouChatSources = withInstall(chat_sources_default);
|
|
6
6
|
var DouChatCitation = withInstall(chat_citation_default);
|