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