@veltra/desktop 1.3.10 → 1.5.0
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/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/action/action.js.map +1 -1
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/badge/style.d.ts +1 -1
- package/dist/components/batch-edit/batch-edit-form.js +8 -12
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +2 -1
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/di.js.map +1 -1
- package/dist/components/batch-edit/index.d.ts +2 -2
- package/dist/components/batch-edit/use-edit-state.js +11 -9
- package/dist/components/batch-edit/use-edit-state.js.map +1 -1
- package/dist/components/batch-edit/use-handlers.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/style.d.ts +1 -1
- package/dist/components/button/button-group.js.map +1 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/calendar/style.d.ts +1 -1
- package/dist/components/card/card-action.js.map +1 -1
- package/dist/components/card/card-content.js.map +1 -1
- package/dist/components/card/card-cover.js.map +1 -1
- package/dist/components/card/card-header.js.map +1 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/card/style.d.ts +1 -1
- package/dist/components/cascade/cascade-panel-item.js.map +1 -1
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/check-tag/check-tag.js.map +1 -1
- package/dist/components/check-tag/style.d.ts +1 -1
- package/dist/components/checkbox/checkbox-button.js.map +1 -1
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/code-editor/basic-setup.js +2 -2
- package/dist/components/code-editor/code-editor.js +2 -2
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/lang-loaders.js +1 -1
- package/dist/components/code-editor/shell-extension.js +2 -2
- package/dist/components/collapse/collapse-item.js +34 -11
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse.js.map +1 -1
- package/dist/components/collapse/style.d.ts +1 -1
- package/dist/components/collapse/style2.css +29 -51
- package/dist/components/condition-editor/components/condition-group.js.map +1 -1
- package/dist/components/condition-editor/components/condition-row.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.js.map +1 -1
- package/dist/components/condition-editor/index.d.ts +2 -2
- package/dist/components/contextmenu/contextmenu-item.js +13 -6
- package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-panel.js +12 -6
- package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
- package/dist/components/contextmenu/contextmenu.js.map +1 -1
- package/dist/components/contextmenu/di.d.ts +15 -0
- package/dist/components/contextmenu/index.d.ts +3 -2
- package/dist/components/contextmenu/style2.css +13 -0
- package/dist/components/date-panel/date-panel.js.map +1 -1
- package/dist/components/date-panel/headers/day.js.map +1 -1
- package/dist/components/date-panel/headers/month.js.map +1 -1
- package/dist/components/date-panel/headers/year.js.map +1 -1
- package/dist/components/date-panel/panels/day.js.map +1 -1
- package/dist/components/date-panel/panels/month.js.map +1 -1
- package/dist/components/date-panel/panels/year.js.map +1 -1
- package/dist/components/date-panel/style.d.ts +1 -1
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
- package/dist/components/dual-nav/dual-nav.js.map +1 -1
- package/dist/components/empty/empty.js.map +1 -1
- package/dist/components/empty/style.d.ts +1 -1
- package/dist/components/expression-editor/components/path-preview.js.map +1 -1
- package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
- package/dist/components/expression-editor/core/editor.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/expression-editor/style.d.ts +1 -1
- package/dist/components/file-picker/file-picker.js.map +1 -1
- package/dist/components/file-picker/style.d.ts +1 -1
- package/dist/components/file-viewer/file-viewer.js.map +1 -1
- package/dist/components/file-viewer/helper.js +1 -38
- package/dist/components/file-viewer/helper.js.map +1 -1
- package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
- package/dist/components/file-viewer/previewers/sheet-previewer.js +68 -37
- package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/text-previewer.js +2 -2
- package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
- package/dist/components/file-viewer/style.d.ts +1 -1
- package/dist/components/float-button/float-button.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/style.d.ts +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form-item/style.d.ts +1 -1
- package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
- package/dist/components/gantt-chart/style.d.ts +1 -1
- package/dist/components/grid/grid-item.js.map +1 -1
- package/dist/components/grid/grid.js +3 -2
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid/style.d.ts +1 -1
- package/dist/components/grid-input/grid-input.js.map +1 -1
- package/dist/components/grid-input/style.d.ts +1 -1
- package/dist/components/group-input/group-input.js.map +1 -1
- package/dist/components/group-nav/group-nav-item.js.map +1 -1
- package/dist/components/group-nav/group-nav.js.map +1 -1
- package/dist/components/group-nav/style.d.ts +1 -1
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/icon/style.d.ts +1 -1
- package/dist/components/index.d.ts +91 -156
- package/dist/components/index.js +4 -1
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/kbd/style.d.ts +1 -1
- package/dist/components/layout/layout-resizer.js.map +1 -1
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/layout/style.d.ts +1 -1
- package/dist/components/list/list-item.js.map +1 -1
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/loading/directive.js +2 -1
- package/dist/components/loading/directive.js.map +1 -1
- package/dist/components/loading/index.d.ts +2 -2
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/message/index.d.ts +2 -2
- package/dist/components/message/message-box.js.map +1 -1
- package/dist/components/message/message.js.map +1 -1
- package/dist/components/message/style.d.ts +1 -1
- package/dist/components/message-confirm/index.d.ts +2 -2
- package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
- package/dist/components/message-confirm/message-confirm.js.map +1 -1
- package/dist/components/message-confirm/style.d.ts +1 -1
- package/dist/components/message-confirm/style2.css +18 -0
- package/dist/components/multi-select/multi-select-option.js.map +1 -1
- package/dist/components/multi-select/multi-select.js +6 -3
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/nav/nav-icon.js.map +1 -1
- package/dist/components/nav/nav-item-collapsed.js.map +1 -1
- package/dist/components/nav/nav-item.js +4 -2
- package/dist/components/nav/nav-item.js.map +1 -1
- package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
- package/dist/components/nav/nav-sub.js.map +1 -1
- package/dist/components/nav/nav.js.map +1 -1
- package/dist/components/nav/style.d.ts +1 -1
- package/dist/components/node-render/style.d.ts +1 -1
- package/dist/components/notification/index.d.ts +2 -2
- package/dist/components/notification/notification-box.js +2 -2
- package/dist/components/notification/notification-box.js.map +1 -1
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/notification/style.d.ts +1 -1
- package/dist/components/number/number.js.map +1 -1
- package/dist/components/number/style.d.ts +1 -1
- package/dist/components/number-input/number-input.js +2 -1
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-range-input/number-range-input.js.map +1 -1
- package/dist/components/paginator/paginator.js.map +1 -1
- package/dist/components/palette/palette-alpha.js.map +1 -1
- package/dist/components/palette/palette-color-switch.js.map +1 -1
- package/dist/components/palette/palette-hue.js.map +1 -1
- package/dist/components/palette/palette-sv.js.map +1 -1
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/progress/style.d.ts +1 -1
- package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
- package/dist/components/progress-nodes/style.d.ts +1 -1
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.js +2 -1
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/style.d.ts +1 -1
- package/dist/components/rich-text-editor/toolbar.js +3 -4
- package/dist/components/rich-text-editor/toolbar.js.map +1 -1
- package/dist/components/scroll/scroll-bar.js.map +1 -1
- package/dist/components/scroll/scroll.js.map +1 -1
- package/dist/components/scroll/style.d.ts +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/slider/style.d.ts +1 -1
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/steps/style.d.ts +1 -1
- package/dist/components/steps/style2.css +14 -14
- package/dist/components/switch/style.d.ts +1 -1
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/index.d.ts +2 -2
- package/dist/components/table/node/col.d.ts +1 -49
- package/dist/components/table/table-body.js.map +1 -1
- package/dist/components/table/table-cell.js.map +1 -1
- package/dist/components/table/table-foot.js.map +1 -1
- package/dist/components/table/table-row.js +2 -1
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-check.js +2 -1
- package/dist/components/table/use-check.js.map +1 -1
- package/dist/components/table/use-columns.d.ts +1 -1
- package/dist/components/table/use-rows.js +2 -1
- package/dist/components/table/use-rows.js.map +1 -1
- package/dist/components/table-editor/table-editor.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.js +2 -1
- package/dist/components/tabs/tabs-horizontal.js.map +1 -1
- package/dist/components/tabs/tabs-vertical.js.map +1 -1
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/use-tabs-bar.js +10 -25
- package/dist/components/tabs/use-tabs-bar.js.map +1 -1
- package/dist/components/tag/style.d.ts +1 -1
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/text/style.d.ts +1 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/theme/theme.js +3 -2
- package/dist/components/theme/theme.js.map +1 -1
- package/dist/components/tip/style.d.ts +1 -1
- package/dist/components/tip/tip.js.map +1 -1
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/watermark/style.d.ts +1 -1
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/index.d.ts +93 -97
- package/dist/index.js +2 -1
- package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +3 -3
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +5 -4
- package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +2 -2
- package/dist/node_modules/.bun/{@codemirror_lang-markdown@6.5.1 → @codemirror_lang-markdown@6.5.2}/node_modules/@codemirror/lang-markdown/dist/index.js +4 -3
- package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js +2 -1
- package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js +4 -3
- package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/{@codemirror_state@6.7.0 → @codemirror_state@6.7.1}/node_modules/@codemirror/state/dist/index.js +13 -3
- package/dist/node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js +1 -1
- package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/{@codemirror_view@6.43.4 → @codemirror_view@6.43.8}/node_modules/@codemirror/view/dist/index.js +86 -64
- package/dist/node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@lezer_common@1.5.2/node_modules/@lezer/common/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_css@1.3.4/node_modules/@lezer/css/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js +1 -1
- package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js.map +1 -1
- package/dist/node_modules/.bun/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js.map +1 -1
- package/dist/types/collapse.d.ts +23 -4
- package/dist/types/contextmenu.d.ts +10 -4
- package/dist/types/index.d.ts +2 -8
- package/package.json +34 -30
- package/src/components/batch-edit/__test__/batch-edit.test.ts +199 -0
- package/src/components/batch-edit/batch-edit-form.vue +8 -8
- package/src/components/batch-edit/batch-edit.vue +2 -1
- package/src/components/batch-edit/di.ts +2 -0
- package/src/components/batch-edit/use-edit-state.ts +19 -12
- package/src/components/collapse/__test__/collapse.test.ts +178 -1
- package/src/components/collapse/collapse-item.vue +40 -12
- package/src/components/collapse/style.scss +26 -62
- package/src/components/contextmenu/__test__/contextmenu.test.ts +165 -0
- package/src/components/contextmenu/contextmenu-item.vue +7 -4
- package/src/components/contextmenu/contextmenu-panel.vue +7 -4
- package/src/components/contextmenu/index.ts +1 -0
- package/src/components/contextmenu/style.scss +16 -0
- package/src/components/file-viewer/helper.ts +0 -53
- package/src/components/file-viewer/previewers/sheet-previewer.vue +91 -46
- package/src/components/message-confirm/style.scss +19 -0
- package/src/components/notification/style.scss +16 -4
- package/src/components/radio-group/style.scss +1 -1
- package/src/components/slider/style.scss +1 -1
- package/src/components/steps/style.scss +2 -2
- package/src/components/tabs/use-tabs-bar.ts +15 -20
- package/src/types/collapse.ts +25 -3
- package/src/types/contextmenu.ts +10 -4
- package/dist/components/action/action-group.vue.d.ts +0 -25
- package/dist/components/action/action.vue.d.ts +0 -33
- package/dist/components/action/index.d.ts +0 -3
- package/dist/components/auto-complete/auto-complete.vue.d.ts +0 -41
- package/dist/components/auto-complete/index.d.ts +0 -2
- package/dist/components/badge/badge.vue.d.ts +0 -20
- package/dist/components/badge/index.d.ts +0 -2
- package/dist/components/batch-edit/batch-edit.vue.d.ts +0 -45
- package/dist/components/breadcrumb/breadcrumb.vue.d.ts +0 -24
- package/dist/components/breadcrumb/index.d.ts +0 -2
- package/dist/components/button/button-group.vue.d.ts +0 -19
- package/dist/components/button/button.vue.d.ts +0 -27
- package/dist/components/button/index.d.ts +0 -3
- package/dist/components/calendar/calendar.vue.d.ts +0 -17
- package/dist/components/calendar/index.d.ts +0 -2
- package/dist/components/card/card-action.vue.d.ts +0 -18
- package/dist/components/card/card-content.vue.d.ts +0 -18
- package/dist/components/card/card-cover.vue.d.ts +0 -8
- package/dist/components/card/card-header.vue.d.ts +0 -16
- package/dist/components/card/card.vue.d.ts +0 -18
- package/dist/components/card/index.d.ts +0 -6
- package/dist/components/cascade/cascade.vue.d.ts +0 -31
- package/dist/components/cascade/index.d.ts +0 -2
- package/dist/components/check-tag/check-tag.vue.d.ts +0 -22
- package/dist/components/check-tag/index.d.ts +0 -2
- package/dist/components/checkbox/checkbox-button.vue.d.ts +0 -35
- package/dist/components/checkbox/checkbox.vue.d.ts +0 -34
- package/dist/components/checkbox/index.d.ts +0 -3
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +0 -24
- package/dist/components/checkbox-group/index.d.ts +0 -2
- package/dist/components/code-editor/code-editor.vue.d.ts +0 -30
- package/dist/components/code-editor/index.d.ts +0 -2
- package/dist/components/collapse/collapse-item.vue.d.ts +0 -24
- package/dist/components/collapse/collapse.vue.d.ts +0 -27
- package/dist/components/collapse/index.d.ts +0 -3
- package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -15
- package/dist/components/contextmenu/contextmenu.vue.d.ts +0 -14
- package/dist/components/date-panel/date-panel.vue.d.ts +0 -17
- package/dist/components/date-panel/index.d.ts +0 -2
- package/dist/components/date-picker/date-picker.vue.d.ts +0 -18
- package/dist/components/date-picker/index.d.ts +0 -2
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +0 -18
- package/dist/components/date-range-picker/index.d.ts +0 -2
- package/dist/components/dialog/dialog.vue.d.ts +0 -43
- package/dist/components/dialog/index.d.ts +0 -2
- package/dist/components/drawer/drawer.vue.d.ts +0 -36
- package/dist/components/drawer/index.d.ts +0 -2
- package/dist/components/dropdown/dropdown.vue.d.ts +0 -30
- package/dist/components/dropdown/index.d.ts +0 -2
- package/dist/components/dual-nav/dual-nav.vue.d.ts +0 -15
- package/dist/components/dual-nav/index.d.ts +0 -2
- package/dist/components/empty/empty.vue.d.ts +0 -11
- package/dist/components/empty/index.d.ts +0 -2
- package/dist/components/expression-editor/expression-editor.vue.d.ts +0 -16
- package/dist/components/expression-editor/index.d.ts +0 -2
- package/dist/components/file-picker/file-picker.vue.d.ts +0 -27
- package/dist/components/file-picker/index.d.ts +0 -2
- package/dist/components/file-viewer/file-viewer.vue.d.ts +0 -40
- package/dist/components/file-viewer/index.d.ts +0 -2
- package/dist/components/file-viewer/sheet-parser.js +0 -46
- package/dist/components/file-viewer/sheet-parser.js.map +0 -1
- package/dist/components/float-button/float-button.vue.d.ts +0 -12
- package/dist/components/float-button/index.d.ts +0 -2
- package/dist/components/form/form.vue.d.ts +0 -23
- package/dist/components/form/index.d.ts +0 -2
- package/dist/components/form-item/form-item.vue.d.ts +0 -21
- package/dist/components/form-item/index.d.ts +0 -2
- package/dist/components/gantt-chart/gantt-chart.vue.d.ts +0 -8
- package/dist/components/gantt-chart/index.d.ts +0 -2
- package/dist/components/grid/grid-item.vue.d.ts +0 -20
- package/dist/components/grid/grid.vue.d.ts +0 -27
- package/dist/components/grid/index.d.ts +0 -3
- package/dist/components/grid-input/grid-input.vue.d.ts +0 -19
- package/dist/components/grid-input/index.d.ts +0 -2
- package/dist/components/group-input/group-input.vue.d.ts +0 -26
- package/dist/components/group-input/index.d.ts +0 -2
- package/dist/components/group-nav/group-nav.vue.d.ts +0 -12
- package/dist/components/group-nav/index.d.ts +0 -2
- package/dist/components/icon/icon.vue.d.ts +0 -18
- package/dist/components/icon/index.d.ts +0 -2
- package/dist/components/input/index.d.ts +0 -2
- package/dist/components/input/input.vue.d.ts +0 -50
- package/dist/components/kbd/kbd.vue.d.ts +0 -16
- package/dist/components/layout/index.d.ts +0 -2
- package/dist/components/layout/layout.vue.d.ts +0 -20
- package/dist/components/list/index.d.ts +0 -3
- package/dist/components/list/list-item.vue.d.ts +0 -16
- package/dist/components/list/list.vue.d.ts +0 -21
- package/dist/components/loading/loading.vue.d.ts +0 -11
- package/dist/components/message/message.vue.d.ts +0 -16
- package/dist/components/message-confirm/message-confirm.vue.d.ts +0 -19
- package/dist/components/multi-select/index.d.ts +0 -2
- package/dist/components/multi-select/multi-select.vue.d.ts +0 -48
- package/dist/components/multi-tree-select/index.d.ts +0 -2
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +0 -44
- package/dist/components/nav/index.d.ts +0 -4
- package/dist/components/nav/nav-item.vue.d.ts +0 -12
- package/dist/components/nav/nav-sub.vue.d.ts +0 -13
- package/dist/components/nav/nav.vue.d.ts +0 -19
- package/dist/components/notification/notification.vue.d.ts +0 -18
- package/dist/components/number/index.d.ts +0 -2
- package/dist/components/number/number.vue.d.ts +0 -11
- package/dist/components/number-input/index.d.ts +0 -2
- package/dist/components/number-input/number-input.vue.d.ts +0 -39
- package/dist/components/number-range-input/index.d.ts +0 -2
- package/dist/components/number-range-input/number-range-input.vue.d.ts +0 -36
- package/dist/components/paginator/index.d.ts +0 -2
- package/dist/components/paginator/paginator.vue.d.ts +0 -29
- package/dist/components/palette/index.d.ts +0 -2
- package/dist/components/palette/palette.vue.d.ts +0 -20
- package/dist/components/password-input/index.d.ts +0 -2
- package/dist/components/password-input/password-input.vue.d.ts +0 -30
- package/dist/components/pop-confirm/index.d.ts +0 -2
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +0 -33
- package/dist/components/progress/index.d.ts +0 -2
- package/dist/components/progress/progress.vue.d.ts +0 -25
- package/dist/components/progress-nodes/index.d.ts +0 -2
- package/dist/components/progress-nodes/progress-nodes.vue.d.ts +0 -36
- package/dist/components/radio/index.d.ts +0 -2
- package/dist/components/radio/radio.vue.d.ts +0 -31
- package/dist/components/radio-group/index.d.ts +0 -2
- package/dist/components/radio-group/radio-group.vue.d.ts +0 -26
- package/dist/components/rich-text-editor/index.d.ts +0 -2
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +0 -23
- package/dist/components/scroll/index.d.ts +0 -2
- package/dist/components/scroll/scroll.vue.d.ts +0 -28
- package/dist/components/select/index.d.ts +0 -2
- package/dist/components/select/select.vue.d.ts +0 -38
- package/dist/components/slider/index.d.ts +0 -2
- package/dist/components/slider/slider.vue.d.ts +0 -21
- package/dist/components/steps/index.d.ts +0 -2
- package/dist/components/steps/steps.vue.d.ts +0 -29
- package/dist/components/switch/index.d.ts +0 -2
- package/dist/components/switch/switch.vue.d.ts +0 -24
- package/dist/components/table/node/row.d.ts +0 -49
- package/dist/components/table/table.vue.d.ts +0 -54
- package/dist/components/table-editor/index.d.ts +0 -2
- package/dist/components/table-editor/table-editor.vue.d.ts +0 -12
- package/dist/components/tabs/index.d.ts +0 -4
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +0 -40
- package/dist/components/tabs/tabs-vertical.vue.d.ts +0 -39
- package/dist/components/tabs/tabs.vue.d.ts +0 -36
- package/dist/components/tag/index.d.ts +0 -2
- package/dist/components/tag/tag.vue.d.ts +0 -22
- package/dist/components/text/index.d.ts +0 -2
- package/dist/components/text/text.vue.d.ts +0 -10
- package/dist/components/textarea/index.d.ts +0 -2
- package/dist/components/textarea/textarea.vue.d.ts +0 -34
- package/dist/components/theme/index.d.ts +0 -2
- package/dist/components/theme/theme.vue.d.ts +0 -8
- package/dist/components/tip/index.d.ts +0 -2
- package/dist/components/tip/tip.vue.d.ts +0 -31
- package/dist/components/tree/di.d.ts +0 -12
- package/dist/components/tree/index.d.ts +0 -2
- package/dist/components/tree/tree.vue.d.ts +0 -40
- package/dist/components/tree-select/index.d.ts +0 -2
- package/dist/components/tree-select/tree-select.vue.d.ts +0 -48
- package/dist/components/watermark/index.d.ts +0 -2
- package/dist/components/watermark/watermark.vue.d.ts +0 -21
- package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js.map +0 -1
- package/dist/node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js.map +0 -1
- package/dist/node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js.map +0 -1
- package/src/components/file-viewer/sheet-parser.ts +0 -52
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest'
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
2
|
import { createApp, h, nextTick, ref } from 'vue'
|
|
3
3
|
|
|
4
4
|
import UCollapseItem from '../collapse-item.vue'
|
|
@@ -176,3 +176,180 @@ describe('Collapse', () => {
|
|
|
176
176
|
}
|
|
177
177
|
})
|
|
178
178
|
})
|
|
179
|
+
|
|
180
|
+
function mountStandaloneItem(props: Record<string, unknown> = {}) {
|
|
181
|
+
const host = document.createElement('div')
|
|
182
|
+
document.body.appendChild(host)
|
|
183
|
+
|
|
184
|
+
const model = ref(props.modelValue ?? false)
|
|
185
|
+
const onChange = vi.fn()
|
|
186
|
+
|
|
187
|
+
const app = createApp({
|
|
188
|
+
render() {
|
|
189
|
+
return h(
|
|
190
|
+
UCollapseItem,
|
|
191
|
+
{
|
|
192
|
+
...props,
|
|
193
|
+
modelValue: model.value,
|
|
194
|
+
'onUpdate:modelValue': (value: boolean) => {
|
|
195
|
+
model.value = value
|
|
196
|
+
},
|
|
197
|
+
onChange
|
|
198
|
+
},
|
|
199
|
+
() => 'Standalone content'
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
app.mount(host)
|
|
205
|
+
|
|
206
|
+
return {
|
|
207
|
+
host,
|
|
208
|
+
model,
|
|
209
|
+
onChange,
|
|
210
|
+
unmount() {
|
|
211
|
+
app.unmount()
|
|
212
|
+
host.remove()
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
describe('CollapseItem standalone', () => {
|
|
218
|
+
it('renders bordered card styles without UCollapse parent', async () => {
|
|
219
|
+
const { host, unmount } = mountStandaloneItem({ title: 'Standalone' })
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
await nextTick()
|
|
223
|
+
expect(host.querySelector('.u-collapse__item')).toBeTruthy()
|
|
224
|
+
expect(host.querySelector('.u-collapse__header')).toBeTruthy()
|
|
225
|
+
expect(host.querySelector('.u-collapse__title')?.textContent).toBe('Standalone')
|
|
226
|
+
} finally {
|
|
227
|
+
unmount()
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
it('defaults to collapsed when no v-model is provided', async () => {
|
|
232
|
+
const { host, model, unmount } = mountStandaloneItem({ title: 'Standalone' })
|
|
233
|
+
|
|
234
|
+
try {
|
|
235
|
+
await nextTick()
|
|
236
|
+
expect(model.value).toBe(false)
|
|
237
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeFalsy()
|
|
238
|
+
expect(host.querySelector('.u-collapse__content-wrapper')?.getAttribute('aria-hidden')).toBe(
|
|
239
|
+
'true'
|
|
240
|
+
)
|
|
241
|
+
} finally {
|
|
242
|
+
unmount()
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
it('respects v-model initial expanded state', async () => {
|
|
247
|
+
const { host, model, unmount } = mountStandaloneItem({ title: 'Standalone', modelValue: true })
|
|
248
|
+
|
|
249
|
+
try {
|
|
250
|
+
await nextTick()
|
|
251
|
+
expect(model.value).toBe(true)
|
|
252
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeTruthy()
|
|
253
|
+
} finally {
|
|
254
|
+
unmount()
|
|
255
|
+
}
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
it('toggles via header click and emits update:modelValue / change', async () => {
|
|
259
|
+
const { host, model, onChange, unmount } = mountStandaloneItem({ title: 'Standalone' })
|
|
260
|
+
|
|
261
|
+
try {
|
|
262
|
+
await nextTick()
|
|
263
|
+
const header = host.querySelector('.u-collapse__header') as HTMLElement
|
|
264
|
+
|
|
265
|
+
header.click()
|
|
266
|
+
await nextTick()
|
|
267
|
+
|
|
268
|
+
expect(model.value).toBe(true)
|
|
269
|
+
expect(onChange).toHaveBeenCalledWith(true)
|
|
270
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeTruthy()
|
|
271
|
+
|
|
272
|
+
header.click()
|
|
273
|
+
await nextTick()
|
|
274
|
+
|
|
275
|
+
expect(model.value).toBe(false)
|
|
276
|
+
expect(onChange).toHaveBeenLastCalledWith(false)
|
|
277
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeFalsy()
|
|
278
|
+
} finally {
|
|
279
|
+
unmount()
|
|
280
|
+
}
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
it('does not toggle when disabled', async () => {
|
|
284
|
+
const { host, model, onChange, unmount } = mountStandaloneItem({
|
|
285
|
+
title: 'Standalone',
|
|
286
|
+
disabled: true
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
try {
|
|
290
|
+
await nextTick()
|
|
291
|
+
;(host.querySelector('.u-collapse__header') as HTMLElement).click()
|
|
292
|
+
await nextTick()
|
|
293
|
+
|
|
294
|
+
expect(model.value).toBe(false)
|
|
295
|
+
expect(onChange).not.toHaveBeenCalled()
|
|
296
|
+
} finally {
|
|
297
|
+
unmount()
|
|
298
|
+
}
|
|
299
|
+
})
|
|
300
|
+
|
|
301
|
+
it('ignores v-model when nested inside UCollapse', async () => {
|
|
302
|
+
const host = document.createElement('div')
|
|
303
|
+
document.body.appendChild(host)
|
|
304
|
+
|
|
305
|
+
const standaloneModel = ref(true)
|
|
306
|
+
const collapseModel = ref<string[] | undefined>()
|
|
307
|
+
|
|
308
|
+
const app = createApp({
|
|
309
|
+
render() {
|
|
310
|
+
return h(
|
|
311
|
+
UCollapse,
|
|
312
|
+
{
|
|
313
|
+
modelValue: collapseModel.value,
|
|
314
|
+
defaultCollapseAll: true,
|
|
315
|
+
'onUpdate:modelValue': (value: string[] | undefined) => {
|
|
316
|
+
collapseModel.value = value
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
() =>
|
|
320
|
+
h(
|
|
321
|
+
UCollapseItem,
|
|
322
|
+
{
|
|
323
|
+
value: 'a',
|
|
324
|
+
title: 'Nested',
|
|
325
|
+
modelValue: standaloneModel.value,
|
|
326
|
+
'onUpdate:modelValue': (value: boolean) => {
|
|
327
|
+
standaloneModel.value = value
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
() => 'Nested content'
|
|
331
|
+
)
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
app.mount(host)
|
|
337
|
+
|
|
338
|
+
try {
|
|
339
|
+
await nextTick()
|
|
340
|
+
expect(collapseModel.value).toBeUndefined()
|
|
341
|
+
expect(standaloneModel.value).toBe(true)
|
|
342
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeFalsy()
|
|
343
|
+
|
|
344
|
+
;(host.querySelector('.u-collapse__header') as HTMLElement).click()
|
|
345
|
+
await nextTick()
|
|
346
|
+
|
|
347
|
+
expect(collapseModel.value).toEqual(['a'])
|
|
348
|
+
expect(standaloneModel.value).toBe(true)
|
|
349
|
+
expect(host.querySelector('.u-collapse__item.is-active')).toBeTruthy()
|
|
350
|
+
} finally {
|
|
351
|
+
app.unmount()
|
|
352
|
+
host.remove()
|
|
353
|
+
}
|
|
354
|
+
})
|
|
355
|
+
})
|
|
@@ -29,25 +29,38 @@
|
|
|
29
29
|
</template>
|
|
30
30
|
|
|
31
31
|
<script lang="ts" setup>
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
32
|
+
import { useModel } from '@veltra/compositions'
|
|
33
|
+
import { ArrowDown } from '@veltra/icons/normal'
|
|
34
|
+
import { bem, ExpandTransition } from '@veltra/utils'
|
|
34
35
|
import { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'
|
|
35
36
|
|
|
36
|
-
import type { CollapseItemProps } from '../../types'
|
|
37
|
+
import type { CollapseItemEmits, CollapseItemProps } from '../../types'
|
|
37
38
|
import { UIcon } from '../icon'
|
|
38
39
|
import { CollapseDIKey } from './di'
|
|
39
40
|
|
|
40
41
|
defineOptions({ name: 'UCollapseItem' })
|
|
41
42
|
|
|
42
|
-
const props = defineProps<CollapseItemProps>()
|
|
43
|
+
const props = withDefaults(defineProps<CollapseItemProps>(), { modelValue: false })
|
|
44
|
+
const emit = defineEmits<CollapseItemEmits>()
|
|
43
45
|
|
|
44
|
-
const context = inject(CollapseDIKey)
|
|
46
|
+
const context = inject(CollapseDIKey, undefined)
|
|
45
47
|
|
|
46
48
|
const cls = context?.cls ?? bem('collapse')
|
|
47
49
|
|
|
48
|
-
const
|
|
50
|
+
const standaloneModel = useModel<CollapseItemProps, 'modelValue'>({
|
|
51
|
+
props,
|
|
52
|
+
emit,
|
|
53
|
+
defaultValue: false
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
const isActive = computed(() => {
|
|
57
|
+
if (context) {
|
|
58
|
+
return props.value !== undefined && context.activeValues.value.includes(props.value)
|
|
59
|
+
}
|
|
60
|
+
return !!standaloneModel.value
|
|
61
|
+
})
|
|
49
62
|
|
|
50
|
-
const iconComponent = computed(() => context?.expandIcon.value ??
|
|
63
|
+
const iconComponent = computed(() => context?.expandIcon.value ?? props.expandIcon ?? ArrowDown)
|
|
51
64
|
|
|
52
65
|
const classList = computed(() => [
|
|
53
66
|
cls.e('item'),
|
|
@@ -61,17 +74,30 @@ const headerClassList = computed(() => [
|
|
|
61
74
|
bem.is('active', isActive.value)
|
|
62
75
|
])
|
|
63
76
|
|
|
77
|
+
const expandTransition =
|
|
78
|
+
context?.expandTransition ??
|
|
79
|
+
new ExpandTransition({ transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)' })
|
|
80
|
+
|
|
64
81
|
const handleClick = () => {
|
|
65
82
|
if (props.disabled) return
|
|
66
|
-
|
|
83
|
+
|
|
84
|
+
if (context) {
|
|
85
|
+
if (props.value === undefined) return
|
|
86
|
+
context.toggle(props.value)
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const next = !standaloneModel.value
|
|
91
|
+
standaloneModel.value = next
|
|
92
|
+
emit('change', next)
|
|
67
93
|
}
|
|
68
94
|
|
|
69
95
|
const wrapperEl = ref<HTMLElement>()
|
|
70
96
|
|
|
71
|
-
const { expandTransition } = context
|
|
72
|
-
|
|
73
97
|
onMounted(() => {
|
|
74
|
-
context
|
|
98
|
+
if (context && props.value !== undefined) {
|
|
99
|
+
context.register(props.value)
|
|
100
|
+
}
|
|
75
101
|
if (!wrapperEl.value) return
|
|
76
102
|
expandTransition.setExpanded(wrapperEl.value, isActive.value)
|
|
77
103
|
})
|
|
@@ -82,7 +108,9 @@ watch(isActive, (active) => {
|
|
|
82
108
|
})
|
|
83
109
|
|
|
84
110
|
onBeforeUnmount(() => {
|
|
85
|
-
context
|
|
111
|
+
if (context && props.value !== undefined) {
|
|
112
|
+
context.unregister(props.value)
|
|
113
|
+
}
|
|
86
114
|
if (!wrapperEl.value) return
|
|
87
115
|
expandTransition.cancel(wrapperEl.value)
|
|
88
116
|
})
|
|
@@ -3,16 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
$root-name: collapse;
|
|
5
5
|
|
|
6
|
-
// 与 tabs/menu 一致的 Material standard 缓动
|
|
7
6
|
$ease: cubic-bezier(0.4, 0, 0.2, 1);
|
|
8
7
|
$transition-fast: 0.18s $ease;
|
|
9
8
|
$transition-normal: 0.24s $ease;
|
|
10
|
-
$item-bg: fn.component-var(collapse, item-bg);
|
|
11
|
-
$item-hover-bg: fn.component-var(collapse, item-hover-bg);
|
|
12
|
-
$item-active-bg: fn.component-var(collapse, item-active-bg);
|
|
13
|
-
$header-active-bg: fn.component-var(collapse, header-active-bg);
|
|
14
|
-
$content-bg: fn.component-var(collapse, content-bg);
|
|
15
|
-
$active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(color, primary));
|
|
16
9
|
|
|
17
10
|
@include m.b($root-name) {
|
|
18
11
|
width: 100%;
|
|
@@ -22,44 +15,15 @@ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(c
|
|
|
22
15
|
|
|
23
16
|
// ===== Item =====
|
|
24
17
|
@include m.e(item) {
|
|
25
|
-
|
|
26
|
-
border-radius:
|
|
18
|
+
border: fn.use-var(border-muted);
|
|
19
|
+
border-radius: fn.use-var(radius, default);
|
|
20
|
+
background-color: fn.use-var(bg-color, middle);
|
|
27
21
|
overflow: hidden;
|
|
28
|
-
background-color: $item-bg;
|
|
29
|
-
transition: background-color $transition-fast;
|
|
30
|
-
|
|
31
|
-
&::before {
|
|
32
|
-
content: '';
|
|
33
|
-
position: absolute;
|
|
34
|
-
top: 0;
|
|
35
|
-
bottom: 0;
|
|
36
|
-
left: 0;
|
|
37
|
-
width: 3px;
|
|
38
|
-
background-color: fn.use-var(color, primary);
|
|
39
|
-
opacity: 0;
|
|
40
|
-
pointer-events: none;
|
|
41
|
-
transition: opacity $transition-fast;
|
|
42
|
-
z-index: 1;
|
|
43
|
-
}
|
|
44
22
|
|
|
45
23
|
& + #{fn.bem($root-name, item)} {
|
|
46
24
|
margin-top: fn.use-var(gap, default);
|
|
47
25
|
}
|
|
48
26
|
|
|
49
|
-
@include m.is-not(disabled) {
|
|
50
|
-
&:hover {
|
|
51
|
-
background-color: $item-hover-bg;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@include m.is(active) {
|
|
56
|
-
background-color: $item-active-bg;
|
|
57
|
-
|
|
58
|
-
&::before {
|
|
59
|
-
opacity: 1;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
27
|
@include m.is(disabled) {
|
|
64
28
|
opacity: 0.55;
|
|
65
29
|
}
|
|
@@ -70,43 +34,46 @@ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(c
|
|
|
70
34
|
position: relative;
|
|
71
35
|
display: flex;
|
|
72
36
|
align-items: center;
|
|
73
|
-
gap:
|
|
37
|
+
gap: fn.use-var(gap, small);
|
|
38
|
+
padding: fn.use-var(gap, small) fn.use-var(gap, default);
|
|
74
39
|
cursor: pointer;
|
|
75
40
|
font-weight: 500;
|
|
76
41
|
letter-spacing: 0.01em;
|
|
77
|
-
color: fn.
|
|
42
|
+
color: fn.use-var(text-color, main);
|
|
78
43
|
user-select: none;
|
|
79
44
|
outline: none;
|
|
80
|
-
transition:
|
|
81
|
-
|
|
82
|
-
background-color $transition-fast;
|
|
83
|
-
border-radius: inherit;
|
|
45
|
+
transition: background-color $transition-fast;
|
|
46
|
+
border-radius: 0;
|
|
84
47
|
|
|
85
48
|
&:focus-visible {
|
|
86
49
|
box-shadow: inset 0 0 0 2px fn.use-var(color, primary);
|
|
87
50
|
}
|
|
88
51
|
|
|
52
|
+
@include m.is-not(disabled) {
|
|
53
|
+
&:hover {
|
|
54
|
+
background-color: fn.use-var(bg-color, hover);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
89
58
|
@include m.is(disabled) {
|
|
90
59
|
cursor: not-allowed;
|
|
91
60
|
color: fn.use-var(text-color, placeholder);
|
|
92
61
|
}
|
|
93
62
|
|
|
94
63
|
@include m.is(active) {
|
|
95
|
-
|
|
96
|
-
color: $active-title-color;
|
|
97
|
-
background-color: $header-active-bg;
|
|
98
|
-
border-bottom-right-radius: 0;
|
|
99
|
-
border-bottom-left-radius: 0;
|
|
64
|
+
background-color: fn.use-var(bg-color, hover);
|
|
100
65
|
|
|
101
66
|
#{fn.bem($root-name, icon)} {
|
|
102
|
-
transform: rotate(
|
|
103
|
-
color: $active-title-color;
|
|
67
|
+
transform: rotate(180deg);
|
|
104
68
|
}
|
|
105
69
|
}
|
|
106
70
|
}
|
|
107
71
|
|
|
108
72
|
// ===== Title =====
|
|
109
73
|
@include m.e(title) {
|
|
74
|
+
display: flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
gap: fn.use-var(gap, small);
|
|
110
77
|
flex: 1 1 auto;
|
|
111
78
|
min-width: 0;
|
|
112
79
|
line-height: 1.5;
|
|
@@ -118,10 +85,8 @@ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(c
|
|
|
118
85
|
align-items: center;
|
|
119
86
|
justify-content: center;
|
|
120
87
|
flex: 0 0 auto;
|
|
121
|
-
color: fn.use-var(text-color,
|
|
122
|
-
transition:
|
|
123
|
-
transform $transition-normal,
|
|
124
|
-
color $transition-fast;
|
|
88
|
+
color: fn.use-var(text-color, assist);
|
|
89
|
+
transition: transform 0.2s $ease;
|
|
125
90
|
will-change: transform;
|
|
126
91
|
}
|
|
127
92
|
|
|
@@ -129,15 +94,14 @@ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(c
|
|
|
129
94
|
@include m.e(content-wrapper) {
|
|
130
95
|
overflow: hidden;
|
|
131
96
|
height: 0;
|
|
132
|
-
|
|
133
|
-
border-bottom-left-radius: inherit;
|
|
134
|
-
background-color: $content-bg;
|
|
97
|
+
background-color: transparent;
|
|
135
98
|
transition: height $transition-normal;
|
|
136
99
|
}
|
|
137
100
|
|
|
138
101
|
@include m.e(content) {
|
|
139
102
|
color: fn.use-var(text-color, main);
|
|
140
103
|
line-height: 1.7;
|
|
104
|
+
padding: fn.use-var(gap, small) fn.use-var(gap, default);
|
|
141
105
|
}
|
|
142
106
|
|
|
143
107
|
// ===== Sizes =====
|
|
@@ -145,17 +109,17 @@ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(c
|
|
|
145
109
|
font-size: fn.use-var(font-size-main, $size);
|
|
146
110
|
|
|
147
111
|
@include m.bem($root-name, header) {
|
|
148
|
-
padding:
|
|
112
|
+
padding: fn.use-var(gap, $size) fn.use-var(gap, $size);
|
|
149
113
|
font-size: fn.use-var(font-size-main, $size);
|
|
150
114
|
}
|
|
151
115
|
|
|
152
116
|
@include m.bem($root-name, content) {
|
|
153
117
|
font-size: fn.use-var(font-size-main, $size);
|
|
154
|
-
padding:
|
|
118
|
+
padding: fn.use-var(gap, $size);
|
|
155
119
|
}
|
|
156
120
|
|
|
157
121
|
#{fn.bem($root-name, item)} {
|
|
158
|
-
border-radius:
|
|
122
|
+
border-radius: fn.use-var(radius, $size);
|
|
159
123
|
|
|
160
124
|
& + #{fn.bem($root-name, item)} {
|
|
161
125
|
margin-top: fn.use-var(gap, $size);
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { createApp, defineComponent, h, inject, nextTick } from 'vue'
|
|
3
|
+
|
|
4
|
+
import type { ContextmenuItem } from '../../../types'
|
|
5
|
+
import UContextmenu from '../contextmenu.vue'
|
|
6
|
+
import { ContextmenuRootDIKey } from '../di'
|
|
7
|
+
|
|
8
|
+
function cleanupPanels(): void {
|
|
9
|
+
document.querySelectorAll('.u-contextmenu').forEach((el) => el.remove())
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function mountContextmenu(props: {
|
|
13
|
+
menus: ContextmenuItem[]
|
|
14
|
+
width?: number
|
|
15
|
+
mousePosition?: { x: number; y: number }
|
|
16
|
+
}) {
|
|
17
|
+
cleanupPanels()
|
|
18
|
+
const host = document.createElement('div')
|
|
19
|
+
document.body.appendChild(host)
|
|
20
|
+
|
|
21
|
+
const app = createApp({
|
|
22
|
+
render() {
|
|
23
|
+
return h(UContextmenu, {
|
|
24
|
+
mousePosition: props.mousePosition ?? { x: 10, y: 10 },
|
|
25
|
+
width: props.width ?? 180,
|
|
26
|
+
menus: props.menus
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
app.mount(host)
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
host,
|
|
34
|
+
unmount() {
|
|
35
|
+
app.unmount()
|
|
36
|
+
host.remove()
|
|
37
|
+
cleanupPanels()
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function panel(): HTMLElement | null {
|
|
43
|
+
// 取最后一个(避免 leave 过渡残留抢到 querySelector 首个)
|
|
44
|
+
const all = document.querySelectorAll<HTMLElement>('.u-contextmenu')
|
|
45
|
+
return all[all.length - 1] ?? null
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe('UContextmenu', () => {
|
|
49
|
+
it('divider 渲染为分割线', async () => {
|
|
50
|
+
const { unmount } = mountContextmenu({
|
|
51
|
+
menus: [
|
|
52
|
+
{ label: 'A', callback: () => {} },
|
|
53
|
+
{ divider: true },
|
|
54
|
+
{ label: 'B', callback: () => {} }
|
|
55
|
+
]
|
|
56
|
+
})
|
|
57
|
+
try {
|
|
58
|
+
await nextTick()
|
|
59
|
+
const el = panel()
|
|
60
|
+
expect(el).toBeTruthy()
|
|
61
|
+
expect(el!.querySelectorAll('.u-contextmenu__divider')).toHaveLength(1)
|
|
62
|
+
expect(el!.querySelectorAll('.u-contextmenu__item')).toHaveLength(2)
|
|
63
|
+
} finally {
|
|
64
|
+
unmount()
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('render 组件挂载替代 label', async () => {
|
|
69
|
+
const Custom = defineComponent({
|
|
70
|
+
name: 'CustomMenuContent',
|
|
71
|
+
setup() {
|
|
72
|
+
return () => h('span', { class: 'custom-render' }, '自定义内容')
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
const { unmount } = mountContextmenu({
|
|
76
|
+
menus: [{ label: 'fallback', keepOpen: true, render: Custom }]
|
|
77
|
+
})
|
|
78
|
+
try {
|
|
79
|
+
await nextTick()
|
|
80
|
+
const el = panel()!
|
|
81
|
+
expect(el.querySelector('.custom-render')?.textContent).toBe('自定义内容')
|
|
82
|
+
expect(el.textContent).not.toContain('fallback')
|
|
83
|
+
} finally {
|
|
84
|
+
unmount()
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('keepOpen 点击不关闭菜单', async () => {
|
|
89
|
+
const { unmount } = mountContextmenu({
|
|
90
|
+
menus: [
|
|
91
|
+
{ label: '保持打开', keepOpen: true, callback: () => {} },
|
|
92
|
+
{ label: '普通项', callback: () => {} }
|
|
93
|
+
]
|
|
94
|
+
})
|
|
95
|
+
try {
|
|
96
|
+
await nextTick()
|
|
97
|
+
const items = panel()!.querySelectorAll<HTMLElement>('.u-contextmenu__item')
|
|
98
|
+
items[0]!.click()
|
|
99
|
+
await nextTick()
|
|
100
|
+
expect(panel()).toBeTruthy()
|
|
101
|
+
expect(panel()!.querySelectorAll('.u-contextmenu__item')).toHaveLength(2)
|
|
102
|
+
} finally {
|
|
103
|
+
unmount()
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('普通项点击仍关闭', async () => {
|
|
108
|
+
const callback = vi.fn()
|
|
109
|
+
const { unmount } = mountContextmenu({ menus: [{ label: '关闭我', callback }] })
|
|
110
|
+
try {
|
|
111
|
+
await nextTick()
|
|
112
|
+
panel()!.querySelector<HTMLElement>('.u-contextmenu__item')!.click()
|
|
113
|
+
await nextTick()
|
|
114
|
+
expect(callback).toHaveBeenCalledOnce()
|
|
115
|
+
// happy-dom 无真实 CSS transition,leave 可能停在 leave-active;断言已进入关闭流程
|
|
116
|
+
const el = panel()
|
|
117
|
+
expect(el === null || /leave/.test(el.className)).toBe(true)
|
|
118
|
+
} finally {
|
|
119
|
+
unmount()
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
it('内嵌组件 inject DI 可主动关闭', async () => {
|
|
124
|
+
const closerClick = vi.fn()
|
|
125
|
+
let injected = false
|
|
126
|
+
const Closer = defineComponent({
|
|
127
|
+
name: 'CloserMenuContent',
|
|
128
|
+
setup() {
|
|
129
|
+
const root = inject(ContextmenuRootDIKey)
|
|
130
|
+
injected = !!root
|
|
131
|
+
return () =>
|
|
132
|
+
h(
|
|
133
|
+
'button',
|
|
134
|
+
{
|
|
135
|
+
class: 'close-via-di',
|
|
136
|
+
type: 'button',
|
|
137
|
+
onClick: () => {
|
|
138
|
+
closerClick()
|
|
139
|
+
root?.onItemClickEnd()
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
'关闭'
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
const { unmount } = mountContextmenu({
|
|
147
|
+
menus: [{ label: '自定义', keepOpen: true, render: Closer }]
|
|
148
|
+
})
|
|
149
|
+
try {
|
|
150
|
+
await nextTick()
|
|
151
|
+
const el = panel()
|
|
152
|
+
expect(el).toBeTruthy()
|
|
153
|
+
expect(injected).toBe(true)
|
|
154
|
+
const btn = el!.querySelector<HTMLButtonElement>('.close-via-di')
|
|
155
|
+
expect(btn, `menu html: ${el!.innerHTML}`).toBeTruthy()
|
|
156
|
+
btn!.click()
|
|
157
|
+
await nextTick()
|
|
158
|
+
expect(closerClick).toHaveBeenCalledOnce()
|
|
159
|
+
const after = panel()
|
|
160
|
+
expect(after === null || /leave/.test(after.className)).toBe(true)
|
|
161
|
+
} finally {
|
|
162
|
+
unmount()
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
})
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<li
|
|
3
3
|
:class="[cls.e('item'), bem.is('disabled', disabled), bem.is('loading', loading)]"
|
|
4
|
-
v-ripple="!disabled && !loading"
|
|
4
|
+
v-ripple="!disabled && !loading && !menu.keepOpen"
|
|
5
5
|
@click="handleClickMenu"
|
|
6
6
|
>
|
|
7
7
|
<div :class="cls.e('item-content')">
|
|
8
|
-
<template v-if="showIconColumn">
|
|
8
|
+
<template v-if="showIconColumn && !menu.render">
|
|
9
9
|
<u-icon v-if="loading" :class="bem.is('loading')">
|
|
10
10
|
<Loading />
|
|
11
11
|
</u-icon>
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
<i v-else :class="cls.e('icon-place')"></i>
|
|
16
16
|
</template>
|
|
17
17
|
|
|
18
|
-
<
|
|
18
|
+
<div v-if="menu.render" :class="cls.e('custom')" @click.stop>
|
|
19
|
+
<component :is="menu.render" />
|
|
20
|
+
</div>
|
|
21
|
+
<span v-else :class="cls.e('label')">{{ menu.label }}</span>
|
|
19
22
|
|
|
20
23
|
<i v-if="showArrowColumn" :class="cls.e('arrow-place')"></i>
|
|
21
24
|
</div>
|
|
@@ -44,7 +47,7 @@ const loading = shallowRef(false)
|
|
|
44
47
|
const disabled = computed(() => getMenuDisabled(menu))
|
|
45
48
|
|
|
46
49
|
function handleClickMenu() {
|
|
47
|
-
if (disabled.value || loading.value) return
|
|
50
|
+
if (disabled.value || loading.value || menu.keepOpen) return
|
|
48
51
|
onItemClickStart()
|
|
49
52
|
loading.value = true
|
|
50
53
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<ul v-bind="$attrs">
|
|
3
3
|
<template v-for="(menu, index) of menus" :key="index">
|
|
4
|
-
<
|
|
4
|
+
<li v-if="menu.divider" :class="cls.e('divider')" role="separator" />
|
|
5
|
+
<UContextmenuSub v-else-if="menu.children?.length" :menu="menu" />
|
|
5
6
|
<UContextmenuItem v-else :menu="menu" />
|
|
6
7
|
</template>
|
|
7
8
|
</ul>
|
|
@@ -19,10 +20,12 @@ defineOptions({ name: 'UContextmenuPanel', inheritAttrs: false })
|
|
|
19
20
|
|
|
20
21
|
const { menus } = defineProps<{ menus: ContextmenuItem[] }>()
|
|
21
22
|
|
|
22
|
-
inject(ContextmenuRootDIKey)
|
|
23
|
+
const { cls } = inject(ContextmenuRootDIKey)!
|
|
23
24
|
|
|
24
|
-
const showIconColumn = computed(() => menus.some((menu) => !!menu.icon))
|
|
25
|
-
const showArrowColumn = computed(() =>
|
|
25
|
+
const showIconColumn = computed(() => menus.some((menu) => !menu.divider && !!menu.icon))
|
|
26
|
+
const showArrowColumn = computed(() =>
|
|
27
|
+
menus.some((menu) => !menu.divider && !!menu.children?.length)
|
|
28
|
+
)
|
|
26
29
|
|
|
27
30
|
provide(ContextmenuPanelDIKey, { showIconColumn, showArrowColumn })
|
|
28
31
|
</script>
|