@veltra/desktop 1.3.10 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/action/action.js.map +1 -1
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/badge/style.d.ts +1 -1
- package/dist/components/batch-edit/batch-edit-form.js +8 -12
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +2 -1
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/di.js.map +1 -1
- package/dist/components/batch-edit/index.d.ts +2 -2
- package/dist/components/batch-edit/use-edit-state.js +11 -9
- package/dist/components/batch-edit/use-edit-state.js.map +1 -1
- package/dist/components/batch-edit/use-handlers.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/style.d.ts +1 -1
- package/dist/components/button/button-group.js.map +1 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/calendar/style.d.ts +1 -1
- package/dist/components/card/card-action.js.map +1 -1
- package/dist/components/card/card-content.js.map +1 -1
- package/dist/components/card/card-cover.js.map +1 -1
- package/dist/components/card/card-header.js.map +1 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/card/style.d.ts +1 -1
- package/dist/components/cascade/cascade-panel-item.js.map +1 -1
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/check-tag/check-tag.js.map +1 -1
- package/dist/components/check-tag/style.d.ts +1 -1
- package/dist/components/checkbox/checkbox-button.js.map +1 -1
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/code-editor/basic-setup.js +2 -2
- package/dist/components/code-editor/code-editor.js +2 -2
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/lang-loaders.js +1 -1
- package/dist/components/code-editor/shell-extension.js +2 -2
- package/dist/components/collapse/collapse-item.js +34 -11
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse.js.map +1 -1
- package/dist/components/collapse/style.d.ts +1 -1
- package/dist/components/collapse/style2.css +29 -51
- package/dist/components/condition-editor/components/condition-group.js.map +1 -1
- package/dist/components/condition-editor/components/condition-row.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.js.map +1 -1
- package/dist/components/condition-editor/index.d.ts +2 -2
- package/dist/components/contextmenu/contextmenu-item.js +13 -6
- package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-panel.js +12 -6
- package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
- package/dist/components/contextmenu/contextmenu.js.map +1 -1
- package/dist/components/contextmenu/di.d.ts +15 -0
- package/dist/components/contextmenu/index.d.ts +3 -2
- package/dist/components/contextmenu/style2.css +13 -0
- package/dist/components/date-panel/date-panel.js.map +1 -1
- package/dist/components/date-panel/headers/day.js.map +1 -1
- package/dist/components/date-panel/headers/month.js.map +1 -1
- package/dist/components/date-panel/headers/year.js.map +1 -1
- package/dist/components/date-panel/panels/day.js.map +1 -1
- package/dist/components/date-panel/panels/month.js.map +1 -1
- package/dist/components/date-panel/panels/year.js.map +1 -1
- package/dist/components/date-panel/style.d.ts +1 -1
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
- package/dist/components/dual-nav/dual-nav.js.map +1 -1
- package/dist/components/empty/empty.js.map +1 -1
- package/dist/components/empty/style.d.ts +1 -1
- package/dist/components/expression-editor/components/path-preview.js.map +1 -1
- package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
- package/dist/components/expression-editor/core/editor.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/expression-editor/style.d.ts +1 -1
- package/dist/components/file-picker/file-picker.js.map +1 -1
- package/dist/components/file-picker/style.d.ts +1 -1
- package/dist/components/file-viewer/file-viewer.js.map +1 -1
- package/dist/components/file-viewer/helper.js +1 -38
- package/dist/components/file-viewer/helper.js.map +1 -1
- package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
- package/dist/components/file-viewer/previewers/sheet-previewer.js +68 -37
- package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/text-previewer.js +2 -2
- package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
- package/dist/components/file-viewer/style.d.ts +1 -1
- package/dist/components/float-button/float-button.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/style.d.ts +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form-item/style.d.ts +1 -1
- package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
- package/dist/components/gantt-chart/style.d.ts +1 -1
- package/dist/components/grid/grid-item.js.map +1 -1
- package/dist/components/grid/grid.js +3 -2
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid/style.d.ts +1 -1
- package/dist/components/grid-input/grid-input.js.map +1 -1
- package/dist/components/grid-input/style.d.ts +1 -1
- package/dist/components/group-input/group-input.js.map +1 -1
- package/dist/components/group-nav/group-nav-item.js.map +1 -1
- package/dist/components/group-nav/group-nav.js.map +1 -1
- package/dist/components/group-nav/style.d.ts +1 -1
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/icon/style.d.ts +1 -1
- package/dist/components/index.d.ts +91 -156
- package/dist/components/index.js +4 -1
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/kbd/style.d.ts +1 -1
- package/dist/components/layout/layout-resizer.js.map +1 -1
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/layout/style.d.ts +1 -1
- package/dist/components/list/list-item.js.map +1 -1
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/loading/directive.js +2 -1
- package/dist/components/loading/directive.js.map +1 -1
- package/dist/components/loading/index.d.ts +2 -2
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/message/index.d.ts +2 -2
- package/dist/components/message/message-box.js.map +1 -1
- package/dist/components/message/message.js.map +1 -1
- package/dist/components/message/style.d.ts +1 -1
- package/dist/components/message-confirm/index.d.ts +2 -2
- package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
- package/dist/components/message-confirm/message-confirm.js.map +1 -1
- package/dist/components/message-confirm/style.d.ts +1 -1
- package/dist/components/message-confirm/style2.css +18 -0
- package/dist/components/multi-select/multi-select-option.js.map +1 -1
- package/dist/components/multi-select/multi-select.js +6 -3
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/nav/nav-icon.js.map +1 -1
- package/dist/components/nav/nav-item-collapsed.js.map +1 -1
- package/dist/components/nav/nav-item.js +4 -2
- package/dist/components/nav/nav-item.js.map +1 -1
- package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
- package/dist/components/nav/nav-sub.js.map +1 -1
- package/dist/components/nav/nav.js.map +1 -1
- package/dist/components/nav/style.d.ts +1 -1
- package/dist/components/node-render/style.d.ts +1 -1
- package/dist/components/notification/index.d.ts +2 -2
- package/dist/components/notification/notification-box.js +2 -2
- package/dist/components/notification/notification-box.js.map +1 -1
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/notification/style.d.ts +1 -1
- package/dist/components/number/number.js.map +1 -1
- package/dist/components/number/style.d.ts +1 -1
- package/dist/components/number-input/number-input.js +2 -1
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-range-input/number-range-input.js.map +1 -1
- package/dist/components/paginator/paginator.js.map +1 -1
- package/dist/components/palette/palette-alpha.js.map +1 -1
- package/dist/components/palette/palette-color-switch.js.map +1 -1
- package/dist/components/palette/palette-hue.js.map +1 -1
- package/dist/components/palette/palette-sv.js.map +1 -1
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/progress/style.d.ts +1 -1
- package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
- package/dist/components/progress-nodes/style.d.ts +1 -1
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.js +2 -1
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/style.d.ts +1 -1
- package/dist/components/rich-text-editor/toolbar.js +3 -4
- package/dist/components/rich-text-editor/toolbar.js.map +1 -1
- package/dist/components/scroll/scroll-bar.js.map +1 -1
- package/dist/components/scroll/scroll.js.map +1 -1
- package/dist/components/scroll/style.d.ts +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/slider/style.d.ts +1 -1
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/steps/style.d.ts +1 -1
- package/dist/components/steps/style2.css +14 -14
- package/dist/components/switch/style.d.ts +1 -1
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/index.d.ts +2 -2
- package/dist/components/table/node/col.d.ts +1 -49
- package/dist/components/table/table-body.js.map +1 -1
- package/dist/components/table/table-cell.js.map +1 -1
- package/dist/components/table/table-foot.js.map +1 -1
- package/dist/components/table/table-row.js +2 -1
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-check.js +2 -1
- package/dist/components/table/use-check.js.map +1 -1
- package/dist/components/table/use-columns.d.ts +1 -1
- package/dist/components/table/use-rows.js +2 -1
- package/dist/components/table/use-rows.js.map +1 -1
- package/dist/components/table-editor/table-editor.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.js +2 -1
- package/dist/components/tabs/tabs-horizontal.js.map +1 -1
- package/dist/components/tabs/tabs-vertical.js.map +1 -1
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/use-tabs-bar.js +10 -25
- package/dist/components/tabs/use-tabs-bar.js.map +1 -1
- package/dist/components/tag/style.d.ts +1 -1
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/text/style.d.ts +1 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/theme/theme.js +3 -2
- package/dist/components/theme/theme.js.map +1 -1
- package/dist/components/tip/style.d.ts +1 -1
- package/dist/components/tip/tip.js.map +1 -1
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/watermark/style.d.ts +1 -1
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/index.d.ts +93 -97
- package/dist/index.js +2 -1
- package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +3 -3
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +5 -4
- package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +2 -2
- package/dist/node_modules/.bun/{@codemirror_lang-markdown@6.5.1 → @codemirror_lang-markdown@6.5.2}/node_modules/@codemirror/lang-markdown/dist/index.js +4 -3
- package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js +2 -1
- package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js +4 -3
- package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js +2 -2
- package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/{@codemirror_state@6.7.0 → @codemirror_state@6.7.1}/node_modules/@codemirror/state/dist/index.js +13 -3
- package/dist/node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js +1 -1
- package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/{@codemirror_view@6.43.4 → @codemirror_view@6.43.8}/node_modules/@codemirror/view/dist/index.js +86 -64
- package/dist/node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js.map +1 -0
- package/dist/node_modules/.bun/@lezer_common@1.5.2/node_modules/@lezer/common/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_css@1.3.4/node_modules/@lezer/css/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js +1 -1
- package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js.map +1 -1
- package/dist/node_modules/.bun/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js.map +1 -1
- package/dist/node_modules/.bun/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js.map +1 -1
- package/dist/types/collapse.d.ts +23 -4
- package/dist/types/contextmenu.d.ts +10 -4
- package/dist/types/index.d.ts +2 -8
- package/package.json +34 -30
- package/src/components/batch-edit/__test__/batch-edit.test.ts +199 -0
- package/src/components/batch-edit/batch-edit-form.vue +8 -8
- package/src/components/batch-edit/batch-edit.vue +2 -1
- package/src/components/batch-edit/di.ts +2 -0
- package/src/components/batch-edit/use-edit-state.ts +19 -12
- package/src/components/collapse/__test__/collapse.test.ts +178 -1
- package/src/components/collapse/collapse-item.vue +40 -12
- package/src/components/collapse/style.scss +26 -62
- package/src/components/contextmenu/__test__/contextmenu.test.ts +165 -0
- package/src/components/contextmenu/contextmenu-item.vue +7 -4
- package/src/components/contextmenu/contextmenu-panel.vue +7 -4
- package/src/components/contextmenu/index.ts +1 -0
- package/src/components/contextmenu/style.scss +16 -0
- package/src/components/file-viewer/helper.ts +0 -53
- package/src/components/file-viewer/previewers/sheet-previewer.vue +91 -46
- package/src/components/message-confirm/style.scss +19 -0
- package/src/components/notification/style.scss +16 -4
- package/src/components/radio-group/style.scss +1 -1
- package/src/components/slider/style.scss +1 -1
- package/src/components/steps/style.scss +2 -2
- package/src/components/tabs/use-tabs-bar.ts +15 -20
- package/src/types/collapse.ts +25 -3
- package/src/types/contextmenu.ts +10 -4
- package/dist/components/action/action-group.vue.d.ts +0 -25
- package/dist/components/action/action.vue.d.ts +0 -33
- package/dist/components/action/index.d.ts +0 -3
- package/dist/components/auto-complete/auto-complete.vue.d.ts +0 -41
- package/dist/components/auto-complete/index.d.ts +0 -2
- package/dist/components/badge/badge.vue.d.ts +0 -20
- package/dist/components/badge/index.d.ts +0 -2
- package/dist/components/batch-edit/batch-edit.vue.d.ts +0 -45
- package/dist/components/breadcrumb/breadcrumb.vue.d.ts +0 -24
- package/dist/components/breadcrumb/index.d.ts +0 -2
- package/dist/components/button/button-group.vue.d.ts +0 -19
- package/dist/components/button/button.vue.d.ts +0 -27
- package/dist/components/button/index.d.ts +0 -3
- package/dist/components/calendar/calendar.vue.d.ts +0 -17
- package/dist/components/calendar/index.d.ts +0 -2
- package/dist/components/card/card-action.vue.d.ts +0 -18
- package/dist/components/card/card-content.vue.d.ts +0 -18
- package/dist/components/card/card-cover.vue.d.ts +0 -8
- package/dist/components/card/card-header.vue.d.ts +0 -16
- package/dist/components/card/card.vue.d.ts +0 -18
- package/dist/components/card/index.d.ts +0 -6
- package/dist/components/cascade/cascade.vue.d.ts +0 -31
- package/dist/components/cascade/index.d.ts +0 -2
- package/dist/components/check-tag/check-tag.vue.d.ts +0 -22
- package/dist/components/check-tag/index.d.ts +0 -2
- package/dist/components/checkbox/checkbox-button.vue.d.ts +0 -35
- package/dist/components/checkbox/checkbox.vue.d.ts +0 -34
- package/dist/components/checkbox/index.d.ts +0 -3
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +0 -24
- package/dist/components/checkbox-group/index.d.ts +0 -2
- package/dist/components/code-editor/code-editor.vue.d.ts +0 -30
- package/dist/components/code-editor/index.d.ts +0 -2
- package/dist/components/collapse/collapse-item.vue.d.ts +0 -24
- package/dist/components/collapse/collapse.vue.d.ts +0 -27
- package/dist/components/collapse/index.d.ts +0 -3
- package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -15
- package/dist/components/contextmenu/contextmenu.vue.d.ts +0 -14
- package/dist/components/date-panel/date-panel.vue.d.ts +0 -17
- package/dist/components/date-panel/index.d.ts +0 -2
- package/dist/components/date-picker/date-picker.vue.d.ts +0 -18
- package/dist/components/date-picker/index.d.ts +0 -2
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +0 -18
- package/dist/components/date-range-picker/index.d.ts +0 -2
- package/dist/components/dialog/dialog.vue.d.ts +0 -43
- package/dist/components/dialog/index.d.ts +0 -2
- package/dist/components/drawer/drawer.vue.d.ts +0 -36
- package/dist/components/drawer/index.d.ts +0 -2
- package/dist/components/dropdown/dropdown.vue.d.ts +0 -30
- package/dist/components/dropdown/index.d.ts +0 -2
- package/dist/components/dual-nav/dual-nav.vue.d.ts +0 -15
- package/dist/components/dual-nav/index.d.ts +0 -2
- package/dist/components/empty/empty.vue.d.ts +0 -11
- package/dist/components/empty/index.d.ts +0 -2
- package/dist/components/expression-editor/expression-editor.vue.d.ts +0 -16
- package/dist/components/expression-editor/index.d.ts +0 -2
- package/dist/components/file-picker/file-picker.vue.d.ts +0 -27
- package/dist/components/file-picker/index.d.ts +0 -2
- package/dist/components/file-viewer/file-viewer.vue.d.ts +0 -40
- package/dist/components/file-viewer/index.d.ts +0 -2
- package/dist/components/file-viewer/sheet-parser.js +0 -46
- package/dist/components/file-viewer/sheet-parser.js.map +0 -1
- package/dist/components/float-button/float-button.vue.d.ts +0 -12
- package/dist/components/float-button/index.d.ts +0 -2
- package/dist/components/form/form.vue.d.ts +0 -23
- package/dist/components/form/index.d.ts +0 -2
- package/dist/components/form-item/form-item.vue.d.ts +0 -21
- package/dist/components/form-item/index.d.ts +0 -2
- package/dist/components/gantt-chart/gantt-chart.vue.d.ts +0 -8
- package/dist/components/gantt-chart/index.d.ts +0 -2
- package/dist/components/grid/grid-item.vue.d.ts +0 -20
- package/dist/components/grid/grid.vue.d.ts +0 -27
- package/dist/components/grid/index.d.ts +0 -3
- package/dist/components/grid-input/grid-input.vue.d.ts +0 -19
- package/dist/components/grid-input/index.d.ts +0 -2
- package/dist/components/group-input/group-input.vue.d.ts +0 -26
- package/dist/components/group-input/index.d.ts +0 -2
- package/dist/components/group-nav/group-nav.vue.d.ts +0 -12
- package/dist/components/group-nav/index.d.ts +0 -2
- package/dist/components/icon/icon.vue.d.ts +0 -18
- package/dist/components/icon/index.d.ts +0 -2
- package/dist/components/input/index.d.ts +0 -2
- package/dist/components/input/input.vue.d.ts +0 -50
- package/dist/components/kbd/kbd.vue.d.ts +0 -16
- package/dist/components/layout/index.d.ts +0 -2
- package/dist/components/layout/layout.vue.d.ts +0 -20
- package/dist/components/list/index.d.ts +0 -3
- package/dist/components/list/list-item.vue.d.ts +0 -16
- package/dist/components/list/list.vue.d.ts +0 -21
- package/dist/components/loading/loading.vue.d.ts +0 -11
- package/dist/components/message/message.vue.d.ts +0 -16
- package/dist/components/message-confirm/message-confirm.vue.d.ts +0 -19
- package/dist/components/multi-select/index.d.ts +0 -2
- package/dist/components/multi-select/multi-select.vue.d.ts +0 -48
- package/dist/components/multi-tree-select/index.d.ts +0 -2
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +0 -44
- package/dist/components/nav/index.d.ts +0 -4
- package/dist/components/nav/nav-item.vue.d.ts +0 -12
- package/dist/components/nav/nav-sub.vue.d.ts +0 -13
- package/dist/components/nav/nav.vue.d.ts +0 -19
- package/dist/components/notification/notification.vue.d.ts +0 -18
- package/dist/components/number/index.d.ts +0 -2
- package/dist/components/number/number.vue.d.ts +0 -11
- package/dist/components/number-input/index.d.ts +0 -2
- package/dist/components/number-input/number-input.vue.d.ts +0 -39
- package/dist/components/number-range-input/index.d.ts +0 -2
- package/dist/components/number-range-input/number-range-input.vue.d.ts +0 -36
- package/dist/components/paginator/index.d.ts +0 -2
- package/dist/components/paginator/paginator.vue.d.ts +0 -29
- package/dist/components/palette/index.d.ts +0 -2
- package/dist/components/palette/palette.vue.d.ts +0 -20
- package/dist/components/password-input/index.d.ts +0 -2
- package/dist/components/password-input/password-input.vue.d.ts +0 -30
- package/dist/components/pop-confirm/index.d.ts +0 -2
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +0 -33
- package/dist/components/progress/index.d.ts +0 -2
- package/dist/components/progress/progress.vue.d.ts +0 -25
- package/dist/components/progress-nodes/index.d.ts +0 -2
- package/dist/components/progress-nodes/progress-nodes.vue.d.ts +0 -36
- package/dist/components/radio/index.d.ts +0 -2
- package/dist/components/radio/radio.vue.d.ts +0 -31
- package/dist/components/radio-group/index.d.ts +0 -2
- package/dist/components/radio-group/radio-group.vue.d.ts +0 -26
- package/dist/components/rich-text-editor/index.d.ts +0 -2
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +0 -23
- package/dist/components/scroll/index.d.ts +0 -2
- package/dist/components/scroll/scroll.vue.d.ts +0 -28
- package/dist/components/select/index.d.ts +0 -2
- package/dist/components/select/select.vue.d.ts +0 -38
- package/dist/components/slider/index.d.ts +0 -2
- package/dist/components/slider/slider.vue.d.ts +0 -21
- package/dist/components/steps/index.d.ts +0 -2
- package/dist/components/steps/steps.vue.d.ts +0 -29
- package/dist/components/switch/index.d.ts +0 -2
- package/dist/components/switch/switch.vue.d.ts +0 -24
- package/dist/components/table/node/row.d.ts +0 -49
- package/dist/components/table/table.vue.d.ts +0 -54
- package/dist/components/table-editor/index.d.ts +0 -2
- package/dist/components/table-editor/table-editor.vue.d.ts +0 -12
- package/dist/components/tabs/index.d.ts +0 -4
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +0 -40
- package/dist/components/tabs/tabs-vertical.vue.d.ts +0 -39
- package/dist/components/tabs/tabs.vue.d.ts +0 -36
- package/dist/components/tag/index.d.ts +0 -2
- package/dist/components/tag/tag.vue.d.ts +0 -22
- package/dist/components/text/index.d.ts +0 -2
- package/dist/components/text/text.vue.d.ts +0 -10
- package/dist/components/textarea/index.d.ts +0 -2
- package/dist/components/textarea/textarea.vue.d.ts +0 -34
- package/dist/components/theme/index.d.ts +0 -2
- package/dist/components/theme/theme.vue.d.ts +0 -8
- package/dist/components/tip/index.d.ts +0 -2
- package/dist/components/tip/tip.vue.d.ts +0 -31
- package/dist/components/tree/di.d.ts +0 -12
- package/dist/components/tree/index.d.ts +0 -2
- package/dist/components/tree/tree.vue.d.ts +0 -40
- package/dist/components/tree-select/index.d.ts +0 -2
- package/dist/components/tree-select/tree-select.vue.d.ts +0 -48
- package/dist/components/watermark/index.d.ts +0 -2
- package/dist/components/watermark/watermark.vue.d.ts +0 -21
- package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js.map +0 -1
- package/dist/node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js.map +0 -1
- package/dist/node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js.map +0 -1
- package/src/components/file-viewer/sheet-parser.ts +0 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-select-option.js","names":[],"sources":["../../../src/components/multi-select/multi-select-option.vue"],"sourcesContent":["<template>\n <li\n :class=\"optionClass\"\n @click=\"handleClick\"\n @mousedown=\"handleMousedown\"\n @mouseup=\"handleMouseup\"\n @mouseleave=\"handleMouseleave\"\n :ref=\"measureRef\"\n >\n <u-checkbox\n :class=\"checkboxClass\"\n :model-value=\"checked\"\n @update:model-value=\"emit('check', $event)\"\n @click.stop\n :disabled=\"disabled\"\n />\n\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Ripple } from '@veltra/directives'\nimport { inject, onBeforeUnmount, shallowRef } from 'vue'\n\nimport { UCheckbox } from '../checkbox'\nimport { MultiSelectDIKey } from './di'\n\ndefineOptions({ name: 'UMultiSelectOption' })\n\nconst props = defineProps<{\n option: Record<string, any>\n disabled?: boolean\n checked: boolean\n /**\n * 虚拟项索引:对应 `options` 数组中的绝对位置。\n * 非虚拟模式下可省略;虚拟模式下必须传入,否则元素卸载时 Virtualizer 无法及时解绑,\n * 会因为 ResizeObserver 对脱离 DOM 的元素回调 size=0 而污染尺寸缓存。\n */\n index?: number\n measureElement?: (index: number, el: Element | null) => void\n}>()\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nconst emit = defineEmits<{ (e: 'check', checked: boolean): void }>()\n\nconst { optionClass, rippleClass, checkboxClass } = inject(MultiSelectDIKey)!\n\nconst rippleRef = shallowRef<Ripple | null>(null)\n\nfunction handleClick(e) {\n if (props.disabled) return\n emit('check', !props.checked)\n}\n\nfunction handleMousedown(e: MouseEvent) {\n if (props.disabled) return\n\n // 清理旧实例,避免同一元素上多个 Ripple 实例同时修改样式\n if (rippleRef.value) {\n rippleRef.value.remove()\n rippleRef.value = null\n }\n\n rippleRef.value = new Ripple(e.currentTarget as HTMLElement, { rippleClass })\n\n rippleRef.value.showByEvent(e)\n}\n\nfunction handleMouseleave() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nfunction handleMouseup() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nonBeforeUnmount(() => {\n rippleRef.value?.remove()\n rippleRef.value = null\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAad,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,EAAoB;EACxD;EAEA,MAAM,OAAO;EAEb,MAAM,EAAE,aAAa,aAAa,kBAAkB,OAAO,gBAAgB;EAE3E,MAAM,YAAY,WAA0B,IAAI;EAEhD,SAAS,YAAY,GAAG;GACtB,IAAI,MAAM,UAAU;GACpB,KAAK,SAAS,CAAC,MAAM,OAAO;EAC9B;EAEA,SAAS,gBAAgB,GAAe;GACtC,IAAI,MAAM,UAAU;GAGpB,IAAI,UAAU,OAAO;IACnB,UAAU,MAAM,OAAO;IACvB,UAAU,QAAQ;GACpB;GAEA,UAAU,QAAQ,IAAI,OAAO,EAAE,eAA8B,EAAE,YAAY,CAAC;GAE5E,UAAU,MAAM,YAAY,CAAC;EAC/B;EAEA,SAAS,mBAAmB;GAC1B,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB;EAEA,SAAS,gBAAgB;GACvB,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB;EAEA,sBAAsB;GACpB,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB,CAAC;;
|
|
1
|
+
{"version":3,"file":"multi-select-option.js","names":[],"sources":["../../../src/components/multi-select/multi-select-option.vue"],"sourcesContent":["<template>\n <li\n :class=\"optionClass\"\n @click=\"handleClick\"\n @mousedown=\"handleMousedown\"\n @mouseup=\"handleMouseup\"\n @mouseleave=\"handleMouseleave\"\n :ref=\"measureRef\"\n >\n <u-checkbox\n :class=\"checkboxClass\"\n :model-value=\"checked\"\n @update:model-value=\"emit('check', $event)\"\n @click.stop\n :disabled=\"disabled\"\n />\n\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Ripple } from '@veltra/directives'\nimport { inject, onBeforeUnmount, shallowRef } from 'vue'\n\nimport { UCheckbox } from '../checkbox'\nimport { MultiSelectDIKey } from './di'\n\ndefineOptions({ name: 'UMultiSelectOption' })\n\nconst props = defineProps<{\n option: Record<string, any>\n disabled?: boolean\n checked: boolean\n /**\n * 虚拟项索引:对应 `options` 数组中的绝对位置。\n * 非虚拟模式下可省略;虚拟模式下必须传入,否则元素卸载时 Virtualizer 无法及时解绑,\n * 会因为 ResizeObserver 对脱离 DOM 的元素回调 size=0 而污染尺寸缓存。\n */\n index?: number\n measureElement?: (index: number, el: Element | null) => void\n}>()\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nconst emit = defineEmits<{ (e: 'check', checked: boolean): void }>()\n\nconst { optionClass, rippleClass, checkboxClass } = inject(MultiSelectDIKey)!\n\nconst rippleRef = shallowRef<Ripple | null>(null)\n\nfunction handleClick(e) {\n if (props.disabled) return\n emit('check', !props.checked)\n}\n\nfunction handleMousedown(e: MouseEvent) {\n if (props.disabled) return\n\n // 清理旧实例,避免同一元素上多个 Ripple 实例同时修改样式\n if (rippleRef.value) {\n rippleRef.value.remove()\n rippleRef.value = null\n }\n\n rippleRef.value = new Ripple(e.currentTarget as HTMLElement, { rippleClass })\n\n rippleRef.value.showByEvent(e)\n}\n\nfunction handleMouseleave() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nfunction handleMouseup() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nonBeforeUnmount(() => {\n rippleRef.value?.remove()\n rippleRef.value = null\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAad,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,EAAoB;EACxD;EAEA,MAAM,OAAO;EAEb,MAAM,EAAE,aAAa,aAAa,kBAAkB,OAAO,gBAAgB;EAE3E,MAAM,YAAY,WAA0B,IAAI;EAEhD,SAAS,YAAY,GAAG;GACtB,IAAI,MAAM,UAAU;GACpB,KAAK,SAAS,CAAC,MAAM,OAAO;EAC9B;EAEA,SAAS,gBAAgB,GAAe;GACtC,IAAI,MAAM,UAAU;GAGpB,IAAI,UAAU,OAAO;IACnB,UAAU,MAAM,OAAO;IACvB,UAAU,QAAQ;GACpB;GAEA,UAAU,QAAQ,IAAI,OAAO,EAAE,eAA8B,EAAE,YAAY,CAAC;GAE5E,UAAU,MAAM,YAAY,CAAC;EAC/B;EAEA,SAAS,mBAAmB;GAC1B,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB;EAEA,SAAS,gBAAgB;GACvB,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB;EAEA,sBAAsB;GACpB,UAAU,OAAO,OAAO;GACxB,UAAU,QAAQ;EACpB,CAAC;;GArFC,OAAA,UAAA,GAAA,mBAiBK,MAAA;IAhBF,OAAK,eAAE,MAAA,WAAA,CAAW;IAClB,SAAO;IACP,aAAW;IACX,WAAS;IACT,cAAY;IACZ,KAAK;GAEN,GAAA,CAAA,YAME,MAAA,WAAA,GAAA;IALC,OAAK,eAAE,MAAA,aAAA,CAAa;IACpB,eAAa,QAAA;IACb,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,SAAU,MAAM;IACxC,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;IACV,UAAU,QAAA;;;;;GAGb,CAAA,GAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,EAAA"}
|
|
@@ -285,10 +285,13 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
285
285
|
const { max } = props;
|
|
286
286
|
return max !== void 0 && checkedSet.size >= max && !checkedSet.has(option);
|
|
287
287
|
};
|
|
288
|
+
const optionClass = cls.e("option");
|
|
289
|
+
const rippleClass = cls.e("ripple");
|
|
290
|
+
const checkboxClass = cls.e("checkbox");
|
|
288
291
|
provide(MultiSelectDIKey, {
|
|
289
|
-
optionClass
|
|
290
|
-
rippleClass
|
|
291
|
-
checkboxClass
|
|
292
|
+
optionClass,
|
|
293
|
+
rippleClass,
|
|
294
|
+
checkboxClass
|
|
292
295
|
});
|
|
293
296
|
return (_ctx, _cache) => {
|
|
294
297
|
return !unref(readonly) ? (openBlock(), createBlock(unref(_sfc_main$4), mergeProps({ key: 0 }, _ctx.$attrs, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-select.js","names":["$attrs"],"sources":["../../../src/components/multi-select/multi-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled), bem.is('focus', dropdownVisible)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n :disabled=\"disabled\"\n @update:visible=\"handleDropdownVisible\"\n >\n <!-- 触发 -->\n <template #trigger>\n <span :class=\"cls.e('placeholder')\" v-if=\"!filterable && !model?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"model?.length || filterable\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"option of tags\"\n :key=\"option[valueKey]\"\n :closable=\"!disabled\"\n size=\"small\"\n @close=\"handleClose(option)\"\n >\n {{ option[labelKey] }}\n </u-tag>\n <u-tag v-if=\"restTag\" size=\"small\"> {{ restTag }}+ </u-tag>\n\n <!-- 内嵌查询输入框:承载过滤与回车创建 -->\n <input\n v-if=\"filterable\"\n ref=\"inputRef\"\n :class=\"cls.e('input')\"\n v-model=\"queryString\"\n :placeholder=\"model?.length ? '' : placeholder\"\n :disabled=\"disabled\"\n @click.stop=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n @keydown.enter.prevent=\"handleCreateByEnter\"\n />\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && model?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n\n <!-- 下拉内容 -->\n <template #content>\n <!-- 多选栏 -->\n <div :class=\"cls.e('content-header')\">\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n :disabled=\"max !== undefined\"\n >\n 全选\n </u-checkbox>\n\n <span> 已选 {{ model?.length }}/{{ max ?? options?.length ?? 0 }} </span>\n </div>\n\n <!-- 多选列表 -->\n <!--\n 虚拟化启用时内容容器 height 由 useVirtualizer 命令式写入;\n 模板不再绑定 totalSize,避免尺寸变化引起重渲染。\n -->\n <u-scroll\n tag=\"ul\"\n :class=\"[cls.e('options')]\"\n ref=\"scrollRef\"\n v-if=\"options.length\"\n :content-class=\"[cls.e('options-wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <u-multi-select-option\n v-for=\"{ option, index, key, label, offset } of virtualOptions\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"key\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ label }}\n </slot>\n </u-multi-select-option>\n </template>\n\n <template v-else>\n <u-multi-select-option\n v-for=\"(option, index) of options\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"chainObj(option).get(valueKey)\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ chainObj(option).get(labelKey) }}\n </slot>\n </u-multi-select-option>\n </template>\n </u-scroll>\n\n <div v-else :class=\"cls.e('empty')\">\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\" size=\"small\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o as chainObj } from '@cat-kit/core'\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { ArrowDown, Close } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport {\n computed,\n nextTick,\n shallowRef,\n shallowReactive,\n watch,\n provide,\n useTemplateRef\n} from 'vue'\n\nimport type {\n MultiSelectEmits,\n MultiSelectProps,\n ScrollExposed,\n DropdownExposed\n} from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { useOptions } from '../select/use-options'\nimport { UTag } from '../tag'\nimport { MultiSelectDIKey } from './di'\nimport UMultiSelectOption from './multi-select-option.vue'\n\ndefineOptions({ name: 'UMultiSelect', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<MultiSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n clearable: true,\n visibilityLimit: 3,\n disabled: undefined,\n readonly: undefined,\n minWidth: '220px'\n})\n\nconst emit = defineEmits<MultiSelectEmits>()\n\nconst cls = bem('multi-select')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst hovered = shallowRef(false)\n\nconst { options: rawOptions, queryString, allOptions: rawAllOptions } = useOptions({ props })\n\nconst createdOptions = shallowRef<Record<string, any>[]>([])\n\nconst options = computed(() => {\n const base = rawOptions.value\n if (!props.creatable || !createdOptions.value.length) return base\n\n const createdValues = new Set(createdOptions.value.map((o) => chainObj(o).get(valueKey.value)))\n const deduped = base.filter(\n (o) => !(o.__isTemp && createdValues.has(chainObj(o).get(valueKey.value)))\n )\n const dedupedValues = new Set(deduped.map((o) => chainObj(o).get(valueKey.value)))\n const toAdd = createdOptions.value.filter(\n (o) => !dedupedValues.has(chainObj(o).get(valueKey.value))\n )\n return [...toAdd, ...deduped]\n})\n\nconst allOptions = computed(() => {\n if (!props.creatable || !createdOptions.value.length) return rawAllOptions.value\n return [...createdOptions.value, ...rawAllOptions.value]\n})\n\nconst virtualEnabled = computed(() => options.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n estimateSize: () => 40,\n count: computed(() => options.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null)\n})\n\nconst virtualOptions = computed(() => {\n const _options = options.value\n return items.value.map((v) => {\n const option = _options[v.index]!\n const val = chainObj(option).get(valueKey.value)\n return {\n option,\n index: v.index,\n val,\n key: v.index,\n offset: v.start,\n label: chainObj(option).get(labelKey.value)\n }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nconst filterable = computed(() => {\n return props.filterable || props.creatable || typeof props.options === 'function'\n})\n\nconst model = defineModel<Array<string | number>>()\n\nconst checkedSet = shallowReactive<Set<Record<string, any>>>(new Set())\nconst allChecked = computed(() => {\n return checkedSet.size === options.value.length\n})\nconst indeterminate = computed(() => {\n return checkedSet.size > 0 && !allChecked.value\n})\n\nconst optionsMap = computed(() => {\n return new Map<string | number, Record<string, any>>(\n allOptions.value.map((option) => [option[valueKey.value], option])\n )\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet internalChange = false\n\nwatch(\n [model, optionsMap],\n ([model, optionsMap]) => {\n if (internalChange) {\n internalChange = false\n return\n }\n checkedSet.clear()\n if (optionsMap.size && model?.length) {\n model.forEach((v) => {\n const option = optionsMap.get(v)\n option && checkedSet.add(option)\n })\n }\n },\n { immediate: true }\n)\n\nconst emitChange = () => {\n emit('change', Array.from(checkedSet))\n}\n\nconst tags = computed(() => {\n let tags: Record<string, any>[] = []\n let { visibilityLimit } = props\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n\n // 禁用时,显示全部\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n\n model.value?.slice(0, visibilityLimit).forEach((k) => {\n const option = optionsMap.value.get(k)\n option && tags.push(option)\n })\n\n return tags\n})\n\nconst restTag = computed(() => {\n return (model.value?.length ?? 0) - tags.value.length\n})\n\nconst dropdownVisible = shallowRef(false)\n\nconst inputRef = useTemplateRef<HTMLInputElement>('inputRef')\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) {\n queryString.value = ''\n }\n}\n\n/**\n * 拦截输入区域的点击(@click.stop):阻止 dropdown 的 trigger 开合切换,\n * 保持面板展开以不中断输入。\n */\nconst handleInputClick = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\nconst handleInputFocus = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\n/** 勾选后把焦点还给输入框,便于连续输入过滤 */\nconst refocusInput = () => {\n if (!filterable.value) return\n nextTick(() => inputRef.value?.focus())\n}\n\nconst handleCheck = (option: Record<string, any>, checked: boolean) => {\n if (checked) {\n if (option.__isTemp && props.creatable) {\n const created: Record<string, any> = {\n [labelKey.value]: chainObj(option).get(labelKey.value),\n [valueKey.value]: chainObj(option).get(valueKey.value)\n }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(created).get(valueKey.value)!]\n queryString.value = ''\n } else if (!checkedSet.has(option)) {\n checkedSet.add(option)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(option).get(valueKey.value)!]\n }\n } else {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey.value)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n refocusInput()\n}\n\n/** 全选 */\nconst handleCheckAll = (checked: boolean) => {\n if (checked) {\n options.value.forEach((option) => {\n if (!option.__isTemp) checkedSet.add(option)\n })\n internalChange = true\n model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey.value)!)\n } else {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 清除选项 */\nconst handleClear = () => {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n emit('change', [])\n}\n\nconst handleClose = (option: Record<string, any>) => {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey.value)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n emitChange()\n}\n\nconst removeCreatedOption = (option: Record<string, any>) => {\n if (!props.creatable || !createdOptions.value.length) return\n const val = chainObj(option).get(valueKey.value)\n createdOptions.value = createdOptions.value.filter((o) => chainObj(o).get(valueKey.value) !== val)\n}\n\nconst handleCreateByEnter = () => {\n if (!props.creatable) return\n const qs = queryString.value?.trim()\n if (!qs) return\n\n const existingCreated = createdOptions.value.find((o) => chainObj(o).get(valueKey.value) === qs)\n if (existingCreated) {\n if (!checkedSet.has(existingCreated)) {\n checkedSet.add(existingCreated)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey.value)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const exactMatch = rawOptions.value.find(\n (o) => !o.__isTemp && chainObj(o).get(labelKey.value) === qs\n )\n if (exactMatch) {\n if (!checkedSet.has(exactMatch)) {\n checkedSet.add(exactMatch)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey.value)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const created: Record<string, any> = { [labelKey.value]: qs, [valueKey.value]: qs }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), qs]\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\nconst isDisabled = (option: Record<string, any>) => {\n const { max } = props\n return max !== undefined && checkedSet.size >= max && !checkedSet.has(option)\n}\n\nconst optionClass = cls.e('option')\nconst rippleClass = cls.e('ripple')\nconst checkboxClass = cls.e('checkbox')\n\nprovide(MultiSelectDIKey, { optionClass, rippleClass, checkboxClass })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgLA,MAAM,QAAQ;EAWd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,cAAc;EAE9B,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EACjE,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EAEjE,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,WAA0B;EAE5C,MAAM,UAAU,WAAW,KAAK;EAEhC,MAAM,EAAE,SAAS,YAAY,aAAa,YAAY,kBAAkB,WAAW,EAAE,MAAM,CAAC;EAE5F,MAAM,iBAAiB,WAAkC,CAAC,CAAC;EAE3D,MAAM,UAAU,eAAe;GAC7B,MAAM,OAAO,WAAW;GACxB,IAAI,CAAC,MAAM,aAAa,CAAC,eAAe,MAAM,QAAQ,OAAO;GAE7D,MAAM,gBAAgB,IAAI,IAAI,eAAe,MAAM,KAAK,QAAM,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC;GAC9F,MAAM,UAAU,KAAK,QAClB,QAAM,EAAE,IAAE,YAAY,cAAc,IAAI,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,EAC1E;GACA,MAAM,gBAAgB,IAAI,IAAI,QAAQ,KAAK,QAAM,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC;GAIjF,OAAO,CAAC,GAHM,eAAe,MAAM,QAChC,QAAM,CAAC,cAAc,IAAI,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAEhD,GAAO,GAAG,OAAO;EAC9B,CAAC;EAED,MAAM,aAAa,eAAe;GAChC,IAAI,CAAC,MAAM,aAAa,CAAC,eAAe,MAAM,QAAQ,OAAO,cAAc;GAC3E,OAAO,CAAC,GAAG,eAAe,OAAO,GAAG,cAAc,KAAK;EACzD,CAAC;EAED,MAAM,iBAAiB,eAAe,QAAQ,MAAM,SAAS,EAAE;EAE/D,MAAM,EAAE,aAAa,UAAU,eAAe;GAC5C,oBAAoB;GACpB,OAAO,eAAe,QAAQ,MAAM,MAAM;GAC1C,gBAAgB,UAAU,OAAO,gBAAgB;GACjD,iBAAkB,eAAe,QAAS,UAAU,OAAO,cAAc,OAAQ;EACnF,CAAC;EAED,MAAM,iBAAiB,eAAe;GACpC,MAAM,WAAW,QAAQ;GACzB,OAAO,MAAM,MAAM,KAAK,MAAM;IAC5B,MAAM,SAAS,SAAS,EAAE;IAC1B,MAAM,MAAM,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;IAC/C,OAAO;KACL;KACA,OAAO,EAAE;KACT;KACA,KAAK,EAAE;KACP,QAAQ,EAAE;KACV,OAAO,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;IAC5C;GACF,CAAC;EACH,CAAC;EAED,MAAM,kBAA+D,OAAO,OAC1E,YAAY,eAAe,OAAO,EAAE;EAEtC,MAAM,aAAa,eAAe;GAChC,OAAO,MAAM,cAAc,MAAM,aAAa,OAAO,MAAM,YAAY;EACzE,CAAC;EAED,MAAM,QAAQ,SAAmC,SAAA,YAAC;EAElD,MAAM,aAAa,gCAA0C,IAAI,IAAI,CAAC;EACtE,MAAM,aAAa,eAAe;GAChC,OAAO,WAAW,SAAS,QAAQ,MAAM;EAC3C,CAAC;EACD,MAAM,gBAAgB,eAAe;GACnC,OAAO,WAAW,OAAO,KAAK,CAAC,WAAW;EAC5C,CAAC;EAED,MAAM,aAAa,eAAe;GAChC,OAAO,IAAI,IACT,WAAW,MAAM,KAAK,WAAW,CAAC,OAAO,SAAS,QAAQ,MAAM,CAAC,CACnE;EACF,CAAC;EAED,MAAM,cAAc,WAA4B;EAEhD,IAAI,iBAAiB;EAErB,MACE,CAAC,OAAO,UAAU,IACjB,CAAC,OAAO,gBAAgB;GACvB,IAAI,gBAAgB;IAClB,iBAAiB;IACjB;GACF;GACA,WAAW,MAAM;GACjB,IAAI,WAAW,QAAQ,OAAO,QAC5B,MAAM,SAAS,MAAM;IACnB,MAAM,SAAS,WAAW,IAAI,CAAC;IAC/B,UAAU,WAAW,IAAI,MAAM;GACjC,CAAC;EAEL,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,MAAM,mBAAmB;GACvB,KAAK,UAAU,MAAM,KAAK,UAAU,CAAC;EACvC;EAEA,MAAM,OAAO,eAAe;GAC1B,IAAI,OAA8B,CAAC;GACnC,IAAI,EAAE,oBAAoB;GAC1B,IAAI,kBAAkB,GACpB,kBAAkB;GAIpB,IAAI,SAAS,SAAS,SAAS,OAC7B,kBAAkB,MAAM,OAAO,UAAU;GAG3C,MAAM,OAAO,MAAM,GAAG,eAAe,CAAC,CAAC,SAAS,MAAM;IACpD,MAAM,SAAS,WAAW,MAAM,IAAI,CAAC;IACrC,UAAU,KAAK,KAAK,MAAM;GAC5B,CAAC;GAED,OAAO;EACT,CAAC;EAED,MAAM,UAAU,eAAe;GAC7B,QAAQ,MAAM,OAAO,UAAU,KAAK,KAAK,MAAM;EACjD,CAAC;EAED,MAAM,kBAAkB,WAAW,KAAK;EAExC,MAAM,WAAW,eAAiC,UAAU;EAE5D,MAAM,yBAAyB,YAAqB;GAClD,gBAAgB,QAAQ;GACxB,IAAI,CAAC,SACH,YAAY,QAAQ;EAExB;;;;;EAMA,MAAM,yBAAyB;GAC7B,IAAI,CAAC,gBAAgB,OAAO,YAAY,OAAO,KAAK;EACtD;EAEA,MAAM,yBAAyB;GAC7B,IAAI,CAAC,gBAAgB,OAAO,YAAY,OAAO,KAAK;EACtD;;EAGA,MAAM,qBAAqB;GACzB,IAAI,CAAC,WAAW,OAAO;GACvB,eAAe,SAAS,OAAO,MAAM,CAAC;EACxC;EAEA,MAAM,eAAe,QAA6B,YAAqB;GACrE,IAAI;QACE,OAAO,YAAY,MAAM,WAAW;KACtC,MAAM,UAA+B;OAClC,SAAS,QAAQ,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;OACpD,SAAS,QAAQ,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;KACvD;KACA,eAAe,QAAQ,CAAC,GAAG,eAAe,OAAO,OAAO;KACxD,WAAW,IAAI,OAAO;KACtB,iBAAiB;KACjB,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,EAAS,OAAO,CAAC,CAAC,IAAI,SAAS,KAAK,CAAE;KAC7E,YAAY,QAAQ;IACtB,OAAO,IAAI,CAAC,WAAW,IAAI,MAAM,GAAG;KAClC,WAAW,IAAI,MAAM;KACrB,iBAAiB;KACjB,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK,CAAE;IAC9E;UACK;IACL,WAAW,OAAO,MAAM;IACxB,MAAM,MAAM,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;IAC/C,iBAAiB;IACjB,MAAM,SAAS,MAAM,SAAS,CAAC,EAAA,CAAG,QAAQ,MAAM,MAAM,GAAG;IACzD,oBAAoB,MAAM;GAC5B;GAEA,WAAW;GACX,YAAY,OAAO,eAAe;GAClC,aAAa;EACf;;EAGA,MAAM,kBAAkB,YAAqB;GAC3C,IAAI,SAAS;IACX,QAAQ,MAAM,SAAS,WAAW;KAChC,IAAI,CAAC,OAAO,UAAU,WAAW,IAAI,MAAM;IAC7C,CAAC;IACD,iBAAiB;IACjB,MAAM,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC,KAAK,QAAM,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,CAAE;GAClF,OAAO;IACL,WAAW,MAAM;IACjB,iBAAiB;IACjB,MAAM,QAAQ,CAAC;IACf,IAAI,MAAM,WACR,eAAe,QAAQ,CAAC;GAE5B;GAEA,WAAW;GACX,YAAY,OAAO,eAAe;EACpC;;EAGA,MAAM,oBAAoB;GACxB,WAAW,MAAM;GACjB,iBAAiB;GACjB,MAAM,QAAQ,CAAC;GACf,IAAI,MAAM,WACR,eAAe,QAAQ,CAAC;GAE1B,KAAK,UAAU,CAAC,CAAC;EACnB;EAEA,MAAM,eAAe,WAAgC;GACnD,WAAW,OAAO,MAAM;GACxB,MAAM,MAAM,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;GAC/C,iBAAiB;GACjB,MAAM,SAAS,MAAM,SAAS,CAAC,EAAA,CAAG,QAAQ,MAAM,MAAM,GAAG;GACzD,oBAAoB,MAAM;GAC1B,WAAW;EACb;EAEA,MAAM,uBAAuB,WAAgC;GAC3D,IAAI,CAAC,MAAM,aAAa,CAAC,eAAe,MAAM,QAAQ;GACtD,MAAM,MAAM,EAAS,MAAM,CAAC,CAAC,IAAI,SAAS,KAAK;GAC/C,eAAe,QAAQ,eAAe,MAAM,QAAQ,QAAM,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,MAAM,GAAG;EACnG;EAEA,MAAM,4BAA4B;GAChC,IAAI,CAAC,MAAM,WAAW;GACtB,MAAM,KAAK,YAAY,OAAO,KAAK;GACnC,IAAI,CAAC,IAAI;GAET,MAAM,kBAAkB,eAAe,MAAM,MAAM,QAAM,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,MAAM,EAAE;GAC/F,IAAI,iBAAiB;IACnB,IAAI,CAAC,WAAW,IAAI,eAAe,GAAG;KACpC,WAAW,IAAI,eAAe;KAC9B,iBAAiB;KACjB,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,EAAS,eAAe,CAAC,CAAC,IAAI,SAAS,KAAK,CAAE;IACvF;IACA,YAAY,QAAQ;IACpB,WAAW;IACX,YAAY,OAAO,eAAe;IAClC;GACF;GAEA,MAAM,aAAa,WAAW,MAAM,MACjC,QAAM,CAAC,IAAE,YAAY,EAAS,GAAC,CAAC,CAAC,IAAI,SAAS,KAAK,MAAM,EAC5D;GACA,IAAI,YAAY;IACd,IAAI,CAAC,WAAW,IAAI,UAAU,GAAG;KAC/B,WAAW,IAAI,UAAU;KACzB,iBAAiB;KACjB,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,EAAS,UAAU,CAAC,CAAC,IAAI,SAAS,KAAK,CAAE;IAClF;IACA,YAAY,QAAQ;IACpB,WAAW;IACX,YAAY,OAAO,eAAe;IAClC;GACF;GAEA,MAAM,UAA+B;KAAG,SAAS,QAAQ;KAAK,SAAS,QAAQ;GAAG;GAClF,eAAe,QAAQ,CAAC,GAAG,eAAe,OAAO,OAAO;GACxD,WAAW,IAAI,OAAO;GACtB,iBAAiB;GACjB,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,EAAE;GACzC,YAAY,QAAQ;GACpB,WAAW;GACX,YAAY,OAAO,eAAe;EACpC;EAEA,MAAM,cAAc,WAAgC;GAClD,MAAM,EAAE,QAAQ;GAChB,OAAO,QAAQ,KAAA,KAAa,WAAW,QAAQ,OAAO,CAAC,WAAW,IAAI,MAAM;EAC9E;EAMA,QAAQ,kBAAkB;GAAE,aAJR,IAAI,EAAE,QAIE;GAAa,aAHrB,IAAI,EAAE,QAGe;GAAa,eAFhC,IAAI,EAAE,UAE0B;EAAc,CAAC;;WApe1D,MAAA,QAAA,KAAA,UAAA,GADT,YA8Ha,MAAA,WAAA,GA9Hb,WA8Ha,EAAA,KAAA,EAAA,GA5HHA,KAAAA,QAAM;IACd,SAAQ;aACJ;IAAJ,KAAI;IACH,OAAK;KAAG,MAAA,GAAA,CAAG,CAAC;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;KAAG,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,MAAA,QAAA,CAAQ;KAAG,MAAA,GAAA,CAAG,CAAC,GAAE,SAAU,gBAAA,KAAe;IAAA;IACzF,iBAAa;KAAG,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA;KAAW,MAAA,GAAA,CAAG,CAAC,GAAE,SAAU,MAAA,IAAA,CAAI;KAAG,QAAA;IAAY;IACnE,iBAAe,QAAA;IACf,aAAW,QAAA;IACX,OAAO,QAAA;IACP,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,QAAO;IACnB,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,QAAA,QAAO;IACnB,UAAU,MAAA,QAAA;IACV,oBAAgB;;IAGN,SAAO,cAGT;MAFoC,WAAA,SAAU,CAAK,MAAA,OAAO,UAAA,UAAA,GAAjE,mBAEO,QAAA;;MAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;wBACd,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KAGL,MAAA,OAAO,UAAU,WAAA,SAAA,UAAA,GAA5B,mBAwBM,OAAA;;MAxBmC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;;wBACnD,mBAQQ,UAAA,MAAA,WAPW,KAAA,QAAV,WAAM;2BADf,YAQQ,MAAA,WAAA,GAAA;QANL,KAAK,OAAO,SAAA;QACZ,UAAQ,CAAG,MAAA,QAAA;QACZ,MAAK;QACJ,UAAK,WAAE,YAAY,MAAM;;+BAEJ,CAAA,gBAAA,gBAAnB,OAAO,SAAA,MAAQ,GAAA,CAAA,CAAA,CAAA;;;;MAEP,QAAA,SAAA,UAAA,GAAb,YAA2D,MAAA,WAAA,GAAA;;OAArC,MAAK;;8BAAsB,CAAA,gBAAA,gBAAV,QAAA,KAAO,IAAG,MAAE,CAAA,CAAA,CAAA;;;MAEnD,mBAAA,qBAAA;MAEQ,WAAA,QAAA,gBAAA,UAAA,GADR,mBAUE,SAAA;;gBARI;OAAJ,KAAI;OACH,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;yFACJ,YAAW,QAAA,SAAA;OACnB,aAAa,MAAA,OAAO,SAAM,KAAQ,QAAA;OAClC,UAAU,MAAA,QAAA;OACV,SAAK,cAAO,kBAAgB,CAAA,MAAA,CAAA;OAC5B,SAAO;OACP,WAAO,SAAA,cAAgB,qBAAmB,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;+CALlC,MAAA,WAAA,CAAW,CAAA,CAAA,IAAA,mBAAA,QAAA,IAAA;;KASxB,YAUa,YAAA;MAVD,MAAK;MAAU,MAAK;;6BAOrB,CALD,QAAA,aAAa,MAAA,OAAO,UAAU,QAAA,SAAO,CAAK,MAAA,QAAA,KAAA,UAAA,GADlD,YAMS,MAAA,WAAA,GAAA;;OAJN,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;OACZ,SAAK,cAAO,aAAW,CAAA,MAAA,CAAA;;8BAEf,CAAT,YAAS,MAAA,KAAA,CAAA,CAAA,CAAA;;wCAGX,YAA6D,MAAA,WAAA,GAAA;;OAApD,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;;8BAA+B,CAAb,YAAa,MAAA,SAAA,CAAA,CAAA,CAAA;;;;;;IAK7C,SAAO,cACJ;KAAZ,mBAAA,OAAA;KACA,mBAWM,OAAA,EAXA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,gBAAA,CAAA,EAAA,GAAA,CAChB,YAOa,MAAA,WAAA,GAAA;MANV,eAAa,WAAA;MACb,eAAe,cAAA;MACf,uBAAoB;MACpB,UAAU,QAAA,QAAQ,KAAA;;6BAGrB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFC,QAED,EAAA,CAAA,EAAA,CAAA;;;;;;SAEA,mBAAuE,QAAA,MAAjE,SAAI,gBAAG,MAAA,OAAO,MAAM,IAAG,MAAC,gBAAG,QAAA,OAAO,QAAA,OAAS,UAAM,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA;KAGzD,mBAAA,QAAA;KACA,mBAAA,oGAAA;KAQQ,QAAA,MAAQ,UAAA,UAAA,GAJhB,YAuCW,MAAA,WAAA,GAAA;;MAtCT,KAAI;MACH,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,CAAA;eACV;MAAJ,KAAI;MAEH,iBAAa,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,GAAkB,MAAA,GAAA,CAAG,CAAC,GAAE,WAAY,eAAA,KAAc,CAAA;;6BAkB7D,CAhBK,eAAA,SAAA,UAAA,IAAA,GACd,mBAcwB,UAAA,EAAA,KAAA,EAAA,GAAA,WAb0B,eAAA,QAAc,EAArD,QAAQ,OAAO,KAAK,OAAO,aAAM;2BAD5C,YAcwB,aAAA;QAZb;QACR,UAAU,WAAW,MAAM;QACtB;QACL,OAAK,eAAA,EAAA,WAAA,cAA6B,OAAM,KAAA,CAAA;QACxC,UAAK,WAAE,YAAY,QAAQ,MAAM;QACjC,SAAS,MAAA,UAAA,CAAU,CAAC,IAAI,MAAM;QACvB;QACP,mBAAiB;;+BAIX,CAFP,WAEO,KAAA,QAAA,WAFP,WAEO,EAAA,SAAA,KAAA,GAAA;SAFS;SAAQ;QAAK,CAAA,SAEtB,CAAA,gBAAA,gBADF,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;oCAMZ,mBAWwB,UAAA,EAAA,KAAA,EAAA,GAAA,WAVI,QAAA,QAAlB,QAAQ,UAAK;2BADvB,YAWwB,aAAA;QATb;QACR,UAAU,WAAW,MAAM;QAC3B,KAAK,MAAA,CAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,IAAI,SAAA,KAAQ;QAClC,UAAK,WAAE,YAAY,QAAQ,MAAM;QACjC,SAAS,MAAA,UAAA,CAAU,CAAC,IAAI,MAAM;;+BAIxB,CAFP,WAEO,KAAA,QAAA,WAFP,WAEO,EAAA,SAAA,KAAA,GAAA;SAFS;SAAQ;QAAK,CAAA,SAEtB,CAAA,gBAAA,gBADF,MAAA,CAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,IAAI,SAAA,KAAQ,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;wDAMxC,mBAEM,OAAA;;MAFO,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;SACvB,YAAU,MAAA,WAAA,CAAA,CAAA,GAAA,CAAA;;;;;;;;;;SAKA,MAAA,OAAO,UAAA,UAAA,GAAvB,mBAMM,OAAA;;IAN0B,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA,CAAA;OACxD,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GAChB,mBAEQ,UAAA,MAAA,WAFgB,KAAA,QAAV,WAAM;wBAApB,YAEQ,MAAA,WAAA,GAAA;KAFuB,KAAK,OAAO,SAAA;KAAW,MAAK;;4BACnC,CAAA,gBAAA,gBAAnB,OAAO,SAAA,MAAQ,GAAA,CAAA,CAAA,CAAA;;;wCAKxB,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"multi-select.js","names":["$attrs"],"sources":["../../../src/components/multi-select/multi-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled), bem.is('focus', dropdownVisible)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n :disabled=\"disabled\"\n @update:visible=\"handleDropdownVisible\"\n >\n <!-- 触发 -->\n <template #trigger>\n <span :class=\"cls.e('placeholder')\" v-if=\"!filterable && !model?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"model?.length || filterable\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"option of tags\"\n :key=\"option[valueKey]\"\n :closable=\"!disabled\"\n size=\"small\"\n @close=\"handleClose(option)\"\n >\n {{ option[labelKey] }}\n </u-tag>\n <u-tag v-if=\"restTag\" size=\"small\"> {{ restTag }}+ </u-tag>\n\n <!-- 内嵌查询输入框:承载过滤与回车创建 -->\n <input\n v-if=\"filterable\"\n ref=\"inputRef\"\n :class=\"cls.e('input')\"\n v-model=\"queryString\"\n :placeholder=\"model?.length ? '' : placeholder\"\n :disabled=\"disabled\"\n @click.stop=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n @keydown.enter.prevent=\"handleCreateByEnter\"\n />\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && model?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n\n <!-- 下拉内容 -->\n <template #content>\n <!-- 多选栏 -->\n <div :class=\"cls.e('content-header')\">\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n :disabled=\"max !== undefined\"\n >\n 全选\n </u-checkbox>\n\n <span> 已选 {{ model?.length }}/{{ max ?? options?.length ?? 0 }} </span>\n </div>\n\n <!-- 多选列表 -->\n <!--\n 虚拟化启用时内容容器 height 由 useVirtualizer 命令式写入;\n 模板不再绑定 totalSize,避免尺寸变化引起重渲染。\n -->\n <u-scroll\n tag=\"ul\"\n :class=\"[cls.e('options')]\"\n ref=\"scrollRef\"\n v-if=\"options.length\"\n :content-class=\"[cls.e('options-wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <u-multi-select-option\n v-for=\"{ option, index, key, label, offset } of virtualOptions\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"key\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ label }}\n </slot>\n </u-multi-select-option>\n </template>\n\n <template v-else>\n <u-multi-select-option\n v-for=\"(option, index) of options\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"chainObj(option).get(valueKey)\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ chainObj(option).get(labelKey) }}\n </slot>\n </u-multi-select-option>\n </template>\n </u-scroll>\n\n <div v-else :class=\"cls.e('empty')\">\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\" size=\"small\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o as chainObj } from '@cat-kit/core'\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { ArrowDown, Close } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport {\n computed,\n nextTick,\n shallowRef,\n shallowReactive,\n watch,\n provide,\n useTemplateRef\n} from 'vue'\n\nimport type {\n MultiSelectEmits,\n MultiSelectProps,\n ScrollExposed,\n DropdownExposed\n} from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { useOptions } from '../select/use-options'\nimport { UTag } from '../tag'\nimport { MultiSelectDIKey } from './di'\nimport UMultiSelectOption from './multi-select-option.vue'\n\ndefineOptions({ name: 'UMultiSelect', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<MultiSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n clearable: true,\n visibilityLimit: 3,\n disabled: undefined,\n readonly: undefined,\n minWidth: '220px'\n})\n\nconst emit = defineEmits<MultiSelectEmits>()\n\nconst cls = bem('multi-select')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst hovered = shallowRef(false)\n\nconst { options: rawOptions, queryString, allOptions: rawAllOptions } = useOptions({ props })\n\nconst createdOptions = shallowRef<Record<string, any>[]>([])\n\nconst options = computed(() => {\n const base = rawOptions.value\n if (!props.creatable || !createdOptions.value.length) return base\n\n const createdValues = new Set(createdOptions.value.map((o) => chainObj(o).get(valueKey.value)))\n const deduped = base.filter(\n (o) => !(o.__isTemp && createdValues.has(chainObj(o).get(valueKey.value)))\n )\n const dedupedValues = new Set(deduped.map((o) => chainObj(o).get(valueKey.value)))\n const toAdd = createdOptions.value.filter(\n (o) => !dedupedValues.has(chainObj(o).get(valueKey.value))\n )\n return [...toAdd, ...deduped]\n})\n\nconst allOptions = computed(() => {\n if (!props.creatable || !createdOptions.value.length) return rawAllOptions.value\n return [...createdOptions.value, ...rawAllOptions.value]\n})\n\nconst virtualEnabled = computed(() => options.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n estimateSize: () => 40,\n count: computed(() => options.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null)\n})\n\nconst virtualOptions = computed(() => {\n const _options = options.value\n return items.value.map((v) => {\n const option = _options[v.index]!\n const val = chainObj(option).get(valueKey.value)\n return {\n option,\n index: v.index,\n val,\n key: v.index,\n offset: v.start,\n label: chainObj(option).get(labelKey.value)\n }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nconst filterable = computed(() => {\n return props.filterable || props.creatable || typeof props.options === 'function'\n})\n\nconst model = defineModel<Array<string | number>>()\n\nconst checkedSet = shallowReactive<Set<Record<string, any>>>(new Set())\nconst allChecked = computed(() => {\n return checkedSet.size === options.value.length\n})\nconst indeterminate = computed(() => {\n return checkedSet.size > 0 && !allChecked.value\n})\n\nconst optionsMap = computed(() => {\n return new Map<string | number, Record<string, any>>(\n allOptions.value.map((option) => [option[valueKey.value], option])\n )\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet internalChange = false\n\nwatch(\n [model, optionsMap],\n ([model, optionsMap]) => {\n if (internalChange) {\n internalChange = false\n return\n }\n checkedSet.clear()\n if (optionsMap.size && model?.length) {\n model.forEach((v) => {\n const option = optionsMap.get(v)\n option && checkedSet.add(option)\n })\n }\n },\n { immediate: true }\n)\n\nconst emitChange = () => {\n emit('change', Array.from(checkedSet))\n}\n\nconst tags = computed(() => {\n let tags: Record<string, any>[] = []\n let { visibilityLimit } = props\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n\n // 禁用时,显示全部\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n\n model.value?.slice(0, visibilityLimit).forEach((k) => {\n const option = optionsMap.value.get(k)\n option && tags.push(option)\n })\n\n return tags\n})\n\nconst restTag = computed(() => {\n return (model.value?.length ?? 0) - tags.value.length\n})\n\nconst dropdownVisible = shallowRef(false)\n\nconst inputRef = useTemplateRef<HTMLInputElement>('inputRef')\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) {\n queryString.value = ''\n }\n}\n\n/**\n * 拦截输入区域的点击(@click.stop):阻止 dropdown 的 trigger 开合切换,\n * 保持面板展开以不中断输入。\n */\nconst handleInputClick = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\nconst handleInputFocus = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\n/** 勾选后把焦点还给输入框,便于连续输入过滤 */\nconst refocusInput = () => {\n if (!filterable.value) return\n nextTick(() => inputRef.value?.focus())\n}\n\nconst handleCheck = (option: Record<string, any>, checked: boolean) => {\n if (checked) {\n if (option.__isTemp && props.creatable) {\n const created: Record<string, any> = {\n [labelKey.value]: chainObj(option).get(labelKey.value),\n [valueKey.value]: chainObj(option).get(valueKey.value)\n }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(created).get(valueKey.value)!]\n queryString.value = ''\n } else if (!checkedSet.has(option)) {\n checkedSet.add(option)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(option).get(valueKey.value)!]\n }\n } else {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey.value)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n refocusInput()\n}\n\n/** 全选 */\nconst handleCheckAll = (checked: boolean) => {\n if (checked) {\n options.value.forEach((option) => {\n if (!option.__isTemp) checkedSet.add(option)\n })\n internalChange = true\n model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey.value)!)\n } else {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 清除选项 */\nconst handleClear = () => {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n emit('change', [])\n}\n\nconst handleClose = (option: Record<string, any>) => {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey.value)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n emitChange()\n}\n\nconst removeCreatedOption = (option: Record<string, any>) => {\n if (!props.creatable || !createdOptions.value.length) return\n const val = chainObj(option).get(valueKey.value)\n createdOptions.value = createdOptions.value.filter((o) => chainObj(o).get(valueKey.value) !== val)\n}\n\nconst handleCreateByEnter = () => {\n if (!props.creatable) return\n const qs = queryString.value?.trim()\n if (!qs) return\n\n const existingCreated = createdOptions.value.find((o) => chainObj(o).get(valueKey.value) === qs)\n if (existingCreated) {\n if (!checkedSet.has(existingCreated)) {\n checkedSet.add(existingCreated)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey.value)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const exactMatch = rawOptions.value.find(\n (o) => !o.__isTemp && chainObj(o).get(labelKey.value) === qs\n )\n if (exactMatch) {\n if (!checkedSet.has(exactMatch)) {\n checkedSet.add(exactMatch)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey.value)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const created: Record<string, any> = { [labelKey.value]: qs, [valueKey.value]: qs }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), qs]\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\nconst isDisabled = (option: Record<string, any>) => {\n const { max } = props\n return max !== undefined && checkedSet.size >= max && !checkedSet.has(option)\n}\n\nconst optionClass = cls.e('option')\nconst rippleClass = cls.e('ripple')\nconst checkboxClass = cls.e('checkbox')\n\nprovide(MultiSelectDIKey, { optionClass, rippleClass, checkboxClass })\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-tree-select.js","names":["$attrs"],"sources":["../../../src/components/multi-tree-select/multi-tree-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled), bem.is('focus', dropdownVisible)]\"\n trigger=\"click\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :disabled=\"disabled\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n ref=\"dropdownRef\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @update:visible=\"handleDropdownVisible\"\n >\n <template #trigger>\n <!-- 默认展示 -->\n <span :class=\"cls.e('placeholder')\" v-if=\"!filterable && !tags.length\">\n {{ placeholder }}\n </span>\n\n <!-- 选择的数据项 -->\n <div v-if=\"tags.length || filterable\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"(tag, index) in visibleTags\"\n :key=\"tag[valueKey]\"\n :closable=\"!disabled\"\n @close=\"handleRemove(index)\"\n >\n {{ tag[labelKey] }}\n </u-tag>\n <u-tag v-if=\"hiddenCount > 0\">+{{ hiddenCount }}</u-tag>\n\n <!-- 内嵌查询输入框:承载过滤 -->\n <input\n v-if=\"filterable\"\n ref=\"inputRef\"\n :class=\"cls.e('input')\"\n v-model=\"qs\"\n :placeholder=\"tags.length ? '' : placeholder\"\n :disabled=\"disabled\"\n @click.stop=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n />\n </div>\n <!-- 清空 icon -->\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon v-if=\"showClear\" :class=\"cls.e('clear')\" @click.stop=\"handleClear\">\n <Close />\n </u-icon>\n\n <!-- 下拉 icon -->\n <u-icon :class=\"cls.e(`arrow`)\" v-else-if=\"!readonly\">\n <ArrowDown />\n </u-icon>\n </transition>\n </template>\n <template #content>\n <div :class=\"[cls.e('content-header'), cls.m(size)]\">\n <!-- 全选 -->\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n >\n 全选\n </u-checkbox>\n\n <u-button size=\"small\" text type=\"primary\" @click=\"handleToggleExpandAll\">\n {{ allExpanded ? '收起全部' : '展开全部' }}\n </u-button>\n </div>\n <!-- 菜单列表 -->\n <u-tree\n v-bind=\"treeProps\"\n v-model:checked=\"model\"\n @update:checked=\"handleCheck\"\n ref=\"treeRef\"\n :class=\"cls.e('content-tree')\"\n checkable\n :data=\"data\"\n :slots=\"slots\"\n scroll-to-view\n ></u-tree>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { dfs, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { ArrowDown, Close } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, nextTick, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { MultiTreeSelectProps, MultiTreeSelectEmits, TreeExposed } from '../../types'\nimport type { DropdownExposed } from '../../types'\nimport { UButton } from '../button'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\nimport { UTag } from '../tag'\nimport { UTree } from '../tree'\nimport type { TreeSlotsScope } from '../tree/di'\n\ndefineOptions({ name: 'UMultiTreeSelect', inheritAttrs: false })\n\nconst cls = bem('multi-tree-select')\n\nconst props = withDefaults(defineProps<MultiTreeSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n expandAll: false,\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n filterable: false,\n visibilityLimit: 3,\n minWidth: '280px'\n})\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst treeProps = computed(() => {\n return o(props as Record<string, any>).omit([\n 'tips',\n 'field',\n 'placeholder',\n 'disabled',\n 'label',\n 'readonly',\n 'modelValue',\n 'contentClass',\n 'contentStyle',\n 'minWidth',\n 'width'\n ])\n})\n\nconst emit = defineEmits<MultiTreeSelectEmits>()\n\nconst slots = defineSlots<{ default?: (props: TreeSlotsScope) => any }>()\n\n/**过滤 */\nconst qs = shallowRef('')\nwatch(qs, (qs) => {\n treeRef.value?.filter(qs)\n})\n\nconst model = defineModel<(string | number)[]>({ default: () => [] })\n\nconst hovered = shallowRef(false)\n\nconst tags = shallowRef<Record<string, any>[]>([])\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst showClear = computed(() => {\n return props.clearable && model.value?.length && hovered.value && !disabled.value\n})\n\nconst treeRef = shallowRef<TreeExposed>()\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet changedByEvent = false\n\nfunction markEvent() {\n changedByEvent = true\n nextTick(() => {\n changedByEvent = false\n })\n}\n\n/**是否全选 */\nconst allChecked = computed(() => {\n return model.value?.length === treeRef.value?.forest.size\n})\n\n/**部分 */\nconst indeterminate = computed(() => {\n return model.value.length! > 0 && !allChecked.value\n})\n\n/** 全选*/\nconst handleCheckAll = (checked: boolean) => {\n treeRef.value?.checkAll(checked)\n\n dropdownRef.value?.updateDropdown()\n}\n\n/**选中 */\nconst handleCheck = (checked: (string | number)[], checkedData: Record<string, any>[]) => {\n markEvent()\n tags.value = checkedData\n emit('change', checkedData!)\n\n dropdownRef.value?.updateDropdown()\n}\n\n/**删除 */\nconst handleRemove = (index: number) => {\n markEvent()\n tags.value = tags.value.filter((_, i) => i !== index)\n model.value = model.value.filter((_, i) => i !== index)\n emit('change', tags.value)\n}\n\n/**清空 */\nconst handleClear = () => {\n markEvent()\n tags.value = []\n model.value = []\n emit('clear')\n}\n\nconst keyDicts = shallowRef(new Map<string | number, Record<string, any>>())\n\nwatch(\n () => props.data,\n (data) => {\n if (!data?.length) {\n keyDicts.value = new Map()\n } else {\n const newDict = new Map()\n data.forEach((item) => {\n dfs(\n item,\n (v) => {\n newDict.set(v[valueKey.value], v)\n },\n props.childrenKey\n )\n })\n keyDicts.value = newDict\n }\n },\n { immediate: true }\n)\n\nwatch(\n [keyDicts, model],\n ([keyDicts, model]) => {\n if (changedByEvent) return\n\n if (!keyDicts.size || !model?.length) {\n tags.value = []\n return\n }\n\n tags.value = model.filter((v) => keyDicts.has(v)).map((v) => keyDicts.get(v)!)\n },\n { immediate: true }\n)\n\nconst allExpanded = shallowRef(props.expandAll)\nfunction handleToggleExpandAll() {\n allExpanded.value = !allExpanded.value\n allExpanded.value ? treeRef.value?.expandAll() : treeRef.value?.collapseAll()\n}\n\nwatch(treeRef, (treeRef) => {\n if (!treeRef) {\n allExpanded.value = props.expandAll\n }\n})\n\nconst limit = () => {\n let { visibilityLimit } = props\n\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n return visibilityLimit\n}\n\nconst visibleTags = computed(() => {\n if (tags.value.length > limit()) {\n return tags.value.slice(0, limit())\n }\n return tags.value\n})\n\nconst hiddenCount = computed(() => {\n if (tags.value.length > limit()) {\n return tags.value.length - limit()\n }\n return 0\n})\n\nconst dropdownVisible = shallowRef(false)\n\nconst inputRef = useTemplateRef<HTMLInputElement>('inputRef')\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) {\n qs.value = ''\n }\n}\n\n/**\n * 拦截输入区域的点击(@click.stop):阻止 dropdown 的 trigger 开合切换,\n * 保持面板展开以不中断输入。\n */\nconst handleInputClick = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\nconst handleInputFocus = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multi-tree-select.js","names":["$attrs"],"sources":["../../../src/components/multi-tree-select/multi-tree-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled), bem.is('focus', dropdownVisible)]\"\n trigger=\"click\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :disabled=\"disabled\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n ref=\"dropdownRef\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @update:visible=\"handleDropdownVisible\"\n >\n <template #trigger>\n <!-- 默认展示 -->\n <span :class=\"cls.e('placeholder')\" v-if=\"!filterable && !tags.length\">\n {{ placeholder }}\n </span>\n\n <!-- 选择的数据项 -->\n <div v-if=\"tags.length || filterable\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"(tag, index) in visibleTags\"\n :key=\"tag[valueKey]\"\n :closable=\"!disabled\"\n @close=\"handleRemove(index)\"\n >\n {{ tag[labelKey] }}\n </u-tag>\n <u-tag v-if=\"hiddenCount > 0\">+{{ hiddenCount }}</u-tag>\n\n <!-- 内嵌查询输入框:承载过滤 -->\n <input\n v-if=\"filterable\"\n ref=\"inputRef\"\n :class=\"cls.e('input')\"\n v-model=\"qs\"\n :placeholder=\"tags.length ? '' : placeholder\"\n :disabled=\"disabled\"\n @click.stop=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n />\n </div>\n <!-- 清空 icon -->\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon v-if=\"showClear\" :class=\"cls.e('clear')\" @click.stop=\"handleClear\">\n <Close />\n </u-icon>\n\n <!-- 下拉 icon -->\n <u-icon :class=\"cls.e(`arrow`)\" v-else-if=\"!readonly\">\n <ArrowDown />\n </u-icon>\n </transition>\n </template>\n <template #content>\n <div :class=\"[cls.e('content-header'), cls.m(size)]\">\n <!-- 全选 -->\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n >\n 全选\n </u-checkbox>\n\n <u-button size=\"small\" text type=\"primary\" @click=\"handleToggleExpandAll\">\n {{ allExpanded ? '收起全部' : '展开全部' }}\n </u-button>\n </div>\n <!-- 菜单列表 -->\n <u-tree\n v-bind=\"treeProps\"\n v-model:checked=\"model\"\n @update:checked=\"handleCheck\"\n ref=\"treeRef\"\n :class=\"cls.e('content-tree')\"\n checkable\n :data=\"data\"\n :slots=\"slots\"\n scroll-to-view\n ></u-tree>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { dfs, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { ArrowDown, Close } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, nextTick, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { MultiTreeSelectProps, MultiTreeSelectEmits, TreeExposed } from '../../types'\nimport type { DropdownExposed } from '../../types'\nimport { UButton } from '../button'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\nimport { UTag } from '../tag'\nimport { UTree } from '../tree'\nimport type { TreeSlotsScope } from '../tree/di'\n\ndefineOptions({ name: 'UMultiTreeSelect', inheritAttrs: false })\n\nconst cls = bem('multi-tree-select')\n\nconst props = withDefaults(defineProps<MultiTreeSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n expandAll: false,\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n filterable: false,\n visibilityLimit: 3,\n minWidth: '280px'\n})\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst treeProps = computed(() => {\n return o(props as Record<string, any>).omit([\n 'tips',\n 'field',\n 'placeholder',\n 'disabled',\n 'label',\n 'readonly',\n 'modelValue',\n 'contentClass',\n 'contentStyle',\n 'minWidth',\n 'width'\n ])\n})\n\nconst emit = defineEmits<MultiTreeSelectEmits>()\n\nconst slots = defineSlots<{ default?: (props: TreeSlotsScope) => any }>()\n\n/**过滤 */\nconst qs = shallowRef('')\nwatch(qs, (qs) => {\n treeRef.value?.filter(qs)\n})\n\nconst model = defineModel<(string | number)[]>({ default: () => [] })\n\nconst hovered = shallowRef(false)\n\nconst tags = shallowRef<Record<string, any>[]>([])\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst showClear = computed(() => {\n return props.clearable && model.value?.length && hovered.value && !disabled.value\n})\n\nconst treeRef = shallowRef<TreeExposed>()\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet changedByEvent = false\n\nfunction markEvent() {\n changedByEvent = true\n nextTick(() => {\n changedByEvent = false\n })\n}\n\n/**是否全选 */\nconst allChecked = computed(() => {\n return model.value?.length === treeRef.value?.forest.size\n})\n\n/**部分 */\nconst indeterminate = computed(() => {\n return model.value.length! > 0 && !allChecked.value\n})\n\n/** 全选*/\nconst handleCheckAll = (checked: boolean) => {\n treeRef.value?.checkAll(checked)\n\n dropdownRef.value?.updateDropdown()\n}\n\n/**选中 */\nconst handleCheck = (checked: (string | number)[], checkedData: Record<string, any>[]) => {\n markEvent()\n tags.value = checkedData\n emit('change', checkedData!)\n\n dropdownRef.value?.updateDropdown()\n}\n\n/**删除 */\nconst handleRemove = (index: number) => {\n markEvent()\n tags.value = tags.value.filter((_, i) => i !== index)\n model.value = model.value.filter((_, i) => i !== index)\n emit('change', tags.value)\n}\n\n/**清空 */\nconst handleClear = () => {\n markEvent()\n tags.value = []\n model.value = []\n emit('clear')\n}\n\nconst keyDicts = shallowRef(new Map<string | number, Record<string, any>>())\n\nwatch(\n () => props.data,\n (data) => {\n if (!data?.length) {\n keyDicts.value = new Map()\n } else {\n const newDict = new Map()\n data.forEach((item) => {\n dfs(\n item,\n (v) => {\n newDict.set(v[valueKey.value], v)\n },\n props.childrenKey\n )\n })\n keyDicts.value = newDict\n }\n },\n { immediate: true }\n)\n\nwatch(\n [keyDicts, model],\n ([keyDicts, model]) => {\n if (changedByEvent) return\n\n if (!keyDicts.size || !model?.length) {\n tags.value = []\n return\n }\n\n tags.value = model.filter((v) => keyDicts.has(v)).map((v) => keyDicts.get(v)!)\n },\n { immediate: true }\n)\n\nconst allExpanded = shallowRef(props.expandAll)\nfunction handleToggleExpandAll() {\n allExpanded.value = !allExpanded.value\n allExpanded.value ? treeRef.value?.expandAll() : treeRef.value?.collapseAll()\n}\n\nwatch(treeRef, (treeRef) => {\n if (!treeRef) {\n allExpanded.value = props.expandAll\n }\n})\n\nconst limit = () => {\n let { visibilityLimit } = props\n\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n return visibilityLimit\n}\n\nconst visibleTags = computed(() => {\n if (tags.value.length > limit()) {\n return tags.value.slice(0, limit())\n }\n return tags.value\n})\n\nconst hiddenCount = computed(() => {\n if (tags.value.length > limit()) {\n return tags.value.length - limit()\n }\n return 0\n})\n\nconst dropdownVisible = shallowRef(false)\n\nconst inputRef = useTemplateRef<HTMLInputElement>('inputRef')\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) {\n qs.value = ''\n }\n}\n\n/**\n * 拦截输入区域的点击(@click.stop):阻止 dropdown 的 trigger 开合切换,\n * 保持面板展开以不中断输入。\n */\nconst handleInputClick = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n\nconst handleInputFocus = () => {\n if (!dropdownVisible.value) dropdownRef.value?.open()\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-icon.js","names":[],"sources":["../../../src/components/nav/nav-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNavIcon' })\n\ndefineProps<{ icon: string | DefineComponent }>()\n</script>\n"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"nav-icon.js","names":[],"sources":["../../../src/components/nav/nav-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNavIcon' })\n\ndefineProps<{ icon: string | DefineComponent }>()\n</script>\n"],"mappings":";;;;;;;;;;GACuB,OAAA,OAAA,QAAA,SAAI,YAAA,UAAA,GAAzB,YAES,MAAA,WAAA,GAAA,EAAA,KAAA,EAAA,GAAA;IADiB,SAAA,cAAA,EAAA,UAAA,GAAxB,YAAwB,wBAAR,QAAA,IAAI,CAAA,EAAA,CAAA;;GAGtB,CAAA,MAAA,UAAA,GAAA,mBAAqC,OAAA;;IAA/B,KAAK,QAAA;IAAa,KAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-item-collapsed.js","names":[],"sources":["../../../src/components/nav/nav-item-collapsed.vue"],"sourcesContent":["<template>\n <!-- 一级导航 -->\n <u-tip v-if=\"depth === 0\" direction=\"right\" hide-arrow>\n <li\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('first-level'),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n <span v-else>{{ item.title[0] }}</span>\n </li>\n\n <template #content>\n {{ item.title }}\n </template>\n </u-tip>\n\n <!-- 二级以及二级以下导航 -->\n <li\n v-else\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"_handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"collapsedCls.e('item-title')\">\n {{ item.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UTip } from '../tip'\nimport UNavIcon from './nav-icon.vue'\nimport { useNavItem } from './use-nav-item'\n\ndefineOptions({ name: 'UNavItemCollapsed' })\n\nconst props = defineProps<{ item: NavItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst emit = defineEmits(['click'])\n\nconst { collapsedCls, active, handleClickItem } = useNavItem({ itemProps: props, itemRef })\n\nfunction _handleClickItem() {\n handleClickItem()\n emit('click')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAEd,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,QAAQ,oBAAoB,WAAW;GAAE,WAAW;GAAO;EAAQ,CAAC;EAE1F,SAAS,mBAAmB;GAC1B,gBAAgB;GAChB,KAAK,OAAO;EACd;;
|
|
1
|
+
{"version":3,"file":"nav-item-collapsed.js","names":[],"sources":["../../../src/components/nav/nav-item-collapsed.vue"],"sourcesContent":["<template>\n <!-- 一级导航 -->\n <u-tip v-if=\"depth === 0\" direction=\"right\" hide-arrow>\n <li\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('first-level'),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n <span v-else>{{ item.title[0] }}</span>\n </li>\n\n <template #content>\n {{ item.title }}\n </template>\n </u-tip>\n\n <!-- 二级以及二级以下导航 -->\n <li\n v-else\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"_handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"collapsedCls.e('item-title')\">\n {{ item.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UTip } from '../tip'\nimport UNavIcon from './nav-icon.vue'\nimport { useNavItem } from './use-nav-item'\n\ndefineOptions({ name: 'UNavItemCollapsed' })\n\nconst props = defineProps<{ item: NavItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst emit = defineEmits(['click'])\n\nconst { collapsedCls, active, handleClickItem } = useNavItem({ itemProps: props, itemRef })\n\nfunction _handleClickItem() {\n handleClickItem()\n emit('click')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAEd,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,QAAQ,oBAAoB,WAAW;GAAE,WAAW;GAAO;EAAQ,CAAC;EAE1F,SAAS,mBAAmB;GAC1B,gBAAgB;GAChB,KAAK,OAAO;EACd;;GA/DE,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,mBAAA,QAAA,GACa,QAAA,UAAK,KAAA,UAAA,GAAlB,YAkBQ,MAAA,WAAA,GAAA;;IAlBkB,WAAU;IAAQ,cAAA;;IAe/B,SAAO,cACA,CAAA,gBAAb,gBAAA,QAAA,KAAK,KAAK,GAAA,CAAA,CAAA,CAAA;IAHV,SAAA,cAAA,CAZL,mBAYK,MAAA;KAXF,OAAK,eAAA;MAAY,MAAA,YAAA,CAAY,CAAC,EAAC,MAAA;MAAkB,MAAA,GAAA,CAAG,CAAC,GAAE,UAAW,MAAA,MAAA,CAAM;MAAW,MAAA,GAAA,CAAG,CAAC,GAAE,aAAA;MAAyB,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;KAMnJ,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,CAAA,CAAA,GAAA,IAAA;IAEQ,GAAA,CAAA,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,MAAA,CAAA;IACnE,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,MAAA,UAAA,GAAA,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA;;GAS9B,CAAA,MAAA,UAAA,GAAA,mBAgBK,UAAA,EAAA,KAAA,EAAA,GAAA,CAjBL,mBAAA,cAAA,GACA,mBAgBK,MAAA;IAdF,OAAK,eAAA;KAAU,MAAA,YAAA,CAAY,CAAC,EAAC,MAAA;KAAgB,MAAA,GAAA,CAAG,CAAC,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAK9G,KAAI;IACH,SAAO;;IAEQ,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,MAAA,CAAA;;IAEnE,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,YAAA,CAAA,EAAA,GACvB,gBAAA,QAAA,KAAK,KAAK,GAAA,CAAA"}
|
|
@@ -11,9 +11,11 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
11
11
|
depth: {}
|
|
12
12
|
},
|
|
13
13
|
setup(__props) {
|
|
14
|
+
const props = __props;
|
|
15
|
+
const itemRef = useTemplateRef("item");
|
|
14
16
|
const { cls, active, handleClickItem } = useNavItem({
|
|
15
|
-
itemProps:
|
|
16
|
-
itemRef
|
|
17
|
+
itemProps: props,
|
|
18
|
+
itemRef
|
|
17
19
|
});
|
|
18
20
|
return (_ctx, _cache) => {
|
|
19
21
|
return openBlock(), createElementBlock("li", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-item.js","names":[],"sources":["../../../src/components/nav/nav-item.vue"],"sourcesContent":["<template>\n <li\n :class=\"[\n cls.e('item'),\n bem.is('first-level', depth === 0),\n bem.is('active', active),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickItem\"\n >\n <NavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('item-title')\">\n {{ item.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport NavIcon from './nav-icon.vue'\nimport { useNavItem } from './use-nav-item'\n\ndefineOptions({ name: 'UNavItem' })\n\nconst props = defineProps<{ item: NavItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst { cls, active, handleClickItem } = useNavItem({ itemProps: props, itemRef })\n</script>\n"],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"nav-item.js","names":[],"sources":["../../../src/components/nav/nav-item.vue"],"sourcesContent":["<template>\n <li\n :class=\"[\n cls.e('item'),\n bem.is('first-level', depth === 0),\n bem.is('active', active),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickItem\"\n >\n <NavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('item-title')\">\n {{ item.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport NavIcon from './nav-icon.vue'\nimport { useNavItem } from './use-nav-item'\n\ndefineOptions({ name: 'UNavItem' })\n\nconst props = defineProps<{ item: NavItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst { cls, active, handleClickItem } = useNavItem({ itemProps: props, itemRef })\n</script>\n"],"mappings":";;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAEd,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,EAAE,KAAK,QAAQ,oBAAoB,WAAW;GAAE,WAAW;GAAO;EAAQ,CAAC;;GAjC/E,OAAA,UAAA,GAAA,mBAgBK,MAAA;IAfF,OAAK,eAAA;KAAU,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA;KAAgB,MAAA,GAAA,CAAG,CAAC,GAAE,eAAgB,QAAA,UAAK,CAAA;KAAe,MAAA,GAAA,CAAG,CAAC,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAM/I,KAAI;IACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,CAAA,CAAA,GAAA,IAAA;;IAEO,QAAA,KAAK,QAAA,UAAA,GAApB,YAAqE,aAAA;;KAA1C,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;;IAEzD,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA,EAAA,GACd,gBAAA,QAAA,KAAK,KAAK,GAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-sub-collapsed.js","names":[],"sources":["../../../src/components/nav/nav-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <NavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ item.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ item.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of item.children!\" :key=\"getKey(index, parentKey)\">\n <UNavItemCollapsed\n v-if=\"!child.children?.length\"\n :item=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <NavSubCollapsed\n v-else\n :item=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { NavDIKey } from './di'\nimport { getKey } from './helper'\nimport NavIcon from './nav-icon.vue'\nimport UNavItemCollapsed from './nav-item-collapsed.vue'\n\ndefineOptions({ name: 'UNavSubCollapsed' })\n\ndefineProps<{ item: NavItem; parentKey: string; depth: number }>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(NavDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAkEA,MAAM,UAAU,IAAI,KAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;EAClB;EAEA,MAAM,EAAE,cAAc,SAAS,OAAO,QAAQ;;;
|
|
1
|
+
{"version":3,"file":"nav-sub-collapsed.js","names":[],"sources":["../../../src/components/nav/nav-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <NavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ item.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ item.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of item.children!\" :key=\"getKey(index, parentKey)\">\n <UNavItemCollapsed\n v-if=\"!child.children?.length\"\n :item=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <NavSubCollapsed\n v-else\n :item=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { NavDIKey } from './di'\nimport { getKey } from './helper'\nimport NavIcon from './nav-icon.vue'\nimport UNavItemCollapsed from './nav-item-collapsed.vue'\n\ndefineOptions({ name: 'UNavSubCollapsed' })\n\ndefineProps<{ item: NavItem; parentKey: string; depth: number }>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(NavDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAkEA,MAAM,UAAU,IAAI,KAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;EAClB;EAEA,MAAM,EAAE,cAAc,SAAS,OAAO,QAAQ;;;GAvE5C,OAAA,UAAA,GAAA,YA4CQ,MAAA,WAAA,GAAA;IA3CN,cAAA;IACA,WAAU;IACV,WAAU;IACT,OAAK,eAAA,CAAG,MAAA,YAAA,CAAY,CAAC,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,YAAA,CAAY,CAAC,EAAC,OAAA,CAAA,CAAA;IAC7C,OAAA,EAAA,WAAA,IAAA;IACQ,SAAS,QAAA;IAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,QAAO,QAAA;;IAmBb,SAAO,cAiBL,CAhBX,YAgBW,MAAA,WAAA,GAAA;KAhBD,KAAI;KAAM,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,UAAA,CAAA;;KACW,SAAA,cAAA,EAAA,UAAA,IAAA,GAAlD,mBAcW,UAAA,MAAA,WAdwB,QAAA,KAAK,WAAtB,OAAO,UAAK;MAA2B,OAAA,UAAA,GAAA,mBAAA,UAAA,EAAA,KAAA,MAAA,MAAA,CAAM,CAAC,OAAO,QAAA,SAAS,EAAA,GAErE,CAAA,CAAA,MAAM,UAAU,UAAA,UAAA,GADzB,YAKE,aAAA;;OAHC,MAAM;OACN,OAAO,QAAA,QAAK;OACZ,SAAO;MAGV,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,MAAA,UAAA,GAAA,YAKE,4BAAA;;OAHC,MAAM;OACN,cAAY,MAAA,MAAA,CAAM,CAAC,OAAO,QAAA,SAAS;OACnC,OAAO,QAAA,QAAK;;;;;;;;;IAhBhB,SAAA,cAAA,CAfL,mBAeK,MAAA,EAfA,OAAK,eAAA,CAAG,MAAA,YAAA,CAAY,CAAC,EAAC,aAAA,GAAiB,MAAA,GAAA,CAAG,CAAC,GAAE,eAAgB,QAAA,UAAK,CAAA,CAAA,CAAA,EAAA,GACtD,CAAA,QAAA,KAAK,QAAA,UAAA,GAApB,YAA8E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,MAAA,CAAA;IAElE,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,MAAA,UAAA,GAAA,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,IAEV,QAAA,UAAK,KAAA,UAAA,GAArB,mBASW,UAAA,EAAA,KAAA,EAAA,GAAA;KART,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,CAAY,CAAC,EAAC,WAAA,CAAA,EAAA,GACvB,gBAAA,QAAA,KAAK,KAAK,GAAA,CAAA;KAGf,mBAAA,QAAA;KACA,YAES,MAAA,WAAA,GAAA,EAFA,OAAK,eAAA,CAAG,MAAA,YAAA,CAAY,CAAC,EAAC,YAAA,CAAA,CAAA,EAAA,GAAA;MACf,SAAA,cAAA,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-sub.js","names":[],"sources":["../../../src/components/nav/nav-sub.vue"],"sourcesContent":["<template>\n <li :class=\"cls.e('sub')\">\n <div\n :class=\"[\n cls.e('sub-content'),\n bem.is('first-level', depth === 0),\n bem.is('expanded', expanded),\n bem.is('branch-active', branchActive)\n ]\"\n @click=\"handleToggleExpand\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('sub-title')\">\n {{ item.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[cls.e('sub-expand'), bem.is('expanded', expanded)]\">\n <ArrowRight />\n </u-icon>\n </div>\n\n <!-- @vue-ignore -->\n <transition\n @enter=\"(el: Element) => expandTransition.enter(el as HTMLElement)\"\n @after-enter=\"(el: Element) => expandTransition.afterEnter(el as HTMLElement)\"\n @before-leave=\"(el: Element) => expandTransition.beforeLeave(el as HTMLElement)\"\n @leave=\"(el: Element) => expandTransition.leave(el as HTMLElement)\"\n @after-leave=\"(el: Element) => expandTransition.afterLeave(el as HTMLElement)\"\n >\n <ul :class=\"[cls.e('sub-list'), bem.is('has-active', branchActive)]\" v-show=\"expanded\">\n <template v-for=\"(child, index) of item.children!\" :key=\"getKey(index, parentKey)\">\n <UNavItem v-if=\"!child.children?.length\" :item=\"child\" :depth=\"depth + 1\" />\n <NavSub v-else :item=\"child\" :parent-key=\"getKey(index, parentKey)\" :depth=\"depth + 1\" />\n </template>\n </ul>\n </transition>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { NavDIKey } from './di'\nimport { getKey } from './helper'\nimport UNavIcon from './nav-icon.vue'\nimport UNavItem from './nav-item.vue'\n\ndefineOptions({ name: 'UNavSub' })\n\nconst props = defineProps<{ item: NavItem; parentKey: string; depth: number }>()\n\nconst { cls, expandedPath, navProps, expandTransition } = inject(NavDIKey)!\n\nconst expanded = computed(() => expandedPath.has(props.item.path))\n\nconst branchActive = computed(() => {\n const currentPath = navProps.currentPath\n if (!currentPath) return false\n\n const check = (items?: NavItem[]) => {\n return items?.some((item) => item.path === currentPath || check(item.children)) ?? false\n }\n\n return check(props.item.children)\n})\n\nfunction handleToggleExpand() {\n const { item } = props\n expandedPath.has(item.path) ? expandedPath.delete(item.path) : expandedPath.add(item.path)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAwDA,MAAM,QAAQ;EAEd,MAAM,EAAE,KAAK,cAAc,UAAU,qBAAqB,OAAO,QAAQ;EAEzE,MAAM,WAAW,eAAe,aAAa,IAAI,MAAM,KAAK,IAAI,CAAC;EAEjE,MAAM,eAAe,eAAe;GAClC,MAAM,cAAc,SAAS;GAC7B,IAAI,CAAC,aAAa,OAAO;GAEzB,MAAM,SAAS,UAAsB;IACnC,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,eAAe,MAAM,KAAK,QAAQ,CAAC,KAAK;GACrF;GAEA,OAAO,MAAM,MAAM,KAAK,QAAQ;EAClC,CAAC;EAED,SAAS,qBAAqB;GAC5B,MAAM,EAAE,SAAS;GACjB,aAAa,IAAI,KAAK,IAAI,IAAI,aAAa,OAAO,KAAK,IAAI,IAAI,aAAa,IAAI,KAAK,IAAI;EAC3F;;;
|
|
1
|
+
{"version":3,"file":"nav-sub.js","names":[],"sources":["../../../src/components/nav/nav-sub.vue"],"sourcesContent":["<template>\n <li :class=\"cls.e('sub')\">\n <div\n :class=\"[\n cls.e('sub-content'),\n bem.is('first-level', depth === 0),\n bem.is('expanded', expanded),\n bem.is('branch-active', branchActive)\n ]\"\n @click=\"handleToggleExpand\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('sub-title')\">\n {{ item.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[cls.e('sub-expand'), bem.is('expanded', expanded)]\">\n <ArrowRight />\n </u-icon>\n </div>\n\n <!-- @vue-ignore -->\n <transition\n @enter=\"(el: Element) => expandTransition.enter(el as HTMLElement)\"\n @after-enter=\"(el: Element) => expandTransition.afterEnter(el as HTMLElement)\"\n @before-leave=\"(el: Element) => expandTransition.beforeLeave(el as HTMLElement)\"\n @leave=\"(el: Element) => expandTransition.leave(el as HTMLElement)\"\n @after-leave=\"(el: Element) => expandTransition.afterLeave(el as HTMLElement)\"\n >\n <ul :class=\"[cls.e('sub-list'), bem.is('has-active', branchActive)]\" v-show=\"expanded\">\n <template v-for=\"(child, index) of item.children!\" :key=\"getKey(index, parentKey)\">\n <UNavItem v-if=\"!child.children?.length\" :item=\"child\" :depth=\"depth + 1\" />\n <NavSub v-else :item=\"child\" :parent-key=\"getKey(index, parentKey)\" :depth=\"depth + 1\" />\n </template>\n </ul>\n </transition>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { NavDIKey } from './di'\nimport { getKey } from './helper'\nimport UNavIcon from './nav-icon.vue'\nimport UNavItem from './nav-item.vue'\n\ndefineOptions({ name: 'UNavSub' })\n\nconst props = defineProps<{ item: NavItem; parentKey: string; depth: number }>()\n\nconst { cls, expandedPath, navProps, expandTransition } = inject(NavDIKey)!\n\nconst expanded = computed(() => expandedPath.has(props.item.path))\n\nconst branchActive = computed(() => {\n const currentPath = navProps.currentPath\n if (!currentPath) return false\n\n const check = (items?: NavItem[]) => {\n return items?.some((item) => item.path === currentPath || check(item.children)) ?? false\n }\n\n return check(props.item.children)\n})\n\nfunction handleToggleExpand() {\n const { item } = props\n expandedPath.has(item.path) ? expandedPath.delete(item.path) : expandedPath.add(item.path)\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav.js","names":[],"sources":["../../../src/components/nav/nav.vue"],"sourcesContent":["<template>\n <u-scroll tag=\"ul\" :class=\"[navCls.b, navCls.m(size)]\" :container-class=\"navCls.e('container')\">\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(item, index) of menus\" :key=\"index\">\n <UNavSub v-if=\"item.children?.length\" :item=\"item\" :parent-key=\"String(index)\" :depth=\"0\" />\n <UNavItem v-else :item=\"item\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(item, index) of menus\" :key=\"index\">\n <UNavSubCollapsed\n v-if=\"item.children?.length\"\n :item=\"item\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UNavItemCollapsed v-else :item=\"item\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport type { ComponentSize } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { NavEmits, NavProps } from '../../types/nav'\nimport { UScroll } from '../scroll'\nimport { NavDIKey } from './di'\nimport { collectNavBranchPaths } from './helper'\nimport UNavItemCollapsed from './nav-item-collapsed.vue'\nimport UNavItem from './nav-item.vue'\nimport UNavSubCollapsed from './nav-sub-collapsed.vue'\nimport UNavSub from './nav-sub.vue'\nimport { walkNavWithPath } from './walk-nav-path'\n\ndefineOptions({ name: 'UNav' })\n\nconst props = withDefaults(defineProps<NavProps>(), { collapsed: false })\n\nconst emit = defineEmits<NavEmits>()\n\nconst cls = bem('nav')\nconst collapsedCls = bem('collapsed-nav')\n\nconst navCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkNavWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n { immediate: true }\n)\n\nprovide(NavDIKey, {\n cls,\n collapsedCls,\n navProps: props,\n navEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n\nfunction expandAll() {\n collectNavBranchPaths(props.menus).forEach((path) => {\n expandedPath.add(path)\n })\n}\n\nfunction collapseAll() {\n expandedPath.clear()\n}\n\ndefineExpose({ expandAll, collapseAll })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,KAAK;EACrB,MAAM,eAAe,IAAI,eAAe;EAExC,MAAM,SAAS,eAAe;GAC5B,OAAO,MAAM,YAAY,eAAe;EAC1C,CAAC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;EACX,CAAC;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,KAAK,GAAG,EAAE,MAAM,UAA2B,CAAC;EAE/E,MAAM,eAAe,gCAAgB,IAAI,IAAY,CAAC;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,KAAK,IAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,gBAAgB,OAAO,MAAM,aAAa;KACxC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,EAAE,CAAC,CAAC,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,IAAI;MAC5B,CAAC;MACD,OAAO;KACT;IACF,CAAC;GACH,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,UAAU;GAChB;GACA;GACA,UAAU;GACV,SAAS;GACT;GACA;GACA;EACF,CAAC;EAED,SAAS,YAAY;GACnB,sBAAsB,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS;IACnD,aAAa,IAAI,IAAI;GACvB,CAAC;EACH;EAEA,SAAS,cAAc;GACrB,aAAa,MAAM;EACrB;EAEA,SAAa;GAAE;GAAW;EAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"nav.js","names":[],"sources":["../../../src/components/nav/nav.vue"],"sourcesContent":["<template>\n <u-scroll tag=\"ul\" :class=\"[navCls.b, navCls.m(size)]\" :container-class=\"navCls.e('container')\">\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(item, index) of menus\" :key=\"index\">\n <UNavSub v-if=\"item.children?.length\" :item=\"item\" :parent-key=\"String(index)\" :depth=\"0\" />\n <UNavItem v-else :item=\"item\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(item, index) of menus\" :key=\"index\">\n <UNavSubCollapsed\n v-if=\"item.children?.length\"\n :item=\"item\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UNavItemCollapsed v-else :item=\"item\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport type { ComponentSize } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { NavEmits, NavProps } from '../../types/nav'\nimport { UScroll } from '../scroll'\nimport { NavDIKey } from './di'\nimport { collectNavBranchPaths } from './helper'\nimport UNavItemCollapsed from './nav-item-collapsed.vue'\nimport UNavItem from './nav-item.vue'\nimport UNavSubCollapsed from './nav-sub-collapsed.vue'\nimport UNavSub from './nav-sub.vue'\nimport { walkNavWithPath } from './walk-nav-path'\n\ndefineOptions({ name: 'UNav' })\n\nconst props = withDefaults(defineProps<NavProps>(), { collapsed: false })\n\nconst emit = defineEmits<NavEmits>()\n\nconst cls = bem('nav')\nconst collapsedCls = bem('collapsed-nav')\n\nconst navCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkNavWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n { immediate: true }\n)\n\nprovide(NavDIKey, {\n cls,\n collapsedCls,\n navProps: props,\n navEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n\nfunction expandAll() {\n collectNavBranchPaths(props.menus).forEach((path) => {\n expandedPath.add(path)\n })\n}\n\nfunction collapseAll() {\n expandedPath.clear()\n}\n\ndefineExpose({ expandAll, collapseAll })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,KAAK;EACrB,MAAM,eAAe,IAAI,eAAe;EAExC,MAAM,SAAS,eAAe;GAC5B,OAAO,MAAM,YAAY,eAAe;EAC1C,CAAC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;EACX,CAAC;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,KAAK,GAAG,EAAE,MAAM,UAA2B,CAAC;EAE/E,MAAM,eAAe,gCAAgB,IAAI,IAAY,CAAC;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,KAAK,IAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,gBAAgB,OAAO,MAAM,aAAa;KACxC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,EAAE,CAAC,CAAC,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,IAAI;MAC5B,CAAC;MACD,OAAO;KACT;IACF,CAAC;GACH,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,UAAU;GAChB;GACA;GACA,UAAU;GACV,SAAS;GACT;GACA;GACA;EACF,CAAC;EAED,SAAS,YAAY;GACnB,sBAAsB,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS;IACnD,aAAa,IAAI,IAAI;GACvB,CAAC;EACH;EAEA,SAAS,cAAc;GACrB,aAAa,MAAM;EACrB;EAEA,SAAa;GAAE;GAAW;EAAY,CAAC;;GAvGrC,OAAA,UAAA,GAAA,YAqBW,MAAA,WAAA,GAAA;IArBD,KAAI;IAAM,OAAK,eAAA,CAAG,OAAA,MAAO,GAAG,OAAA,MAAO,EAAE,MAAA,IAAA,CAAI,CAAA,CAAA;IAAK,mBAAiB,OAAA,MAAO,EAAC,WAAA;;IACpE,SAAA,cAAA,CAAX,mBAAA,MAAA,GAAA,CACiB,QAAA,aAAA,UAAA,IAAA,GACf,mBAGW,UAAA,EAAA,KAAA,EAAA,GAAA,WAHuB,QAAA,QAAhB,MAAM,UAAK;KAAkB,OAAA,UAAA,GAAA,mBAAA,UAAA,EAAA,KAAA,MAAK,GAAA,CACnC,KAAK,UAAU,UAAA,UAAA,GAA9B,YAA4F,aAAA;;MAA/C;MAAO,cAAY,OAAO,KAAK;MAAI,OAAO;KACvF,GAAA,MAAA,GAAA,CAAA,QAAA,YAAA,CAAA,MAAA,UAAA,GAAA,YAAwD,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO;;IAKvD,CAAA,GAAA,GAAA,MAAA,UAAA,GAAA,mBAUW,UAAA,EAAA,KAAA,EAAA,GAAA,CAXX,mBAAA,MAAA,IAAA,UAAA,IAAA,GAEE,mBAQW,UAAA,MAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;KAAkB,OAAA,UAAA,GAAA,mBAAA,UAAA,EAAA,KAAA,MAAK,GAAA,CAE1C,KAAK,UAAU,UAAA,UAAA,GADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,KAAK;MACxB,OAAO;KAEV,GAAA,MAAA,GAAA,CAAA,QAAA,YAAA,CAAA,MAAA,UAAA,GAAA,YAAiE,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _sfc_main from "./notification.js";
|
|
2
2
|
import { notification } from "./notification.js";
|
|
3
|
-
export {
|
|
3
|
+
export { _sfc_main as UNotification, notification };
|
|
@@ -52,7 +52,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
52
52
|
pointerEvents: "auto"
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
const clamped = Math.min(stackIndex,
|
|
55
|
+
const clamped = Math.min(stackIndex, 2);
|
|
56
56
|
return {
|
|
57
57
|
transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * .05})`,
|
|
58
58
|
opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,
|
|
@@ -63,7 +63,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
63
63
|
const items = props.notifications;
|
|
64
64
|
if (!items.length) return { height: "0px" };
|
|
65
65
|
if (hovering.value) return { height: `${items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0) + (items.length - 1) * GAP}px` };
|
|
66
|
-
return { height: `${(heights[items[items.length - 1].key] ?? 0) + Math.min(items.length - 1,
|
|
66
|
+
return { height: `${(heights[items[items.length - 1].key] ?? 0) + Math.min(items.length - 1, 2) * PEEK}px` };
|
|
67
67
|
});
|
|
68
68
|
function toCardProps(item) {
|
|
69
69
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-box.js","names":[],"sources":["../../../src/components/notification/notification-box.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('stack'), cls.em('stack', position)]\"\n :style=\"stackStyle\"\n @mouseenter=\"hovering = true\"\n @mouseleave=\"hovering = false\"\n >\n <transition-group :name=\"`notification-${vertical}`\" appear @after-leave=\"handleAfterLeave\">\n <div\n v-for=\"(item, index) of notifications\"\n :key=\"item.key\"\n :ref=\"(el) => observeItem(el, item.key)\"\n :data-key=\"item.key\"\n :class=\"cls.e('item')\"\n >\n <UNotification\n v-bind=\"toCardProps(item)\"\n :style=\"cardStyle(index)\"\n @close=\"handleClose(item.key, item.onClose)\"\n @action=\"handleAction(item.key, item.onClick, item.onClose, $event)\"\n />\n </div>\n </transition-group>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, reactive, ref, type CSSProperties } from 'vue'\n\nimport type { NotificationOptions, NotificationPosition, NotificationProps } from '../../types'\nimport UNotification from './notification.vue'\n\ndefineOptions({ name: 'UNotificationBox' })\n\n/** 通知项数据结构 */\ntype NotificationItem = NotificationOptions & { key: string }\n\nconst props = defineProps<{ notifications: NotificationItem[]; position: NotificationPosition }>()\n\nconst emit = defineEmits<{ (e: 'closed', key: string): void; (e: 'close', key: string): void }>()\n\nconst cls = bem('notification')\n\n/** 展开态卡片间距 */\nconst GAP = 10\n/** 折叠态每层露出的高度 */\nconst PEEK = 14\n/** 折叠态最多露出的卡片数 */\nconst MAX_VISIBLE = 3\n\nconst hovering = ref(false)\n\n/** 各卡片实测高度, 驱动展开态位移与容器高度 */\nconst heights = reactive<Record<string, number>>({})\n\nconst vertical = computed(() => (props.position.startsWith('top') ? 'top' : 'bottom'))\n\n/** 底部锚定向上堆叠(负向偏移), 顶部锚定向下堆叠 */\nconst direction = computed(() => (vertical.value === 'bottom' ? -1 : 1))\n\nconst observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement\n const key = el.dataset.key\n if (key) heights[key] = el.offsetHeight\n }\n})\n\nfunction observeItem(el: Element | null, key: string) {\n if (el) observer.observe(el)\n}\n\nonBeforeUnmount(() => observer.disconnect())\n\n/** 数组末尾为最新通知, 位于堆叠最前 */\nfunction cardStyle(index: number): CSSProperties {\n const items = props.notifications\n const stackIndex = items.length - 1 - index\n\n if (hovering.value) {\n // 展开态: 按前方卡片累计高度偏移\n let offset = 0\n for (let i = index + 1; i < items.length; i++) {\n offset += (heights[items[i]!.key] ?? 0) + GAP\n }\n return {\n transform: `translateY(${direction.value * offset}px) scale(1)`,\n opacity: 1,\n pointerEvents: 'auto'\n }\n }\n\n const clamped = Math.min(stackIndex, MAX_VISIBLE - 1)\n return {\n transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * 0.05})`,\n opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,\n pointerEvents: stackIndex === 0 ? 'auto' : 'none'\n }\n}\n\nconst stackStyle = computed<CSSProperties>(() => {\n const items = props.notifications\n if (!items.length) return { height: '0px' }\n\n if (hovering.value) {\n const total = items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0)\n return { height: `${total + (items.length - 1) * GAP}px` }\n }\n\n const frontHeight = heights[items[items.length - 1]!.key] ?? 0\n const behind = Math.min(items.length - 1, MAX_VISIBLE - 1)\n return { height: `${frontHeight + behind * PEEK}px` }\n})\n\nfunction toCardProps(item: NotificationItem): NotificationProps {\n return {\n title: item.title,\n message: item.message,\n type: item.type,\n closable: item.closable,\n duration: item.duration,\n icon: item.icon,\n buttonText: item.buttonText,\n size: item.size\n }\n}\n\nfunction handleAfterLeave(el: Element) {\n const key = (el as HTMLElement).dataset.key as string\n observer.unobserve(el as HTMLElement)\n delete heights[key]\n emit('closed', key)\n}\n\nfunction handleClose(key: string, onClose?: () => void) {\n emit('close', key)\n onClose?.()\n}\n\nfunction handleAction(\n key: string,\n onClick: NotificationItem['onClick'],\n onClose: NotificationItem['onClose'],\n e: MouseEvent\n) {\n onClick?.(e)\n handleClose(key, onClose)\n}\n</script>\n"],"mappings":";;;;;AA6CA,MAAM,MAAM;;AAEZ,MAAM,OAAO;;AAEb,MAAM,cAAc;;;;;;;;;;;EAXpB,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,cAAc;;EAS9B,MAAM,WAAW,IAAI,KAAK;;EAG1B,MAAM,UAAU,SAAiC,CAAC,CAAC;EAEnD,MAAM,WAAW,eAAgB,MAAM,SAAS,WAAW,KAAK,IAAI,QAAQ,QAAS;;EAGrF,MAAM,YAAY,eAAgB,SAAS,UAAU,WAAW,KAAK,CAAE;EAEvE,MAAM,WAAW,IAAI,gBAAgB,YAAY;GAC/C,KAAK,MAAM,SAAS,SAAS;IAC3B,MAAM,KAAK,MAAM;IACjB,MAAM,MAAM,GAAG,QAAQ;IACvB,IAAI,KAAK,QAAQ,OAAO,GAAG;GAC7B;EACF,CAAC;EAED,SAAS,YAAY,IAAoB,KAAa;GACpD,IAAI,IAAI,SAAS,QAAQ,EAAE;EAC7B;EAEA,sBAAsB,SAAS,WAAW,CAAC;;EAG3C,SAAS,UAAU,OAA8B;GAC/C,MAAM,QAAQ,MAAM;GACpB,MAAM,aAAa,MAAM,SAAS,IAAI;GAEtC,IAAI,SAAS,OAAO;IAElB,IAAI,SAAS;IACb,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,MAAM,QAAQ,KACxC,WAAW,QAAQ,MAAM,EAAE,CAAE,QAAQ,KAAK;IAE5C,OAAO;KACL,WAAW,cAAc,UAAU,QAAQ,OAAO;KAClD,SAAS;KACT,eAAe;IACjB;GACF;GAEA,MAAM,UAAU,KAAK,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"notification-box.js","names":[],"sources":["../../../src/components/notification/notification-box.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('stack'), cls.em('stack', position)]\"\n :style=\"stackStyle\"\n @mouseenter=\"hovering = true\"\n @mouseleave=\"hovering = false\"\n >\n <transition-group :name=\"`notification-${vertical}`\" appear @after-leave=\"handleAfterLeave\">\n <div\n v-for=\"(item, index) of notifications\"\n :key=\"item.key\"\n :ref=\"(el) => observeItem(el, item.key)\"\n :data-key=\"item.key\"\n :class=\"cls.e('item')\"\n >\n <UNotification\n v-bind=\"toCardProps(item)\"\n :style=\"cardStyle(index)\"\n @close=\"handleClose(item.key, item.onClose)\"\n @action=\"handleAction(item.key, item.onClick, item.onClose, $event)\"\n />\n </div>\n </transition-group>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, reactive, ref, type CSSProperties } from 'vue'\n\nimport type { NotificationOptions, NotificationPosition, NotificationProps } from '../../types'\nimport UNotification from './notification.vue'\n\ndefineOptions({ name: 'UNotificationBox' })\n\n/** 通知项数据结构 */\ntype NotificationItem = NotificationOptions & { key: string }\n\nconst props = defineProps<{ notifications: NotificationItem[]; position: NotificationPosition }>()\n\nconst emit = defineEmits<{ (e: 'closed', key: string): void; (e: 'close', key: string): void }>()\n\nconst cls = bem('notification')\n\n/** 展开态卡片间距 */\nconst GAP = 10\n/** 折叠态每层露出的高度 */\nconst PEEK = 14\n/** 折叠态最多露出的卡片数 */\nconst MAX_VISIBLE = 3\n\nconst hovering = ref(false)\n\n/** 各卡片实测高度, 驱动展开态位移与容器高度 */\nconst heights = reactive<Record<string, number>>({})\n\nconst vertical = computed(() => (props.position.startsWith('top') ? 'top' : 'bottom'))\n\n/** 底部锚定向上堆叠(负向偏移), 顶部锚定向下堆叠 */\nconst direction = computed(() => (vertical.value === 'bottom' ? -1 : 1))\n\nconst observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement\n const key = el.dataset.key\n if (key) heights[key] = el.offsetHeight\n }\n})\n\nfunction observeItem(el: Element | null, key: string) {\n if (el) observer.observe(el)\n}\n\nonBeforeUnmount(() => observer.disconnect())\n\n/** 数组末尾为最新通知, 位于堆叠最前 */\nfunction cardStyle(index: number): CSSProperties {\n const items = props.notifications\n const stackIndex = items.length - 1 - index\n\n if (hovering.value) {\n // 展开态: 按前方卡片累计高度偏移\n let offset = 0\n for (let i = index + 1; i < items.length; i++) {\n offset += (heights[items[i]!.key] ?? 0) + GAP\n }\n return {\n transform: `translateY(${direction.value * offset}px) scale(1)`,\n opacity: 1,\n pointerEvents: 'auto'\n }\n }\n\n const clamped = Math.min(stackIndex, MAX_VISIBLE - 1)\n return {\n transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * 0.05})`,\n opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,\n pointerEvents: stackIndex === 0 ? 'auto' : 'none'\n }\n}\n\nconst stackStyle = computed<CSSProperties>(() => {\n const items = props.notifications\n if (!items.length) return { height: '0px' }\n\n if (hovering.value) {\n const total = items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0)\n return { height: `${total + (items.length - 1) * GAP}px` }\n }\n\n const frontHeight = heights[items[items.length - 1]!.key] ?? 0\n const behind = Math.min(items.length - 1, MAX_VISIBLE - 1)\n return { height: `${frontHeight + behind * PEEK}px` }\n})\n\nfunction toCardProps(item: NotificationItem): NotificationProps {\n return {\n title: item.title,\n message: item.message,\n type: item.type,\n closable: item.closable,\n duration: item.duration,\n icon: item.icon,\n buttonText: item.buttonText,\n size: item.size\n }\n}\n\nfunction handleAfterLeave(el: Element) {\n const key = (el as HTMLElement).dataset.key as string\n observer.unobserve(el as HTMLElement)\n delete heights[key]\n emit('closed', key)\n}\n\nfunction handleClose(key: string, onClose?: () => void) {\n emit('close', key)\n onClose?.()\n}\n\nfunction handleAction(\n key: string,\n onClick: NotificationItem['onClick'],\n onClose: NotificationItem['onClose'],\n e: MouseEvent\n) {\n onClick?.(e)\n handleClose(key, onClose)\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type)]\"\n @mouseenter=\"suspendTimer\"\n @mouseleave=\"startTimer\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"typeIcon\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\">\n <div :class=\"cls.em('content', 'title')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\" v-if=\"message\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"(e) => emit('action', e)\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"emit('close')\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport {\n CircleCheckFilled,\n CircleClose,\n Close,\n InfoFilled,\n QuestionFilled,\n WarningFilled\n} from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\n\nimport type { NotificationEmits, NotificationProps, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNotification' })\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n buttonText: ''\n})\n\nconst emit = defineEmits<NotificationEmits>()\n\nconst { type, size } = useFallbackProps([props], { type: 'primary' as ColorType, size: 'default' })\n\nconst typeIcon = computed(() => {\n return (\n props.icon ||\n {\n primary: InfoFilled,\n info: QuestionFilled,\n success: CircleCheckFilled,\n warning: WarningFilled,\n danger: CircleClose\n }[type.value]\n )\n})\n\nconst cls = bem('notification')\n\n/** 剩余时长制的自动关闭计时器, 悬停暂停 */\nlet startTime = 0\nlet timer = 0\nlet restDuration = 0\n\nfunction startTimer() {\n if (!props.duration) return\n startTime = Date.now()\n timer = setTimeout(() => emit('close'), restDuration)\n}\n\nfunction suspendTimer() {\n if (!props.duration) return\n clearTimeout(timer)\n restDuration -= Date.now() - startTime\n}\n\nonMounted(() => {\n restDuration = props.duration\n startTimer()\n})\n\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,EAAE,MAAM,SAAS,iBAAiB,CAAC,KAAK,GAAG;GAAE,MAAM;GAAwB,MAAM;EAAU,CAAC;EAElG,MAAM,WAAW,eAAe;GAC9B,OACE,MAAM,QACN;IACE,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;GACV,EAAE,KAAK;EAEX,CAAC;EAED,MAAM,MAAM,IAAI,cAAc;;EAG9B,IAAI,YAAY;EAChB,IAAI,QAAQ;EACZ,IAAI,eAAe;EAEnB,SAAS,aAAa;GACpB,IAAI,CAAC,MAAM,UAAU;GACrB,YAAY,KAAK,IAAI;GACrB,QAAQ,iBAAiB,KAAK,OAAO,GAAG,YAAY;EACtD;EAEA,SAAS,eAAe;GACtB,IAAI,CAAC,MAAM,UAAU;GACrB,aAAa,KAAK;GAClB,gBAAgB,KAAK,IAAI,IAAI;EAC/B;EAEA,gBAAgB;GACd,eAAe,MAAM;GACrB,WAAW;EACb,CAAC;EAED,sBAAsB,aAAa,KAAK,CAAC;;
|
|
1
|
+
{"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type)]\"\n @mouseenter=\"suspendTimer\"\n @mouseleave=\"startTimer\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"typeIcon\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\">\n <div :class=\"cls.em('content', 'title')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\" v-if=\"message\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"(e) => emit('action', e)\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"emit('close')\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport {\n CircleCheckFilled,\n CircleClose,\n Close,\n InfoFilled,\n QuestionFilled,\n WarningFilled\n} from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\n\nimport type { NotificationEmits, NotificationProps, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNotification' })\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n buttonText: ''\n})\n\nconst emit = defineEmits<NotificationEmits>()\n\nconst { type, size } = useFallbackProps([props], { type: 'primary' as ColorType, size: 'default' })\n\nconst typeIcon = computed(() => {\n return (\n props.icon ||\n {\n primary: InfoFilled,\n info: QuestionFilled,\n success: CircleCheckFilled,\n warning: WarningFilled,\n danger: CircleClose\n }[type.value]\n )\n})\n\nconst cls = bem('notification')\n\n/** 剩余时长制的自动关闭计时器, 悬停暂停 */\nlet startTime = 0\nlet timer = 0\nlet restDuration = 0\n\nfunction startTimer() {\n if (!props.duration) return\n startTime = Date.now()\n timer = setTimeout(() => emit('close'), restDuration)\n}\n\nfunction suspendTimer() {\n if (!props.duration) return\n clearTimeout(timer)\n restDuration -= Date.now() - startTime\n}\n\nonMounted(() => {\n restDuration = props.duration\n startTimer()\n})\n\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,EAAE,MAAM,SAAS,iBAAiB,CAAC,KAAK,GAAG;GAAE,MAAM;GAAwB,MAAM;EAAU,CAAC;EAElG,MAAM,WAAW,eAAe;GAC9B,OACE,MAAM,QACN;IACE,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;GACV,EAAE,KAAK;EAEX,CAAC;EAED,MAAM,MAAM,IAAI,cAAc;;EAG9B,IAAI,YAAY;EAChB,IAAI,QAAQ;EACZ,IAAI,eAAe;EAEnB,SAAS,aAAa;GACpB,IAAI,CAAC,MAAM,UAAU;GACrB,YAAY,KAAK,IAAI;GACrB,QAAQ,iBAAiB,KAAK,OAAO,GAAG,YAAY;EACtD;EAEA,SAAS,eAAe;GACtB,IAAI,CAAC,MAAM,UAAU;GACrB,aAAa,KAAK;GAClB,gBAAgB,KAAK,IAAI,IAAI;EAC/B;EAEA,gBAAgB;GACd,eAAe,MAAM;GACrB,WAAW;EACb,CAAC;EAED,sBAAsB,aAAa,KAAK,CAAC;;GAzFvC,OAAA,UAAA,GAAA,mBAoBM,OAAA;IAnBH,OAAK,eAAA;KAAG,MAAA,GAAA,CAAG,CAAC;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAA,CAAA;IACtC,cAAY;IACZ,cAAY;;IAEb,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAChB,CAAA,YAEQ,MAAA,WAAA,GAAA,MAAA;KADsB,SAAA,cAAA,EAAA,UAAA,GAA5B,YAA4B,wBAAZ,SAAA,KAAQ,CAAA,EAAA,CAAA;;;IAG5B,mBAMM,OAAA,EANA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,EAAA,GAAA;KAC+B,QAAA,SAAA,UAAA,GAA/C,mBAAuE,OAAA;;MAAjE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,OAAA,CAAA;KAAsC,GAAA,gBAAA,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACb,QAAA,WAAA,UAAA,GAAjD,mBAA6E,OAAA;;MAAvE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,SAAA,CAAA;KAA0C,GAAA,gBAAA,QAAA,OAAO,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACpB,QAAA,cAAA,UAAA,GAAhD,mBAEM,OAAA;;MAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,QAAA,CAAA;KACjB,GAAA,CAAA,YAAwF,MAAA,WAAA,GAAA;MAA9E,MAAM,MAAA,IAAA;MAAM,OAAA;MAAO,SAAK,OAAA,OAAA,OAAA,MAAG,MAAM,KAAI,UAAW,CAAC;;MAAmB,SAAA,cAAA,CAAA,gBAAb,gBAAA,QAAA,UAAU,GAAA,CAAA,CAAA,CAAA;;;;IAG5C,QAAA,YAAY,QAAA,aAAQ,KAAA,UAAA,GAAvD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;KAA8C,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,OAAA,GAAA,CAAA,MAAA,CAAA;IAC9E,GAAA,CAAA,YAAwB,MAAA,WAAA,GAAA,MAAA;KAAR,SAAA,cAAA,CAAT,YAAS,MAAA,KAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","names":[],"sources":["../../../src/components/number/number.vue"],"sourcesContent":["<template>\n {{ formatted }}\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { Tween } from '@veltra/utils'\nimport { computed, reactive, watch } from 'vue'\n\nimport type { NumberProps } from '../../types'\n\ndefineOptions({ name: 'UNumber' })\n\nconst props = withDefaults(defineProps<NumberProps>(), { duration: 800, format: 'decimal' })\n\nconst number = reactive({ value: 0 })\n\nconst tween = computed(() =>\n props.tween\n ? new Tween(number, { duration: props.duration, easingFunction: Tween.easing.easeInOutQuad })\n : null\n)\n\nconst formatter = computed(() => {\n return $n.formatter({\n currency: props.format === 'currency' ? 'CNY' : undefined,\n style: props.format,\n precision: props.precision,\n maximumFractionDigits: props.maxPrecision,\n minimumFractionDigits: props.minPrecision\n })\n})\n\nconst formatted = computed(() => {\n return formatter.value.format(number.value)\n})\n\nwatch(\n () => props.value,\n () => {\n props.tween ? tween.value.to({ value: props.value }) : (number.value = props.value)\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAEd,MAAM,SAAS,SAAS,EAAE,OAAO,EAAE,CAAC;EAEpC,MAAM,QAAQ,eACZ,MAAM,QACF,IAAI,MAAM,QAAQ;GAAE,UAAU,MAAM;GAAU,gBAAgB,MAAM,OAAO;EAAc,CAAC,IAC1F,IACN;EAEA,MAAM,YAAY,eAAe;GAC/B,OAAO,GAAG,UAAU;IAClB,UAAU,MAAM,WAAW,aAAa,QAAQ,KAAA;IAChD,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,uBAAuB,MAAM;IAC7B,uBAAuB,MAAM;GAC/B,CAAC;EACH,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK;EAC5C,CAAC;EAED,YACQ,MAAM,aACN;GACJ,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,MAAM,CAAC,IAAK,OAAO,QAAQ,MAAM;EAC/E,GACA,EAAE,WAAW,KAAK,CACpB;;
|
|
1
|
+
{"version":3,"file":"number.js","names":[],"sources":["../../../src/components/number/number.vue"],"sourcesContent":["<template>\n {{ formatted }}\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { Tween } from '@veltra/utils'\nimport { computed, reactive, watch } from 'vue'\n\nimport type { NumberProps } from '../../types'\n\ndefineOptions({ name: 'UNumber' })\n\nconst props = withDefaults(defineProps<NumberProps>(), { duration: 800, format: 'decimal' })\n\nconst number = reactive({ value: 0 })\n\nconst tween = computed(() =>\n props.tween\n ? new Tween(number, { duration: props.duration, easingFunction: Tween.easing.easeInOutQuad })\n : null\n)\n\nconst formatter = computed(() => {\n return $n.formatter({\n currency: props.format === 'currency' ? 'CNY' : undefined,\n style: props.format,\n precision: props.precision,\n maximumFractionDigits: props.maxPrecision,\n minimumFractionDigits: props.minPrecision\n })\n})\n\nconst formatted = computed(() => {\n return formatter.value.format(number.value)\n})\n\nwatch(\n () => props.value,\n () => {\n props.tween ? tween.value.to({ value: props.value }) : (number.value = props.value)\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAEd,MAAM,SAAS,SAAS,EAAE,OAAO,EAAE,CAAC;EAEpC,MAAM,QAAQ,eACZ,MAAM,QACF,IAAI,MAAM,QAAQ;GAAE,UAAU,MAAM;GAAU,gBAAgB,MAAM,OAAO;EAAc,CAAC,IAC1F,IACN;EAEA,MAAM,YAAY,eAAe;GAC/B,OAAO,GAAG,UAAU;IAClB,UAAU,MAAM,WAAW,aAAa,QAAQ,KAAA;IAChD,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,uBAAuB,MAAM;IAC7B,uBAAuB,MAAM;GAC/B,CAAC;EACH,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK;EAC5C,CAAC;EAED,YACQ,MAAM,aACN;GACJ,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,MAAM,CAAC,IAAK,OAAO,QAAQ,MAAM;EAC/E,GACA,EAAE,WAAW,KAAK,CACpB;;GA1CK,OAAA,gBAAA,UAAA,KAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
|
@@ -267,7 +267,8 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
267
267
|
if (model.value === void 0) return;
|
|
268
268
|
const { precision, maxPrecision, minPrecision, multiple } = props;
|
|
269
269
|
if (multiple) {
|
|
270
|
-
const
|
|
270
|
+
const rawVal = $n.div(model.value, multiple);
|
|
271
|
+
const fixedRawVal = +n(rawVal).fixed(precision ?? {
|
|
271
272
|
maxPrecision,
|
|
272
273
|
minPrecision
|
|
273
274
|
});
|