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.
- 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/card/card.js.map +1 -1
- package/dist/components/card/card.vue_vue_type_script_setup_true_lang.js +45 -19
- package/dist/components/card/card.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 +40 -17
- 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-input/chat-input.js.map +1 -1
- package/dist/components/chat-input/chat-input.vue_vue_type_script_setup_true_lang.js +75 -7
- package/dist/components/chat-input/chat-input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-input/chat-input2.js.map +1 -1
- package/dist/components/chat-list/chat-list.js +9 -4
- package/dist/components/chat-list/chat-list.js.map +1 -1
- package/dist/components/chat-list/chat-list.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/components/chat-list/chat-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chat-list/chat-list2.js +6 -0
- package/dist/components/chat-list/chat-list2.js.map +1 -0
- package/dist/components/chat-list/index.js +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 +119 -39
- 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 +6 -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-question/chat-question.js +6 -0
- package/dist/components/chat-question/chat-question.js.map +1 -0
- package/dist/components/chat-question/chat-question.vue_vue_type_script_setup_true_lang.js +116 -0
- package/dist/components/chat-question/chat-question.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/chat-question/index.js +7 -0
- package/dist/components/chat-question/index.js.map +1 -0
- package/dist/components/chat-question/style.d.ts +1 -0
- package/dist/components/chat-question/style.js +2 -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 +19 -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/config-provider/use-config.js +5 -2
- package/dist/components/config-provider/use-config.js.map +1 -1
- 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/dialog/functional.js +3 -7
- package/dist/components/dialog/functional.js.map +1 -1
- package/dist/components/dialog/index.js +4 -3
- package/dist/components/dialog/index.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/image.js.map +1 -1
- package/dist/components/image/image.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/image/image.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/link/link.js.map +1 -1
- package/dist/components/link/link.vue_vue_type_script_setup_true_lang.js +116 -31
- package/dist/components/link/link.vue_vue_type_script_setup_true_lang.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-actions.js +65 -0
- package/dist/components/menu/menu-actions.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 +52 -13
- 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 +33 -18
- 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 +60 -19
- package/dist/components/menu/menu-popup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/menu/menu.js +17 -13
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/menu.vue_vue_type_script_setup_true_lang.js +9 -2
- 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 +251 -38
- 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/toast/index.js +5 -4
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/store.js +1 -9
- package/dist/components/toast/store.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/components/virtual-list/virtual-list.js +7 -1
- package/dist/components/virtual-list/virtual-list.js.map +1 -1
- package/dist/components/virtual-list/virtual-list.vue_vue_type_script_setup_true_lang.js +2 -7
- package/dist/components/virtual-list/virtual-list.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/virtual-list/virtual-list2.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 +26 -19
- package/dist/index.js.map +1 -1
- package/dist/locale/en.js +14 -8
- package/dist/locale/en.js.map +1 -1
- package/dist/locale/zh-cn.js +14 -8
- package/dist/locale/zh-cn.js.map +1 -1
- package/dist/locale/zh-tw.js +14 -8
- package/dist/locale/zh-tw.js.map +1 -1
- package/dist/plugin.js +25 -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/card/card.d.ts +6 -1
- 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-input/chat-input.d.ts +33 -3
- package/dist/types/components/chat-input/chat-input.vue.d.ts +7 -0
- package/dist/types/components/chat-input/index.d.ts +20 -0
- package/dist/types/components/chat-list/chat-list.d.ts +19 -1
- package/dist/types/components/chat-list/index.d.ts +3 -3
- package/dist/types/components/chat-message/chat-message.d.ts +58 -5
- package/dist/types/components/chat-message/chat-message.vue.d.ts +7 -3
- package/dist/types/components/chat-message/index.d.ts +15 -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-question/chat-question.d.ts +43 -0
- package/dist/types/components/chat-question/chat-question.vue.d.ts +18 -0
- package/dist/types/components/chat-question/index.d.ts +43 -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/comment-thread/comment-thread.d.ts +6 -0
- package/dist/types/components/comment-thread/comment-thread.vue.d.ts +1 -0
- package/dist/types/components/comment-thread/index.d.ts +3 -0
- 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/dialog/functional.d.ts +0 -3
- package/dist/types/components/dialog/index.d.ts +1 -1
- 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/image/image.d.ts +9 -0
- package/dist/types/components/index.d.ts +3 -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/link/index.d.ts +3 -0
- package/dist/types/components/link/link.d.ts +24 -3
- package/dist/types/components/link/link.vue.d.ts +1 -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 +11 -3
- package/dist/types/components/menu/menu-actions.d.ts +26 -0
- package/dist/types/components/menu/menu-item.vue.d.ts +6 -0
- package/dist/types/components/menu/menu.d.ts +48 -5
- package/dist/types/components/menu/menu.vue.d.ts +4 -1
- package/dist/types/components/menubar/menubar.d.ts +1 -1
- package/dist/types/components/node-graph/layout.d.ts +42 -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/select/index.d.ts +3 -3
- package/dist/types/components/select/select.vue.d.ts +1 -1
- 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/toast/index.d.ts +0 -2
- package/dist/types/components/toast/store.d.ts +0 -4
- package/dist/types/components/virtual-list/index.d.ts +3 -3
- package/dist/types/components/virtual-list/virtual-list.d.ts +2 -0
- package/dist/types/composables/use-popup.d.ts +15 -5
- package/dist/types/index.d.ts +1 -0
- package/dist/types/locale/types.d.ts +20 -7
- package/dist/types/utils/app-context.d.ts +14 -0
- 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/app-context.js +22 -0
- package/dist/utils/app-context.js.map +1 -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
package/dist/components/chat-attachments/chat-attachments.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-attachments.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_Fragment","_renderList","_renderSlot","_createElementVNode","_createBlock","_resolveDynamicComponent","_toDisplayString","_normalizeStyle","_createCommentVNode","_createVNode"],"sources":["../../../src/components/chat-attachments/chat-attachments.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n CloseIcon,\n FileArchiveIcon,\n FileAudioIcon,\n FileCodeIcon,\n FileIcon,\n FileImageIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n FileVideoIcon,\n} from '@dou-ui/icons'\nimport type { Component } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { formatFileSize } from '../upload/upload'\nimport { attachmentKind, fileExtension } from './chat-attachments'\nimport type {\n ChatAttachment,\n ChatAttachmentKind,\n ChatAttachmentsEmits,\n ChatAttachmentsProps,\n ChatAttachmentsSlots,\n} from './chat-attachments'\n\ndefineOptions({ name: 'DouChatAttachments' })\n\nconst props = withDefaults(defineProps<ChatAttachmentsProps>(), {\n modelValue: () => [],\n removable: true,\n})\nconst emit = defineEmits<ChatAttachmentsEmits>()\ndefineSlots<ChatAttachmentsSlots>()\n\nconst ns = useNamespace('chat-attachments')\nconst { t } = useLocale()\n\nconst icons: Record<ChatAttachmentKind, Component> = {\n image: FileImageIcon,\n video: FileVideoIcon,\n audio: FileAudioIcon,\n archive: FileArchiveIcon,\n code: FileCodeIcon,\n spreadsheet: FileSpreadsheetIcon,\n text: FileTextIcon,\n file: FileIcon,\n}\n\nconst isThumb = (file: ChatAttachment) => !!file.url && attachmentKind(file) === 'image'\n\nfunction detail(file: ChatAttachment) {\n if (file.status === '
|
|
1
|
+
{"version":3,"file":"chat-attachments.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_Fragment","_renderList","_renderSlot","_createElementVNode","_createBlock","_resolveDynamicComponent","_toDisplayString","_normalizeStyle","_createCommentVNode","_createVNode"],"sources":["../../../src/components/chat-attachments/chat-attachments.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n CloseIcon,\n FileArchiveIcon,\n FileAudioIcon,\n FileCodeIcon,\n FileIcon,\n FileImageIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n FileVideoIcon,\n} from '@dou-ui/icons'\nimport type { Component } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useStatusCheck } from '../../utils/status-check'\nimport { useLocale } from '../config-provider/use-config'\nimport { formatFileSize } from '../upload/upload'\nimport { attachmentKind, fileExtension } from './chat-attachments'\nimport type {\n ChatAttachment,\n ChatAttachmentKind,\n ChatAttachmentsEmits,\n ChatAttachmentsProps,\n ChatAttachmentsSlots,\n} from './chat-attachments'\n\ndefineOptions({ name: 'DouChatAttachments' })\n\nconst props = withDefaults(defineProps<ChatAttachmentsProps>(), {\n modelValue: () => [],\n removable: true,\n})\nconst emit = defineEmits<ChatAttachmentsEmits>()\ndefineSlots<ChatAttachmentsSlots>()\n\nconst ns = useNamespace('chat-attachments')\nconst { t } = useLocale()\n\nconst icons: Record<ChatAttachmentKind, Component> = {\n image: FileImageIcon,\n video: FileVideoIcon,\n audio: FileAudioIcon,\n archive: FileArchiveIcon,\n code: FileCodeIcon,\n spreadsheet: FileSpreadsheetIcon,\n text: FileTextIcon,\n file: FileIcon,\n}\n\nuseStatusCheck(\n 'DouChatAttachments',\n () => (props.modelValue ?? []).map((file) => file.status),\n ['running', 'done', 'error'],\n { uploading: 'running', success: 'done' },\n)\n\nconst isThumb = (file: ChatAttachment) => !!file.url && attachmentKind(file) === 'image'\n\nfunction detail(file: ChatAttachment) {\n if (file.status === 'running') return `${t('chat.uploading')} ${Math.round(file.percent ?? 0)}%`\n if (file.status === 'error') return t('chat.uploadError')\n return [fileExtension(file.name), file.size === undefined ? '' : formatFileSize(file.size)]\n .filter(Boolean)\n .join(' · ')\n}\n\nfunction remove(file: ChatAttachment) {\n emit(\n 'update:modelValue',\n props.modelValue.filter((item) => item.uid !== file.uid),\n )\n emit('remove', file)\n}\n</script>\n\n<template>\n <ul :class=\"ns.b()\" :aria-label=\"t('chat.attachments')\">\n <li\n v-for=\"file in modelValue\"\n :key=\"file.uid\"\n :class=\"[ns.e('item'), ns.is('thumb', isThumb(file)), file.status ? ns.is(file.status) : '']\"\n >\n <slot name=\"item\" :file=\"file\" :remove=\"() => remove(file)\">\n <button\n type=\"button\"\n :class=\"ns.e('main')\"\n :title=\"file.name\"\n :aria-label=\"isThumb(file) ? file.name : undefined\"\n @click=\"emit('open', file)\"\n >\n <img v-if=\"isThumb(file)\" :class=\"ns.e('image')\" :src=\"file.url\" alt=\"\" />\n <template v-else>\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <component :is=\"icons[attachmentKind(file)]\" />\n </span>\n <span :class=\"ns.e('meta')\">\n <span :class=\"ns.e('name')\">{{ file.name }}</span>\n <span :class=\"ns.e('detail')\">{{ detail(file) }}</span>\n </span>\n </template>\n <span\n v-if=\"file.status === 'running'\"\n :class=\"ns.e('progress')\"\n role=\"progressbar\"\n :aria-label=\"file.name\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"Math.round(file.percent ?? 0)\"\n >\n <span :style=\"{ width: `${file.percent ?? 0}%` }\" />\n </span>\n </button>\n <button\n v-if=\"removable\"\n type=\"button\"\n :class=\"ns.e('remove')\"\n :aria-label=\"`${t('chat.remove')} ${file.name}`\"\n @click=\"remove(file)\"\n >\n <CloseIcon />\n </button>\n </slot>\n </li>\n </ul>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-attachments2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-attachments/chat-attachments.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n CloseIcon,\n FileArchiveIcon,\n FileAudioIcon,\n FileCodeIcon,\n FileIcon,\n FileImageIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n FileVideoIcon,\n} from '@dou-ui/icons'\nimport type { Component } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { formatFileSize } from '../upload/upload'\nimport { attachmentKind, fileExtension } from './chat-attachments'\nimport type {\n ChatAttachment,\n ChatAttachmentKind,\n ChatAttachmentsEmits,\n ChatAttachmentsProps,\n ChatAttachmentsSlots,\n} from './chat-attachments'\n\ndefineOptions({ name: 'DouChatAttachments' })\n\nconst props = withDefaults(defineProps<ChatAttachmentsProps>(), {\n modelValue: () => [],\n removable: true,\n})\nconst emit = defineEmits<ChatAttachmentsEmits>()\ndefineSlots<ChatAttachmentsSlots>()\n\nconst ns = useNamespace('chat-attachments')\nconst { t } = useLocale()\n\nconst icons: Record<ChatAttachmentKind, Component> = {\n image: FileImageIcon,\n video: FileVideoIcon,\n audio: FileAudioIcon,\n archive: FileArchiveIcon,\n code: FileCodeIcon,\n spreadsheet: FileSpreadsheetIcon,\n text: FileTextIcon,\n file: FileIcon,\n}\n\nconst isThumb = (file: ChatAttachment) => !!file.url && attachmentKind(file) === 'image'\n\nfunction detail(file: ChatAttachment) {\n if (file.status === '
|
|
1
|
+
{"version":3,"file":"chat-attachments2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-attachments/chat-attachments.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n CloseIcon,\n FileArchiveIcon,\n FileAudioIcon,\n FileCodeIcon,\n FileIcon,\n FileImageIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n FileVideoIcon,\n} from '@dou-ui/icons'\nimport type { Component } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useStatusCheck } from '../../utils/status-check'\nimport { useLocale } from '../config-provider/use-config'\nimport { formatFileSize } from '../upload/upload'\nimport { attachmentKind, fileExtension } from './chat-attachments'\nimport type {\n ChatAttachment,\n ChatAttachmentKind,\n ChatAttachmentsEmits,\n ChatAttachmentsProps,\n ChatAttachmentsSlots,\n} from './chat-attachments'\n\ndefineOptions({ name: 'DouChatAttachments' })\n\nconst props = withDefaults(defineProps<ChatAttachmentsProps>(), {\n modelValue: () => [],\n removable: true,\n})\nconst emit = defineEmits<ChatAttachmentsEmits>()\ndefineSlots<ChatAttachmentsSlots>()\n\nconst ns = useNamespace('chat-attachments')\nconst { t } = useLocale()\n\nconst icons: Record<ChatAttachmentKind, Component> = {\n image: FileImageIcon,\n video: FileVideoIcon,\n audio: FileAudioIcon,\n archive: FileArchiveIcon,\n code: FileCodeIcon,\n spreadsheet: FileSpreadsheetIcon,\n text: FileTextIcon,\n file: FileIcon,\n}\n\nuseStatusCheck(\n 'DouChatAttachments',\n () => (props.modelValue ?? []).map((file) => file.status),\n ['running', 'done', 'error'],\n { uploading: 'running', success: 'done' },\n)\n\nconst isThumb = (file: ChatAttachment) => !!file.url && attachmentKind(file) === 'image'\n\nfunction detail(file: ChatAttachment) {\n if (file.status === 'running') return `${t('chat.uploading')} ${Math.round(file.percent ?? 0)}%`\n if (file.status === 'error') return t('chat.uploadError')\n return [fileExtension(file.name), file.size === undefined ? '' : formatFileSize(file.size)]\n .filter(Boolean)\n .join(' · ')\n}\n\nfunction remove(file: ChatAttachment) {\n emit(\n 'update:modelValue',\n props.modelValue.filter((item) => item.uid !== file.uid),\n )\n emit('remove', file)\n}\n</script>\n\n<template>\n <ul :class=\"ns.b()\" :aria-label=\"t('chat.attachments')\">\n <li\n v-for=\"file in modelValue\"\n :key=\"file.uid\"\n :class=\"[ns.e('item'), ns.is('thumb', isThumb(file)), file.status ? ns.is(file.status) : '']\"\n >\n <slot name=\"item\" :file=\"file\" :remove=\"() => remove(file)\">\n <button\n type=\"button\"\n :class=\"ns.e('main')\"\n :title=\"file.name\"\n :aria-label=\"isThumb(file) ? file.name : undefined\"\n @click=\"emit('open', file)\"\n >\n <img v-if=\"isThumb(file)\" :class=\"ns.e('image')\" :src=\"file.url\" alt=\"\" />\n <template v-else>\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <component :is=\"icons[attachmentKind(file)]\" />\n </span>\n <span :class=\"ns.e('meta')\">\n <span :class=\"ns.e('name')\">{{ file.name }}</span>\n <span :class=\"ns.e('detail')\">{{ detail(file) }}</span>\n </span>\n </template>\n <span\n v-if=\"file.status === 'running'\"\n :class=\"ns.e('progress')\"\n role=\"progressbar\"\n :aria-label=\"file.name\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"Math.round(file.percent ?? 0)\"\n >\n <span :style=\"{ width: `${file.percent ?? 0}%` }\" />\n </span>\n </button>\n <button\n v-if=\"removable\"\n type=\"button\"\n :class=\"ns.e('remove')\"\n :aria-label=\"`${t('chat.remove')} ${file.name}`\"\n @click=\"remove(file)\"\n >\n <CloseIcon />\n </button>\n </slot>\n </li>\n </ul>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-confirm.js","names":["_sfc_main"],"sources":["../../../src/components/chat-confirm/chat-confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, CloseIcon, ShieldIcon } from '@dou-ui/icons'\nimport { computed, useId } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouButton } from '../button'\nimport { useLocale } from '../config-provider/use-config'\nimport type { ChatConfirmEmits, ChatConfirmProps, ChatConfirmSlots } from './chat-confirm'\n\ndefineOptions({ name: 'DouChatConfirm' })\n\nconst props = withDefaults(defineProps<ChatConfirmProps>(), {\n status: '
|
|
1
|
+
{"version":3,"file":"chat-confirm.js","names":["_sfc_main"],"sources":["../../../src/components/chat-confirm/chat-confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, CloseIcon, ShieldIcon, UndoIcon } from '@dou-ui/icons'\nimport { computed, nextTick, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useStatusCheck } from '../../utils/status-check'\nimport { DouButton } from '../button'\nimport { useLocale } from '../config-provider/use-config'\nimport type { ChatConfirmEmits, ChatConfirmProps, ChatConfirmSlots } from './chat-confirm'\n\ndefineOptions({ name: 'DouChatConfirm' })\n\nconst props = withDefaults(defineProps<ChatConfirmProps>(), {\n status: 'waiting',\n allowAlways: false,\n tone: 'neutral',\n})\nconst emit = defineEmits<ChatConfirmEmits>()\nconst slots = defineSlots<ChatConfirmSlots>()\n\nconst ns = useNamespace('chat-confirm')\nconst { t } = useLocale()\nconst id = useId()\n\nconst waiting = computed(() => props.status === 'waiting')\n// How each answered or withdrawn request reads once it has collapsed.\nconst outcomes = {\n approved: { icon: CheckIcon, text: 'chat.approved' },\n denied: { icon: CloseIcon, text: 'chat.denied' },\n withdrawn: { icon: UndoIcon, text: 'chat.withdrawn' },\n} as const\nconst outcome = computed(() =>\n Object.hasOwn(outcomes, props.status)\n ? outcomes[props.status as keyof typeof outcomes]\n : undefined,\n)\n\n// Answering or withdrawing removes the buttons; if focus was on one, keep it\n// on the card instead of losing it to the page. The watcher runs before the\n// DOM updates, while the focused button is still there to find.\nconst root = ref<HTMLElement>()\nwatch(\n () => props.status,\n (now, before) => {\n if (before !== 'waiting' || now === 'waiting') return\n if (!root.value?.contains(document.activeElement)) return\n void nextTick(() => root.value?.focus({ preventScroll: true }))\n },\n)\n\nconst statuses = ['waiting', 'approved', 'denied', 'withdrawn']\nuseStatusCheck('DouChatConfirm', () => [props.status], statuses, { pending: 'waiting' })\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"[ns.b(), ns.m(tone), ns.is(status)]\"\n role=\"group\"\n tabindex=\"-1\"\n :aria-labelledby=\"title || slots.title ? `${id}-title` : undefined\"\n >\n <div :class=\"ns.e('header')\">\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <slot name=\"icon\"><ShieldIcon /></slot>\n </span>\n <div :class=\"ns.e('text')\">\n <div v-if=\"title || slots.title\" :id=\"`${id}-title`\" :class=\"ns.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div v-if=\"description\" :class=\"ns.e('description')\">{{ description }}</div>\n </div>\n <!-- always there, so screen readers announce the outcome when it appears -->\n <span :class=\"ns.e('result')\" role=\"status\">\n <template v-if=\"outcome\">\n <component :is=\"outcome.icon\" aria-hidden=\"true\" />\n {{ t(outcome.text) }}\n </template>\n </span>\n </div>\n <div v-if=\"slots.default\" :class=\"ns.e('detail')\"><slot /></div>\n <div v-if=\"waiting\" :class=\"ns.e('actions')\">\n <DouButton size=\"sm\" variant=\"outline\" @click=\"emit('decide', 'deny')\">\n {{ denyText ?? t('chat.deny') }}\n </DouButton>\n <DouButton v-if=\"allowAlways\" size=\"sm\" variant=\"outline\" @click=\"emit('decide', 'always')\">\n {{ t('chat.allowAlways') }}\n </DouButton>\n <DouButton\n size=\"sm\"\n :tone=\"tone === 'danger' ? 'danger' : 'neutral'\"\n @click=\"emit('decide', 'approve')\"\n >\n {{ approveText ?? t('chat.approve') }}\n </DouButton>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
+
import { useStatusCheck } from "../../utils/status-check.js";
|
|
3
4
|
import { DouButton } from "../button/index.js";
|
|
4
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, useId, useSlots, withCtx } from "vue";
|
|
5
|
-
import { CheckIcon, CloseIcon, ShieldIcon } from "@dou-ui/icons";
|
|
5
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, normalizeClass, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useSlots, watch, withCtx } from "vue";
|
|
6
|
+
import { CheckIcon, CloseIcon, ShieldIcon, UndoIcon } from "@dou-ui/icons";
|
|
6
7
|
// src/components/chat-confirm/chat-confirm.vue?vue&type=script&setup=true&lang.ts
|
|
7
8
|
var _hoisted_1 = ["aria-labelledby"];
|
|
8
9
|
var _hoisted_2 = ["id"];
|
|
@@ -12,7 +13,7 @@ var chat_confirm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
12
13
|
props: {
|
|
13
14
|
title: {},
|
|
14
15
|
description: {},
|
|
15
|
-
status: { default: "
|
|
16
|
+
status: { default: "waiting" },
|
|
16
17
|
allowAlways: {
|
|
17
18
|
type: Boolean,
|
|
18
19
|
default: false
|
|
@@ -29,24 +30,53 @@ var chat_confirm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
29
30
|
const ns = useNamespace("chat-confirm");
|
|
30
31
|
const { t } = useLocale();
|
|
31
32
|
const id = useId();
|
|
32
|
-
const
|
|
33
|
-
const
|
|
33
|
+
const waiting = computed(() => props.status === "waiting");
|
|
34
|
+
const outcomes = {
|
|
35
|
+
approved: {
|
|
36
|
+
icon: CheckIcon,
|
|
37
|
+
text: "chat.approved"
|
|
38
|
+
},
|
|
39
|
+
denied: {
|
|
40
|
+
icon: CloseIcon,
|
|
41
|
+
text: "chat.denied"
|
|
42
|
+
},
|
|
43
|
+
withdrawn: {
|
|
44
|
+
icon: UndoIcon,
|
|
45
|
+
text: "chat.withdrawn"
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const outcome = computed(() => Object.hasOwn(outcomes, props.status) ? outcomes[props.status] : void 0);
|
|
49
|
+
const root = ref();
|
|
50
|
+
watch(() => props.status, (now, before) => {
|
|
51
|
+
if (before !== "waiting" || now === "waiting") return;
|
|
52
|
+
if (!root.value?.contains(document.activeElement)) return;
|
|
53
|
+
nextTick(() => root.value?.focus({ preventScroll: true }));
|
|
54
|
+
});
|
|
55
|
+
useStatusCheck("DouChatConfirm", () => [props.status], [
|
|
56
|
+
"waiting",
|
|
57
|
+
"approved",
|
|
58
|
+
"denied",
|
|
59
|
+
"withdrawn"
|
|
60
|
+
], { pending: "waiting" });
|
|
34
61
|
return (_ctx, _cache) => {
|
|
35
62
|
return openBlock(), createElementBlock("div", {
|
|
63
|
+
ref_key: "root",
|
|
64
|
+
ref: root,
|
|
36
65
|
class: normalizeClass([
|
|
37
66
|
unref(ns).b(),
|
|
38
67
|
unref(ns).m(__props.tone),
|
|
39
68
|
unref(ns).is(__props.status)
|
|
40
69
|
]),
|
|
41
70
|
role: "group",
|
|
42
|
-
"
|
|
71
|
+
tabindex: "-1",
|
|
72
|
+
"aria-labelledby": __props.title || slots.title ? `${unref(id)}-title` : void 0
|
|
43
73
|
}, [
|
|
44
74
|
createElementVNode("div", { class: normalizeClass(unref(ns).e("header")) }, [
|
|
45
75
|
createElementVNode("span", {
|
|
46
76
|
class: normalizeClass(unref(ns).e("icon")),
|
|
47
77
|
"aria-hidden": "true"
|
|
48
78
|
}, [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(unref(ShieldIcon))])], 2),
|
|
49
|
-
createElementVNode("div", { class: normalizeClass(unref(ns).e("text")) }, [
|
|
79
|
+
createElementVNode("div", { class: normalizeClass(unref(ns).e("text")) }, [__props.title || slots.title ? (openBlock(), createElementBlock("div", {
|
|
50
80
|
key: 0,
|
|
51
81
|
id: `${unref(id)}-title`,
|
|
52
82
|
class: normalizeClass(unref(ns).e("title"))
|
|
@@ -54,23 +84,16 @@ var chat_confirm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
|
|
|
54
84
|
key: 1,
|
|
55
85
|
class: normalizeClass(unref(ns).e("description"))
|
|
56
86
|
}, toDisplayString(__props.description), 3)) : createCommentVNode("", true)], 2),
|
|
57
|
-
|
|
58
|
-
key: 0,
|
|
87
|
+
createElementVNode("span", {
|
|
59
88
|
class: normalizeClass(unref(ns).e("result")),
|
|
60
89
|
role: "status"
|
|
61
|
-
}, [
|
|
62
|
-
key: 0,
|
|
63
|
-
"aria-hidden": "true"
|
|
64
|
-
})) : (openBlock(), createBlock(unref(CloseIcon), {
|
|
65
|
-
key: 1,
|
|
66
|
-
"aria-hidden": "true"
|
|
67
|
-
})), createTextVNode(" " + toDisplayString(__props.status === "approved" ? unref(t)("chat.approved") : unref(t)("chat.denied")), 1)], 2)) : createCommentVNode("", true)
|
|
90
|
+
}, [outcome.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [(openBlock(), createBlock(resolveDynamicComponent(outcome.value.icon), { "aria-hidden": "true" })), createTextVNode(" " + toDisplayString(unref(t)(outcome.value.text)), 1)], 64)) : createCommentVNode("", true)], 2)
|
|
68
91
|
], 2),
|
|
69
92
|
slots.default ? (openBlock(), createElementBlock("div", {
|
|
70
93
|
key: 0,
|
|
71
94
|
class: normalizeClass(unref(ns).e("detail"))
|
|
72
95
|
}, [renderSlot(_ctx.$slots, "default")], 2)) : createCommentVNode("", true),
|
|
73
|
-
|
|
96
|
+
waiting.value ? (openBlock(), createElementBlock("div", {
|
|
74
97
|
key: 1,
|
|
75
98
|
class: normalizeClass(unref(ns).e("actions"))
|
|
76
99
|
}, [
|
package/dist/components/chat-confirm/chat-confirm.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-confirm.vue_vue_type_script_setup_true_lang.js","names":["_useSlots","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_renderSlot","_createVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_createBlock","_withCtx"],"sources":["../../../src/components/chat-confirm/chat-confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, CloseIcon, ShieldIcon } from '@dou-ui/icons'\nimport { computed, useId } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { DouButton } from '../button'\nimport { useLocale } from '../config-provider/use-config'\nimport type { ChatConfirmEmits, ChatConfirmProps, ChatConfirmSlots } from './chat-confirm'\n\ndefineOptions({ name: 'DouChatConfirm' })\n\nconst props = withDefaults(defineProps<ChatConfirmProps>(), {\n status: '
|
|
1
|
+
{"version":3,"file":"chat-confirm.vue_vue_type_script_setup_true_lang.js","names":["_useSlots","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_renderSlot","_createVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_Fragment","_createBlock","_resolveDynamicComponent","_withCtx"],"sources":["../../../src/components/chat-confirm/chat-confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CheckIcon, CloseIcon, ShieldIcon, UndoIcon } from '@dou-ui/icons'\nimport { computed, nextTick, ref, useId, watch } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useStatusCheck } from '../../utils/status-check'\nimport { DouButton } from '../button'\nimport { useLocale } from '../config-provider/use-config'\nimport type { ChatConfirmEmits, ChatConfirmProps, ChatConfirmSlots } from './chat-confirm'\n\ndefineOptions({ name: 'DouChatConfirm' })\n\nconst props = withDefaults(defineProps<ChatConfirmProps>(), {\n status: 'waiting',\n allowAlways: false,\n tone: 'neutral',\n})\nconst emit = defineEmits<ChatConfirmEmits>()\nconst slots = defineSlots<ChatConfirmSlots>()\n\nconst ns = useNamespace('chat-confirm')\nconst { t } = useLocale()\nconst id = useId()\n\nconst waiting = computed(() => props.status === 'waiting')\n// How each answered or withdrawn request reads once it has collapsed.\nconst outcomes = {\n approved: { icon: CheckIcon, text: 'chat.approved' },\n denied: { icon: CloseIcon, text: 'chat.denied' },\n withdrawn: { icon: UndoIcon, text: 'chat.withdrawn' },\n} as const\nconst outcome = computed(() =>\n Object.hasOwn(outcomes, props.status)\n ? outcomes[props.status as keyof typeof outcomes]\n : undefined,\n)\n\n// Answering or withdrawing removes the buttons; if focus was on one, keep it\n// on the card instead of losing it to the page. The watcher runs before the\n// DOM updates, while the focused button is still there to find.\nconst root = ref<HTMLElement>()\nwatch(\n () => props.status,\n (now, before) => {\n if (before !== 'waiting' || now === 'waiting') return\n if (!root.value?.contains(document.activeElement)) return\n void nextTick(() => root.value?.focus({ preventScroll: true }))\n },\n)\n\nconst statuses = ['waiting', 'approved', 'denied', 'withdrawn']\nuseStatusCheck('DouChatConfirm', () => [props.status], statuses, { pending: 'waiting' })\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"[ns.b(), ns.m(tone), ns.is(status)]\"\n role=\"group\"\n tabindex=\"-1\"\n :aria-labelledby=\"title || slots.title ? `${id}-title` : undefined\"\n >\n <div :class=\"ns.e('header')\">\n <span :class=\"ns.e('icon')\" aria-hidden=\"true\">\n <slot name=\"icon\"><ShieldIcon /></slot>\n </span>\n <div :class=\"ns.e('text')\">\n <div v-if=\"title || slots.title\" :id=\"`${id}-title`\" :class=\"ns.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div v-if=\"description\" :class=\"ns.e('description')\">{{ description }}</div>\n </div>\n <!-- always there, so screen readers announce the outcome when it appears -->\n <span :class=\"ns.e('result')\" role=\"status\">\n <template v-if=\"outcome\">\n <component :is=\"outcome.icon\" aria-hidden=\"true\" />\n {{ t(outcome.text) }}\n </template>\n </span>\n </div>\n <div v-if=\"slots.default\" :class=\"ns.e('detail')\"><slot /></div>\n <div v-if=\"waiting\" :class=\"ns.e('actions')\">\n <DouButton size=\"sm\" variant=\"outline\" @click=\"emit('decide', 'deny')\">\n {{ denyText ?? t('chat.deny') }}\n </DouButton>\n <DouButton v-if=\"allowAlways\" size=\"sm\" variant=\"outline\" @click=\"emit('decide', 'always')\">\n {{ t('chat.allowAlways') }}\n </DouButton>\n <DouButton\n size=\"sm\"\n :tone=\"tone === 'danger' ? 'danger' : 'neutral'\"\n @click=\"emit('decide', 'approve')\"\n >\n {{ approveText ?? t('chat.approve') }}\n </DouButton>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,MAAM,QAAQ;EAKd,MAAM,OAAO;EACb,MAAM,QAAQA,SAAA;EAEd,MAAM,KAAK,aAAa,cAAc;EACtC,MAAM,EAAE,MAAM,UAAU;EACxB,MAAM,KAAK,MAAM;EAEjB,MAAM,UAAU,eAAe,MAAM,WAAW,SAAS;EAEzD,MAAM,WAAW;GACf,UAAU;IAAE,MAAM;IAAW,MAAM;GAAgB;GACnD,QAAQ;IAAE,MAAM;IAAW,MAAM;GAAc;GAC/C,WAAW;IAAE,MAAM;IAAU,MAAM;GAAiB;EACtD;EACA,MAAM,UAAU,eACd,OAAO,OAAO,UAAU,MAAM,MAAM,IAChC,SAAS,MAAM,UACf,KAAA,CACN;EAKA,MAAM,OAAO,IAAiB;EAC9B,YACQ,MAAM,SACX,KAAK,WAAW;GACf,IAAI,WAAW,aAAa,QAAQ,WAAW;GAC/C,IAAI,CAAC,KAAK,OAAO,SAAS,SAAS,aAAa,GAAG;GACnD,eAAoB,KAAK,OAAO,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;EAChE,CACF;EAGA,eAAe,wBAAwB,CAAC,MAAM,MAAM,GAAG;GADrC;GAAW;GAAY;GAAU;EACI,GAAU,EAAE,SAAS,UAAU,CAAC;;GAIrF,OAAAC,UAAA,GAAAC,mBAyCM,OAAA;IAxCA,SAAA;IAAJ,KAAI;IACH,OAAKC,eAAA;KAAGC,MAAA,EAAA,CAAE,CAAC,EAAC;KAAIA,MAAA,EAAA,CAAE,CAAC,EAAE,QAAA,IAAI;KAAGA,MAAA,EAAA,CAAE,CAAC,GAAG,QAAA,MAAM;IAAA,CAAA;IACzC,MAAK;IACL,UAAS;IACR,mBAAiB,QAAA,SAAS,MAAM,QAAK,GAAMA,MAAA,EAAA,EAAE,UAAW,KAAA;;IAEzDC,mBAiBM,OAAA,EAjBA,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,QAAA,CAAA,E;KACfC,mBAEO,QAAA;MAFA,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA;MAAU,eAAY;K,IACtCE,WAAuC,KAAA,QAAA,QAAA,CAAA,SAAA,CAArBC,YAAcH,MAAA,UAAA,CAAA,C;KAElCC,mBAKM,OAAA,EALA,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA,E,IACJ,QAAA,SAAS,MAAM,SAA1BH,UAAA,GAAAC,mBAEM,OAAA;;MAF4B,IAAE,GAAKE,MAAA,EAAA,EAAE;MAAW,OAAKD,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,OAAA,CAAA;K,IAC/DE,WAAqC,KAAA,QAAA,SAAA,CAAA,SAAA,CAAfE,gBAAAC,gBAAA,QAAA,KAAK,GAAA,CAAA,C,sDAElB,QAAA,eAAXR,UAAA,GAAAC,mBAA4E,OAAA;;MAAnD,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,aAAA,CAAA;KAAoB,GAAAK,gBAAA,QAAA,WAAW,GAAA,CAAA,K;KAGrEJ,mBAKO,QAAA;MALA,OAAKF,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,QAAA,CAAA;MAAY,MAAK;K,IACjB,QAAA,SAAhBH,UAAA,GAAAC,mBAGWS,UAAA,EAAA,KAAA,EAAA,GAAA,EAFTV,UAAA,GAAAW,YAAmDC,wBAAnC,QAAA,MAAQ,IAAI,GAAA,EAAE,eAAY,OAAM,CAAA,IAAGL,gBAAA,MACnDC,gBAAGL,MAAA,CAAA,CAAC,CAAC,QAAA,MAAQ,IAAI,CAAA,GAAA,CAAA,C;;IAIZ,MAAM,WAAjBH,UAAA,GAAAC,mBAAgE,OAAA;;KAArC,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,QAAA,CAAA;I,IAAYE,WAAQ,KAAA,QAAA,SAAA,C;IAC/C,QAAA,SAAXL,UAAA,GAAAC,mBAcM,OAAA;;KAde,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,EAAC,SAAA,CAAA;;KAC9BG,YAEYH,MAAA,SAAA,GAAA;MAFD,MAAK;MAAK,SAAQ;MAAW,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA,MAAA;;MACjD,SAAAU,cAAgC,CAA7BN,gBAAAC,gBAAA,QAAA,YAAYL,MAAA,CAAA,CAAC,CAAA,WAAA,CAAA,GAAA,CAAA,C;;;KAED,QAAA,eAAjBH,UAAA,GAAAW,YAEYR,MAAA,SAAA,GAAA;;MAFkB,MAAK;MAAK,SAAQ;MAAW,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA,QAAA;;MACpE,SAAAU,cAA2B,CAAxBN,gBAAAC,gBAAAL,MAAA,CAAA,CAAC,CAAA,kBAAA,CAAA,GAAA,CAAA,C;;;KAENG,YAMYH,MAAA,SAAA,GAAA;MALV,MAAK;MACJ,MAAM,QAAA,SAAI,WAAA,WAAA;MACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA,SAAA;;MAEZ,SAAAU,cAAsC,CAAnCN,gBAAAC,gBAAA,QAAA,eAAeL,MAAA,CAAA,CAAC,CAAA,cAAA,CAAA,GAAA,CAAA,C"}
|
package/dist/components/chat-context-meter/chat-context-meter.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useNamespace } from "../../utils/namespace.js";
|
|
2
2
|
import { useLocale } from "../config-provider/use-config.js";
|
|
3
|
-
import
|
|
3
|
+
import { DouTooltip } from "../tooltip/index.js";
|
|
4
4
|
import { compactNumber } from "./chat-context-meter.js";
|
|
5
5
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, normalizeClass, openBlock, toDisplayString, unref, withCtx } from "vue";
|
|
6
6
|
// src/components/chat-context-meter/chat-context-meter.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -40,7 +40,7 @@ var chat_context_meter_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
|
|
|
40
40
|
}));
|
|
41
41
|
const CIRCUMFERENCE = 2 * Math.PI * 6;
|
|
42
42
|
return (_ctx, _cache) => {
|
|
43
|
-
return openBlock(), createBlock(
|
|
43
|
+
return openBlock(), createBlock(unref(DouTooltip), { content: text.value }, {
|
|
44
44
|
default: withCtx(() => [createElementVNode("span", mergeProps(_ctx.$attrs, {
|
|
45
45
|
class: [unref(ns).b(), unref(ns).m(tone.value)],
|
|
46
46
|
role: "meter",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-context-meter.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","
|
|
1
|
+
{"version":3,"file":"chat-context-meter.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","_unref","_withCtx","_createElementVNode","_mergeProps","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode"],"sources":["../../../src/components/chat-context-meter/chat-context-meter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouTooltip } from '../tooltip'\nimport { compactNumber } from './chat-context-meter'\nimport type { ChatContextMeterProps } from './chat-context-meter'\n\ndefineOptions({ name: 'DouChatContextMeter', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<ChatContextMeterProps>(), {\n used: 0,\n total: 0,\n warnAt: 0.8,\n dangerAt: 0.95,\n showLabel: false,\n})\n\nconst ns = useNamespace('chat-context-meter')\nconst { t } = useLocale()\n\nconst share = computed(() =>\n props.total > 0 ? Math.min(Math.max(props.used / props.total, 0), 1) : 0,\n)\nconst percent = computed(() => Math.round(share.value * 100))\nconst tone = computed(() =>\n share.value >= props.dangerAt ? 'danger' : share.value >= props.warnAt ? 'warning' : 'neutral',\n)\nconst fmt = (value: number) => (props.format ?? compactNumber)(value)\nconst text = computed(() =>\n t('chat.context', { used: fmt(props.used), total: fmt(props.total), percent: percent.value }),\n)\n\n// r = 6 on a 16 box; the circumference drives the dash\nconst CIRCUMFERENCE = 2 * Math.PI * 6\n</script>\n\n<template>\n <DouTooltip :content=\"text\">\n <span\n v-bind=\"$attrs\"\n :class=\"[ns.b(), ns.m(tone)]\"\n role=\"meter\"\n tabindex=\"0\"\n :aria-label=\"t('chat.contextLabel')\"\n :aria-valuenow=\"percent\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuetext=\"text\"\n >\n <svg :class=\"ns.e('ring')\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle :class=\"ns.e('track')\" cx=\"8\" cy=\"8\" r=\"6\" />\n <circle\n :class=\"ns.e('bar')\"\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n :stroke-dasharray=\"`${CIRCUMFERENCE * share} ${CIRCUMFERENCE}`\"\n />\n </svg>\n <span v-if=\"showLabel\" :class=\"ns.e('label')\">{{ percent }}%</span>\n </span>\n </DouTooltip>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA,MAAM,QAAQ;EAQd,MAAM,KAAK,aAAa,oBAAoB;EAC5C,MAAM,EAAE,MAAM,UAAU;EAExB,MAAM,QAAQ,eACZ,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CACzE;EACA,MAAM,UAAU,eAAe,KAAK,MAAM,MAAM,QAAQ,GAAG,CAAC;EAC5D,MAAM,OAAO,eACX,MAAM,SAAS,MAAM,WAAW,WAAW,MAAM,SAAS,MAAM,SAAS,YAAY,SACvF;EACA,MAAM,OAAO,WAAmB,MAAM,UAAU,cAAA,CAAe,KAAK;EACpE,MAAM,OAAO,eACX,EAAE,gBAAgB;GAAE,MAAM,IAAI,MAAM,IAAI;GAAG,OAAO,IAAI,MAAM,KAAK;GAAG,SAAS,QAAQ;EAAM,CAAC,CAC9F;EAGA,MAAM,gBAAgB,IAAI,KAAK,KAAK;;GAIlC,OAAAC,UAAA,GAAAC,YAwBaC,MAAA,UAAA,GAAA,EAxBA,SAAS,KAAA,MAAI,GAAA;IACxB,SAAAC,cAsBO,CAtBPC,mBAsBO,QAtBPC,WACUN,KAqBH,QArBS;KACb,OAAK,CAAGG,MAAA,EAAA,CAAE,CAAC,EAAC,GAAIA,MAAA,EAAA,CAAE,CAAC,EAAE,KAAA,KAAI,CAAA;KAC1B,MAAK;KACL,UAAS;KACR,cAAYA,MAAA,CAAA,CAAC,CAAA,mBAAA;KACb,iBAAe,QAAA;KAChB,iBAAc;KACd,iBAAc;KACb,kBAAgB,KAAA;I,MAEjBF,UAAA,GAAAM,mBASM,OAAA;KATA,OAAKC,eAAEL,MAAA,EAAA,CAAE,CAAC,EAAC,MAAA,CAAA;KAAU,SAAQ;KAAY,eAAY;I,IACzDE,mBAAqD,UAAA;KAA5C,OAAKG,eAAEL,MAAA,EAAA,CAAE,CAAC,EAAC,OAAA,CAAA;KAAW,IAAG;KAAI,IAAG;KAAI,GAAE;I,aAC/CE,mBAME,UAAA;KALC,OAAKG,eAAEL,MAAA,EAAA,CAAE,CAAC,EAAC,KAAA,CAAA;KACZ,IAAG;KACH,IAAG;KACH,GAAE;KACD,oBAAgB,GAAK,gBAAgB,MAAA,MAAK,GAAI;I,gCAGvC,QAAA,aAAZF,UAAA,GAAAM,mBAAmE,QAAA;;KAA3C,OAAKC,eAAEL,MAAA,EAAA,CAAE,CAAC,EAAC,OAAA,CAAA;IAAc,GAAAM,gBAAA,QAAA,KAAO,IAAG,KAAC,CAAA,K"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-context-meter2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-context-meter/chat-context-meter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport DouTooltip from '../tooltip
|
|
1
|
+
{"version":3,"file":"chat-context-meter2.js","names":["_sfc_main"],"sources":["../../../src/components/chat-context-meter/chat-context-meter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useNamespace } from '../../utils/namespace'\nimport { useLocale } from '../config-provider/use-config'\nimport { DouTooltip } from '../tooltip'\nimport { compactNumber } from './chat-context-meter'\nimport type { ChatContextMeterProps } from './chat-context-meter'\n\ndefineOptions({ name: 'DouChatContextMeter', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<ChatContextMeterProps>(), {\n used: 0,\n total: 0,\n warnAt: 0.8,\n dangerAt: 0.95,\n showLabel: false,\n})\n\nconst ns = useNamespace('chat-context-meter')\nconst { t } = useLocale()\n\nconst share = computed(() =>\n props.total > 0 ? Math.min(Math.max(props.used / props.total, 0), 1) : 0,\n)\nconst percent = computed(() => Math.round(share.value * 100))\nconst tone = computed(() =>\n share.value >= props.dangerAt ? 'danger' : share.value >= props.warnAt ? 'warning' : 'neutral',\n)\nconst fmt = (value: number) => (props.format ?? compactNumber)(value)\nconst text = computed(() =>\n t('chat.context', { used: fmt(props.used), total: fmt(props.total), percent: percent.value }),\n)\n\n// r = 6 on a 16 box; the circumference drives the dash\nconst CIRCUMFERENCE = 2 * Math.PI * 6\n</script>\n\n<template>\n <DouTooltip :content=\"text\">\n <span\n v-bind=\"$attrs\"\n :class=\"[ns.b(), ns.m(tone)]\"\n role=\"meter\"\n tabindex=\"0\"\n :aria-label=\"t('chat.contextLabel')\"\n :aria-valuenow=\"percent\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuetext=\"text\"\n >\n <svg :class=\"ns.e('ring')\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle :class=\"ns.e('track')\" cx=\"8\" cy=\"8\" r=\"6\" />\n <circle\n :class=\"ns.e('bar')\"\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n :stroke-dasharray=\"`${CIRCUMFERENCE * share} ${CIRCUMFERENCE}`\"\n />\n </svg>\n <span v-if=\"showLabel\" :class=\"ns.e('label')\">{{ percent }}%</span>\n </span>\n </DouTooltip>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-input.js","names":[],"sources":["../../../src/components/chat-input/chat-input.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport type { Size } from '../../utils/types'\n\n/** An entry of the `/` command or `@` mention menu. */\nexport interface ChatInputOption {\n
|
|
1
|
+
{"version":3,"file":"chat-input.js","names":[],"sources":["../../../src/components/chat-input/chat-input.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport type { Size } from '../../utils/types'\n\n/** An entry of the `/` command or `@` mention menu. */\nexport interface ChatInputOption {\n /**\n * Handed back when picked; for a mention it is also what gets inserted\n * after `@`, and so matched too. A command's value is never shown and\n * is matched only when there is no `label`: it may be an id.\n */\n value: string\n /** Shown in the menu and matched against what is typed. Defaults to `value`. */\n label?: string\n /** More words that find it, e.g. other names or pinyin. */\n keywords?: string[]\n /** A quieter line after the label; matched too. */\n description?: string\n /** An icon component before the label. */\n icon?: Component\n disabled?: boolean\n}\n\n/** Whether an option matches what is typed after the `/` or `@`. */\nexport type ChatInputFilter = (\n option: ChatInputOption,\n query: string,\n trigger: '/' | '@',\n) => boolean\n/** `true` matches as described under `filter`, `false` lists every option as given. */\nexport type ChatInputFilterMode = boolean | ChatInputFilter\n\n/** `enter` sends on Enter (Shift+Enter breaks the line); `mod-enter` sends on Ctrl / ⌘ + Enter. */\nexport type ChatInputSubmitOn = 'enter' | 'mod-enter'\n\nexport interface ChatInputProps {\n /** The text, bound with `v-model`. */\n modelValue?: string\n /** Defaults to the locale's prompt. */\n placeholder?: string\n /** Which key sends. Keys pressed while an input method is composing never send. */\n submitOn?: ChatInputSubmitOn\n /**\n * A reply is being generated: the send button turns into a stop button.\n * Typing goes on meanwhile; once there is text, the button sends again\n * so the app can queue the message.\n */\n loading?: boolean\n /** Text size and padding; the corners and buttons follow. */\n size?: Size\n disabled?: boolean\n /** Rows shown when empty. */\n minRows?: number\n /** Rows to grow to before the text scrolls. */\n maxRows?: number\n /**\n * Whether sending is allowed. By default only when the text is not\n * blank; set it when, say, attachments alone may be sent.\n */\n canSubmit?: boolean\n /**\n * Commands offered when the text starts with `/`. Picking one removes\n * the typed `/…` and emits `command`.\n */\n commands?: ChatInputOption[]\n /**\n * Things to reference offered after `@`, e.g. files or people. Picking\n * one replaces the typed `@…` with `@value` and emits `mention`.\n */\n mentions?: ChatInputOption[]\n /**\n * How options match what is typed after the trigger. By default what\n * the person sees holds it, ignoring case: the label (or the value, when\n * there is no label), a mention's value, the description and `keywords`.\n * `false` lists them all as given, e.g. results already looked up with\n * `search`. Give `{ '@': false }` to set the `/` and `@` menus apart;\n * a trigger left out matches by default.\n */\n filter?: ChatInputFilterMode | { '/'?: ChatInputFilterMode; '@'?: ChatInputFilterMode }\n /** Wait this many ms after the last keystroke before emitting `search`. */\n searchDelay?: number\n /** Where to render the `/` and `@` menu; `false` keeps it in place. */\n teleport?: string | HTMLElement | false\n}\n\nexport interface ChatInputEmits {\n 'update:modelValue': [value: string]\n /** The send key or button was pressed, with the text. Clearing it is up to you. */\n submit: [value: string]\n /** The stop button was pressed while `loading`. */\n stop: []\n /** A command was picked from the `/` menu. */\n command: [option: ChatInputOption]\n /** Something was picked from the `@` menu. */\n mention: [option: ChatInputOption]\n /**\n * The text after a `/` or `@` changed (after `searchDelay`), and when one\n * is typed: look options up somewhere else and replace `commands` or\n * `mentions` with them, usually with `filter` set to `false`.\n */\n search: [query: string, trigger: '/' | '@']\n /** Files were pasted or dropped onto the input. */\n attach: [files: File[]]\n}\n\nexport interface ChatInputSlots {\n /** Above the text, e.g. `DouChatAttachments` or a quoted message. */\n header?: () => unknown\n /** The left of the bottom bar: buttons to attach files, pick a model and the like. */\n actions?: () => unknown\n /** Replaces the inside of each menu entry. */\n option?: (props: { option: ChatInputOption; trigger: '/' | '@' }) => unknown\n /** Replaces the send / stop button. */\n submit?: (props: {\n submit: () => void\n stop: () => void\n loading: boolean\n disabled: boolean\n }) => unknown\n}\n\nexport interface ChatInputExpose {\n /** The native `<textarea>`. */\n textarea: HTMLTextAreaElement | null\n focus: () => void\n blur: () => void\n /** Send as if the send key were pressed. */\n submit: () => void\n}\n\n/** The `/` or `@` token the caret is in, if any. */\nexport interface ChatInputToken {\n trigger: '/' | '@'\n /** Typed after the trigger. */\n query: string\n /** Where the trigger character is. */\n start: number\n /** Where the token ends (the caret). */\n end: number\n}\n\n/**\n * Find the token being typed at `caret`. A `/` counts only at the very\n * start of the text; an `@` at the start or after white space. The query\n * holds no white space.\n */\nexport function findToken(text: string, caret: number): ChatInputToken | null {\n let start = caret\n while (start > 0 && !/\\s/.test(text[start - 1]!)) start--\n const word = text.slice(start, caret)\n const trigger = word[0]\n if (trigger === '/' && text.slice(0, start).trim() === '')\n return { trigger, query: word.slice(1), start, end: caret }\n if (trigger === '@') return { trigger, query: word.slice(1), start, end: caret }\n return null\n}\n"],"mappings":";;;;;;AAiJA,SAAgB,UAAU,MAAc,OAAsC;CAC5E,IAAI,QAAQ;CACZ,OAAO,QAAQ,KAAK,CAAC,KAAK,KAAK,KAAK,QAAQ,EAAG,GAAG;CAClD,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK;CACpC,MAAM,UAAU,KAAK;CACrB,IAAI,YAAY,OAAO,KAAK,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,IACrD,OAAO;EAAE;EAAS,OAAO,KAAK,MAAM,CAAC;EAAG;EAAO,KAAK;CAAM;CAC5D,IAAI,YAAY,KAAK,OAAO;EAAE;EAAS,OAAO,KAAK,MAAM,CAAC;EAAG;EAAO,KAAK;CAAM;CAC/E,OAAO;AACT"}
|
|
@@ -8,7 +8,7 @@ import { useFormDisabled } from "../form/use-form-item.js";
|
|
|
8
8
|
import { useTeleport } from "../../utils/teleport.js";
|
|
9
9
|
import { DouButton } from "../button/index.js";
|
|
10
10
|
import { findToken } from "./chat-input.js";
|
|
11
|
-
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useAttrs, useId, useModel, useSlots, useTemplateRef, vModelText, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
11
|
+
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, getCurrentInstance, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, reactive, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useAttrs, useId, useModel, useSlots, useTemplateRef, vModelText, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
12
12
|
import { ArrowUpIcon, StopIcon } from "@dou-ui/icons";
|
|
13
13
|
// src/components/chat-input/chat-input.vue?vue&type=script&setup=true&lang.ts
|
|
14
14
|
var _hoisted_1 = [
|
|
@@ -23,6 +23,7 @@ var _hoisted_1 = [
|
|
|
23
23
|
];
|
|
24
24
|
var _hoisted_2 = [
|
|
25
25
|
"id",
|
|
26
|
+
"aria-busy",
|
|
26
27
|
"data-placement",
|
|
27
28
|
"data-dou-theme"
|
|
28
29
|
];
|
|
@@ -58,6 +59,15 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
58
59
|
},
|
|
59
60
|
commands: { default: () => [] },
|
|
60
61
|
mentions: { default: () => [] },
|
|
62
|
+
filter: {
|
|
63
|
+
type: [
|
|
64
|
+
Boolean,
|
|
65
|
+
Function,
|
|
66
|
+
Object
|
|
67
|
+
],
|
|
68
|
+
default: true
|
|
69
|
+
},
|
|
70
|
+
searchDelay: { default: 300 },
|
|
61
71
|
teleport: {
|
|
62
72
|
type: [String, Boolean],
|
|
63
73
|
default: void 0
|
|
@@ -72,6 +82,7 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
72
82
|
"stop",
|
|
73
83
|
"command",
|
|
74
84
|
"mention",
|
|
85
|
+
"search",
|
|
75
86
|
"attach"
|
|
76
87
|
], ["update:modelValue"]),
|
|
77
88
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -121,22 +132,71 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
121
132
|
const token = ref(null);
|
|
122
133
|
const dismissed = ref(null);
|
|
123
134
|
const active = ref(0);
|
|
135
|
+
let composing = false;
|
|
136
|
+
function onCaret(event) {
|
|
137
|
+
if (composing || event instanceof KeyboardEvent && isComposing(event)) return;
|
|
138
|
+
if (event?.isComposing) return;
|
|
139
|
+
readToken();
|
|
140
|
+
}
|
|
141
|
+
function onCompositionStart() {
|
|
142
|
+
composing = true;
|
|
143
|
+
}
|
|
144
|
+
function onCompositionEnd() {
|
|
145
|
+
composing = false;
|
|
146
|
+
readToken();
|
|
147
|
+
}
|
|
124
148
|
function readToken() {
|
|
125
149
|
const el = textareaRef.value;
|
|
126
150
|
if (!el) return;
|
|
127
|
-
const next = findToken(
|
|
151
|
+
const next = findToken(el.value, el.selectionStart ?? el.value.length);
|
|
128
152
|
const current = token.value;
|
|
129
153
|
if (next && current && next.trigger === current.trigger && next.start === current.start && next.end === current.end && next.query === current.query) return;
|
|
130
154
|
if (next?.start !== current?.start) dismissed.value = null;
|
|
131
155
|
token.value = next;
|
|
132
156
|
}
|
|
157
|
+
const filterOf = (trigger) => typeof props.filter === "object" ? props.filter[trigger] ?? true : props.filter;
|
|
133
158
|
const options = computed(() => {
|
|
134
159
|
const current = token.value;
|
|
135
160
|
if (!current || dismissed.value === current.start) return [];
|
|
136
161
|
const source = current.trigger === "/" ? props.commands : props.mentions;
|
|
162
|
+
const filter = filterOf(current.trigger);
|
|
163
|
+
if (filter === false || filter === true && !current.query) return source;
|
|
164
|
+
if (typeof filter === "function") return source.filter((option) => filter(option, current.query, current.trigger));
|
|
137
165
|
const query = current.query.toLowerCase();
|
|
138
|
-
|
|
166
|
+
const texts = (option) => [
|
|
167
|
+
option.label ?? option.value,
|
|
168
|
+
...current.trigger === "@" && option.label ? [option.value] : [],
|
|
169
|
+
option.description ?? "",
|
|
170
|
+
...option.keywords ?? []
|
|
171
|
+
];
|
|
172
|
+
return source.filter((option) => texts(option).some((text) => text.toLowerCase().includes(query)));
|
|
173
|
+
});
|
|
174
|
+
const instance = getCurrentInstance();
|
|
175
|
+
const listening = () => !!instance?.vnode.props?.onSearch;
|
|
176
|
+
const asked = {};
|
|
177
|
+
const answered = reactive({});
|
|
178
|
+
watch(() => props.commands, () => answered["/"] = asked["/"]);
|
|
179
|
+
watch(() => props.mentions, () => answered["@"] = asked["@"]);
|
|
180
|
+
const stale = computed(() => {
|
|
181
|
+
const current = token.value;
|
|
182
|
+
if (!current || filterOf(current.trigger) !== false || !listening()) return false;
|
|
183
|
+
const last = answered[current.trigger];
|
|
184
|
+
return !!last && (last.start !== current.start || last.query !== current.query);
|
|
185
|
+
});
|
|
186
|
+
let searchTimer;
|
|
187
|
+
watch(() => token.value ? `${token.value.start}${token.value.trigger}${token.value.query}` : null, (key) => {
|
|
188
|
+
clearTimeout(searchTimer);
|
|
189
|
+
const current = token.value;
|
|
190
|
+
if (key === null || !current || dismissed.value === current.start) return;
|
|
191
|
+
searchTimer = setTimeout(() => {
|
|
192
|
+
if (listening()) asked[current.trigger] = {
|
|
193
|
+
start: current.start,
|
|
194
|
+
query: current.query
|
|
195
|
+
};
|
|
196
|
+
emit("search", current.query, current.trigger);
|
|
197
|
+
}, props.searchDelay);
|
|
139
198
|
});
|
|
199
|
+
onBeforeUnmount(() => clearTimeout(searchTimer));
|
|
140
200
|
const menuOpen = computed(() => !disabled.value && options.value.length > 0);
|
|
141
201
|
const rootRef = useTemplateRef("root");
|
|
142
202
|
const menuRef = useTemplateRef("menu");
|
|
@@ -217,6 +277,7 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
217
277
|
}
|
|
218
278
|
if ((event.key === "Enter" || event.key === "Tab") && !isComposing(event)) {
|
|
219
279
|
event.preventDefault();
|
|
280
|
+
if (stale.value) return true;
|
|
220
281
|
pick(options.value[active.value]);
|
|
221
282
|
return true;
|
|
222
283
|
}
|
|
@@ -317,9 +378,11 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
317
378
|
"aria-controls": menuOpen.value ? `${unref(id)}-menu` : void 0,
|
|
318
379
|
"aria-activedescendant": menuOpen.value ? optionId(active.value) : void 0,
|
|
319
380
|
onKeydown,
|
|
320
|
-
onKeyup:
|
|
321
|
-
onClick:
|
|
322
|
-
onInput:
|
|
381
|
+
onKeyup: onCaret,
|
|
382
|
+
onClick: onCaret,
|
|
383
|
+
onInput: onCaret,
|
|
384
|
+
onCompositionstart: onCompositionStart,
|
|
385
|
+
onCompositionend: onCompositionEnd,
|
|
323
386
|
onBlur: _cache[1] || (_cache[1] = ($event) => token.value = null),
|
|
324
387
|
onPaste
|
|
325
388
|
}), null, 16, _hoisted_1), [[vModelText, model.value]]),
|
|
@@ -332,7 +395,12 @@ var chat_input_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
332
395
|
key: 0,
|
|
333
396
|
id: `${unref(id)}-menu`,
|
|
334
397
|
ref: "menu",
|
|
335
|
-
class: normalizeClass([
|
|
398
|
+
class: normalizeClass([
|
|
399
|
+
unref(ns).e("menu"),
|
|
400
|
+
"dou-floating",
|
|
401
|
+
unref(ns).is("stale", stale.value)
|
|
402
|
+
]),
|
|
403
|
+
"aria-busy": stale.value || void 0,
|
|
336
404
|
style: normalizeStyle(menuStyle.value),
|
|
337
405
|
"data-placement": unref(menuPlacement),
|
|
338
406
|
"data-dou-theme": unref(theme),
|