@veltra/desktop 1.2.9 → 1.2.12
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.js.map +1 -1
- package/dist/components/action/action-group.vue.d.ts +2 -2
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/action/action.js +2 -2
- package/dist/components/action/action.js.map +1 -1
- package/dist/components/action/action.vue.d.ts +1 -1
- package/dist/components/auto-complete/auto-complete.js +4 -4
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/auto-complete/auto-complete.vue.d.ts +2 -2
- package/dist/components/auto-complete/use-keyboard.js.map +1 -1
- package/dist/components/badge/badge.js +2 -2
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-form.js +2 -2
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js +2 -2
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +6 -3
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/use-edit-state.js +7 -3
- package/dist/components/batch-edit/use-edit-state.js.map +1 -1
- package/dist/components/batch-edit/use-features.js.map +1 -1
- package/dist/components/batch-edit/use-handlers.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +2 -2
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button-group.js +2 -2
- package/dist/components/button/button-group.js.map +1 -1
- package/dist/components/button/button.js +2 -2
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/calendar/calendar.js +3 -3
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/calendar/utils.js.map +1 -1
- package/dist/components/card/card-action.js +2 -2
- package/dist/components/card/card-action.js.map +1 -1
- package/dist/components/card/card-content.js +2 -2
- package/dist/components/card/card-content.js.map +1 -1
- package/dist/components/card/card-cover.js +2 -2
- package/dist/components/card/card-cover.js.map +1 -1
- package/dist/components/card/card-header.js +2 -2
- package/dist/components/card/card-header.js.map +1 -1
- package/dist/components/card/card.js +2 -2
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/cascade/cascade-panel-item.js +1 -1
- package/dist/components/cascade/cascade-panel-item.js.map +1 -1
- package/dist/components/cascade/cascade.js +7 -3
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +7 -4
- package/dist/components/cascade/use-check.js +3 -1
- package/dist/components/cascade/use-check.js.map +1 -1
- package/dist/components/cascade/use-data-map.js.map +1 -1
- package/dist/components/cascade/use-select.js +30 -14
- package/dist/components/cascade/use-select.js.map +1 -1
- package/dist/components/check-tag/check-tag.js +2 -2
- package/dist/components/check-tag/check-tag.js.map +1 -1
- package/dist/components/checkbox/checkbox-button.js +4 -4
- package/dist/components/checkbox/checkbox-button.js.map +1 -1
- package/dist/components/checkbox/checkbox-button.vue.d.ts +2 -2
- package/dist/components/checkbox/checkbox.js +4 -4
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox/checkbox.vue.d.ts +1 -1
- package/dist/components/checkbox-group/checkbox-group.js +4 -4
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
- package/dist/components/code-editor/basic-setup.js +44 -0
- package/dist/components/code-editor/basic-setup.js.map +1 -0
- package/dist/components/code-editor/code-editor.js +5 -5
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/code-editor.vue.d.ts +1 -1
- package/dist/components/collapse/collapse-item.js +2 -2
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse.js +2 -2
- package/dist/components/collapse/collapse.js.map +1 -1
- package/dist/components/condition-editor/components/condition-group.js +2 -2
- package/dist/components/condition-editor/components/condition-group.js.map +1 -1
- package/dist/components/condition-editor/components/condition-row.js +2 -2
- package/dist/components/condition-editor/components/condition-row.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.js +2 -2
- package/dist/components/condition-editor/condition-editor.js.map +1 -1
- package/dist/components/condition-editor/core/evaluator.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-item.js +2 -2
- package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-panel.js +2 -2
- package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-sub.js +2 -2
- package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
- package/dist/components/contextmenu/contextmenu.js +2 -2
- package/dist/components/contextmenu/contextmenu.js.map +1 -1
- package/dist/components/date-panel/date-panel.js +2 -2
- package/dist/components/date-panel/date-panel.js.map +1 -1
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-panel/headers/day.js +2 -2
- package/dist/components/date-panel/headers/day.js.map +1 -1
- package/dist/components/date-panel/headers/month.js +2 -2
- package/dist/components/date-panel/headers/month.js.map +1 -1
- package/dist/components/date-panel/headers/year.js +2 -2
- package/dist/components/date-panel/headers/year.js.map +1 -1
- package/dist/components/date-panel/panels/day.js +2 -2
- package/dist/components/date-panel/panels/day.js.map +1 -1
- package/dist/components/date-panel/panels/month.js +2 -2
- package/dist/components/date-panel/panels/month.js.map +1 -1
- package/dist/components/date-panel/panels/year.js +2 -2
- package/dist/components/date-panel/panels/year.js.map +1 -1
- package/dist/components/date-panel/use-panel-date.js.map +1 -1
- package/dist/components/date-picker/date-picker.js +2 -2
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +2 -2
- package/dist/components/date-range-picker/date-range-picker.js +2 -2
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +2 -2
- package/dist/components/dialog/dialog.js +4 -4
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +4 -4
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown/dropdown.js +2 -2
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dual-nav/dual-nav-app.js +2 -2
- package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
- package/dist/components/dual-nav/dual-nav.js +2 -2
- package/dist/components/dual-nav/dual-nav.js.map +1 -1
- package/dist/components/empty/empty.js +2 -2
- package/dist/components/empty/empty.js.map +1 -1
- package/dist/components/empty/empty.vue.d.ts +1 -1
- package/dist/components/expression-editor/components/path-preview.js +2 -2
- package/dist/components/expression-editor/components/path-preview.js.map +1 -1
- package/dist/components/expression-editor/components/variable-picker.js +2 -2
- 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/core/model.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.js +2 -2
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/file-picker/file-picker.js +2 -2
- package/dist/components/file-picker/file-picker.js.map +1 -1
- package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
- package/dist/components/file-picker/helper.js.map +1 -1
- package/dist/components/file-viewer/file-viewer.js +4 -4
- package/dist/components/file-viewer/file-viewer.js.map +1 -1
- package/dist/components/file-viewer/helper.js.map +1 -1
- package/dist/components/file-viewer/previewers/docx-previewer.js +2 -2
- package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/image-previewer.js +2 -2
- package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-previewer.js +2 -2
- package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js +2 -2
- package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js +2 -2
- package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
- package/dist/components/file-viewer/previewers/sheet-previewer.js +2 -2
- 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 +2 -2
- package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
- package/dist/components/file-viewer/sheet-parser.js.map +1 -1
- package/dist/components/float-button/float-button.js +2 -2
- package/dist/components/float-button/float-button.js.map +1 -1
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/use-form-fields.js.map +1 -1
- package/dist/components/form/use-node-interceptor.js.map +1 -1
- package/dist/components/form-item/form-item.js.map +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +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/validate.js.map +1 -1
- package/dist/components/gantt-chart/gantt-chart.js +2 -2
- package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
- package/dist/components/grid/breakpoint.js.map +1 -1
- package/dist/components/grid/grid-item.js +2 -2
- package/dist/components/grid/grid-item.js.map +1 -1
- package/dist/components/grid/grid.js +2 -2
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid-input/grid-input.js +2 -2
- package/dist/components/grid-input/grid-input.js.map +1 -1
- package/dist/components/group-input/group-input.js +2 -2
- package/dist/components/group-input/group-input.js.map +1 -1
- package/dist/components/icon/icon.js +2 -2
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/input/input.vue.d.ts +4 -4
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kbd/kbd.js +2 -2
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/layout/layout-resizer.js +2 -2
- package/dist/components/layout/layout-resizer.js.map +1 -1
- package/dist/components/layout/layout.js +2 -2
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/list/list-item.js +2 -2
- package/dist/components/list/list-item.js.map +1 -1
- package/dist/components/list/list.js +2 -2
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/loading/directive.js.map +1 -1
- package/dist/components/loading/loading.js +2 -2
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/message/message-box.js +2 -2
- package/dist/components/message/message-box.js.map +1 -1
- package/dist/components/message/message.js +2 -2
- package/dist/components/message/message.js.map +1 -1
- package/dist/components/message/message2.js.map +1 -1
- package/dist/components/message-confirm/message-confirm.js +2 -2
- package/dist/components/message-confirm/message-confirm.js.map +1 -1
- package/dist/components/multi-select/multi-select-option.js +2 -2
- package/dist/components/multi-select/multi-select-option.js.map +1 -1
- package/dist/components/multi-select/multi-select.js +4 -4
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
- package/dist/components/multi-tree-select/multi-tree-select.js +4 -4
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +5 -5
- package/dist/components/nav/nav-icon.js +2 -2
- package/dist/components/nav/nav-icon.js.map +1 -1
- package/dist/components/nav/nav-item-collapsed.js +2 -2
- package/dist/components/nav/nav-item-collapsed.js.map +1 -1
- package/dist/components/nav/nav-item.js +2 -2
- package/dist/components/nav/nav-item.js.map +1 -1
- package/dist/components/nav/nav-sub-collapsed.js +2 -2
- package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
- package/dist/components/nav/nav-sub.js +2 -2
- package/dist/components/nav/nav-sub.js.map +1 -1
- package/dist/components/nav/nav.js +2 -2
- package/dist/components/nav/nav.js.map +1 -1
- package/dist/components/notification/index.js.map +1 -1
- package/dist/components/notification/notification.js +2 -2
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/number/number.js +2 -2
- package/dist/components/number/number.js.map +1 -1
- package/dist/components/number-input/number-input.js +4 -4
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-input/number-input.vue.d.ts +4 -4
- package/dist/components/number-range-input/number-range-input.js +4 -4
- package/dist/components/number-range-input/number-range-input.js.map +1 -1
- package/dist/components/number-range-input/number-range-input.vue.d.ts +2 -2
- package/dist/components/paginator/paginator.js +4 -4
- package/dist/components/paginator/paginator.js.map +1 -1
- package/dist/components/palette/color-transform.js.map +1 -1
- package/dist/components/palette/palette-alpha.js +2 -2
- package/dist/components/palette/palette-alpha.js.map +1 -1
- package/dist/components/palette/palette-color-switch.js +1 -1
- package/dist/components/palette/palette-color-switch.js.map +1 -1
- package/dist/components/palette/palette-hue.js +2 -2
- package/dist/components/palette/palette-hue.js.map +1 -1
- package/dist/components/palette/palette-sv.js +2 -2
- package/dist/components/palette/palette-sv.js.map +1 -1
- package/dist/components/palette/palette.js +3 -3
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/palette/palette.vue.d.ts +1 -1
- package/dist/components/palette/use-hsv.js.map +1 -1
- package/dist/components/password-input/password-input.js +3 -3
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/password-input/password-input.vue.d.ts +2 -2
- package/dist/components/pop-confirm/pop-confirm.js +2 -2
- package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
- package/dist/components/progress/progress.js +2 -2
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/progress-nodes/progress-nodes.js +2 -2
- package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
- package/dist/components/radio/radio.js +4 -4
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/radio-group/radio-group.js +4 -4
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
- package/dist/components/rich-text-editor/rich-text-editor.js +2 -2
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +2 -2
- package/dist/components/rich-text-editor/toolbar.js +1 -1
- package/dist/components/rich-text-editor/toolbar.js.map +1 -1
- package/dist/components/scroll/scroll-bar.js +2 -2
- package/dist/components/scroll/scroll-bar.js.map +1 -1
- package/dist/components/scroll/scroll.js +2 -2
- package/dist/components/scroll/scroll.js.map +1 -1
- package/dist/components/select/select.js +4 -4
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/select.vue.d.ts +2 -2
- package/dist/components/select/use-keyboard.js.map +1 -1
- package/dist/components/select/use-options.js.map +1 -1
- package/dist/components/slider/slider-thumb.js +1 -1
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js +2 -2
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/steps/steps.js +2 -2
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/steps/steps.vue.d.ts +3 -3
- package/dist/components/switch/switch.js +4 -4
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/switch/switch.vue.d.ts +1 -1
- package/dist/components/table/table-body.js +2 -2
- package/dist/components/table/table-body.js.map +1 -1
- package/dist/components/table/table-cell.js +2 -2
- package/dist/components/table/table-cell.js.map +1 -1
- package/dist/components/table/table-foot.js +2 -2
- package/dist/components/table/table-foot.js.map +1 -1
- package/dist/components/table/table-head.js.map +1 -1
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/table.js +2 -2
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-check.js.map +1 -1
- package/dist/components/table/use-col-resize.js.map +1 -1
- package/dist/components/table/use-columns.js.map +1 -1
- package/dist/components/table/use-rows.js.map +1 -1
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/table-editor/table-editor.js +2 -2
- package/dist/components/table-editor/table-editor.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.js +4 -4
- package/dist/components/tabs/tabs-horizontal.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
- package/dist/components/tabs/tabs-vertical.js +4 -4
- package/dist/components/tabs/tabs-vertical.js.map +1 -1
- package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
- package/dist/components/tabs/tabs.js +4 -4
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/tabs.vue.d.ts +2 -2
- package/dist/components/tag/tag.js +2 -2
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/text/text.js +2 -2
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/textarea/textarea.js +4 -4
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/textarea/textarea.vue.d.ts +4 -4
- package/dist/components/theme/theme.js +1 -1
- package/dist/components/theme/theme.js.map +1 -1
- package/dist/components/tip/tip.js +2 -2
- package/dist/components/tip/tip.js.map +1 -1
- package/dist/components/tip/tip.vue.d.ts +1 -1
- package/dist/components/tip/use-nest.js.map +1 -1
- package/dist/components/tree/tree-node.js +2 -2
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree-node2.js.map +1 -1
- package/dist/components/tree/tree.js +2 -2
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree/use-check.js.map +1 -1
- package/dist/components/tree-select/tree-select.js +7 -6
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +7 -6
- package/dist/components/watermark/watermark.js +2 -2
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/types/cascade.d.ts +10 -6
- package/dist/types/tree-select.d.ts +2 -1
- package/package.json +24 -20
- package/src/components/action/action-group.vue +1 -1
- package/src/components/action/action.vue +1 -1
- package/src/components/auto-complete/auto-complete.vue +1 -1
- package/src/components/badge/badge.vue +1 -1
- package/src/components/batch-edit/batch-edit-form.vue +1 -2
- package/src/components/batch-edit/batch-edit-list.vue +1 -1
- package/src/components/batch-edit/batch-edit.vue +2 -2
- package/src/components/batch-edit/use-edit-state.ts +12 -6
- package/src/components/breadcrumb/breadcrumb.vue +1 -1
- package/src/components/button/button-group.vue +1 -1
- package/src/components/button/button.vue +1 -1
- package/src/components/calendar/calendar.vue +1 -1
- package/src/components/card/card-action.vue +1 -1
- package/src/components/card/card-content.vue +1 -1
- package/src/components/card/card-cover.vue +1 -1
- package/src/components/card/card-header.vue +1 -1
- package/src/components/card/card.vue +1 -1
- package/src/components/cascade/cascade.vue +3 -2
- package/src/components/cascade/use-check.ts +3 -1
- package/src/components/cascade/use-select.ts +43 -29
- package/src/components/check-tag/check-tag.vue +1 -1
- package/src/components/checkbox/checkbox-button.vue +1 -1
- package/src/components/checkbox/checkbox.vue +1 -1
- package/src/components/checkbox-group/checkbox-group.vue +1 -1
- package/src/components/code-editor/basic-setup.ts +63 -0
- package/src/components/code-editor/code-editor.vue +3 -3
- package/src/components/collapse/collapse-item.vue +1 -1
- package/src/components/collapse/collapse.vue +1 -1
- package/src/components/condition-editor/components/condition-group.vue +1 -1
- package/src/components/condition-editor/components/condition-row.vue +1 -1
- package/src/components/condition-editor/condition-editor.vue +1 -1
- package/src/components/contextmenu/contextmenu-item.vue +1 -1
- package/src/components/contextmenu/contextmenu-panel.vue +1 -1
- package/src/components/contextmenu/contextmenu-sub.vue +1 -1
- package/src/components/contextmenu/contextmenu.vue +1 -1
- package/src/components/date-panel/date-panel.vue +1 -1
- package/src/components/date-panel/headers/day.vue +1 -1
- package/src/components/date-panel/headers/month.vue +1 -1
- package/src/components/date-panel/headers/year.vue +1 -1
- package/src/components/date-panel/panels/day.vue +1 -1
- package/src/components/date-panel/panels/month.vue +1 -1
- package/src/components/date-panel/panels/year.vue +1 -1
- package/src/components/date-picker/date-picker.vue +1 -1
- package/src/components/date-range-picker/date-range-picker.vue +1 -1
- package/src/components/dialog/dialog.vue +1 -1
- package/src/components/drawer/drawer.vue +1 -1
- package/src/components/dropdown/dropdown.vue +1 -1
- package/src/components/dual-nav/dual-nav-app.vue +1 -1
- package/src/components/dual-nav/dual-nav.vue +1 -1
- package/src/components/empty/empty.vue +1 -1
- package/src/components/expression-editor/components/path-preview.vue +1 -1
- package/src/components/expression-editor/components/variable-picker.vue +1 -1
- package/src/components/expression-editor/expression-editor.vue +1 -1
- package/src/components/file-picker/file-picker.vue +1 -1
- package/src/components/file-viewer/file-viewer.vue +1 -1
- package/src/components/file-viewer/previewers/docx-previewer.vue +1 -1
- package/src/components/file-viewer/previewers/image-previewer.vue +1 -1
- package/src/components/file-viewer/previewers/pdf-previewer.vue +1 -1
- package/src/components/file-viewer/previewers/pdf-viewport-scroll.vue +1 -1
- package/src/components/file-viewer/previewers/pdf-zoom-bridge.vue +1 -1
- package/src/components/file-viewer/previewers/sheet-previewer.vue +1 -1
- package/src/components/file-viewer/previewers/text-previewer.vue +1 -1
- package/src/components/file-viewer/previewers/video-previewer.vue +1 -1
- package/src/components/float-button/float-button.vue +1 -1
- package/src/components/form/form.vue +1 -1
- package/src/components/form-item/form-item.vue +1 -1
- package/src/components/gantt-chart/gantt-chart.vue +1 -1
- package/src/components/grid/grid-item.vue +1 -1
- package/src/components/grid/grid.vue +1 -1
- package/src/components/grid-input/grid-input.vue +1 -1
- package/src/components/group-input/group-input.vue +1 -1
- package/src/components/icon/icon.vue +1 -1
- package/src/components/input/input.vue +1 -1
- package/src/components/kbd/kbd.vue +1 -1
- package/src/components/layout/layout-resizer.vue +1 -1
- package/src/components/layout/layout.vue +1 -1
- package/src/components/list/list-item.vue +1 -1
- package/src/components/list/list.vue +1 -1
- package/src/components/loading/loading.vue +1 -1
- package/src/components/message/message-box.vue +1 -1
- package/src/components/message/message.vue +1 -1
- package/src/components/message-confirm/message-confirm.vue +1 -1
- package/src/components/multi-select/multi-select-option.vue +1 -1
- package/src/components/multi-select/multi-select.vue +1 -1
- package/src/components/multi-tree-select/multi-tree-select.vue +1 -1
- package/src/components/nav/nav-icon.vue +1 -1
- package/src/components/nav/nav-item-collapsed.vue +1 -1
- package/src/components/nav/nav-item.vue +1 -1
- package/src/components/nav/nav-sub-collapsed.vue +1 -1
- package/src/components/nav/nav-sub.vue +1 -1
- package/src/components/nav/nav.vue +1 -1
- package/src/components/notification/notification.vue +1 -1
- package/src/components/number/number.vue +1 -1
- package/src/components/number-input/number-input.vue +1 -1
- package/src/components/number-range-input/number-range-input.vue +1 -1
- package/src/components/paginator/paginator.vue +1 -1
- package/src/components/palette/palette-alpha.vue +1 -1
- package/src/components/palette/palette-hue.vue +1 -1
- package/src/components/palette/palette-sv.vue +1 -1
- package/src/components/palette/palette.vue +1 -1
- package/src/components/password-input/password-input.vue +1 -1
- package/src/components/pop-confirm/pop-confirm.vue +1 -1
- package/src/components/progress/progress.vue +1 -1
- package/src/components/progress-nodes/progress-nodes.vue +1 -1
- package/src/components/radio/radio.vue +1 -1
- package/src/components/radio-group/radio-group.vue +1 -1
- package/src/components/scroll/scroll-bar.vue +1 -1
- package/src/components/scroll/scroll.vue +1 -1
- package/src/components/select/select.vue +1 -1
- package/src/components/slider/slider.vue +1 -1
- package/src/components/steps/steps.vue +1 -1
- package/src/components/switch/switch.vue +1 -1
- package/src/components/table/table-body.vue +1 -1
- package/src/components/table/table-cell.vue +1 -1
- package/src/components/table/table-foot.vue +1 -1
- package/src/components/table/table.vue +1 -1
- package/src/components/table-editor/table-editor.vue +1 -1
- package/src/components/tabs/tabs-horizontal.vue +1 -1
- package/src/components/tabs/tabs-vertical.vue +1 -1
- package/src/components/tabs/tabs.vue +1 -1
- package/src/components/tag/tag.vue +1 -1
- package/src/components/text/text.vue +1 -1
- package/src/components/textarea/textarea.vue +1 -1
- package/src/components/tip/tip.vue +1 -1
- package/src/components/tree/tree-node.vue +1 -1
- package/src/components/tree/tree.vue +1 -1
- package/src/components/tree-select/tree-select.vue +3 -3
- package/src/components/watermark/watermark.vue +1 -1
- package/src/types/cascade.ts +10 -6
- package/src/types/tree-select.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","names":[],"sources":["../../../src/components/slider/slider.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <div :class=\"cls.e('track')\" ref=\"sliderRef\" @click=\"handleClickSlider\">\n <div :class=\"cls.e('bar')\" :style=\"barStyles\" />\n\n <slider-thumb v-model=\"offset1\" @click.stop />\n <slider-thumb v-if=\"range\" v-model=\"offset2\" @click.stop />\n\n <div\n v-for=\"tick in ticks\"\n :style=\"{ [vertical ? 'bottom' : 'left']: `${tick}%` }\"\n :class=\"cls.e('tick')\"\n />\n </div>\n </div>\n\n <div v-else>\n {{ props.modelValue }}\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends number | [number, number]\">\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, watch } from 'vue'\n\nimport type { SliderProps, SliderEmits } from '../../types'\nimport { sliderContextKey } from './di'\nimport SliderThumb from './slider-thumb.vue'\nimport { useSlider } from './use-slider'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"slider.js","names":[],"sources":["../../../src/components/slider/slider.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <div :class=\"cls.e('track')\" ref=\"sliderRef\" @click=\"handleClickSlider\">\n <div :class=\"cls.e('bar')\" :style=\"barStyles\" />\n\n <slider-thumb v-model=\"offset1\" @click.stop />\n <slider-thumb v-if=\"range\" v-model=\"offset2\" @click.stop />\n\n <div\n v-for=\"tick in ticks\"\n :style=\"{ [vertical ? 'bottom' : 'left']: `${tick}%` }\"\n :class=\"cls.e('tick')\"\n />\n </div>\n </div>\n\n <div v-else>\n {{ props.modelValue }}\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends number | [number, number]\">\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, watch } from 'vue'\n\nimport type { SliderProps, SliderEmits } from '../../types'\nimport { sliderContextKey } from './di'\nimport SliderThumb from './slider-thumb.vue'\nimport { useSlider } from './use-slider'\n\ndefineOptions({ name: 'USlider' })\n\nconst props = withDefaults(defineProps<SliderProps<T>>(), {\n min: 0,\n max: 100,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<SliderEmits<T>>()\n\nconst cls = bem('slider')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('range', props.range),\n bem.is('horizontal', !props.vertical),\n bem.is('vertical', props.vertical)\n ]\n})\n\nconst {\n offset1,\n offset2,\n sliderRef,\n slideRange,\n sliderSize,\n sliderOffset2Value,\n value2SliderOffset,\n getOffsetByStep\n} = useSlider(props)\n\nconst barStyles = computed(() => {\n const { vertical } = props\n const offsetProp = vertical ? 'bottom' : 'left'\n const sizeProp = vertical ? 'height' : 'width'\n\n if (!props.range) {\n return { [offsetProp]: 0, [sizeProp]: `${Math.abs(offset1.value)}px` }\n }\n return {\n [offsetProp]: `${Math.min(Math.abs(offset1.value), Math.abs(offset2.value))}px`,\n [sizeProp]: `${Math.abs(offset1.value - offset2.value)}px`\n }\n})\n\nconst { userAction, isUserActive } = useUserAction()\n\nwatch(\n [sliderSize, ...['modelValue', 'range', 'max', 'min', 'vertical'].map((k) => () => props[k])],\n ([size, value, range]) => {\n if (isUserActive()) return\n if (value === undefined || size === 0) return\n\n if (range) {\n offset1.value = value2SliderOffset((value as [number, number])[0])\n offset2.value = value2SliderOffset((value as [number, number])[1])\n } else {\n offset1.value = value2SliderOffset(value as number)\n }\n },\n { immediate: true }\n)\n\nconst ticks = computed(() => {\n const { step, min, max } = props\n if (!step) return []\n const tickLength = Math.ceil((max! - min!) / step)\n const offsetPercent = (step / (max! - min!)) * 100\n\n return [...Array.from({ length: tickLength }, (_, i) => i * offsetPercent), 100]\n})\n\nwatch(\n [offset1, offset2],\n userAction((v) => {\n if (sliderSize.value === 0) return\n\n if (props.range) {\n const next = v.map(sliderOffset2Value).toSorted((a, b) => a - b) as [number, number]\n const current = props.modelValue as [number, number] | undefined\n if (current) {\n const [a, b] = [...current].sort((x, y) => x - y)\n if (next[0] === a && next[1] === b) return\n }\n emit('update:modelValue', next as T)\n } else {\n const next = sliderOffset2Value(v[0])\n if (next === props.modelValue) return\n emit('update:modelValue', next as T)\n }\n })\n)\n\nfunction handleClickSlider(e: MouseEvent) {\n if (disabled.value || props.range) return\n\n // 获取点击位置相对于滑块的偏移量\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n\n offset1.value = getOffsetByStep(e.clientX - rect.left)\n}\n\nprovide(sliderContextKey, { sliderProps: props, disabled, range: slideRange, cls, getOffsetByStep })\n</script>\n"],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ import { n, o } from "@cat-kit/core";
|
|
|
9
9
|
//#region src/components/steps/steps.vue
|
|
10
10
|
const _hoisted_1 = ["onClick"];
|
|
11
11
|
const _hoisted_2 = ["onMouseenter"];
|
|
12
|
-
const _sfc_main =
|
|
13
|
-
name: "
|
|
12
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
13
|
+
name: "USteps",
|
|
14
14
|
__name: "steps",
|
|
15
15
|
props: {
|
|
16
16
|
current: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","names":[],"sources":["../../../src/components/steps/steps.vue"],"sourcesContent":["<template>\n <ol :class=\"className\" ref=\"steps\">\n <li\n v-for=\"(item, index) in items\"\n :class=\"[\n cls.e('item'),\n bem.is('current', index === currentIndex),\n bem.is('finished', currentIndex === undefined || index < currentIndex)\n ]\"\n @click=\"handleStepClick(item, index)\"\n >\n <div :class=\"cls.e('node')\">\n <i :class=\"cls.e('link')\" v-if=\"index !== items.length - 1\"></i>\n\n <span\n :class=\"cls.e('icon')\"\n @mouseenter=\"handleStepMouseenter($event, item, index)\"\n @mouseleave=\"handleStepMouseleave\"\n >\n <slot name=\"icon\" :item=\"item\" :index=\"index\">\n <UIcon v-if=\"currentIndex === undefined || index < currentIndex\">\n <Check />\n </UIcon>\n\n <template v-else>\n {{ index + 1 }}\n </template>\n </slot>\n </span>\n </div>\n\n <div :class=\"cls.e('content')\">\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n {{ o(item).get(labelKey) }}\n </slot>\n </div>\n </li>\n\n <u-tip\n v-if=\"slots.tip\"\n ref=\"tip\"\n :trigger-dom=\"tipTriggerDom\"\n v-model:visible=\"tipVisible\"\n @update:visible=\"handleTipUpdateVisible\"\n >\n <template #content>\n <UNodeRender :content=\"tipContent\" />\n </template>\n </u-tip>\n </ol>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, o } from '@cat-kit/core'\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Check } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { StepsProps, StepsEmits, ComponentSize, StepsSlotScope } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"steps.js","names":[],"sources":["../../../src/components/steps/steps.vue"],"sourcesContent":["<template>\n <ol :class=\"className\" ref=\"steps\">\n <li\n v-for=\"(item, index) in items\"\n :class=\"[\n cls.e('item'),\n bem.is('current', index === currentIndex),\n bem.is('finished', currentIndex === undefined || index < currentIndex)\n ]\"\n @click=\"handleStepClick(item, index)\"\n >\n <div :class=\"cls.e('node')\">\n <i :class=\"cls.e('link')\" v-if=\"index !== items.length - 1\"></i>\n\n <span\n :class=\"cls.e('icon')\"\n @mouseenter=\"handleStepMouseenter($event, item, index)\"\n @mouseleave=\"handleStepMouseleave\"\n >\n <slot name=\"icon\" :item=\"item\" :index=\"index\">\n <UIcon v-if=\"currentIndex === undefined || index < currentIndex\">\n <Check />\n </UIcon>\n\n <template v-else>\n {{ index + 1 }}\n </template>\n </slot>\n </span>\n </div>\n\n <div :class=\"cls.e('content')\">\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n {{ o(item).get(labelKey) }}\n </slot>\n </div>\n </li>\n\n <u-tip\n v-if=\"slots.tip\"\n ref=\"tip\"\n :trigger-dom=\"tipTriggerDom\"\n v-model:visible=\"tipVisible\"\n @update:visible=\"handleTipUpdateVisible\"\n >\n <template #content>\n <UNodeRender :content=\"tipContent\" />\n </template>\n </u-tip>\n </ol>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, o } from '@cat-kit/core'\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Check } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { StepsProps, StepsEmits, ComponentSize, StepsSlotScope } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'USteps' })\n\nconst props = withDefaults(defineProps<StepsProps>(), {\n direction: 'horizontal',\n finishedStepType: 'success',\n labelKey: 'label'\n})\n\nconst emit = defineEmits<StepsEmits>()\n\nconst slots = defineSlots<{\n icon?: (scope: StepsSlotScope) => any\n content?: (scope: StepsSlotScope) => any\n tip?: (scope: StepsSlotScope) => any\n}>()\n\nconst cls = bem('steps')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst className = computed(() => {\n const { direction, currentStepType, finishedStepType } = props\n const ret: string[] = [\n cls.b,\n bem.is(direction),\n cls.m(size.value),\n bem.is('align-center', props.alignCenter),\n cls.em('finished', finishedStepType)\n ]\n currentStepType && ret.push(cls.em('current', currentStepType))\n return ret\n})\n\nconst stepsRef = useTemplateRef('steps')\n\nconst currentToIndexMap = computed<Record<string, number> | undefined>(() => {\n const { currentKey, items } = props\n if (!currentKey) return undefined\n return items.reduce(\n (acc, item, index) => {\n acc[o(item).get(currentKey)] = index\n return acc\n },\n {} as Record<string, number>\n )\n})\n\n/** 当前索引 */\nconst currentIndex = computed<number | undefined>(() => {\n const { currentKey, current } = props\n if (current === undefined) return undefined\n\n if (currentKey) {\n return currentToIndexMap.value?.[current]\n }\n\n if (typeof current !== 'number') return undefined\n return n(current).range(0, props.items.length - 1)\n})\n\nwatch(currentIndex, (index) => {\n if (index === undefined || props.direction === 'vertical') return\n const step = stepsRef.value?.children[index]\n if (step) {\n step.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n})\n\n// 点击步骤项\nfunction handleStepClick(item: Record<string, any>, index: number) {\n emit('item-click', item, index)\n emit('update:current', props.currentKey ? o(item).get(props.currentKey) : index)\n}\n\n// 提示\nconst tipVisible = shallowRef(false)\nconst tipTriggerDom = shallowRef<HTMLElement>()\nconst tipContent = shallowRef()\n\nfunction handleStepMouseenter(event: MouseEvent, item: Record<string, any>, index: number) {\n if (!slots.tip) return\n tipTriggerDom.value = event.target as HTMLElement\n tipVisible.value = true\n tipContent.value = slots.tip?.({ item, index })\n}\n\nlet timer: number | undefined = undefined\nfunction closeTip() {\n timer = setTimeout(() => {\n tipVisible.value = false\n tipContent.value = undefined\n tipTriggerDom.value = undefined\n }, 250)\n}\n\nfunction handleTipUpdateVisible(visible: boolean) {\n visible && clearTimeout(timer)\n}\n\nfunction handleStepMouseleave() {\n if (!slots.tip) return\n closeTip()\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -6,14 +6,14 @@ type __VLS_Slots = {
|
|
|
6
6
|
tip?: (scope: StepsSlotScope) => any;
|
|
7
7
|
};
|
|
8
8
|
declare const __VLS_base: import("vue").DefineComponent<StepsProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
9
|
-
"item-click": (item: Record<string, any>, index: number) => any;
|
|
10
9
|
"update:current": (value?: string | number | undefined) => any;
|
|
10
|
+
"item-click": (item: Record<string, any>, index: number) => any;
|
|
11
11
|
}, string, import("vue").PublicProps, Readonly<StepsProps> & Readonly<{
|
|
12
|
-
"onItem-click"?: ((item: Record<string, any>, index: number) => any) | undefined;
|
|
13
12
|
"onUpdate:current"?: ((value?: string | number | undefined) => any) | undefined;
|
|
13
|
+
"onItem-click"?: ((item: Record<string, any>, index: number) => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
|
-
direction: "horizontal" | "vertical";
|
|
16
15
|
labelKey: string;
|
|
16
|
+
direction: "horizontal" | "vertical";
|
|
17
17
|
finishedStepType: import("@veltra/utils").ColorType;
|
|
18
18
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
19
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -3,10 +3,10 @@ import { useFormFallbackProps } from "@veltra/compositions";
|
|
|
3
3
|
import { bem, injectFormContext } from "@veltra/utils";
|
|
4
4
|
//#region src/components/switch/switch.vue
|
|
5
5
|
const _hoisted_1 = ["checked", "disabled"];
|
|
6
|
-
const _sfc_main =
|
|
7
|
-
name: "
|
|
6
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
7
|
+
name: "USwitch",
|
|
8
8
|
__name: "switch",
|
|
9
|
-
props:
|
|
9
|
+
props: /*@__PURE__*/ mergeModels({
|
|
10
10
|
modelValue: { type: Boolean },
|
|
11
11
|
activeText: {},
|
|
12
12
|
inactiveText: {},
|
|
@@ -28,7 +28,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
28
28
|
"modelValue": { type: Boolean },
|
|
29
29
|
"modelModifiers": {}
|
|
30
30
|
}),
|
|
31
|
-
emits:
|
|
31
|
+
emits: /*@__PURE__*/ mergeModels(["update:modelValue", "change"], ["update:modelValue"]),
|
|
32
32
|
setup(__props, { emit: __emit }) {
|
|
33
33
|
const props = __props;
|
|
34
34
|
const emit = __emit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","names":[],"sources":["../../../src/components/switch/switch.vue"],"sourcesContent":["<template>\n <label :class=\"switchClass\" @click.stop>\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n hidden\n :checked=\"model\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n />\n <span :class=\"[cls.e('text'), bem.is('selected', !model)]\" v-if=\"inactiveText\">\n {{ inactiveText }}\n </span>\n\n <div :class=\"cls.e('button')\">\n <span :class=\"cls.e('thumb')\"></span>\n </div>\n\n <span v-if=\"activeText\" :class=\"[cls.e('text'), bem.is('selected', model)]\">\n {{ activeText }}\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"switch.js","names":[],"sources":["../../../src/components/switch/switch.vue"],"sourcesContent":["<template>\n <label :class=\"switchClass\" @click.stop>\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n hidden\n :checked=\"model\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n />\n <span :class=\"[cls.e('text'), bem.is('selected', !model)]\" v-if=\"inactiveText\">\n {{ inactiveText }}\n </span>\n\n <div :class=\"cls.e('button')\">\n <span :class=\"cls.e('thumb')\"></span>\n </div>\n\n <span v-if=\"activeText\" :class=\"[cls.e('text'), bem.is('selected', model)]\">\n {{ activeText }}\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'\n\ndefineOptions({ name: 'USwitch' })\n\nconst props = withDefaults(defineProps<SwitchProps>(), { disabled: undefined, readonly: undefined })\n\nconst emit = defineEmits<SwitchEmits>()\n\nconst model = defineModel<boolean>()\n\nconst cls = bem('switch')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst switchClass = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('checked', model.value)\n ]\n})\n\nconst handleInput = (e: Event) => {\n if (disabled.value || readonly.value) return\n\n const newValue = (e.target as HTMLInputElement).checked\n model.value = newValue\n emit('change', newValue)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,QAAQ,SAAoB,SAAA,YAAC;EAEnC,MAAM,MAAM,IAAI,QAAQ;EAExB,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;EAElF,MAAM,cAAc,eAAe;GACjC,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,KAAK;IAChB,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,WAAW,MAAM,KAAK;GAC/B;EACF,CAAC;EAED,MAAM,eAAe,MAAa;GAChC,IAAI,SAAS,SAAS,SAAS,OAAO;GAEtC,MAAM,WAAY,EAAE,OAA4B;GAChD,MAAM,QAAQ;GACd,KAAK,UAAU,QAAQ;EACzB;;uBA7DE,mBAoBQ,SAAA;IApBA,OAAK,eAAE,YAAA,KAAW;IAAG,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;;IACrC,mBAOE,SAAA;KANA,MAAK;KACJ,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;KACb,QAAA;KACC,SAAS,MAAA;KACT,UAAU,MAAA,QAAA;KACV,SAAO;;IAEuD,QAAA,gBAAA,UAAA,GAAjE,mBAEO,QAAA;;KAFA,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,GAAU,MAAA,GAAA,CAAG,CAAC,GAAE,YAAA,CAAc,MAAA,KAAK,CAAA,CAAA;uBAClD,QAAA,YAAY,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;IAGjB,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA,CAChB,mBAAqC,QAAA,EAA9B,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA,EAAA,GAAA,MAAA,CAAA,CAAA,GAAA,CAAA;IAGT,QAAA,cAAA,UAAA,GAAZ,mBAEO,QAAA;;KAFkB,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,GAAU,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,MAAA,KAAK,CAAA,CAAA;uBACnE,QAAA,UAAU,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA"}
|
|
@@ -14,8 +14,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
14
14
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
15
15
|
onChange?: ((value: boolean) => any) | undefined;
|
|
16
16
|
}>, {
|
|
17
|
-
readonly: boolean;
|
|
18
17
|
disabled: boolean;
|
|
18
|
+
readonly: boolean;
|
|
19
19
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
20
|
declare const _default: typeof __VLS_export;
|
|
21
21
|
//#endregion
|
|
@@ -5,8 +5,8 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
|
|
|
5
5
|
import { bem } from "@veltra/utils";
|
|
6
6
|
//#region src/components/table/table-body.vue
|
|
7
7
|
const _hoisted_1 = ["colspan"];
|
|
8
|
-
const _sfc_main =
|
|
9
|
-
name: "
|
|
8
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
9
|
+
name: "UTableBody",
|
|
10
10
|
__name: "table-body",
|
|
11
11
|
setup(__props) {
|
|
12
12
|
const { cls, rows, virtualList, columnConfig, tableProps, virtualEnabled } = inject(TableDIKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-body.js","names":[],"sources":["../../../src/components/table/table-body.vue"],"sourcesContent":["<template>\n <tbody :class=\"bodyCls\">\n <template v-for=\"{ row, index, stripeIndex } of tableRows\" :key=\"row.uid\">\n <UExpandTableRow v-if=\"row.isExpandRow\" :row=\"row\" :index=\"index\" />\n <UTableRow v-else :row=\"row\" :index=\"index\" :class=\"getStripeCls(stripeIndex)\" />\n </template>\n\n <!-- 空 -->\n <tr v-if=\"!rows.length\" :class=\"emptyRowCls\">\n <td :colspan=\"leafColumns.length\">\n <slot name=\"empty\">\n <UEmpty :class=\"emptyCls\" />\n </slot>\n </td>\n </tr>\n\n <slot></slot>\n </tbody>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UEmpty } from '../empty'\nimport { TableDIKey } from './di'\nimport { UTableRow, UExpandTableRow } from './table-row'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"table-body.js","names":[],"sources":["../../../src/components/table/table-body.vue"],"sourcesContent":["<template>\n <tbody :class=\"bodyCls\">\n <template v-for=\"{ row, index, stripeIndex } of tableRows\" :key=\"row.uid\">\n <UExpandTableRow v-if=\"row.isExpandRow\" :row=\"row\" :index=\"index\" />\n <UTableRow v-else :row=\"row\" :index=\"index\" :class=\"getStripeCls(stripeIndex)\" />\n </template>\n\n <!-- 空 -->\n <tr v-if=\"!rows.length\" :class=\"emptyRowCls\">\n <td :colspan=\"leafColumns.length\">\n <slot name=\"empty\">\n <UEmpty :class=\"emptyCls\" />\n </slot>\n </td>\n </tr>\n\n <slot></slot>\n </tbody>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UEmpty } from '../empty'\nimport { TableDIKey } from './di'\nimport { UTableRow, UExpandTableRow } from './table-row'\n\ndefineOptions({ name: 'UTableBody' })\n\nconst { cls, rows, virtualList, columnConfig, tableProps, virtualEnabled } = inject(TableDIKey)!\nconst { leafColumns } = columnConfig\n\n// A1 的同族优化:把 body / empty / empty-row 等静态 class 一次性取出,\n// 避免每次 render 触发 `cls.e` 的字符串拼接。\nconst bodyCls = cls.e('body')\nconst emptyRowCls = cls.e('row')\nconst emptyCls = cls.e('empty')\n\n/**\n * C1:stripe class 查找表。\n *\n * `bem.is('stripe', true) === 'is-stripe'`,`bem.is('stripe', false) === ''`。\n * 两种输出是全局常量,无需每次调用 `bem.is`;按奇偶直接查表即可。\n * 非 stripe 模式下两个位置均返回空串。\n */\nconst STRIPE_CLS_ON: readonly [string, string] = [bem.is('stripe', false), bem.is('stripe', true)]\nconst STRIPE_CLS_OFF: readonly [string, string] = ['', '']\n\nconst stripeTable = computed<readonly [string, string]>(() =>\n tableProps.stripe ? STRIPE_CLS_ON : STRIPE_CLS_OFF\n)\nconst getStripeCls = (index: number): string => stripeTable.value[index & 1]!\n\nconst tableRows = computed(() => {\n if (!virtualEnabled.value) {\n return rows.value.map((row, index) => {\n return { row, stripeIndex: row.index, index }\n })\n }\n\n // 虚拟列表:仅渲染可视窗口内的行,位置由 table.vue 中的 before/after 占位 tbody 撑开\n return virtualList.value.map((item) => {\n return {\n row: rows.value[item.index]!,\n stripeIndex: rows.value[item.index]!.index,\n index: item.index\n }\n })\n})\n</script>\n"],"mappings":";;;;;;;;;;;EA8BA,MAAM,EAAE,KAAK,MAAM,aAAa,cAAc,YAAY,mBAAmB,OAAO,UAAU;EAC9F,MAAM,EAAE,gBAAgB;EAIxB,MAAM,UAAU,IAAI,EAAE,MAAM;EAC5B,MAAM,cAAc,IAAI,EAAE,KAAK;EAC/B,MAAM,WAAW,IAAI,EAAE,OAAO;;;;;;;;EAS9B,MAAM,gBAA2C,CAAC,IAAI,GAAG,UAAU,KAAK,GAAG,IAAI,GAAG,UAAU,IAAI,CAAC;EACjG,MAAM,iBAA4C,CAAC,IAAI,EAAE;EAEzD,MAAM,cAAc,eAClB,WAAW,SAAS,gBAAgB,cACtC;EACA,MAAM,gBAAgB,UAA0B,YAAY,MAAM,QAAQ;EAE1E,MAAM,YAAY,eAAe;GAC/B,IAAI,CAAC,eAAe,OAClB,OAAO,KAAK,MAAM,KAAK,KAAK,UAAU;IACpC,OAAO;KAAE;KAAK,aAAa,IAAI;KAAO;IAAM;GAC9C,CAAC;GAIH,OAAO,YAAY,MAAM,KAAK,SAAS;IACrC,OAAO;KACL,KAAK,KAAK,MAAM,KAAK;KACrB,aAAa,KAAK,MAAM,KAAK,MAAM,CAAE;KACrC,OAAO,KAAK;IACd;GACF,CAAC;EACH,CAAC;;uBApEC,mBAgBQ,SAAA,EAhBA,OAAK,eAAE,MAAA,OAAA,CAAO,EAAA,GAAA;sBACpB,mBAGW,UAAA,MAAA,WAHqC,UAAA,QAAS,EAAtC,KAAK,OAAO,kBAAW;6DAAuB,IAAI,IAAA,GAAA,CAC5C,IAAI,eAAA,UAAA,GAA3B,YAAoE,MAAA,eAAA,GAAA;;MAAtB;MAAa;oDAC3D,YAAiF,MAAA,SAAA,GAAA;;MAAzD;MAAa;MAAQ,OAAK,eAAE,aAAa,WAAW,CAAA;;;;;;;IAG9E,mBAAA,KAAA;KACW,MAAA,IAAA,CAAI,CAAC,UAAA,UAAA,GAAhB,mBAMK,MAAA;;KANoB,OAAK,eAAE,MAAA,WAAA,CAAW;QACzC,mBAIK,MAAA,EAJA,SAAS,MAAA,WAAA,CAAW,CAAC,OAAA,GAAA,CACxB,WAEO,KAAA,QAAA,SAAA,CAAA,SAAA,CADL,YAA4B,MAAA,WAAA,GAAA,EAAnB,OAAK,eAAE,MAAA,QAAA,CAAQ,EAAA,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,GAAA,GAAA,UAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;IAK9B,WAAa,KAAA,QAAA,SAAA"}
|
|
@@ -2,8 +2,8 @@ import { computed, createCommentVNode, createElementBlock, defineComponent, norm
|
|
|
2
2
|
import { withUnit } from "@veltra/utils";
|
|
3
3
|
//#region src/components/table/table-cell.vue
|
|
4
4
|
const _hoisted_1 = ["rowspan", "colspan"];
|
|
5
|
-
const _sfc_main =
|
|
6
|
-
name: "
|
|
5
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
6
|
+
name: "UTableCell",
|
|
7
7
|
__name: "table-cell",
|
|
8
8
|
props: {
|
|
9
9
|
cellClass: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-cell.js","names":[],"sources":["../../../src/components/table/table-cell.vue"],"sourcesContent":["<template>\n <td\n :class=\"cellClass\"\n :style=\"style\"\n :rowspan=\"rowspan\"\n :colspan=\"colspan\"\n v-if=\"rowspan !== 0 && colspan !== 0\"\n >\n <slot />\n </td>\n</template>\n\n<script lang=\"ts\" setup>\nimport { withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"table-cell.js","names":[],"sources":["../../../src/components/table/table-cell.vue"],"sourcesContent":["<template>\n <td\n :class=\"cellClass\"\n :style=\"style\"\n :rowspan=\"rowspan\"\n :colspan=\"colspan\"\n v-if=\"rowspan !== 0 && colspan !== 0\"\n >\n <slot />\n </td>\n</template>\n\n<script lang=\"ts\" setup>\nimport { withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\ndefineOptions({ name: 'UTableCell' })\n\n/**\n * B2: TableCell 去 inject 化。\n *\n * 原先每个可见单元格都会执行 `inject(TableDIKey)` 并在模板中调用 `getCellClass(column)`,\n * 在 30 列场景下每次滚动每行产生 30 次 inject / 30 次类名拼接。\n * 父组件 `TableRow` 已经持有注入上下文,直接把 `cellClass` 传下来即可;\n * 这里变成「完全受控」的纯渲染单元。\n */\nconst { left, right } = defineProps<{\n cellClass: string\n left?: number\n right?: number\n rowspan?: number\n colspan?: number\n}>()\n\nconst style = computed(() => ({ left: withUnit(left, 'px'), right: withUnit(right, 'px') }))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ,gBAAgB;GAAE,MAAM,SAAS,QAAA,MAAM,IAAI;GAAG,OAAO,SAAS,QAAA,OAAO,IAAI;EAAE,EAAE;;UA5BjF,QAAA,YAAO,KAAU,QAAA,YAAO,KAAA,UAAA,GALhC,mBAQK,MAAA;;IAPF,OAAK,eAAE,QAAA,SAAS;IAChB,OAAK,eAAE,MAAA,KAAK;IACZ,SAAS,QAAA;IACT,SAAS,QAAA;OAGV,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA,KAAA,mBAAA,QAAA,IAAA"}
|
|
@@ -5,8 +5,8 @@ import { withUnit } from "@veltra/utils";
|
|
|
5
5
|
import { $n } from "@cat-kit/core";
|
|
6
6
|
//#region src/components/table/table-foot.vue
|
|
7
7
|
const _hoisted_1 = { key: 0 };
|
|
8
|
-
const _sfc_main =
|
|
9
|
-
name: "
|
|
8
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
9
|
+
name: "UTableFoot",
|
|
10
10
|
__name: "table-foot",
|
|
11
11
|
setup(__props, { expose: __expose }) {
|
|
12
12
|
const { cls, columnConfig, rows, checkedRows, tableSlots, getCellClass } = inject(TableDIKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-foot.js","names":[],"sources":["../../../src/components/table/table-foot.vue"],"sourcesContent":["<template>\n <tfoot v-if=\"tableSlots.foot || showSummary\" :class=\"cls.e('foot')\">\n <tr v-if=\"showSummary\">\n <td\n v-if=\"leafColumns[0]\"\n :class=\"getCellClass(leafColumns[0])\"\n :style=\"{\n right: withUnit(leafColumns[0].style.right, 'px'),\n left: withUnit(leafColumns[0].style.left, 'px')\n }\"\n >\n 合计:\n </td>\n <td\n v-for=\"column of leafColumns.slice(1)\"\n :class=\"getCellClass(column)\"\n :key=\"column.key\"\n :style=\"{\n right: withUnit(column.style.right, 'px'),\n left: withUnit(column.style.left, 'px')\n }\"\n >\n <u-node-render :content=\"getColumnSummaryNode(column)\" />\n </td>\n </tr>\n <slot />\n </tfoot>\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { withUnit, type RenderReturn } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UNodeRender } from '../node-render'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ndefineOptions({ name: '
|
|
1
|
+
{"version":3,"file":"table-foot.js","names":[],"sources":["../../../src/components/table/table-foot.vue"],"sourcesContent":["<template>\n <tfoot v-if=\"tableSlots.foot || showSummary\" :class=\"cls.e('foot')\">\n <tr v-if=\"showSummary\">\n <td\n v-if=\"leafColumns[0]\"\n :class=\"getCellClass(leafColumns[0])\"\n :style=\"{\n right: withUnit(leafColumns[0].style.right, 'px'),\n left: withUnit(leafColumns[0].style.left, 'px')\n }\"\n >\n 合计:\n </td>\n <td\n v-for=\"column of leafColumns.slice(1)\"\n :class=\"getCellClass(column)\"\n :key=\"column.key\"\n :style=\"{\n right: withUnit(column.style.right, 'px'),\n left: withUnit(column.style.left, 'px')\n }\"\n >\n <u-node-render :content=\"getColumnSummaryNode(column)\" />\n </td>\n </tr>\n <slot />\n </tfoot>\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { withUnit, type RenderReturn } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UNodeRender } from '../node-render'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ndefineOptions({ name: 'UTableFoot' })\n\nconst { cls, columnConfig, rows, checkedRows, tableSlots, getCellClass } = inject(TableDIKey)!\n\nconst { leafColumns } = columnConfig\n\nconst showSummary = computed(() => {\n return leafColumns.value.some((col) => !!col.data.summary)\n})\n\nfunction computeSummary(key: string) {\n let sum = 0\n let i = 0\n\n while (i < rows.value.length) {\n sum = $n.plus(sum, rows.value[i]!.data[key] ?? 0)\n if (isNaN(sum)) return sum\n i++\n }\n\n return sum\n}\n\nconst summaryRow = computed<Record<string, any>>(() => {\n return leafColumns.value.reduce((acc, column) => {\n if (column.data.summary) {\n acc[column.key] = computeSummary(column.key)\n }\n return acc\n }, {})\n})\n\nfunction getColumnSummaryNode(column: ColumnNode): RenderReturn {\n const { summary } = column.data\n\n if (!summary) return null\n\n let total = summaryRow.value[column.key]\n\n if (typeof summary === 'function') {\n return summary({ total, rows: rows.value, checkedRows: checkedRows.value, column })\n }\n return total\n}\n\ndefineExpose({\n getSummaryRow(): Record<string, any> {\n return summaryRow.value\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;EAwCA,MAAM,EAAE,KAAK,cAAc,MAAM,aAAa,YAAY,iBAAiB,OAAO,UAAU;EAE5F,MAAM,EAAE,gBAAgB;EAExB,MAAM,cAAc,eAAe;GACjC,OAAO,YAAY,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,KAAK,OAAO;EAC3D,CAAC;EAED,SAAS,eAAe,KAAa;GACnC,IAAI,MAAM;GACV,IAAI,IAAI;GAER,OAAO,IAAI,KAAK,MAAM,QAAQ;IAC5B,MAAM,GAAG,KAAK,KAAK,KAAK,MAAM,EAAE,CAAE,KAAK,QAAQ,CAAC;IAChD,IAAI,MAAM,GAAG,GAAG,OAAO;IACvB;GACF;GAEA,OAAO;EACT;EAEA,MAAM,aAAa,eAAoC;GACrD,OAAO,YAAY,MAAM,QAAQ,KAAK,WAAW;IAC/C,IAAI,OAAO,KAAK,SACd,IAAI,OAAO,OAAO,eAAe,OAAO,GAAG;IAE7C,OAAO;GACT,GAAG,CAAC,CAAC;EACP,CAAC;EAED,SAAS,qBAAqB,QAAkC;GAC9D,MAAM,EAAE,YAAY,OAAO;GAE3B,IAAI,CAAC,SAAS,OAAO;GAErB,IAAI,QAAQ,WAAW,MAAM,OAAO;GAEpC,IAAI,OAAO,YAAY,YACrB,OAAO,QAAQ;IAAE;IAAO,MAAM,KAAK;IAAO,aAAa,YAAY;IAAO;GAAO,CAAC;GAEpF,OAAO;EACT;EAEA,SAAa,EACX,gBAAqC;GACnC,OAAO,WAAW;EACpB,EACF,CAAC;;UAtFc,MAAA,UAAA,CAAU,CAAC,QAAQ,YAAA,SAAA,UAAA,GAAhC,mBAyBQ,SAAA;;IAzBsC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;OAC9C,YAAA,SAAA,UAAA,GAAV,mBAsBK,MAAA,YAAA,CApBK,MAAA,WAAA,CAAW,CAAA,MAAA,UAAA,GADnB,mBASK,MAAA;;IAPF,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,MAAA,WAAA,CAAW,CAAA,EAAA,CAAA;IAC/B,OAAK,eAAA;YAAqB,MAAA,QAAA,CAAQ,CAAC,MAAA,WAAA,CAAW,CAAA,EAAA,CAAI,MAAM,OAAK,IAAA;WAAyB,MAAA,QAAA,CAAQ,CAAC,MAAA,WAAA,CAAW,CAAA,EAAA,CAAI,MAAM,MAAI,IAAA;;MAI1H,SAED,CAAA,KAAA,mBAAA,QAAA,IAAA,IAAA,UAAA,IAAA,GACA,mBAUK,UAAA,MAAA,WATc,MAAA,WAAA,CAAW,CAAC,MAAK,CAAA,IAA3B,WAAM;wBADf,mBAUK,MAAA;KARF,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,MAAM,CAAA;KAC1B,KAAK,OAAO;KACZ,OAAK,eAAA;aAAqB,MAAA,QAAA,CAAQ,CAAC,OAAO,MAAM,OAAK,IAAA;YAAyB,MAAA,QAAA,CAAQ,CAAC,OAAO,MAAM,MAAI,IAAA;;QAKzG,YAAyD,MAAA,UAAA,GAAA,EAAzC,SAAS,qBAAqB,MAAM,EAAA,GAAA,MAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA;oDAGxD,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-head.js","names":[
|
|
1
|
+
{"version":3,"file":"table-head.js","names":[],"sources":["../../../src/components/table/table-head.tsx"],"sourcesContent":["import { bem, withUnit } from '@veltra/utils'\nimport { defineComponent, inject, type DefineComponent } from 'vue'\n\nimport { TableDIKey, TableResizeKey } from './di'\n\nconst TableHead: DefineComponent = defineComponent({\n name: 'TableHead',\n setup() {\n const { cls, columnConfig, getHeaderSlotsNode, getHeaderCellClass } = inject(TableDIKey)!\n const { headers } = columnConfig\n const handleCls = cls.e('resize-handle')\n\n const { handleResizeMousedown, headerRef } = inject(TableResizeKey)!\n\n return () => (\n <thead\n class={[cls.e('head'), bem.is('multistage', headers.value.length > 1)]}\n ref={headerRef}\n >\n {headers.value.map((header, headerIndex) => (\n <tr>\n {header.map((column) => (\n <th\n class={getHeaderCellClass(column)}\n key={column.key}\n colspan={column.leafs}\n rowspan={column.children?.length ? undefined : headers.value.length - headerIndex}\n style={{\n left: withUnit(column.style.left, 'px'),\n right: withUnit(column.style.right, 'px')\n }}\n >\n {getHeaderSlotsNode({ column })}\n\n {column.isLeaf && column.resizable ? (\n <span\n class={handleCls}\n onMousedown={(e) => handleResizeMousedown(e, column)}\n ></span>\n ) : null}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n )\n }\n})\n\nexport default TableHead\n"],"mappings":";;;;AAKA,MAAM,YAA6B,gBAAgB;CACjD,MAAM;CACN,QAAQ;EACN,MAAM,EAAE,KAAK,cAAc,oBAAoB,uBAAuB,OAAO,UAAU;EACvF,MAAM,EAAE,YAAY;EACpB,MAAM,YAAY,IAAI,EAAE,eAAe;EAEvC,MAAM,EAAE,uBAAuB,cAAc,OAAO,cAAc;EAElE,aAAO,YAAA,SAAA;GAAA,SAEI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,QAAQ,MAAM,SAAS,CAAC,CAAC;GAAC,OACjE;EAAS,GAAA,CAEb,QAAQ,MAAM,KAAK,QAAQ,gBAAW,YAAA,MAAA,MAAA,CAElC,OAAO,KAAK,WAAM,YAAA,MAAA;GAAA,SAER,mBAAmB,MAAM;GAAC,OAC5B,OAAO;GAAG,WACN,OAAO;GAAK,WACZ,OAAO,UAAU,SAAS,KAAA,IAAY,QAAQ,MAAM,SAAS;GAAW,SAC1E;IACL,MAAM,SAAS,OAAO,MAAM,MAAM,IAAI;IACtC,OAAO,SAAS,OAAO,MAAM,OAAO,IAAI;GAC1C;EAAC,GAAA,CAEA,mBAAmB,EAAE,OAAO,CAAC,GAE7B,OAAO,UAAU,OAAO,YAAS,YAAA,QAAA;GAAA,SAEvB;GAAS,gBACF,MAAM,sBAAsB,GAAG,MAAM;EAAC,GAAA,IAAA,IAEpD,IAAI,CAAA,CAEX,CAAC,CAAA,CAEL,CAAC,CAAA;CAGR;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-row.js","names":["ArrowRight","defineComponent","DefineComponent","inject","onUnmounted","JSX","TableRow","ITableRow","UButton","UIcon","TableDIKey","UTabelCell","_isSlot","s","Object","prototype","toString","call","_isVNode","ROW_MOD_CLASS","const","rowModCls","row","i","isCurrent","checked","expanded","UTableRow","index","name","props","type","required","Number","setup","cls","columnConfig","getColumnSlotsNode","toggleTreeRowExpand","getCellCtx","handleRowClick","handleCellClick","tableProps","measureElement","getCellClass","rowBaseCls","e","expandToggleCls","expandSpaceCls","measureRefCache","Map","el","getMeasureRef","ref","get","undefined","Element","set","clear","columns","expandColumn","_expandColumn","value","expandCell","expandCtx","cellSpan","mergeCell","colspan","rowspan","marginLeft","tree","depth","_createVNode","_mergeProps","style","left","right","uid","key","default","isLeaf","expandable","isExpandRow","stopPropagation","mod","rowCls","map","column","cellCtx","cellNode","UExpandTableRow","getExpandRowSlotsNode","leafColumns","cellCls","measureRef","node","rowData","data","length"],"sources":["../../../src/components/table/table-row.tsx"],"sourcesContent":["import { ArrowRight } from '@veltra/icons/normal'\nimport { defineComponent, type DefineComponent } from 'vue'\nimport { inject, onUnmounted } from 'vue'\nimport type { JSX } from 'vue/jsx-runtime'\n\nimport type { TableRow as ITableRow } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { TableDIKey } from './di'\nimport UTabelCell from './table-cell.vue'\n\n/**\n * A3:行修饰类组合静态查找表。\n *\n * 位模式:bit2 = isCurrent, bit1 = checked, bit0 = expanded。\n * 与 `bem.is('...')` 对于 `'current' | 'checked' | 'expanded'` 的输出完全等价,\n * 直接从 index 读字符串,消除每行渲染期间的字符串拼接和 3 次 bem.is 调用。\n *\n * 放在模块顶层使所有 TableRow 实例共享一份引用(不会随 setup 重建)。\n */\nconst ROW_MOD_CLASS: readonly string[] = [\n '',\n 'is-expanded',\n 'is-checked',\n 'is-checked is-expanded',\n 'is-current',\n 'is-current is-expanded',\n 'is-current is-checked',\n 'is-current is-checked is-expanded'\n] as const\n\nfunction rowModCls(row: ITableRow): string {\n const i = (row.isCurrent ? 4 : 0) | (row.checked ? 2 : 0) | (row.expanded ? 1 : 0)\n return ROW_MOD_CLASS[i]!\n}\n\nexport const UTableRow: DefineComponent<{ row: ITableRow; index: number }> = defineComponent({\n name: 'TableRow',\n\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n\n setup(props) {\n const {\n cls,\n columnConfig,\n getColumnSlotsNode,\n toggleTreeRowExpand,\n getCellCtx,\n handleRowClick,\n handleCellClick,\n tableProps,\n measureElement,\n getCellClass\n } = inject(TableDIKey)!\n\n // A1:把 cls.e('row') / cls.e('expand-toggle') 等静态字符串提升到 setup 一次性计算,\n // 避免每次 render 重新走 `cls.e` 拼接。\n const rowBaseCls = cls.e('row')\n const expandToggleCls = cls.e('expand-toggle')\n const expandSpaceCls = cls.e('expand-space')\n\n // A2:measureRef 按 index 缓存闭包。\n // 行虚拟化下,同一 TableRow 实例的 props.index 大多稳定,但在虚拟化重排或展开行切换时\n // 仍会发生变化;把 (index) → refFn 缓存起来,既保证引用稳定(利于 Vue 的 ref diff),\n // 又避免在未来可能的\"同实例跨 index 复用\"情形下重复分配闭包。\n const measureRefCache = new Map<number, (el: unknown) => void>()\n const getMeasureRef = (index: number): ((el: unknown) => void) => {\n let ref = measureRefCache.get(index)\n if (ref === undefined) {\n ref = (el: unknown) => {\n measureElement(index, el as Element | null)\n }\n measureRefCache.set(index, ref)\n }\n return ref\n }\n onUnmounted(() => {\n measureRefCache.clear()\n })\n\n const { columns, expandColumn } = columnConfig\n\n return () => {\n const { row } = props\n const _expandColumn = expandColumn.value\n\n let expandCell: JSX.Element | null = null\n if (_expandColumn) {\n const expandCtx = getCellCtx(row, _expandColumn)\n const cellSpan = tableProps.mergeCell?.(expandCtx)\n\n if (!cellSpan || (cellSpan.colspan && cellSpan.rowspan)) {\n const marginLeft = tableProps.tree ? row.depth * 14 : 0\n expandCell = (\n <UTabelCell\n cellClass={getCellClass(_expandColumn)}\n left={_expandColumn.style.left}\n right={_expandColumn.style.right}\n key={row.uid + _expandColumn.key}\n {...tableProps.mergeCell?.(expandCtx)}\n >\n {!row.isLeaf || (tableProps.expandable && !row.isExpandRow) ? (\n <UButton\n text\n class={expandToggleCls}\n type='primary'\n size='small'\n circle\n onClick={(e) => {\n e.stopPropagation()\n toggleTreeRowExpand(row)\n }}\n style={`margin-left: ${marginLeft}px`}\n >\n <UIcon>\n <ArrowRight />\n </UIcon>\n </UButton>\n ) : (\n <i class={expandSpaceCls} style={`margin-left: ${marginLeft}px`}></i>\n )}\n\n {getColumnSlotsNode(expandCtx)}\n </UTabelCell>\n )\n }\n }\n\n // A3:行 class 由 base + 3-bit 组合查找产出,避免 Vue 的 class 数组归一化开销。\n const mod = rowModCls(row)\n const rowCls = mod ? rowBaseCls + ' ' + mod : rowBaseCls\n\n return (\n <tr\n class={rowCls}\n onClick={(e) => handleRowClick(row, e)}\n ref={getMeasureRef(props.index)}\n key={row.uid}\n >\n {expandCell}\n\n {columns.value.map((column) => {\n const cellCtx = getCellCtx(row, column)\n const cellSpan = tableProps.mergeCell?.(cellCtx)\n if (cellSpan && (!cellSpan.colspan || !cellSpan.rowspan)) {\n return null\n }\n\n const cellNode = getColumnSlotsNode(cellCtx)\n\n return (\n <UTabelCell\n cellClass={getCellClass(column)}\n left={column.style.left}\n right={column.style.right}\n key={row.uid + column.key}\n // @ts-ignore\n onClick={(e) => handleCellClick(row, column, e)}\n {...cellSpan}\n >\n {cellNode}\n </UTabelCell>\n )\n })}\n </tr>\n )\n }\n }\n})\n\nexport const UExpandTableRow = defineComponent({\n name: 'ExpandTableRow',\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n setup(props) {\n const { getExpandRowSlotsNode, cls, measureElement, columnConfig } = inject(TableDIKey)!\n const { leafColumns } = columnConfig\n\n const rowBaseCls = cls.e('row')\n const cellCls = cls.e('cell')\n\n const measureRef = (el: unknown) => {\n measureElement(props.index, el as Element | null)\n }\n\n return () => {\n const { row } = props\n const node = getExpandRowSlotsNode({\n row,\n index: row.index,\n columns: leafColumns.value,\n rowData: row.data\n })\n return (\n <tr class={rowBaseCls} ref={measureRef}>\n <td colspan={leafColumns.value.length} class={cellCls}>\n {node}\n </td>\n </tr>\n )\n }\n }\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAWA,SAAAY,QAAAC,GAAA;CAAA,OAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAA,qBAAA,CAAAK,QAAAL,CAAA;AAAA;AASA,MAAMM,gBAAmC;CACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAAmC;AAGrC,SAASE,UAAUC,KAAwB;CAEzC,OAAOH,eADIG,IAAIE,YAAY,IAAI,MAAMF,IAAIG,UAAU,IAAI,MAAMH,IAAII,WAAW,IAAI;AAElF;AAEA,MAAaC,YAAgE1B,gBAAgB;CAC3F4B,MAAM;CAENC,OAAO;EACLR,KAAK;GAAES,MAAMjB;GAA2BkB,UAAU;EAAK;EACvDJ,OAAO;GAAEG,MAAME;GAAQD,UAAU;EAAK;CACxC;CAEAE,MAAMJ,OAAO;EACX,MAAM,EACJK,KACAC,cACAC,oBACAC,qBACAC,YACAC,gBACAC,iBACAC,YACAC,gBACAC,iBACEzC,OAAOO,UAAU;EAIrB,MAAMmC,aAAaV,IAAIW,EAAE,KAAK;EAC9B,MAAMC,kBAAkBZ,IAAIW,EAAE,eAAe;EAC7C,MAAME,iBAAiBb,IAAIW,EAAE,cAAc;EAM3C,MAAMG,kCAAkB,IAAIC,IAAmC;EAC/D,MAAME,iBAAiBxB,UAA2C;GAChE,IAAIyB,MAAMJ,gBAAgBK,IAAI1B,KAAK;GACnC,IAAIyB,QAAQE,KAAAA,GAAW;IACrBF,OAAOF,OAAgB;KACrBR,eAAef,OAAOuB,EAAoB;IAC5C;IACAF,gBAAgBQ,IAAI7B,OAAOyB,GAAG;GAChC;GACA,OAAOA;EACT;EACAjD,kBAAkB;GAChB6C,gBAAgBS,MAAM;EACxB,CAAC;EAED,MAAM,EAAEC,SAASC,iBAAiBxB;EAElC,aAAa;GACX,MAAM,EAAEd,QAAQQ;GAChB,MAAM+B,gBAAgBD,aAAaE;GAEnC,IAAIC,aAAiC;GACrC,IAAIF,eAAe;IACjB,MAAMG,YAAYzB,WAAWjB,KAAKuC,aAAa;IAC/C,MAAMI,WAAWvB,WAAWwB,YAAYF,SAAS;IAEjD,IAAI,CAACC,YAAaA,SAASE,WAAWF,SAASG,SAAU;KACvD,MAAMC,aAAa3B,WAAW4B,OAAOhD,IAAIiD,QAAQ,KAAK;KACtDR,aAAUS,YAAA7D,aAAA8D,WAAA;MAAA,aAEK7B,aAAaiB,aAAa;MAAC,QAChCA,cAAca,MAAMC;MAAI,SACvBd,cAAca,MAAME;MAAK,OAC3BtD,IAAIuD,MAAMhB,cAAciB;KAAG,GAC5BpC,WAAWwB,YAAYF,SAAS,CAAC,GAAA,EAAAe,eAAA,CAEpC,CAACzD,IAAI0D,UAAWtC,WAAWuC,cAAc,CAAC3D,IAAI4D,cAAYV,YAAAhE,aAAA;MAAA,QAAA;MAAA,SAGhDuC;MAAe,QAAA;MAAA,QAAA;MAAA,UAAA;MAAA,YAIZD,MAAM;OACdA,EAAEqC,gBAAgB;OAClB7C,oBAAoBhB,GAAG;MACzB;MAAC,SACM,gBAAgB+C,WAAU;KAAI,GAAA,EAAAU,eAAA,CAAAP,YAAA/D,WAAA,MAAA,EAAAsE,eAAA,CAAAP,YAAAxE,YAAA,MAAA,IAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,IAAAwE,YAAA,KAAA;MAAA,SAO7BxB;MAAc,SAAS,gBAAgBqB,WAAU;KAAI,GAAA,IAAA,GAGhEhC,mBAAmB2B,SAAS,CAAC,EAAA,CAAA;IAGpC;GACF;GAGA,MAAMoB,MAAM/D,UAAUC,GAAG;GAGzB,OAAAkD,YAAA,MAAA;IAAA,SAFeY,MAAMvC,aAAa,MAAMuC,MAAMvC;IAI7B,YACHC,MAAMN,eAAelB,KAAKwB,CAAC;IAAC,OACjCM,cAActB,MAAMF,KAAK;IAAC,OAC1BN,IAAIuD;GAAG,GAAA,CAEXd,YAEAJ,QAAQG,MAAMwB,KAAKC,WAAW;IAC7B,MAAMC,UAAUjD,WAAWjB,KAAKiE,MAAM;IACtC,MAAMtB,WAAWvB,WAAWwB,YAAYsB,OAAO;IAC/C,IAAIvB,aAAa,CAACA,SAASE,WAAW,CAACF,SAASG,UAC9C,OAAO;IAGT,MAAMqB,WAAWpD,mBAAmBmD,OAAO;IAE3C,OAAAhB,YAAA7D,aAAA8D,WAAA;KAAA,aAEe7B,aAAa2C,MAAM;KAAC,QACzBA,OAAOb,MAAMC;KAAI,SAChBY,OAAOb,MAAME;KAAK,OACpBtD,IAAIuD,MAAMU,OAAOT;KAAG,YAEfhC,MAAML,gBAAgBnB,KAAKiE,QAAQzC,CAAC;IAAC,GAC3CmB,QAAQ,GAAArD,QAEX6E,QAAQ,IAARA,WAAQ,EAAAV,eAAA,CAARU,QAAQ,EAAA,CAAA;GAGf,CAAC,CAAC,CAAA;EAGR;CACF;AACF,CAAC;AAED,MAAaC,kBAAkBzF,gBAAgB;CAC7C4B,MAAM;CACNC,OAAO;EACLR,KAAK;GAAES,MAAMjB;GAA2BkB,UAAU;EAAK;EACvDJ,OAAO;GAAEG,MAAME;GAAQD,UAAU;EAAK;CACxC;CACAE,MAAMJ,OAAO;EACX,MAAM,EAAE6D,uBAAuBxD,KAAKQ,gBAAgBP,iBAAiBjC,OAAOO,UAAU;EACtF,MAAM,EAAEkF,gBAAgBxD;EAExB,MAAMS,aAAaV,IAAIW,EAAE,KAAK;EAC9B,MAAM+C,UAAU1D,IAAIW,EAAE,MAAM;EAE5B,MAAMgD,cAAc3C,OAAgB;GAClCR,eAAeb,MAAMF,OAAOuB,EAAoB;EAClD;EAEA,aAAa;GACX,MAAM,EAAE7B,QAAQQ;GAChB,MAAMiE,OAAOJ,sBAAsB;IACjCrE;IACAM,OAAON,IAAIM;IACX+B,SAASiC,YAAY9B;IACrBkC,SAAS1E,IAAI2E;GACf,CAAC;GACD,OAAAzB,YAAA,MAAA;IAAA,SACa3B;IAAU,OAAOiD;GAAU,GAAA,CAAAtB,YAAA,MAAA;IAAA,WACvBoB,YAAY9B,MAAMoC;IAAM,SAASL;GAAO,GAAA,CAClDE,IAAI,CAAA,CAAA,CAAA;EAIb;CACF;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"table-row.js","names":[],"sources":["../../../src/components/table/table-row.tsx"],"sourcesContent":["import { ArrowRight } from '@veltra/icons/normal'\nimport { defineComponent, type DefineComponent } from 'vue'\nimport { inject, onUnmounted } from 'vue'\nimport type { JSX } from 'vue/jsx-runtime'\n\nimport type { TableRow as ITableRow } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { TableDIKey } from './di'\nimport UTabelCell from './table-cell.vue'\n\n/**\n * A3:行修饰类组合静态查找表。\n *\n * 位模式:bit2 = isCurrent, bit1 = checked, bit0 = expanded。\n * 与 `bem.is('...')` 对于 `'current' | 'checked' | 'expanded'` 的输出完全等价,\n * 直接从 index 读字符串,消除每行渲染期间的字符串拼接和 3 次 bem.is 调用。\n *\n * 放在模块顶层使所有 TableRow 实例共享一份引用(不会随 setup 重建)。\n */\nconst ROW_MOD_CLASS: readonly string[] = [\n '',\n 'is-expanded',\n 'is-checked',\n 'is-checked is-expanded',\n 'is-current',\n 'is-current is-expanded',\n 'is-current is-checked',\n 'is-current is-checked is-expanded'\n] as const\n\nfunction rowModCls(row: ITableRow): string {\n const i = (row.isCurrent ? 4 : 0) | (row.checked ? 2 : 0) | (row.expanded ? 1 : 0)\n return ROW_MOD_CLASS[i]!\n}\n\nexport const UTableRow: DefineComponent<{ row: ITableRow; index: number }> = defineComponent({\n name: 'TableRow',\n\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n\n setup(props) {\n const {\n cls,\n columnConfig,\n getColumnSlotsNode,\n toggleTreeRowExpand,\n getCellCtx,\n handleRowClick,\n handleCellClick,\n tableProps,\n measureElement,\n getCellClass\n } = inject(TableDIKey)!\n\n // A1:把 cls.e('row') / cls.e('expand-toggle') 等静态字符串提升到 setup 一次性计算,\n // 避免每次 render 重新走 `cls.e` 拼接。\n const rowBaseCls = cls.e('row')\n const expandToggleCls = cls.e('expand-toggle')\n const expandSpaceCls = cls.e('expand-space')\n\n // A2:measureRef 按 index 缓存闭包。\n // 行虚拟化下,同一 TableRow 实例的 props.index 大多稳定,但在虚拟化重排或展开行切换时\n // 仍会发生变化;把 (index) → refFn 缓存起来,既保证引用稳定(利于 Vue 的 ref diff),\n // 又避免在未来可能的\"同实例跨 index 复用\"情形下重复分配闭包。\n const measureRefCache = new Map<number, (el: unknown) => void>()\n const getMeasureRef = (index: number): ((el: unknown) => void) => {\n let ref = measureRefCache.get(index)\n if (ref === undefined) {\n ref = (el: unknown) => {\n measureElement(index, el as Element | null)\n }\n measureRefCache.set(index, ref)\n }\n return ref\n }\n onUnmounted(() => {\n measureRefCache.clear()\n })\n\n const { columns, expandColumn } = columnConfig\n\n return () => {\n const { row } = props\n const _expandColumn = expandColumn.value\n\n let expandCell: JSX.Element | null = null\n if (_expandColumn) {\n const expandCtx = getCellCtx(row, _expandColumn)\n const cellSpan = tableProps.mergeCell?.(expandCtx)\n\n if (!cellSpan || (cellSpan.colspan && cellSpan.rowspan)) {\n const marginLeft = tableProps.tree ? row.depth * 14 : 0\n expandCell = (\n <UTabelCell\n cellClass={getCellClass(_expandColumn)}\n left={_expandColumn.style.left}\n right={_expandColumn.style.right}\n key={row.uid + _expandColumn.key}\n {...tableProps.mergeCell?.(expandCtx)}\n >\n {!row.isLeaf || (tableProps.expandable && !row.isExpandRow) ? (\n <UButton\n text\n class={expandToggleCls}\n type='primary'\n size='small'\n circle\n onClick={(e) => {\n e.stopPropagation()\n toggleTreeRowExpand(row)\n }}\n style={`margin-left: ${marginLeft}px`}\n >\n <UIcon>\n <ArrowRight />\n </UIcon>\n </UButton>\n ) : (\n <i class={expandSpaceCls} style={`margin-left: ${marginLeft}px`}></i>\n )}\n\n {getColumnSlotsNode(expandCtx)}\n </UTabelCell>\n )\n }\n }\n\n // A3:行 class 由 base + 3-bit 组合查找产出,避免 Vue 的 class 数组归一化开销。\n const mod = rowModCls(row)\n const rowCls = mod ? rowBaseCls + ' ' + mod : rowBaseCls\n\n return (\n <tr\n class={rowCls}\n onClick={(e) => handleRowClick(row, e)}\n ref={getMeasureRef(props.index)}\n key={row.uid}\n >\n {expandCell}\n\n {columns.value.map((column) => {\n const cellCtx = getCellCtx(row, column)\n const cellSpan = tableProps.mergeCell?.(cellCtx)\n if (cellSpan && (!cellSpan.colspan || !cellSpan.rowspan)) {\n return null\n }\n\n const cellNode = getColumnSlotsNode(cellCtx)\n\n return (\n <UTabelCell\n cellClass={getCellClass(column)}\n left={column.style.left}\n right={column.style.right}\n key={row.uid + column.key}\n // @ts-ignore\n onClick={(e) => handleCellClick(row, column, e)}\n {...cellSpan}\n >\n {cellNode}\n </UTabelCell>\n )\n })}\n </tr>\n )\n }\n }\n})\n\nexport const UExpandTableRow = defineComponent({\n name: 'ExpandTableRow',\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n setup(props) {\n const { getExpandRowSlotsNode, cls, measureElement, columnConfig } = inject(TableDIKey)!\n const { leafColumns } = columnConfig\n\n const rowBaseCls = cls.e('row')\n const cellCls = cls.e('cell')\n\n const measureRef = (el: unknown) => {\n measureElement(props.index, el as Element | null)\n }\n\n return () => {\n const { row } = props\n const node = getExpandRowSlotsNode({\n row,\n index: row.index,\n columns: leafColumns.value,\n rowData: row.data\n })\n return (\n <tr class={rowBaseCls} ref={measureRef}>\n <td colspan={leafColumns.value.length} class={cellCls}>\n {node}\n </td>\n </tr>\n )\n }\n }\n})\n"],"mappings":"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"}
|
|
@@ -24,8 +24,8 @@ const _hoisted_3 = {
|
|
|
24
24
|
};
|
|
25
25
|
const _hoisted_4 = ["colspan"];
|
|
26
26
|
const LENGTH_DELTA_RATIO_TO_RESET_SCROLL = .5;
|
|
27
|
-
const _sfc_main =
|
|
28
|
-
name: "
|
|
27
|
+
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
28
|
+
name: "UTable",
|
|
29
29
|
__name: "table",
|
|
30
30
|
props: {
|
|
31
31
|
size: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"[\n cls.b,\n cls.m(size),\n bem.is('border', border),\n bem.is('all-expanded', allExpanded),\n bem.is('text-ellipsis', textEllipsis)\n ]\"\n ref=\"scrollRef\"\n :content-class=\"cls.e('content')\"\n @scroll=\"handleScroll\"\n >\n <table :class=\"cls.e('wrap')\">\n <colgroup ref=\"colgroupRef\">\n <col\n v-for=\"column of leafColumns\"\n :key=\"column.key\"\n :class=\"column.fixed\"\n :style=\"{\n width: withUnit(column.width, 'px'),\n minWidth: withUnit(column.minWidth, 'px')\n }\"\n />\n </colgroup>\n <UTableHead />\n\n <!--\n 虚拟滚动上占位:替代 tbody transform,避免 table-layout: fixed 下列宽抖动。\n 高度由 useVirtualizer 命令式写入 `style.height`,不经过模板响应式绑定,\n 因此滚动窗口变化不会引起表格模板重渲染。\n -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"beforeSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-body>\n <slot name=\"body\" :columns=\"leafColumns\" :rows=\"rows\" />\n\n <template #empty v-if=\"slots.empty\">\n <slot name=\"empty\" />\n </template>\n </u-table-body>\n\n <!-- 虚拟滚动下占位(高度由 useVirtualizer 命令式写入) -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"afterSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-foot ref=\"tableFoot\">\n <slot name=\"foot\" :columns=\"leafColumns\" :rows=\"rows\" />\n </u-table-foot>\n </table>\n\n <slot name=\"append\" />\n\n <div v-if=\"showResizeLine\" :class=\"cls.e('resize-line')\" ref=\"resizeLineRef\"></div>\n\n <!-- <u-tip v-if=\"textEllipsis\" ref=\"tip\"> </u-tip> -->\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide, shallowRef, toRef, useTemplateRef, watch } from 'vue'\n\nimport type {\n TableProps,\n TableEmits,\n _TableExposed,\n TableColumnSlotsScope,\n ComponentSize,\n ScrollExposed,\n TableRowSlotsScope\n} from '../../types'\nimport { UScroll } from '../scroll'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\nimport type { TableRowNode } from './node/row'\nimport UTableBody from './table-body.vue'\nimport UTableFoot from './table-foot.vue'\n// import { UTip } from '../tip'\nimport UTableHead from './table-head'\nimport { useCheck } from './use-check'\nimport { useColResize } from './use-col-resize'\nimport { useColumns } from './use-columns'\nimport { useFixedColumns } from './use-fixed-columns'\nimport { useRows } from './use-rows'\nimport { useTable } from './use-table'\n\ndefineOptions({ name: 'Table' })\n\nconst props = withDefaults(defineProps<TableProps>(), {\n tree: false,\n stripe: true,\n textOverflow: 'line-break',\n virtualThreshold: 80\n})\nconst emit = defineEmits<TableEmits>()\n\nconst slots = defineSlots<{\n [key: `column:${string}`]: (props: TableColumnSlotsScope) => any\n [key: `header:${string}`]: (props: { column: ColumnNode }) => any\n 'row:expand'?: (props: TableRowSlotsScope) => any\n foot?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n body?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n empty?: () => any\n append?: () => any\n}>()\n\nconst cls = bem('table')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\n// 占位 tr 的 DOM 句柄;交给 useVirtualizer 直接命令式写 style.height。\nconst beforeSpacerRef = useTemplateRef<HTMLElement>('beforeSpacerRef')\nconst afterSpacerRef = useTemplateRef<HTMLElement>('afterSpacerRef')\n\n// 行(useRows / useFixedColumns 需要 isScrolling,而虚拟化 hook 又依赖 rows.length;\n// 先用中继占位,下方 isScrolling 到位后 watch 回灌)。\nconst isScrollingRelay = shallowRef(false)\n\nconst {\n rows,\n toggleTreeRowExpand,\n allExpanded,\n toggleAllTreeRowExpand,\n rowForest,\n handleRowClick,\n handleCellClick,\n getRowByData\n} = useRows({ props, emit, isScrolling: isScrollingRelay })\n\nconst { createCheckColumn, createSelectColumn, clearChecked, clearSelected, checkedRows } =\n useCheck({ size, props, rows, rowForest, emit, cls })\n\nconst columnConfig = useColumns({\n props,\n createCheckColumn,\n createSelectColumn,\n toggleAllTreeRowExpand,\n cls\n})\n\nconst { leafColumns } = columnConfig\n\nconst { handleScroll, leftFixed, rightFixed } = useFixedColumns()\n\nconst {\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass\n} = useTable({ props, cls, leftFixed, rightFixed })\n\nconst { showResizeLine, resizeLineRef, colgroupRef } = useColResize({ scrollRef, leafColumns })\n\nconst { virtualizer, items, isScrolling } = useVirtualizer({\n count: computed(() => rows.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n beforeEl: beforeSpacerRef,\n afterEl: afterSpacerRef,\n estimateSize: () => 41,\n // 注意:getItemKey 在构造期一次性写入底层 Virtualizer;闭包每次读的是当前 rows.value,\n // rows 引用整体替换后 key 仍有效(无需再 setOptions)。\n getItemKey: (i) => rows.value[i]?.uid ?? i\n})\n\nconst virtualEnabled = computed(() => {\n const t = props.virtualThreshold\n return t ? rows.value.length > t : true\n})\n\n// 把虚拟化 isScrolling 回灌到中继,供 useRows / useFixedColumns 读取。\nwatch(isScrolling, (v) => {\n isScrollingRelay.value = v\n})\n\n/**\n * E1:数据替换时的条件置顶。\n *\n * 旧实现无差别地 `scrollTo({ y: 0 })`,在「行内增删 / 排序 / 单行更新」等\n * 场景会把用户当前阅读位置跳走;仅在「翻页 / 显著数据集替换」时才需要复位。\n *\n * 判定阈值:|Δlen| / max(newLen, oldLen) ≥ 0.5,即行数变化量超过更大侧的一半时视为显著变化。\n * 选择 0.5 是因为典型的分页/搜索场景会带来 50% 以上的行数差(通常完全替换数据集),\n * 而行内追加 / 删除个位数通常只带来 <5% 的变化;两者区分度足够宽。\n */\nconst LENGTH_DELTA_RATIO_TO_RESET_SCROLL = 0.5\n\nwatch(\n () => props.data,\n (next, prev) => {\n const nextLen = next?.length ?? 0\n const prevLen = prev?.length ?? 0\n const denom = Math.max(nextLen, prevLen, 1)\n const ratio = Math.abs(nextLen - prevLen) / denom\n if (ratio >= LENGTH_DELTA_RATIO_TO_RESET_SCROLL) {\n scrollRef.value?.scrollTo({ y: 0 })\n }\n }\n)\n\n// const tipRef = useTemplateRef('tip')\n\nprovide(TableDIKey, {\n tableProps: props,\n tableSlots: slots,\n cls,\n rows,\n checkedRows,\n columnConfig,\n handleRowClick,\n handleCellClick,\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass,\n // tipRef,\n toggleTreeRowExpand,\n virtualList: items,\n virtualEnabled,\n measureElement: (index, el) => virtualizer.measureElement(index, el)\n})\n\nconst tableFootRef = useTemplateRef('tableFoot')\n\ndefineExpose<_TableExposed>({\n el: toRef(() => scrollRef.value?.el),\n clearChecked,\n clearSelected,\n getRowByData,\n getSummaryRow: () => tableFootRef.value!.getSummaryRow()\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.vue"],"sourcesContent":["<template>\n <u-scroll\n :class=\"[\n cls.b,\n cls.m(size),\n bem.is('border', border),\n bem.is('all-expanded', allExpanded),\n bem.is('text-ellipsis', textEllipsis)\n ]\"\n ref=\"scrollRef\"\n :content-class=\"cls.e('content')\"\n @scroll=\"handleScroll\"\n >\n <table :class=\"cls.e('wrap')\">\n <colgroup ref=\"colgroupRef\">\n <col\n v-for=\"column of leafColumns\"\n :key=\"column.key\"\n :class=\"column.fixed\"\n :style=\"{\n width: withUnit(column.width, 'px'),\n minWidth: withUnit(column.minWidth, 'px')\n }\"\n />\n </colgroup>\n <UTableHead />\n\n <!--\n 虚拟滚动上占位:替代 tbody transform,避免 table-layout: fixed 下列宽抖动。\n 高度由 useVirtualizer 命令式写入 `style.height`,不经过模板响应式绑定,\n 因此滚动窗口变化不会引起表格模板重渲染。\n -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"beforeSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-body>\n <slot name=\"body\" :columns=\"leafColumns\" :rows=\"rows\" />\n\n <template #empty v-if=\"slots.empty\">\n <slot name=\"empty\" />\n </template>\n </u-table-body>\n\n <!-- 虚拟滚动下占位(高度由 useVirtualizer 命令式写入) -->\n <tbody v-if=\"virtualEnabled\" aria-hidden=\"true\">\n <tr ref=\"afterSpacerRef\">\n <td :colspan=\"leafColumns.length\" style=\"padding: 0; border: none\"></td>\n </tr>\n </tbody>\n\n <u-table-foot ref=\"tableFoot\">\n <slot name=\"foot\" :columns=\"leafColumns\" :rows=\"rows\" />\n </u-table-foot>\n </table>\n\n <slot name=\"append\" />\n\n <div v-if=\"showResizeLine\" :class=\"cls.e('resize-line')\" ref=\"resizeLineRef\"></div>\n\n <!-- <u-tip v-if=\"textEllipsis\" ref=\"tip\"> </u-tip> -->\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide, shallowRef, toRef, useTemplateRef, watch } from 'vue'\n\nimport type {\n TableProps,\n TableEmits,\n _TableExposed,\n TableColumnSlotsScope,\n ComponentSize,\n ScrollExposed,\n TableRowSlotsScope\n} from '../../types'\nimport { UScroll } from '../scroll'\nimport { TableDIKey } from './di'\nimport type { ColumnNode } from './node/col'\nimport type { TableRowNode } from './node/row'\nimport UTableBody from './table-body.vue'\nimport UTableFoot from './table-foot.vue'\n// import { UTip } from '../tip'\nimport UTableHead from './table-head'\nimport { useCheck } from './use-check'\nimport { useColResize } from './use-col-resize'\nimport { useColumns } from './use-columns'\nimport { useFixedColumns } from './use-fixed-columns'\nimport { useRows } from './use-rows'\nimport { useTable } from './use-table'\n\ndefineOptions({ name: 'UTable' })\n\nconst props = withDefaults(defineProps<TableProps>(), {\n tree: false,\n stripe: true,\n textOverflow: 'line-break',\n virtualThreshold: 80\n})\nconst emit = defineEmits<TableEmits>()\n\nconst slots = defineSlots<{\n [key: `column:${string}`]: (props: TableColumnSlotsScope) => any\n [key: `header:${string}`]: (props: { column: ColumnNode }) => any\n 'row:expand'?: (props: TableRowSlotsScope) => any\n foot?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n body?: (props: { columns: ColumnNode[]; rows: TableRowNode[] }) => any\n empty?: () => any\n append?: () => any\n}>()\n\nconst cls = bem('table')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\n// 占位 tr 的 DOM 句柄;交给 useVirtualizer 直接命令式写 style.height。\nconst beforeSpacerRef = useTemplateRef<HTMLElement>('beforeSpacerRef')\nconst afterSpacerRef = useTemplateRef<HTMLElement>('afterSpacerRef')\n\n// 行(useRows / useFixedColumns 需要 isScrolling,而虚拟化 hook 又依赖 rows.length;\n// 先用中继占位,下方 isScrolling 到位后 watch 回灌)。\nconst isScrollingRelay = shallowRef(false)\n\nconst {\n rows,\n toggleTreeRowExpand,\n allExpanded,\n toggleAllTreeRowExpand,\n rowForest,\n handleRowClick,\n handleCellClick,\n getRowByData\n} = useRows({ props, emit, isScrolling: isScrollingRelay })\n\nconst { createCheckColumn, createSelectColumn, clearChecked, clearSelected, checkedRows } =\n useCheck({ size, props, rows, rowForest, emit, cls })\n\nconst columnConfig = useColumns({\n props,\n createCheckColumn,\n createSelectColumn,\n toggleAllTreeRowExpand,\n cls\n})\n\nconst { leafColumns } = columnConfig\n\nconst { handleScroll, leftFixed, rightFixed } = useFixedColumns()\n\nconst {\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass\n} = useTable({ props, cls, leftFixed, rightFixed })\n\nconst { showResizeLine, resizeLineRef, colgroupRef } = useColResize({ scrollRef, leafColumns })\n\nconst { virtualizer, items, isScrolling } = useVirtualizer({\n count: computed(() => rows.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n beforeEl: beforeSpacerRef,\n afterEl: afterSpacerRef,\n estimateSize: () => 41,\n // 注意:getItemKey 在构造期一次性写入底层 Virtualizer;闭包每次读的是当前 rows.value,\n // rows 引用整体替换后 key 仍有效(无需再 setOptions)。\n getItemKey: (i) => rows.value[i]?.uid ?? i\n})\n\nconst virtualEnabled = computed(() => {\n const t = props.virtualThreshold\n return t ? rows.value.length > t : true\n})\n\n// 把虚拟化 isScrolling 回灌到中继,供 useRows / useFixedColumns 读取。\nwatch(isScrolling, (v) => {\n isScrollingRelay.value = v\n})\n\n/**\n * E1:数据替换时的条件置顶。\n *\n * 旧实现无差别地 `scrollTo({ y: 0 })`,在「行内增删 / 排序 / 单行更新」等\n * 场景会把用户当前阅读位置跳走;仅在「翻页 / 显著数据集替换」时才需要复位。\n *\n * 判定阈值:|Δlen| / max(newLen, oldLen) ≥ 0.5,即行数变化量超过更大侧的一半时视为显著变化。\n * 选择 0.5 是因为典型的分页/搜索场景会带来 50% 以上的行数差(通常完全替换数据集),\n * 而行内追加 / 删除个位数通常只带来 <5% 的变化;两者区分度足够宽。\n */\nconst LENGTH_DELTA_RATIO_TO_RESET_SCROLL = 0.5\n\nwatch(\n () => props.data,\n (next, prev) => {\n const nextLen = next?.length ?? 0\n const prevLen = prev?.length ?? 0\n const denom = Math.max(nextLen, prevLen, 1)\n const ratio = Math.abs(nextLen - prevLen) / denom\n if (ratio >= LENGTH_DELTA_RATIO_TO_RESET_SCROLL) {\n scrollRef.value?.scrollTo({ y: 0 })\n }\n }\n)\n\n// const tipRef = useTemplateRef('tip')\n\nprovide(TableDIKey, {\n tableProps: props,\n tableSlots: slots,\n cls,\n rows,\n checkedRows,\n columnConfig,\n handleRowClick,\n handleCellClick,\n getColumnSlotsNode,\n getExpandRowSlotsNode,\n getHeaderSlotsNode,\n getCellClass,\n getCellCtx,\n getHeaderCellClass,\n // tipRef,\n toggleTreeRowExpand,\n virtualList: items,\n virtualEnabled,\n measureElement: (index, el) => virtualizer.measureElement(index, el)\n})\n\nconst tableFootRef = useTemplateRef('tableFoot')\n\ndefineExpose<_TableExposed>({\n el: toRef(() => scrollRef.value?.el),\n clearChecked,\n clearSelected,\n getRowByData,\n getSummaryRow: () => tableFootRef.value!.getSummaryRow()\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-check.js","names":["UCheckbox"],"sources":["../../../src/components/table/use-check.ts"],"sourcesContent":["import { dfs, o, type Forest } from '@cat-kit/core'\nimport type { BEM } from '@veltra/utils'\nimport {\n computed,\n createTextVNode,\n createVNode,\n nextTick,\n shallowRef,\n toRaw,\n triggerRef,\n watch,\n type ComputedRef,\n type ShallowRef\n} from 'vue'\n\nimport type { TableRow, TableColumn, TableEmits, TableProps, ComponentSize } from '../../types'\nimport { UCheckbox } from '../checkbox'\n\ninterface Options {\n rows: ShallowRef<TableRow[] | undefined>\n rowForest: ShallowRef<Forest<Record<string, unknown>, any> | undefined>\n props: TableProps\n emit: TableEmits<any>\n size: ComputedRef<ComponentSize>\n cls: BEM<'table'>\n}\n\ninterface UseCheckReturned {\n checkedRows: ShallowRef<Set<TableRow>>\n clearChecked: () => void\n clearSelected: () => void\n createCheckColumn: () => TableColumn\n createSelectColumn: () => TableColumn\n}\n\nexport function useCheck(options: Options): UseCheckReturned {\n const { rows, rowForest, props, emit, size, cls } = options\n\n const checkedRows = shallowRef(new Set<TableRow>())\n const selectedRow = shallowRef<TableRow>()\n\n /** 触发checkedRows的更新 */\n function triggerCheckedRows() {\n triggerRef(checkedRows)\n }\n\n function clearChecked() {\n checkedRows.value.forEach((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n triggerCheckedRows()\n }\n\n function clearSelected() {\n if (selectedRow.value) {\n selectedRow.value.checked = false\n selectedRow.value = undefined\n }\n }\n\n watch([() => props.checkable, () => props.selectable, () => rows.value], () => {\n clearChecked()\n clearSelected()\n })\n\n watch(selectedRow, (selectedRow) => {\n if (changedByModel) return\n changedByEvent = true\n emit('update:selected', selectedRow?.data ? toRaw(selectedRow.data) : undefined)\n nextTick(() => {\n changedByEvent = false\n })\n })\n\n let changedByEvent = false\n let changedByModel = false\n watch(checkedRows, (checkedRows) => {\n if (changedByModel) return\n changedByEvent = true\n emit(\n 'update:checked',\n Array.from(checkedRows).map((row) => toRaw(row.data))\n )\n nextTick(() => {\n changedByEvent = false\n })\n })\n\n let dicts: Map<string | number, TableRow> | undefined = undefined\n\n // 设置uid -> row 字典,以便于数据重复使用\n function setDicts() {\n if (dicts || !rows.value || !props.rowKey) return\n\n let mapEntries: [string | number, TableRow][] = []\n let i = 0\n while (i < rows.value.length) {\n const row = rows.value[i]!\n\n mapEntries.push([row.uid, row])\n i++\n }\n dicts = new Map(mapEntries)\n }\n\n watch(rows, () => {\n dicts = undefined\n })\n\n watch(\n [() => props.checked, () => props.rowKey, () => props.checkable, rows],\n ([checked, rowKey, checkable, rows], [_, __, ___, oRows]) => {\n if (changedByEvent || !checkable || !rowKey) return\n\n changedByModel = true\n\n // 如果没有字典,先建立字典\n rows !== oRows && setDicts()\n\n clearChecked()\n\n checked?.forEach((item) => {\n const uid = o(item).get(rowKey)\n if (uid === undefined || uid === null) return\n const row = dicts?.get(uid as string | number)\n if (!row) return\n\n row.checked = true\n checkedRows.value.add(row)\n })\n triggerCheckedRows()\n\n nextTick(() => {\n changedByModel = false\n })\n },\n { immediate: true }\n )\n\n watch(\n [() => props.selected, () => props.rowKey, () => props.selectable, rows],\n ([selected, rowKey, selectable, rows], [_, __, ___, oRows]) => {\n if (changedByEvent || !selectable || !rowKey) return\n\n changedByModel = true\n\n // 如果没有字典,先建立字典(懒建立)\n rows !== oRows && setDicts()\n\n if (selected) {\n const uid = o(selected).get(rowKey)\n const row =\n uid === undefined || uid === null ? undefined : dicts?.get(uid as string | number)\n if (row) {\n row.checked = true\n selectedRow.value = row\n }\n } else {\n clearSelected()\n }\n\n nextTick(() => {\n changedByModel = false\n })\n },\n { immediate: true }\n )\n\n const allChecked = computed(() => {\n const rowSize = props.tree ? rowForest.value?.size : rows.value?.length\n return !!rowSize && rowSize === checkedRows.value.size\n })\n\n function handleCheckAllTree(check: boolean) {\n if (check) {\n rowForest.value?.dfs((row) => {\n row.checked = true\n checkedRows.value.add(row)\n })\n } else {\n rowForest.value?.dfs((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n }\n triggerCheckedRows()\n }\n\n function handleCheckAllRows(check: boolean) {\n if (check) {\n rows.value?.forEach((row) => {\n row.checked = true\n checkedRows.value.add(row)\n })\n } else {\n rows.value?.forEach((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n }\n triggerCheckedRows()\n }\n\n function handleCheckAll(check: boolean) {\n if (props.tree) {\n handleCheckAllTree(check as boolean)\n } else {\n handleCheckAllRows(check as boolean)\n }\n }\n\n function handleCheckRow(row: TableRow, check: boolean) {\n const cb = check\n ? (row: TableRow) => checkedRows.value.add(row)\n : (row: TableRow) => checkedRows.value.delete(row)\n\n const childrenKey = typeof props.tree === 'string' ? props.tree : 'children'\n dfs(\n row as unknown as Record<string, unknown>,\n (node) => {\n const r = node as unknown as TableRow\n r.checked = check\n cb(r)\n },\n childrenKey\n )\n\n triggerCheckedRows()\n }\n\n const getCheckboxColumnWidth = () => {\n return size.value === 'large' ? 80 : 60\n }\n\n const checkboxClass = cls.e('checkbox')\n const checkboxClick = (e: Event) => e.stopPropagation()\n\n function createCheckColumn(): TableColumn {\n const width = getCheckboxColumnWidth()\n return {\n key: '__is_check_column__',\n name: '',\n width,\n minWidth: width,\n align: 'center',\n fixed: 'left',\n resizable: false,\n nameRender() {\n const checkboxNode = createVNode(UCheckbox, {\n modelValue: allChecked.value,\n 'onUpdate:modelValue': handleCheckAll\n })\n if (!props.tree) {\n return checkboxNode\n }\n\n // const expandNode = createVNode('i', {\n // text: true,\n // class: cls.e('expand-space')\n // })\n return [checkboxNode]\n },\n render(ctx) {\n const { row } = ctx\n\n // @ts-ignore\n return createVNode(UCheckbox, {\n class: checkboxClass,\n modelValue: row.checked,\n 'onUpdate:modelValue': (val: boolean) => {\n handleCheckRow(row, val)\n },\n onClick: checkboxClick\n })\n }\n }\n }\n\n function handleSelect(row: TableRow, check: boolean) {\n row.checked = check\n if (check) {\n if (selectedRow.value) {\n selectedRow.value.checked = false\n }\n selectedRow.value = row\n } else {\n selectedRow.value = undefined\n }\n }\n\n function createSelectColumn(): TableColumn {\n const width = getCheckboxColumnWidth()\n return {\n key: '__is_select_column__',\n name: '单选',\n minWidth: width,\n resizable: false,\n width,\n align: 'center',\n fixed: 'left',\n nameRender(_ctx) {\n if (!props.tree) {\n return '单选'\n }\n\n // const expandNode = createVNode('i', {\n // text: true,\n // class: cls.e('expand-space')\n // })\n return [createTextVNode('单选')]\n },\n\n render({ row }) {\n // @ts-ignore\n return createVNode(UCheckbox, {\n class: checkboxClass,\n modelValue: row.checked,\n 'onUpdate:modelValue': (val: boolean) => {\n handleSelect(row, val)\n },\n onClick: checkboxClick\n })\n }\n }\n }\n\n return { checkedRows, createCheckColumn, createSelectColumn, clearChecked, clearSelected }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-check.js","names":["UCheckbox"],"sources":["../../../src/components/table/use-check.ts"],"sourcesContent":["import { dfs, o, type Forest } from '@cat-kit/core'\nimport type { BEM } from '@veltra/utils'\nimport {\n computed,\n createTextVNode,\n createVNode,\n nextTick,\n shallowRef,\n toRaw,\n triggerRef,\n watch,\n type ComputedRef,\n type ShallowRef\n} from 'vue'\n\nimport type { TableRow, TableColumn, TableEmits, TableProps, ComponentSize } from '../../types'\nimport { UCheckbox } from '../checkbox'\n\ninterface Options {\n rows: ShallowRef<TableRow[] | undefined>\n rowForest: ShallowRef<Forest<Record<string, unknown>, any> | undefined>\n props: TableProps\n emit: TableEmits<any>\n size: ComputedRef<ComponentSize>\n cls: BEM<'table'>\n}\n\ninterface UseCheckReturned {\n checkedRows: ShallowRef<Set<TableRow>>\n clearChecked: () => void\n clearSelected: () => void\n createCheckColumn: () => TableColumn\n createSelectColumn: () => TableColumn\n}\n\nexport function useCheck(options: Options): UseCheckReturned {\n const { rows, rowForest, props, emit, size, cls } = options\n\n const checkedRows = shallowRef(new Set<TableRow>())\n const selectedRow = shallowRef<TableRow>()\n\n /** 触发checkedRows的更新 */\n function triggerCheckedRows() {\n triggerRef(checkedRows)\n }\n\n function clearChecked() {\n checkedRows.value.forEach((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n triggerCheckedRows()\n }\n\n function clearSelected() {\n if (selectedRow.value) {\n selectedRow.value.checked = false\n selectedRow.value = undefined\n }\n }\n\n watch([() => props.checkable, () => props.selectable, () => rows.value], () => {\n clearChecked()\n clearSelected()\n })\n\n watch(selectedRow, (selectedRow) => {\n if (changedByModel) return\n changedByEvent = true\n emit('update:selected', selectedRow?.data ? toRaw(selectedRow.data) : undefined)\n nextTick(() => {\n changedByEvent = false\n })\n })\n\n let changedByEvent = false\n let changedByModel = false\n watch(checkedRows, (checkedRows) => {\n if (changedByModel) return\n changedByEvent = true\n emit(\n 'update:checked',\n Array.from(checkedRows).map((row) => toRaw(row.data))\n )\n nextTick(() => {\n changedByEvent = false\n })\n })\n\n let dicts: Map<string | number, TableRow> | undefined = undefined\n\n // 设置uid -> row 字典,以便于数据重复使用\n function setDicts() {\n if (dicts || !rows.value || !props.rowKey) return\n\n let mapEntries: [string | number, TableRow][] = []\n let i = 0\n while (i < rows.value.length) {\n const row = rows.value[i]!\n\n mapEntries.push([row.uid, row])\n i++\n }\n dicts = new Map(mapEntries)\n }\n\n watch(rows, () => {\n dicts = undefined\n })\n\n watch(\n [() => props.checked, () => props.rowKey, () => props.checkable, rows],\n ([checked, rowKey, checkable, rows], [_, __, ___, oRows]) => {\n if (changedByEvent || !checkable || !rowKey) return\n\n changedByModel = true\n\n // 如果没有字典,先建立字典\n rows !== oRows && setDicts()\n\n clearChecked()\n\n checked?.forEach((item) => {\n const uid = o(item).get(rowKey)\n if (uid === undefined || uid === null) return\n const row = dicts?.get(uid as string | number)\n if (!row) return\n\n row.checked = true\n checkedRows.value.add(row)\n })\n triggerCheckedRows()\n\n nextTick(() => {\n changedByModel = false\n })\n },\n { immediate: true }\n )\n\n watch(\n [() => props.selected, () => props.rowKey, () => props.selectable, rows],\n ([selected, rowKey, selectable, rows], [_, __, ___, oRows]) => {\n if (changedByEvent || !selectable || !rowKey) return\n\n changedByModel = true\n\n // 如果没有字典,先建立字典(懒建立)\n rows !== oRows && setDicts()\n\n if (selected) {\n const uid = o(selected).get(rowKey)\n const row =\n uid === undefined || uid === null ? undefined : dicts?.get(uid as string | number)\n if (row) {\n row.checked = true\n selectedRow.value = row\n }\n } else {\n clearSelected()\n }\n\n nextTick(() => {\n changedByModel = false\n })\n },\n { immediate: true }\n )\n\n const allChecked = computed(() => {\n const rowSize = props.tree ? rowForest.value?.size : rows.value?.length\n return !!rowSize && rowSize === checkedRows.value.size\n })\n\n function handleCheckAllTree(check: boolean) {\n if (check) {\n rowForest.value?.dfs((row) => {\n row.checked = true\n checkedRows.value.add(row)\n })\n } else {\n rowForest.value?.dfs((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n }\n triggerCheckedRows()\n }\n\n function handleCheckAllRows(check: boolean) {\n if (check) {\n rows.value?.forEach((row) => {\n row.checked = true\n checkedRows.value.add(row)\n })\n } else {\n rows.value?.forEach((row) => {\n row.checked = false\n })\n checkedRows.value.clear()\n }\n triggerCheckedRows()\n }\n\n function handleCheckAll(check: boolean) {\n if (props.tree) {\n handleCheckAllTree(check as boolean)\n } else {\n handleCheckAllRows(check as boolean)\n }\n }\n\n function handleCheckRow(row: TableRow, check: boolean) {\n const cb = check\n ? (row: TableRow) => checkedRows.value.add(row)\n : (row: TableRow) => checkedRows.value.delete(row)\n\n const childrenKey = typeof props.tree === 'string' ? props.tree : 'children'\n dfs(\n row as unknown as Record<string, unknown>,\n (node) => {\n const r = node as unknown as TableRow\n r.checked = check\n cb(r)\n },\n childrenKey\n )\n\n triggerCheckedRows()\n }\n\n const getCheckboxColumnWidth = () => {\n return size.value === 'large' ? 80 : 60\n }\n\n const checkboxClass = cls.e('checkbox')\n const checkboxClick = (e: Event) => e.stopPropagation()\n\n function createCheckColumn(): TableColumn {\n const width = getCheckboxColumnWidth()\n return {\n key: '__is_check_column__',\n name: '',\n width,\n minWidth: width,\n align: 'center',\n fixed: 'left',\n resizable: false,\n nameRender() {\n const checkboxNode = createVNode(UCheckbox, {\n modelValue: allChecked.value,\n 'onUpdate:modelValue': handleCheckAll\n })\n if (!props.tree) {\n return checkboxNode\n }\n\n // const expandNode = createVNode('i', {\n // text: true,\n // class: cls.e('expand-space')\n // })\n return [checkboxNode]\n },\n render(ctx) {\n const { row } = ctx\n\n // @ts-ignore\n return createVNode(UCheckbox, {\n class: checkboxClass,\n modelValue: row.checked,\n 'onUpdate:modelValue': (val: boolean) => {\n handleCheckRow(row, val)\n },\n onClick: checkboxClick\n })\n }\n }\n }\n\n function handleSelect(row: TableRow, check: boolean) {\n row.checked = check\n if (check) {\n if (selectedRow.value) {\n selectedRow.value.checked = false\n }\n selectedRow.value = row\n } else {\n selectedRow.value = undefined\n }\n }\n\n function createSelectColumn(): TableColumn {\n const width = getCheckboxColumnWidth()\n return {\n key: '__is_select_column__',\n name: '单选',\n minWidth: width,\n resizable: false,\n width,\n align: 'center',\n fixed: 'left',\n nameRender(_ctx) {\n if (!props.tree) {\n return '单选'\n }\n\n // const expandNode = createVNode('i', {\n // text: true,\n // class: cls.e('expand-space')\n // })\n return [createTextVNode('单选')]\n },\n\n render({ row }) {\n // @ts-ignore\n return createVNode(UCheckbox, {\n class: checkboxClass,\n modelValue: row.checked,\n 'onUpdate:modelValue': (val: boolean) => {\n handleSelect(row, val)\n },\n onClick: checkboxClick\n })\n }\n }\n }\n\n return { checkedRows, createCheckColumn, createSelectColumn, clearChecked, clearSelected }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-col-resize.js","names":[],"sources":["../../../src/components/table/use-col-resize.ts"],"sourcesContent":["import { nextTick, provide, shallowRef, watchEffect, type ShallowRef } from 'vue'\n\nimport type { ScrollExposed } from '../../types'\nimport { TableResizeKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ninterface Options {\n scrollRef: ShallowRef<ScrollExposed | undefined>\n leafColumns: ShallowRef<ColumnNode[]>\n}\n\ninterface UseColResizeReturned {\n resizeLineRef: ShallowRef<HTMLElement | undefined>\n colgroupRef: ShallowRef<HTMLElement | undefined>\n showResizeLine: ShallowRef<boolean>\n handleResizeMousedown: (e: MouseEvent, resizeColumn: ColumnNode) => void\n}\n\nexport function useColResize(options: Options): UseColResizeReturned {\n const { scrollRef, leafColumns } = options\n\n const showResizeLine = shallowRef(false)\n\n const resizeLineRef = shallowRef<HTMLElement>()\n const colgroupRef = shallowRef<HTMLElement>()\n const headerRef = shallowRef<HTMLElement>()\n\n /**\n * 修正列样式\n */\n function correctColumnStyle() {\n // 获取表格容器宽度\n const containerWidth = scrollRef.value?.containerRef?.clientWidth\n\n if (!containerWidth || !leafColumns.value.length) return\n\n const flexColumns = leafColumns.value.filter((column) => !column.explicitWidth)\n const fixedWidthTotal = leafColumns.value\n .filter((column) => column.explicitWidth)\n .reduce((acc, cur) => acc + (cur.width ?? cur.minWidth!), 0)\n const flexBaseTotal = flexColumns.reduce((acc, cur) => acc + cur.minWidth!, 0)\n const totalBase = fixedWidthTotal + flexBaseTotal\n\n // 仅未显式指定 width 的列参与剩余宽度均分;指定了 width 的列保持该宽度。\n if (flexColumns.length > 0 && totalBase < containerWidth) {\n const allocatedWidth = (containerWidth - totalBase) / flexColumns.length\n\n flexColumns.forEach((column) => {\n column.width = column.minWidth! + allocatedWidth\n })\n } else {\n flexColumns.forEach((column) => {\n column.data.width = undefined\n })\n }\n\n const fixedLeft = leafColumns.value.filter((column) => column.fixed === 'left')\n const fixedRight = leafColumns.value.filter((column) => column.fixed === 'right')\n\n fixedLeft.reduce((acc, cur) => {\n cur.style.left = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n\n fixedRight.reduceRight((acc, cur) => {\n cur.style.right = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n }\n\n watchEffect(correctColumnStyle)\n\n function updateResizeLine(transformX: number): void {\n if (!resizeLineRef.value) return\n resizeLineRef.value.style.transform = `translateX(${transformX}px)`\n }\n\n // 表格相对于页面左边缘的偏移量,\n // 此处作为缓存以减少频繁地调用 getBoundingClientRect 方法\n let containerLeft = 0\n let originX = 0\n let originWidth = 0\n let currentResizeColumn: ColumnNode | null = null\n\n function handleResizeMousedown(e: MouseEvent, resizeColumn: ColumnNode): void {\n const tableEl = scrollRef.value?.el\n if (!tableEl) return\n\n showResizeLine.value = true\n currentResizeColumn = resizeColumn\n originX = e.pageX\n originWidth = resizeColumn.width ?? 0\n\n const { left } = tableEl.getBoundingClientRect()\n containerLeft = left\n\n nextTick(() => {\n updateResizeLine(e.pageX - left)\n })\n\n document.addEventListener('mousemove', handleResizeMousemove)\n document.addEventListener('mouseup', handleResizeMouseup)\n }\n\n function handleResizeMousemove(e: MouseEvent): void {\n updateResizeLine(e.pageX - containerLeft)\n }\n\n function handleResizeMouseup(e: MouseEvent): void {\n currentResizeColumn!.width = Math.max(\n originWidth + e.pageX - originX,\n currentResizeColumn!.minWidth!\n )\n currentResizeColumn!.explicitWidth = true\n\n showResizeLine.value = false\n currentResizeColumn = null\n correctColumnStyle()\n\n document.removeEventListener('mouseup', handleResizeMouseup)\n document.removeEventListener('mousemove', handleResizeMousemove)\n }\n\n provide(TableResizeKey, { handleResizeMousedown, headerRef })\n\n return { resizeLineRef, colgroupRef, showResizeLine, handleResizeMousedown }\n}\n"],"mappings":";;;AAkBA,SAAgB,aAAa,SAAwC;CACnE,MAAM,EAAE,WAAW,gBAAgB;CAEnC,MAAM,iBAAiB,WAAW,KAAK;CAEvC,MAAM,gBAAgB,WAAwB;CAC9C,MAAM,cAAc,WAAwB;CAC5C,MAAM,YAAY,WAAwB;;;;CAK1C,SAAS,qBAAqB;EAE5B,MAAM,iBAAiB,UAAU,OAAO,cAAc;EAEtD,IAAI,CAAC,kBAAkB,CAAC,YAAY,MAAM,QAAQ;EAElD,MAAM,cAAc,YAAY,MAAM,QAAQ,WAAW,CAAC,OAAO,aAAa;EAK9E,MAAM,YAJkB,YAAY,MACjC,QAAQ,WAAW,OAAO,aAAa,
|
|
1
|
+
{"version":3,"file":"use-col-resize.js","names":[],"sources":["../../../src/components/table/use-col-resize.ts"],"sourcesContent":["import { nextTick, provide, shallowRef, watchEffect, type ShallowRef } from 'vue'\n\nimport type { ScrollExposed } from '../../types'\nimport { TableResizeKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ninterface Options {\n scrollRef: ShallowRef<ScrollExposed | undefined>\n leafColumns: ShallowRef<ColumnNode[]>\n}\n\ninterface UseColResizeReturned {\n resizeLineRef: ShallowRef<HTMLElement | undefined>\n colgroupRef: ShallowRef<HTMLElement | undefined>\n showResizeLine: ShallowRef<boolean>\n handleResizeMousedown: (e: MouseEvent, resizeColumn: ColumnNode) => void\n}\n\nexport function useColResize(options: Options): UseColResizeReturned {\n const { scrollRef, leafColumns } = options\n\n const showResizeLine = shallowRef(false)\n\n const resizeLineRef = shallowRef<HTMLElement>()\n const colgroupRef = shallowRef<HTMLElement>()\n const headerRef = shallowRef<HTMLElement>()\n\n /**\n * 修正列样式\n */\n function correctColumnStyle() {\n // 获取表格容器宽度\n const containerWidth = scrollRef.value?.containerRef?.clientWidth\n\n if (!containerWidth || !leafColumns.value.length) return\n\n const flexColumns = leafColumns.value.filter((column) => !column.explicitWidth)\n const fixedWidthTotal = leafColumns.value\n .filter((column) => column.explicitWidth)\n .reduce((acc, cur) => acc + (cur.width ?? cur.minWidth!), 0)\n const flexBaseTotal = flexColumns.reduce((acc, cur) => acc + cur.minWidth!, 0)\n const totalBase = fixedWidthTotal + flexBaseTotal\n\n // 仅未显式指定 width 的列参与剩余宽度均分;指定了 width 的列保持该宽度。\n if (flexColumns.length > 0 && totalBase < containerWidth) {\n const allocatedWidth = (containerWidth - totalBase) / flexColumns.length\n\n flexColumns.forEach((column) => {\n column.width = column.minWidth! + allocatedWidth\n })\n } else {\n flexColumns.forEach((column) => {\n column.data.width = undefined\n })\n }\n\n const fixedLeft = leafColumns.value.filter((column) => column.fixed === 'left')\n const fixedRight = leafColumns.value.filter((column) => column.fixed === 'right')\n\n fixedLeft.reduce((acc, cur) => {\n cur.style.left = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n\n fixedRight.reduceRight((acc, cur) => {\n cur.style.right = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n }\n\n watchEffect(correctColumnStyle)\n\n function updateResizeLine(transformX: number): void {\n if (!resizeLineRef.value) return\n resizeLineRef.value.style.transform = `translateX(${transformX}px)`\n }\n\n // 表格相对于页面左边缘的偏移量,\n // 此处作为缓存以减少频繁地调用 getBoundingClientRect 方法\n let containerLeft = 0\n let originX = 0\n let originWidth = 0\n let currentResizeColumn: ColumnNode | null = null\n\n function handleResizeMousedown(e: MouseEvent, resizeColumn: ColumnNode): void {\n const tableEl = scrollRef.value?.el\n if (!tableEl) return\n\n showResizeLine.value = true\n currentResizeColumn = resizeColumn\n originX = e.pageX\n originWidth = resizeColumn.width ?? 0\n\n const { left } = tableEl.getBoundingClientRect()\n containerLeft = left\n\n nextTick(() => {\n updateResizeLine(e.pageX - left)\n })\n\n document.addEventListener('mousemove', handleResizeMousemove)\n document.addEventListener('mouseup', handleResizeMouseup)\n }\n\n function handleResizeMousemove(e: MouseEvent): void {\n updateResizeLine(e.pageX - containerLeft)\n }\n\n function handleResizeMouseup(e: MouseEvent): void {\n currentResizeColumn!.width = Math.max(\n originWidth + e.pageX - originX,\n currentResizeColumn!.minWidth!\n )\n currentResizeColumn!.explicitWidth = true\n\n showResizeLine.value = false\n currentResizeColumn = null\n correctColumnStyle()\n\n document.removeEventListener('mouseup', handleResizeMouseup)\n document.removeEventListener('mousemove', handleResizeMousemove)\n }\n\n provide(TableResizeKey, { handleResizeMousedown, headerRef })\n\n return { resizeLineRef, colgroupRef, showResizeLine, handleResizeMousedown }\n}\n"],"mappings":";;;AAkBA,SAAgB,aAAa,SAAwC;CACnE,MAAM,EAAE,WAAW,gBAAgB;CAEnC,MAAM,iBAAiB,WAAW,KAAK;CAEvC,MAAM,gBAAgB,WAAwB;CAC9C,MAAM,cAAc,WAAwB;CAC5C,MAAM,YAAY,WAAwB;;;;CAK1C,SAAS,qBAAqB;EAE5B,MAAM,iBAAiB,UAAU,OAAO,cAAc;EAEtD,IAAI,CAAC,kBAAkB,CAAC,YAAY,MAAM,QAAQ;EAElD,MAAM,cAAc,YAAY,MAAM,QAAQ,WAAW,CAAC,OAAO,aAAa;EAK9E,MAAM,YAJkB,YAAY,MACjC,QAAQ,WAAW,OAAO,aAAa,CAAC,CACxC,QAAQ,KAAK,QAAQ,OAAO,IAAI,SAAS,IAAI,WAAY,CAE5B,IADV,YAAY,QAAQ,KAAK,QAAQ,MAAM,IAAI,UAAW,CAC5B;EAGhD,IAAI,YAAY,SAAS,KAAK,YAAY,gBAAgB;GACxD,MAAM,kBAAkB,iBAAiB,aAAa,YAAY;GAElE,YAAY,SAAS,WAAW;IAC9B,OAAO,QAAQ,OAAO,WAAY;GACpC,CAAC;EACH,OACE,YAAY,SAAS,WAAW;GAC9B,OAAO,KAAK,QAAQ,KAAA;EACtB,CAAC;EAGH,MAAM,YAAY,YAAY,MAAM,QAAQ,WAAW,OAAO,UAAU,MAAM;EAC9E,MAAM,aAAa,YAAY,MAAM,QAAQ,WAAW,OAAO,UAAU,OAAO;EAEhF,UAAU,QAAQ,KAAK,QAAQ;GAC7B,IAAI,MAAM,OAAO;GACjB,OAAO,OAAO,IAAI,SAAS,IAAI;EACjC,GAAG,CAAC;EAEJ,WAAW,aAAa,KAAK,QAAQ;GACnC,IAAI,MAAM,QAAQ;GAClB,OAAO,OAAO,IAAI,SAAS,IAAI;EACjC,GAAG,CAAC;CACN;CAEA,YAAY,kBAAkB;CAE9B,SAAS,iBAAiB,YAA0B;EAClD,IAAI,CAAC,cAAc,OAAO;EAC1B,cAAc,MAAM,MAAM,YAAY,cAAc,WAAW;CACjE;CAIA,IAAI,gBAAgB;CACpB,IAAI,UAAU;CACd,IAAI,cAAc;CAClB,IAAI,sBAAyC;CAE7C,SAAS,sBAAsB,GAAe,cAAgC;EAC5E,MAAM,UAAU,UAAU,OAAO;EACjC,IAAI,CAAC,SAAS;EAEd,eAAe,QAAQ;EACvB,sBAAsB;EACtB,UAAU,EAAE;EACZ,cAAc,aAAa,SAAS;EAEpC,MAAM,EAAE,SAAS,QAAQ,sBAAsB;EAC/C,gBAAgB;EAEhB,eAAe;GACb,iBAAiB,EAAE,QAAQ,IAAI;EACjC,CAAC;EAED,SAAS,iBAAiB,aAAa,qBAAqB;EAC5D,SAAS,iBAAiB,WAAW,mBAAmB;CAC1D;CAEA,SAAS,sBAAsB,GAAqB;EAClD,iBAAiB,EAAE,QAAQ,aAAa;CAC1C;CAEA,SAAS,oBAAoB,GAAqB;EAChD,oBAAqB,QAAQ,KAAK,IAChC,cAAc,EAAE,QAAQ,SACxB,oBAAqB,QACvB;EACA,oBAAqB,gBAAgB;EAErC,eAAe,QAAQ;EACvB,sBAAsB;EACtB,mBAAmB;EAEnB,SAAS,oBAAoB,WAAW,mBAAmB;EAC3D,SAAS,oBAAoB,aAAa,qBAAqB;CACjE;CAEA,QAAQ,gBAAgB;EAAE;EAAuB;CAAU,CAAC;CAE5D,OAAO;EAAE;EAAe;EAAa;EAAgB;CAAsB;AAC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-columns.js","names":["UButton","UIcon"],"sources":["../../../src/components/table/use-columns.ts"],"sourcesContent":["import { Forest, dfs, last } from '@cat-kit/core'\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { type BEM } from '@veltra/utils'\nimport { computed, createVNode, shallowRef, watch, type ComputedRef, type ShallowRef } from 'vue'\n\nimport type { TableColumn, TableProps } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { ColumnNode } from './node/col'\n\n/**\n * 定义表格列\n * @param columns 表格列\n */\nexport function defineTableColumns(\n columns: TableColumn[],\n commonProps?: Partial<Pick<TableColumn, 'align' | 'minWidth'>>\n): TableColumn[] {\n columns.forEach((col) => {\n dfs(col, (node) => {\n for (const key in commonProps) {\n if (node[key] !== undefined) continue\n node[key] = commonProps[key]\n }\n })\n })\n return columns\n}\n\nexport interface ColumnConfig {\n /** 表头 */\n headers: ComputedRef<ColumnNode[][]>\n\n /**\n * body列, 在body中使用\n */\n columns: ShallowRef<ColumnNode[]>\n\n /** 所有叶子列 */\n leafColumns: ShallowRef<ColumnNode[]>\n\n /** 第一列 */\n expandColumn: ShallowRef<ColumnNode | undefined>\n}\n\ninterface Options {\n props: TableProps\n cls: BEM<'table'>\n /** 创建复选框 */\n createCheckColumn: () => TableColumn\n createSelectColumn: () => TableColumn\n toggleAllTreeRowExpand: () => void\n}\n\nexport function useColumns(options: Options): ColumnConfig {\n const { props, createCheckColumn, createSelectColumn, toggleAllTreeRowExpand, cls } = options\n\n /** 前置列 */\n const preColumns = computed<TableColumn[]>(() => {\n const { selectable, checkable, showIndex } = props\n\n const columns: TableColumn[] = []\n\n if (selectable) {\n columns.push(createSelectColumn())\n } else if (checkable) {\n columns.push(createCheckColumn())\n }\n if (showIndex) {\n columns.push({\n key: '__index__',\n name: '#',\n resizable: false,\n width: 60,\n minWidth: 60,\n align: 'center',\n fixed: 'left',\n render({ row }) {\n return row.index + 1\n }\n })\n }\n\n return columns\n })\n\n const columnForest = shallowRef<Forest<TableColumn, any>>()\n\n const renderExpandAll = () =>\n createVNode(\n UButton,\n {\n text: true,\n title: '展开或收起全部',\n class: cls.e('expand-all'),\n type: 'primary',\n size: 'small',\n circle: true,\n onClick: (e) => {\n e.stopPropagation()\n toggleAllTreeRowExpand()\n }\n },\n () => [createVNode(UIcon, undefined, () => [createVNode(ArrowRight)])]\n )\n\n watch(\n [preColumns, () => props.columns, () => props.tree, () => props.expandable],\n ([preColumns, columns, tree, expandable]) => {\n /** 固定到左侧的列 */\n const fixedOnLeft: TableColumn[] = [...preColumns]\n /** 未固定的列 */\n const unfixed: TableColumn[] = []\n /** 固定到右侧的列 */\n const fixedOnRight: TableColumn[] = []\n\n columns?.forEach((column) => {\n if (!column.fixed || column.children) {\n column.fixed = undefined\n return unfixed.push(column)\n }\n if (column.fixed === 'left') {\n fixedOnLeft.push(column)\n } else {\n fixedOnRight.push(column)\n }\n })\n\n if (last(fixedOnLeft)) {\n last(fixedOnLeft)!.isLastFixed = true\n }\n if (fixedOnRight[0]) {\n fixedOnRight[0].isFirstFixed = true\n }\n\n const sortedColumns = [...fixedOnLeft, ...unfixed, ...fixedOnRight]\n\n if (sortedColumns.length > 0) {\n // 操作时避免改变原数据\n const firstColumn = { ...sortedColumns[0] } as TableColumn\n sortedColumns[0] = firstColumn\n\n // 树形表格需要给第一列添加展开按钮\n // 因此要重新设置第一列的宽度和对齐方式\n if (tree || expandable) {\n firstColumn.align = 'left'\n firstColumn.width = firstColumn.width ? firstColumn.width + 60 : undefined\n\n const oldNameRender = firstColumn.nameRender\n\n firstColumn.nameRender = oldNameRender\n ? (ctx) => {\n const oldNodes = oldNameRender!(ctx)\n return [renderExpandAll(), ...(Array.isArray(oldNodes) ? oldNodes : [oldNodes])]\n }\n : () => {\n return [renderExpandAll(), firstColumn.name]\n }\n }\n }\n\n const result = new Forest<TableColumn, any>({\n data: sortedColumns,\n createNode(data, index, depth, _f, parent) {\n return new ColumnNode(data, index, depth, parent)\n }\n })\n\n columnForest.value = result\n },\n { immediate: true }\n )\n\n const headers = computed(() => {\n const headers: ColumnNode[][] = []\n const forest = columnForest.value\n if (!forest) return headers\n\n // Forest.bfs 对每个根单独 BFS,按 depth 拼行会把后续根节点错放到深层,且根节点无 parent,\n // 回溯 leafs 时会读到 undefined。这里从所有根一次性层序遍历,与多列表头布局一致。\n const queue: ColumnNode[] = [...forest.roots]\n while (queue.length > 0) {\n const size = queue.length\n const layer: ColumnNode[] = []\n for (let i = 0; i < size; i++) {\n const node = queue.shift()!\n layer.push(node)\n const ch = node.children\n if (ch?.length) {\n for (const c of ch) {\n queue.push(c)\n }\n }\n }\n headers.push(layer)\n }\n\n // 从叶子节点开始回溯计算每个节点的累计叶子节点数量,叶子节点数量代表表头的宽度\n for (let i = headers.length - 1; i > 0; i--) {\n const header = headers[i]!\n\n header.forEach((node) => {\n const parent = node.parent\n if (!parent) return\n if (parent.leafs !== undefined) return\n parent.leafs = parent.children!.reduce((sum, node) => {\n return sum + (node.leafs ?? 1)\n }, 0)\n })\n }\n\n return headers\n })\n\n /** 除展开按钮之外的列 */\n const columns = shallowRef<ColumnNode[]>([])\n\n /** 所有叶子节点 */\n const leafColumns = shallowRef<ColumnNode[]>([])\n\n const expandColumn = shallowRef<ColumnNode>()\n\n // 监听列的变化\n watch(\n [columnForest, () => props.tree, () => props.expandable],\n ([forest, tree, expandable]) => {\n const _columns: ColumnNode[] = []\n\n forest?.dfs((node) => {\n if (node.isLeaf) {\n _columns.push(node)\n }\n })\n\n leafColumns.value = _columns\n\n if (tree || expandable) {\n expandColumn.value = _columns[0]\n columns.value = _columns.slice(1)\n } else {\n columns.value = _columns\n expandColumn.value = undefined\n }\n },\n { immediate: true }\n )\n\n return {\n /** 第一列 */\n expandColumn,\n /** 所有列 */\n leafColumns,\n /** 列 */\n columns,\n /** 表格头的分层展示 */\n headers\n }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,mBACd,SACA,aACe;CACf,QAAQ,SAAS,QAAQ;EACvB,IAAI,MAAM,SAAS;GACjB,KAAK,MAAM,OAAO,aAAa;IAC7B,IAAI,KAAK,SAAS,KAAA,GAAW;IAC7B,KAAK,OAAO,YAAY;GAC1B;EACF,CAAC;CACH,CAAC;CACD,OAAO;AACT;AA2BA,SAAgB,WAAW,SAAgC;CACzD,MAAM,EAAE,OAAO,mBAAmB,oBAAoB,wBAAwB,QAAQ;;CAGtF,MAAM,aAAa,eAA8B;EAC/C,MAAM,EAAE,YAAY,WAAW,cAAc;EAE7C,MAAM,UAAyB,CAAC;EAEhC,IAAI,YACF,QAAQ,KAAK,mBAAmB,CAAC;OAC5B,IAAI,WACT,QAAQ,KAAK,kBAAkB,CAAC;EAElC,IAAI,WACF,QAAQ,KAAK;GACX,KAAK;GACL,MAAM;GACN,WAAW;GACX,OAAO;GACP,UAAU;GACV,OAAO;GACP,OAAO;GACP,OAAO,EAAE,OAAO;IACd,OAAO,IAAI,QAAQ;GACrB;EACF,CAAC;EAGH,OAAO;CACT,CAAC;CAED,MAAM,eAAe,WAAqC;CAE1D,MAAM,wBACJ,YACEA,aACA;EACE,MAAM;EACN,OAAO;EACP,OAAO,IAAI,EAAE,YAAY;EACzB,MAAM;EACN,MAAM;EACN,QAAQ;EACR,UAAU,MAAM;GACd,EAAE,gBAAgB;GAClB,uBAAuB;EACzB;CACF,SACM,CAAC,YAAYC,WAAO,KAAA,SAAiB,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,CACvE;CAEF,MACE;EAAC;QAAkB,MAAM;QAAe,MAAM;QAAY,MAAM;CAAU,IACzE,CAAC,YAAY,SAAS,MAAM,gBAAgB;;EAE3C,MAAM,cAA6B,CAAC,GAAG,UAAU;;EAEjD,MAAM,UAAyB,CAAC;;EAEhC,MAAM,eAA8B,CAAC;EAErC,SAAS,SAAS,WAAW;GAC3B,IAAI,CAAC,OAAO,SAAS,OAAO,UAAU;IACpC,OAAO,QAAQ,KAAA;IACf,OAAO,QAAQ,KAAK,MAAM;GAC5B;GACA,IAAI,OAAO,UAAU,QACnB,YAAY,KAAK,MAAM;QAEvB,aAAa,KAAK,MAAM;EAE5B,CAAC;EAED,IAAI,KAAK,WAAW,GAClB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"use-columns.js","names":["UButton","UIcon"],"sources":["../../../src/components/table/use-columns.ts"],"sourcesContent":["import { Forest, dfs, last } from '@cat-kit/core'\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { type BEM } from '@veltra/utils'\nimport { computed, createVNode, shallowRef, watch, type ComputedRef, type ShallowRef } from 'vue'\n\nimport type { TableColumn, TableProps } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { ColumnNode } from './node/col'\n\n/**\n * 定义表格列\n * @param columns 表格列\n */\nexport function defineTableColumns(\n columns: TableColumn[],\n commonProps?: Partial<Pick<TableColumn, 'align' | 'minWidth'>>\n): TableColumn[] {\n columns.forEach((col) => {\n dfs(col, (node) => {\n for (const key in commonProps) {\n if (node[key] !== undefined) continue\n node[key] = commonProps[key]\n }\n })\n })\n return columns\n}\n\nexport interface ColumnConfig {\n /** 表头 */\n headers: ComputedRef<ColumnNode[][]>\n\n /**\n * body列, 在body中使用\n */\n columns: ShallowRef<ColumnNode[]>\n\n /** 所有叶子列 */\n leafColumns: ShallowRef<ColumnNode[]>\n\n /** 第一列 */\n expandColumn: ShallowRef<ColumnNode | undefined>\n}\n\ninterface Options {\n props: TableProps\n cls: BEM<'table'>\n /** 创建复选框 */\n createCheckColumn: () => TableColumn\n createSelectColumn: () => TableColumn\n toggleAllTreeRowExpand: () => void\n}\n\nexport function useColumns(options: Options): ColumnConfig {\n const { props, createCheckColumn, createSelectColumn, toggleAllTreeRowExpand, cls } = options\n\n /** 前置列 */\n const preColumns = computed<TableColumn[]>(() => {\n const { selectable, checkable, showIndex } = props\n\n const columns: TableColumn[] = []\n\n if (selectable) {\n columns.push(createSelectColumn())\n } else if (checkable) {\n columns.push(createCheckColumn())\n }\n if (showIndex) {\n columns.push({\n key: '__index__',\n name: '#',\n resizable: false,\n width: 60,\n minWidth: 60,\n align: 'center',\n fixed: 'left',\n render({ row }) {\n return row.index + 1\n }\n })\n }\n\n return columns\n })\n\n const columnForest = shallowRef<Forest<TableColumn, any>>()\n\n const renderExpandAll = () =>\n createVNode(\n UButton,\n {\n text: true,\n title: '展开或收起全部',\n class: cls.e('expand-all'),\n type: 'primary',\n size: 'small',\n circle: true,\n onClick: (e) => {\n e.stopPropagation()\n toggleAllTreeRowExpand()\n }\n },\n () => [createVNode(UIcon, undefined, () => [createVNode(ArrowRight)])]\n )\n\n watch(\n [preColumns, () => props.columns, () => props.tree, () => props.expandable],\n ([preColumns, columns, tree, expandable]) => {\n /** 固定到左侧的列 */\n const fixedOnLeft: TableColumn[] = [...preColumns]\n /** 未固定的列 */\n const unfixed: TableColumn[] = []\n /** 固定到右侧的列 */\n const fixedOnRight: TableColumn[] = []\n\n columns?.forEach((column) => {\n if (!column.fixed || column.children) {\n column.fixed = undefined\n return unfixed.push(column)\n }\n if (column.fixed === 'left') {\n fixedOnLeft.push(column)\n } else {\n fixedOnRight.push(column)\n }\n })\n\n if (last(fixedOnLeft)) {\n last(fixedOnLeft)!.isLastFixed = true\n }\n if (fixedOnRight[0]) {\n fixedOnRight[0].isFirstFixed = true\n }\n\n const sortedColumns = [...fixedOnLeft, ...unfixed, ...fixedOnRight]\n\n if (sortedColumns.length > 0) {\n // 操作时避免改变原数据\n const firstColumn = { ...sortedColumns[0] } as TableColumn\n sortedColumns[0] = firstColumn\n\n // 树形表格需要给第一列添加展开按钮\n // 因此要重新设置第一列的宽度和对齐方式\n if (tree || expandable) {\n firstColumn.align = 'left'\n firstColumn.width = firstColumn.width ? firstColumn.width + 60 : undefined\n\n const oldNameRender = firstColumn.nameRender\n\n firstColumn.nameRender = oldNameRender\n ? (ctx) => {\n const oldNodes = oldNameRender!(ctx)\n return [renderExpandAll(), ...(Array.isArray(oldNodes) ? oldNodes : [oldNodes])]\n }\n : () => {\n return [renderExpandAll(), firstColumn.name]\n }\n }\n }\n\n const result = new Forest<TableColumn, any>({\n data: sortedColumns,\n createNode(data, index, depth, _f, parent) {\n return new ColumnNode(data, index, depth, parent)\n }\n })\n\n columnForest.value = result\n },\n { immediate: true }\n )\n\n const headers = computed(() => {\n const headers: ColumnNode[][] = []\n const forest = columnForest.value\n if (!forest) return headers\n\n // Forest.bfs 对每个根单独 BFS,按 depth 拼行会把后续根节点错放到深层,且根节点无 parent,\n // 回溯 leafs 时会读到 undefined。这里从所有根一次性层序遍历,与多列表头布局一致。\n const queue: ColumnNode[] = [...forest.roots]\n while (queue.length > 0) {\n const size = queue.length\n const layer: ColumnNode[] = []\n for (let i = 0; i < size; i++) {\n const node = queue.shift()!\n layer.push(node)\n const ch = node.children\n if (ch?.length) {\n for (const c of ch) {\n queue.push(c)\n }\n }\n }\n headers.push(layer)\n }\n\n // 从叶子节点开始回溯计算每个节点的累计叶子节点数量,叶子节点数量代表表头的宽度\n for (let i = headers.length - 1; i > 0; i--) {\n const header = headers[i]!\n\n header.forEach((node) => {\n const parent = node.parent\n if (!parent) return\n if (parent.leafs !== undefined) return\n parent.leafs = parent.children!.reduce((sum, node) => {\n return sum + (node.leafs ?? 1)\n }, 0)\n })\n }\n\n return headers\n })\n\n /** 除展开按钮之外的列 */\n const columns = shallowRef<ColumnNode[]>([])\n\n /** 所有叶子节点 */\n const leafColumns = shallowRef<ColumnNode[]>([])\n\n const expandColumn = shallowRef<ColumnNode>()\n\n // 监听列的变化\n watch(\n [columnForest, () => props.tree, () => props.expandable],\n ([forest, tree, expandable]) => {\n const _columns: ColumnNode[] = []\n\n forest?.dfs((node) => {\n if (node.isLeaf) {\n _columns.push(node)\n }\n })\n\n leafColumns.value = _columns\n\n if (tree || expandable) {\n expandColumn.value = _columns[0]\n columns.value = _columns.slice(1)\n } else {\n columns.value = _columns\n expandColumn.value = undefined\n }\n },\n { immediate: true }\n )\n\n return {\n /** 第一列 */\n expandColumn,\n /** 所有列 */\n leafColumns,\n /** 列 */\n columns,\n /** 表格头的分层展示 */\n headers\n }\n}\n"],"mappings":"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"}
|